PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.0
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 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 10 months ago AffiliationClicksListTable.php 2 months ago
AffiliationClicksListTable.php
299 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_merge(
89 [
90 'date' => __( 'Date', 'surecart' ),
91 'url' => __( 'Landing URL', 'surecart' ),
92 'referrer' => __( 'Referring URL', 'surecart' ),
93 'affiliate' => __( 'Affiliate', 'surecart' ),
94 'converted' => __( 'Converted', 'surecart' ),
95 ],
96 parent::get_columns()
97 );
98 }
99
100 /**
101 * Handle the date column.
102 *
103 * @param \SureCart\Models\Click $click The Click model.
104 *
105 * @return string
106 */
107 public function column_date( $click ) {
108 $created = sprintf(
109 '<time datetime="%1$s" title="%2$s">%3$s</time>',
110 esc_attr( $click->created_at ),
111 esc_html( $click->created_at_date_time ),
112 esc_html( TimeDate::humanTimeDiff( $click->created_at ) )
113 );
114
115 $is_expired = $click->expires_at < time();
116 $expires = sprintf(
117 '%1$s <time datetime="%2$s" title="%3$s">%4$s</time>',
118 $is_expired ? __( 'Expired', 'surecart' ) : __( 'Expires on', 'surecart' ),
119 esc_attr( $click->expires_at ),
120 esc_html( $click->expires_at_date_time ),
121 esc_html( $is_expired ? TimeDate::humanTimeDiff( $click->expires_at ) : $click->expires_at_date_time )
122 );
123
124 return $created . '<br /><small style="opacity: 0.75">' . $expires . '</small>';
125 }
126
127 /**
128 * Handle the url column.
129 *
130 * @param \SureCart\Models\Click $click The Click model.
131 *
132 * @return string
133 */
134 public function column_url( $click ) {
135 return '<a href="' . esc_url( $click->url ) . '" target="_blank">' . esc_html( $click->url ) . '</a>';
136 }
137
138 /**
139 * Handle the referrer column.
140 *
141 * @param \SureCart\Models\Click $click The Click model.
142 *
143 * @return string
144 */
145 public function column_referrer( $click ) {
146 return ! empty( $click->referrer ) ? esc_html( $click->referrer ) : '-';
147 }
148
149
150 /**
151 * Handle the affiliate column.
152 *
153 * @param \SureCart\Models\Click $click The Click model.
154 *
155 * @return string
156 */
157 public function column_affiliate( $click ) {
158 $affiliation = $click->affiliation ?? null;
159 if ( empty( $affiliation->id ) ) {
160 return '';
161 }
162
163 ob_start();
164 ?>
165 <div class="sc-affiliate-name">
166 <a href="<?php echo esc_url( \SureCart::getUrl()->edit( 'affiliates', $affiliation->id ) ); ?>">
167 <?php echo esc_html( $affiliation->display_name ); ?>
168 </a>
169 </div>
170 <?php
171 return ob_get_clean();
172 }
173
174 /**
175 * Handle the converted column.
176 *
177 * @param \SureCart\Models\Click $click The Click model.
178 *
179 * @return string
180 */
181 public function column_converted( $click ) {
182 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' ) . '" />';
183 }
184
185 /**
186 * Define which columns are hidden
187 *
188 * @return array
189 */
190 public function get_hidden_columns() {
191 return array();
192 }
193
194 /**
195 * Get the table data
196 *
197 * @return array
198 */
199 private function table_data() {
200 return Click::where(
201 array(
202 'converted' => $this->get_filtered_status(),
203 'query' => $this->get_search_query(),
204 'expand' => [
205 'affiliation',
206 ],
207 )
208 )->paginate(
209 array(
210 'per_page' => $this->get_items_per_page( 'affiliate_clicks' ),
211 'page' => $this->get_pagenum(),
212 )
213 );
214 }
215
216 /**
217 * Nothing found.
218 *
219 * @return void
220 */
221 public function no_items() {
222 if ( $this->error ) {
223 echo esc_html( $this->error );
224 return;
225 }
226 echo esc_html_e( 'No affiliate clicks found.', 'surecart' );
227 }
228
229
230 /**
231 * Displays extra table navigation.
232 *
233 * @param string $which Top or bottom placement.
234 */
235 protected function extra_tablenav( $which ) {
236 ?>
237 <input type="hidden" name="page" value="sc-affiliate-clicks" />
238
239 <?php if ( ! empty( $_GET['status'] ) ) : // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>
240 <input type="hidden" name="status" value="<?php echo esc_attr( $_GET['status'] ); ?>" />
241 <?php endif; ?>
242
243 <?php
244 /**
245 * Fires immediately following the closing "actions" div in the tablenav
246 * for the affiliate_clicks list table.
247 *
248 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
249 */
250 do_action( 'manage_affiliate_clicks_extra_tablenav', $which );
251 }
252
253
254 /**
255 * Get filtered status / default status.
256 *
257 * @return string|null
258 */
259 private function get_filtered_status() {
260 if ( empty( $_GET['status'] ) || 'all' === $_GET['status'] ) {
261 return null;
262 }
263
264 if ( 'converted' === $_GET['status'] ) {
265 return true;
266 }
267
268 return false;
269 }
270
271 /**
272 * Define what data to show on each column of the table
273 *
274 * @param \SureCart\Models\AffiliationClick $affiliation_click AffiliationClick model.
275 * @param string $column_name - Current column name.
276 *
277 * @return mixed
278 */
279 public function column_default( $item, $column_name ) {
280 // Call the parent method to handle custom columns
281 parent::column_default( $item, $column_name );
282
283 return esc_html( $item->$column_name ?? '' );
284 }
285
286 /**
287 * Get all statuses.
288 *
289 * @return array
290 */
291 private function getStatuses(): array {
292 return array(
293 'all' => __( 'All', 'surecart' ),
294 'converted' => __( 'Converted', 'surecart' ),
295 'not_converted' => __( 'Not Converted', 'surecart' ),
296 );
297 }
298 }
299