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.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 / Affiliations / AffiliationsListTable.php
surecart / app / src / Controllers / Admin / Affiliations Last commit date
AffiliationsController.php 2 years ago AffiliationsListTable.php 1 year ago AffiliationsScriptsController.php 2 years ago
AffiliationsListTable.php
347 lines
1 <?php
2
3 namespace SureCart\Controllers\Admin\Affiliations;
4
5 use SureCart\Controllers\Admin\Tables\ListTable;
6 use SureCart\Models\Affiliation;
7
8 /**
9 * Affiliations List Table
10 */
11 class AffiliationsListTable extends ListTable {
12 public $checkbox = true;
13 public $error = '';
14 public $pages = array();
15
16 /**
17 * Prepare the items for the table to process
18 *
19 * @return void
20 */
21 public function prepare_items() {
22 $columns = $this->get_columns();
23 $hidden = $this->get_hidden_columns();
24 $sortable = $this->get_sortable_columns();
25
26 $this->_column_headers = array( $columns, $hidden, $sortable );
27
28 $query = $this->table_data();
29
30 if ( is_wp_error( $query ) ) {
31 $this->error = $query->get_error_message();
32 $this->items = array();
33 return;
34 }
35
36 $this->set_pagination_args(
37 array(
38 'total_items' => $query->pagination->count,
39 'per_page' => $this->get_items_per_page( 'affiliations' ),
40 )
41 );
42
43 $this->items = $query->data;
44 }
45
46 /**
47 * Get views for the list table status links.
48 *
49 * @global int $post_id
50 * @global string $comment_status
51 * @global string $comment_type
52 */
53 protected function get_views() {
54 foreach ( $this->getStatuses() as $status => $label ) {
55 $link = admin_url( 'admin.php?page=sc-affiliates' );
56 $current_link_attributes = '';
57
58 if ( ! empty( $_GET['status'] ) ) {
59 if ( $status === $_GET['status'] ) {
60 $current_link_attributes = ' class="current" aria-current="page"';
61 }
62 } elseif ( 'all' === $status ) {
63 $current_link_attributes = ' class="current" aria-current="page"';
64 }
65
66 $link = add_query_arg( 'status', $status, $link );
67
68 $link = esc_url( $link );
69
70 $status_links[ $status ] = "<a href='$link'$current_link_attributes>" . $label . '</a>';
71 }
72
73 /**
74 * Filters the comment status links.
75 *
76 * @since 2.5.0
77 * @since 5.1.0 The 'Mine' link was added.
78 *
79 * @param string[] $status_links An associative array of fully-formed comment status links. Includes 'All', 'Mine',
80 * 'Pending', 'Approved', 'Spam', and 'Trash'.
81 */
82 return apply_filters( 'comment_status_links', $status_links );
83 }
84
85 /**
86 * Override the parent columns method. Defines the columns to use in your listing table
87 *
88 * @return array
89 */
90 public function get_columns() {
91 return array(
92 'name' => __( 'Name', 'surecart' ),
93 'email' => __( 'Email', 'surecart' ),
94 'status' => __( 'Status', 'surecart' ),
95 'clicks' => __( 'Clicks', 'surecart' ),
96 'referrals' => __( 'Referrals', 'surecart' ),
97 'total_commission_amount' => __( 'Total Earnings', 'surecart' ),
98 'total_not_paid_commission_amount' => __( 'Unpaid Earnings', 'surecart' ),
99 'date' => __( 'Date', 'surecart' ),
100 );
101 }
102
103 /**
104 * Define which columns are hidden.
105 *
106 * @return array
107 */
108 public function get_hidden_columns() {
109 return array();
110 }
111
112 /**
113 * Get the table data.
114 *
115 * @return array
116 */
117 private function table_data() {
118 $affiliates_query = Affiliation::where(
119 array(
120 'active' => $this->getFilteredStatus(),
121 'query' => $this->get_search_query(),
122 'expand' => [
123 'clicks',
124 'referrals',
125 ],
126 )
127 );
128
129 return $affiliates_query->paginate(
130 array(
131 'per_page' => $this->get_items_per_page( 'affiliate' ),
132 'page' => $this->get_pagenum(),
133 )
134 );
135 }
136
137 /**
138 * Nothing found.
139 *
140 * @return void
141 */
142 public function no_items() {
143 if ( $this->error ) {
144 echo esc_html( $this->error );
145 return;
146 }
147 echo esc_html_e( 'No affiliates found.', 'surecart' );
148 }
149
150 /**
151 * Published column
152 *
153 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
154 *
155 * @return string
156 */
157 public function column_status( $affiliation ) {
158 ob_start();
159 ?>
160 <sc-tag type="<?php echo esc_attr( $affiliation->status_type ); ?>">
161 <?php echo esc_html( $affiliation->status_display_text ); ?>
162 </sc-tag>
163 <?php
164 return ob_get_clean();
165 }
166
167 /**
168 * Total clicks column.
169 *
170 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
171 * @return int
172 */
173 public function column_clicks( $affiliation ) {
174 return esc_html( $affiliation->clicks->pagination->count ?? 0 );
175 }
176
177 /**
178 * Total referrals column.
179 *
180 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
181 * @return int
182 */
183 public function column_referrals( $affiliation ) {
184 return esc_html( $affiliation->referrals->pagination->count ?? 0 );
185 }
186
187 /**
188 * Total commission amount column.
189 *
190 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
191 * @return string
192 */
193 public function column_total_commission_amount( $affiliation ) {
194 $store_currency = \SureCart::account()->currency ?? 'usd';
195 return '<sc-format-number type="currency" currency="' . strtoupper( esc_html( $store_currency ) ) . '" value="' . (float) $affiliation->total_commission_amount . '"></sc-format-number>';
196 }
197
198 /**
199 * Total unpaid commission amount column.
200 *
201 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
202 * @return string
203 */
204 public function column_total_not_paid_commission_amount( $affiliation ) {
205 $store_currency = \SureCart::account()->currency ?? 'usd';
206 return '<sc-format-number type="currency" currency="' . strtoupper( esc_html( $store_currency ) ) . '" value="' . (float) $affiliation->total_not_paid_commission_amount . '"></sc-format-number>';
207 }
208
209 /**
210 * Name column.
211 *
212 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
213 *
214 * @return string
215 */
216 public function column_name( $affiliation ) {
217 ob_start();
218 ?>
219
220 <div class="sc-affiliate-name">
221 <a href="<?php echo esc_url( \SureCart::getUrl()->edit( 'affiliates', $affiliation->id ) ); ?>">
222 <?php echo esc_html( $affiliation->first_name . ' ' . $affiliation->last_name ); ?>
223 </a>
224 <?php
225 echo $this->row_actions(
226 array(
227 'view' => '<a href="' . esc_url( \SureCart::getUrl()->edit( 'affiliates', $affiliation->id ) ) . '" aria-label="' . esc_attr__( 'View Affiliate', 'surecart' ) . '">' . esc_html__( 'View Details', 'surecart' ) . '</a>',
228 'trash' => $this->action_toggle_activate( $affiliation ),
229 )
230 );
231 ?>
232 </div>
233 <?php
234 return ob_get_clean();
235 }
236
237 /**
238 * Define what data to show on each column of the table
239 *
240 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
241 * @param string $column_name - Current column name.
242 *
243 * @return mixed
244 */
245 public function column_default( $affiliation, $column_name ) {
246 switch ( $column_name ) {
247 case 'description':
248 case 'email':
249 return $affiliation->$column_name ?? '';
250 }
251 }
252
253 /**
254 * Displays extra table navigation.
255 *
256 * @param string $which Top or bottom placement.
257 */
258 protected function extra_tablenav( $which ) {
259 ?>
260 <input type="hidden" name="page" value="sc-affiliates" />
261
262 <?php if ( ! empty( $_GET['status'] ) ) : // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>
263 <input type="hidden" name="status" value="<?php echo esc_attr( $_GET['status'] ); ?>" />
264 <?php endif; ?>
265
266 <?php
267 /**
268 * Fires immediately following the closing "actions" div in the tablenav
269 * for the affiliates list table.
270 *
271 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
272 */
273 do_action( 'manage_affiliates_extra_tablenav', $which );
274 }
275
276 /**
277 * Toggle archive action link and text.
278 *
279 * @param \SureCart\Models\Affiliation $affiliation Affiliation model.
280 * @return string
281 */
282 public function action_toggle_activate( $affiliation ) {
283 $text = $affiliation->active ? __( 'Deactivate', 'surecart' ) : __( 'Activate', 'surecart' );
284 $confirm_message = $affiliation->active ? __( 'Are you sure you want to deactivate this affilate?', 'surecart' ) : __( 'Are you sure you want to activate this affiliate?', 'surecart' );
285 $link = $this->get_toggle_activate_url( $affiliation->id, $affiliation->active ? 'deactivate' : 'activate' );
286
287 return sprintf(
288 // translators: %1s: confirm message, %2s: link, %3s: aria label, %4s: text.
289 '<a class="submitdelete" onclick="return confirm(\'%1s\')" href="%2s" aria-label="%3s">%4s</a>',
290 esc_attr( $confirm_message ),
291 esc_url( $link ),
292 esc_attr__( 'Toggle Affiliate active status', 'surecart' ),
293 esc_html( $text )
294 );
295 }
296
297 /**
298 * Get the toggle activate URL.
299 *
300 * @param string $id Model id.
301 * @param string $action Action activate or deactivate.
302 *
303 * @return string URL for the page.
304 */
305 public function get_toggle_activate_url( $id, $action ) {
306 return esc_url(
307 add_query_arg(
308 [
309 'action' => $action,
310 'nonce' => wp_create_nonce( $action . '_affiliation' ),
311 'id' => $id,
312 ],
313 esc_url_raw( admin_url( 'admin.php?page=sc-affiliates' ) )
314 )
315 );
316 }
317
318 /**
319 * Get filtered status / default status.
320 *
321 * @return string|null
322 */
323 private function getFilteredStatus() {
324 $status = sanitize_text_field( wp_unslash( $_GET['status'] ?? '' ) );
325 $transforms = [
326 'all' => null,
327 'active' => '1',
328 'inactive' => '0',
329 ];
330
331 return $transforms[ $status ] ?? null;
332 }
333
334 /**
335 * Get all affiliation statuses.
336 *
337 * @return array
338 */
339 private function getStatuses(): array {
340 return array(
341 'all' => __( 'All', 'surecart' ),
342 'active' => __( 'Active', 'surecart' ),
343 'inactive' => __( 'Inactive', 'surecart' ),
344 );
345 }
346 }
347