PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 / AffiliationClicks / AffiliationClicksListTable.php
surecart / app / src / Controllers / Admin / AffiliationClicks Last commit date
AffiliationClicksController.php 2 years ago AffiliationClicksListTable.php 1 year ago
AffiliationClicksListTable.php
293 lines
1 <?php
2
3 namespace SureCart\Controllers\Admin\AffiliationClicks;
4
5 use SureCart\Controllers\Admin\Tables\ListTable;
6 use SureCart\Models\Click;
7 use SureCart\Support\TimeDate;
8
9 /**
10 * Create a new table class that will extend the WP_List_Table
11 */
12 class AffiliationClicksListTable extends ListTable {
13
14 public $checkbox = true;
15 public $error = '';
16 public $pages = array();
17
18 /**
19 * Prepare the items for the table to process
20 *
21 * @return void
22 */
23 public function prepare_items() {
24 $columns = $this->get_columns();
25 $hidden = $this->get_hidden_columns();
26 $sortable = $this->get_sortable_columns();
27
28 $this->_column_headers = array( $columns, $hidden, $sortable );
29
30 $query = $this->table_data();
31
32 if ( is_wp_error( $query ) ) {
33 $this->error = $query->get_error_message();
34 $this->items = array();
35 return;
36 }
37
38 $this->set_pagination_args(
39 array(
40 'total_items' => $query->pagination->count,
41 'per_page' => $this->get_items_per_page( 'affiliate_clicks' ),
42 )
43 );
44
45 $this->items = $query->data;
46 }
47
48 /**
49 * Get views for the list table status links.
50 */
51 protected function get_views() {
52 foreach ( $this->getStatuses() as $status => $label ) {
53 $link = admin_url( 'admin.php?page=sc-affiliate-clicks' );
54 $current_link_attributes = '';
55
56 if ( ! empty( $_GET['status'] ) ) {
57 if ( $status === $_GET['status'] ) {
58 $current_link_attributes = ' class="current" aria-current="page"';
59 }
60 } elseif ( 'all' === $status ) {
61 $current_link_attributes = ' class="current" aria-current="page"';
62 }
63
64 $link = add_query_arg( 'status', $status, $link );
65
66 $link = esc_url( $link );
67
68 $status_links[ $status ] = "<a href='$link'$current_link_attributes>" . $label . '</a>';
69 }
70
71 /**
72 * Filters the status links.
73 *
74 * @since 2.5.0
75 * @since 5.1.0 The 'Mine' link was added.
76 *
77 * @param string[] $status_links An associative array of fully-formed comment status links.
78 */
79 return apply_filters( 'sc_affiliate_clicks_status_links', $status_links );
80 }
81
82 /**
83 * Override the parent columns method. Defines the columns to use in your listing table
84 *
85 * @return array
86 */
87 public function get_columns() {
88 return array(
89 'date' => __( 'Date', 'surecart' ),
90 'url' => __( 'Landing URL', 'surecart' ),
91 'referrer' => __( 'Referring URL', 'surecart' ),
92 'affiliate' => __( 'Affiliate', 'surecart' ),
93 'converted' => __( 'Converted', 'surecart' ),
94 );
95 }
96
97 /**
98 * Handle the date column.
99 *
100 * @param \SureCart\Models\Click $click The Click model.
101 *
102 * @return string
103 */
104 public function column_date( $click ) {
105 $created = sprintf(
106 '<time datetime="%1$s" title="%2$s">%3$s</time>',
107 esc_attr( $click->created_at ),
108 esc_html( TimeDate::formatDateAndTime( $click->created_at ) ),
109 esc_html( TimeDate::humanTimeDiff( $click->created_at ) )
110 );
111
112 $is_expired = $click->expires_at < time();
113 $expires = sprintf(
114 '%1$s <time datetime="%2$s" title="%3$s">%4$s</time>',
115 $is_expired ? __( 'Expired', 'surecart' ) : __( 'Expires on', 'surecart' ),
116 esc_attr( $click->expires_at ),
117 esc_html( TimeDate::formatDateAndTime( $click->expires_at ) ),
118 esc_html( $is_expired ? TimeDate::humanTimeDiff( $click->expires_at ) : TimeDate::formatDate( $click->expires_at ) )
119 );
120
121 return $created . '<br /><small style="opacity: 0.75">' . $expires . '</small>';
122 }
123
124 /**
125 * Handle the url column.
126 *
127 * @param \SureCart\Models\Click $click The Click model.
128 *
129 * @return string
130 */
131 public function column_url( $click ) {
132 return '<a href="' . esc_url( $click->url ) . '" target="_blank">' . esc_html( $click->url ) . '</a>';
133 }
134
135 /**
136 * Handle the referrer column.
137 *
138 * @param \SureCart\Models\Click $click The Click model.
139 *
140 * @return string
141 */
142 public function column_referrer( $click ) {
143 return ! empty( $click->referrer ) ? $click->referrer : '-';
144 }
145
146
147 /**
148 * Handle the affiliate column.
149 *
150 * @param \SureCart\Models\Click $click The Click model.
151 *
152 * @return string
153 */
154 public function column_affiliate( $click ) {
155 $affiliation = $click->affiliation ?? null;
156 if ( empty( $affiliation->id ) ) {
157 return '';
158 }
159
160 ob_start();
161 ?>
162 <div class="sc-affiliate-name">
163 <a href="<?php echo esc_url( \SureCart::getUrl()->edit( 'affiliates', $affiliation->id ) ); ?>">
164 <?php echo esc_html( $affiliation->display_name ); ?>
165 </a>
166 </div>
167 <?php
168 return ob_get_clean();
169 }
170
171 /**
172 * Handle the converted column.
173 *
174 * @param \SureCart\Models\Click $click The Click model.
175 *
176 * @return string
177 */
178 public function column_converted( $click ) {
179 return '<sc-icon style="font-size: 30px; line-height:1; height: 20px; color: var(' . ( $click->converted ? '--sc-color-success-600' : '--sc-color-gray-600' ) . ');" name="' . ( $click->converted ? 'check-circle' : 'minus-circle' ) . '" />';
180 }
181
182 /**
183 * Define which columns are hidden
184 *
185 * @return array
186 */
187 public function get_hidden_columns() {
188 return array();
189 }
190
191 /**
192 * Get the table data
193 *
194 * @return array
195 */
196 private function table_data() {
197 return Click::where(
198 array(
199 'converted' => $this->get_filtered_status(),
200 'query' => $this->get_search_query(),
201 'expand' => [
202 'affiliation',
203 ],
204 )
205 )->paginate(
206 array(
207 'per_page' => $this->get_items_per_page( 'affiliate_clicks' ),
208 'page' => $this->get_pagenum(),
209 )
210 );
211 }
212
213 /**
214 * Nothing found.
215 *
216 * @return void
217 */
218 public function no_items() {
219 if ( $this->error ) {
220 echo esc_html( $this->error );
221 return;
222 }
223 echo esc_html_e( 'No affiliate clicks found.', 'surecart' );
224 }
225
226
227 /**
228 * Displays extra table navigation.
229 *
230 * @param string $which Top or bottom placement.
231 */
232 protected function extra_tablenav( $which ) {
233 ?>
234 <input type="hidden" name="page" value="sc-affiliate-clicks" />
235
236 <?php if ( ! empty( $_GET['status'] ) ) : // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>
237 <input type="hidden" name="status" value="<?php echo esc_attr( $_GET['status'] ); ?>" />
238 <?php endif; ?>
239
240 <?php
241 /**
242 * Fires immediately following the closing "actions" div in the tablenav
243 * for the affiliate_clicks list table.
244 *
245 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
246 */
247 do_action( 'manage_affiliate_clicks_extra_tablenav', $which );
248 }
249
250
251 /**
252 * Get filtered status / default status.
253 *
254 * @return string|null
255 */
256 private function get_filtered_status() {
257 if ( empty( $_GET['status'] ) || 'all' === $_GET['status'] ) {
258 return null;
259 }
260
261 if ( 'converted' === $_GET['status'] ) {
262 return true;
263 }
264
265 return false;
266 }
267
268 /**
269 * Define what data to show on each column of the table
270 *
271 * @param \SureCart\Models\AffiliationClick $affiliation_click AffiliationClick model.
272 * @param string $column_name - Current column name.
273 *
274 * @return mixed
275 */
276 public function column_default( $item, $column_name ) {
277 return $item->$column_name ?? '';
278 }
279
280 /**
281 * Get all statuses.
282 *
283 * @return array
284 */
285 private function getStatuses(): array {
286 return array(
287 'all' => __( 'All', 'surecart' ),
288 'converted' => __( 'Converted', 'surecart' ),
289 'not_converted' => __( 'Not Converted', 'surecart' ),
290 );
291 }
292 }
293