PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.7
GiveWP – Donation Plugin and Fundraising Platform v2.19.7
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 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.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / admin / forms / dashboard-columns.php
give / includes / admin / forms Last commit date
class-give-form-duplicator.php 4 years ago class-metabox-form-data.php 4 years ago dashboard-columns.php 4 years ago metabox.php 6 years ago
dashboard-columns.php
583 lines
1 <?php
2 /**
3 * Dashboard Columns
4 *
5 * @package GIVE
6 * @subpackage Admin/Forms
7 * @copyright Copyright (c) 2016, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17
18 /**
19 * Give Forms Columns
20 *
21 * Defines the custom columns and their order
22 *
23 * @since 1.0
24 *
25 * @param array $give_form_columns Array of forms columns
26 *
27 * @return array $form_columns Updated array of forms columns
28 * Post Type List Table
29 */
30 function give_form_columns( $give_form_columns ) {
31
32 // Standard columns
33 $give_form_columns = [
34 'cb' => '<input type="checkbox"/>',
35 'title' => __( 'Name', 'give' ),
36 'form_category' => __( 'Categories', 'give' ),
37 'form_tag' => __( 'Tags', 'give' ),
38 'price' => __( 'Amount', 'give' ),
39 'goal' => __( 'Goal', 'give' ),
40 'donations' => __( 'Donations', 'give' ),
41 'earnings' => __( 'Revenue', 'give' ),
42 'shortcode' => __( 'Shortcode', 'give' ),
43 'date' => __( 'Date', 'give' ),
44 ];
45
46 // Does the user want categories / tags?
47 if ( ! give_is_setting_enabled( give_get_option( 'categories', 'disabled' ) ) ) {
48 unset( $give_form_columns['form_category'] );
49 }
50 if ( ! give_is_setting_enabled( give_get_option( 'tags', 'disabled' ) ) ) {
51 unset( $give_form_columns['form_tag'] );
52 }
53
54 return apply_filters( 'give_forms_columns', $give_form_columns );
55 }
56
57 add_filter( 'manage_edit-give_forms_columns', 'give_form_columns' );
58
59 /**
60 * Render Give Form Columns
61 *
62 * @since 1.0
63 *
64 * @param string $column_name Column name
65 * @param int $post_id Give Form (Post) ID
66 *
67 * @return void
68 */
69 function give_render_form_columns( $column_name, $post_id ) {
70 if ( get_post_type( $post_id ) == 'give_forms' ) {
71
72 switch ( $column_name ) {
73 case 'form_category':
74 echo get_the_term_list( $post_id, 'give_forms_category', '', ', ', '' );
75 break;
76 case 'form_tag':
77 echo get_the_term_list( $post_id, 'give_forms_tag', '', ', ', '' );
78 break;
79 case 'price':
80 if ( give_has_variable_prices( $post_id ) ) {
81 echo give_price_range( $post_id );
82 } else {
83 echo give_price( $post_id, false );
84 printf( '<input type="hidden" class="formprice-%1$s" value="%2$s" />', esc_attr( $post_id ), esc_attr( give_get_form_price( $post_id ) ) );
85 }
86 break;
87 case 'goal':
88 if ( give_is_setting_enabled( give_get_meta( $post_id, '_give_goal_option', true ) ) ) {
89
90 echo give_admin_form_goal_stats( $post_id );
91
92 } else {
93 _e( 'No Goal Set', 'give' );
94 }
95
96 printf(
97 '<input type="hidden" class="formgoal-%1$s" value="%2$s" />',
98 esc_attr( $post_id ),
99 give_get_form_goal( $post_id )
100 );
101
102 break;
103 case 'donations':
104 if ( current_user_can( 'view_give_form_stats', $post_id ) ) {
105 printf(
106 '<a href="%1$s">%2$s</a>',
107 esc_url( admin_url( 'edit.php?post_type=give_forms&page=give-payment-history&form_id=' . $post_id ) ),
108 give_get_form_sales_stats( $post_id )
109 );
110 } else {
111 echo '-';
112 }
113 break;
114 case 'earnings':
115 if ( current_user_can( 'view_give_form_stats', $post_id ) ) {
116 printf(
117 '<a href="%1$s">%2$s</a>',
118 esc_url( admin_url( 'edit.php?post_type=give_forms&page=give-reports&tab=forms&form-id=' . $post_id ) ),
119 give_currency_filter( give_format_amount( give_get_form_earnings_stats( $post_id ), [ 'sanitize' => false ] ) )
120 );
121 } else {
122 echo '-';
123 }
124 break;
125 case 'shortcode':
126 $shortcode = sprintf( '[give_form id="%s"]', absint( $post_id ) );
127 printf(
128 '<button
129 type="button"
130 class="button hint-tooltip hint--top js-give-shortcode-button"
131 aria-label="%1$s"
132 data-give-shortcode="%2$s">
133 <span class="dashicons dashicons-admin-page"></span>
134 <span class="give-button-text"> %3$s</span>
135 </button>',
136 esc_attr( $shortcode ),
137 esc_attr( $shortcode ),
138 esc_html__( 'Copy Shortcode', 'give' )
139 );
140 break;
141 }// End switch().
142 }// End if().
143 }
144
145 add_action( 'manage_posts_custom_column', 'give_render_form_columns', 10, 2 );
146
147 /**
148 * Registers the sortable columns in the list table
149 *
150 * @since 1.0
151 *
152 * @param array $columns Array of the columns
153 *
154 * @return array $columns Array of sortable columns
155 */
156 function give_sortable_form_columns( $columns ) {
157 $columns['price'] = 'amount';
158 $columns['sales'] = 'sales';
159 $columns['earnings'] = 'earnings';
160 $columns['goal'] = 'goal';
161 $columns['donations'] = 'donations';
162
163 return $columns;
164 }
165
166 add_filter( 'manage_edit-give_forms_sortable_columns', 'give_sortable_form_columns' );
167
168 /**
169 * Sorts Columns in the Forms List Table
170 *
171 * @since 1.0
172 *
173 * @param array $vars Array of all the sort variables.
174 *
175 * @return array $vars Array of all the sort variables.
176 */
177 function give_sort_forms( $vars ) {
178 // Check if we're viewing the "give_forms" post type.
179 if ( ! isset( $vars['post_type'] ) || ! isset( $vars['orderby'] ) || 'give_forms' !== $vars['post_type'] ) {
180 return $vars;
181 }
182
183 switch ( $vars['orderby'] ) {
184 // Check if 'orderby' is set to "sales".
185 case 'sales':
186 $vars = array_merge(
187 $vars,
188 [
189 'meta_key' => '_give_form_sales',
190 'orderby' => 'meta_value_num',
191 ]
192 );
193 break;
194
195 // Check if "orderby" is set to "earnings".
196 case 'earnings':
197 $vars = array_merge(
198 $vars,
199 [
200 'meta_key' => '_give_form_earnings',
201 'orderby' => 'meta_value_num',
202 ]
203 );
204 break;
205
206 // Check if "orderby" is set to "price/amount".
207 case 'amount':
208 $multi_level_meta_key = ( 'asc' === $vars['order'] ) ? '_give_levels_minimum_amount' : '_give_levels_maximum_amount';
209
210 $vars['orderby'] = 'meta_value_num';
211 $vars['meta_query'] = [
212 'relation' => 'OR',
213 [
214 'key' => $multi_level_meta_key,
215 'type' => 'NUMERIC',
216 ],
217 [
218 'key' => '_give_set_price',
219 'type' => 'NUMERIC',
220 ],
221 ];
222
223 break;
224
225 // Check if "orderby" is set to "goal".
226 case 'goal':
227 $meta_key = give_has_upgrade_completed( 'v240_update_form_goal_progress' )
228 ? '_give_form_goal_progress'
229 : '_give_set_goal'; // Backward compatibility
230
231 $vars = array_merge(
232 $vars,
233 [
234 'meta_key' => $meta_key,
235 'orderby' => 'meta_value_num',
236 ]
237 );
238 break;
239
240 // Check if "orderby" is set to "donations".
241 case 'donations':
242 $vars = array_merge(
243 $vars,
244 [
245 'meta_key' => '_give_form_sales',
246 'orderby' => 'meta_value_num',
247 ]
248 );
249 break;
250 }// End switch().
251
252 return $vars;
253 }
254
255 /**
256 * Sets restrictions on author of Forms List Table
257 *
258 * @since 1.0
259 *
260 * @param array $vars Array of all sort variables.
261 *
262 * @return array Array of all sort variables.
263 */
264 function give_filter_forms( $vars ) {
265 if ( isset( $vars['post_type'] ) && 'give_forms' == $vars['post_type'] ) {
266
267 // If an author ID was passed, use it
268 if ( isset( $_REQUEST['author'] ) && ! current_user_can( 'view_give_reports' ) ) {
269
270 $author_id = $_REQUEST['author'];
271 if ( (int) $author_id !== get_current_user_id() ) {
272 wp_die(
273 esc_html__( 'You do not have permission to view this data.', 'give' ),
274 esc_html__( 'Error', 'give' ),
275 [
276 'response' => 403,
277 ]
278 );
279 }
280 $vars = array_merge(
281 $vars,
282 [
283 'author' => get_current_user_id(),
284 ]
285 );
286
287 }
288 }
289
290 return $vars;
291 }
292
293 /**
294 * Form Load
295 *
296 * Sorts the form columns.
297 *
298 * @since 1.0
299 * @return void
300 */
301 function give_forms_load() {
302 add_filter( 'request', 'give_sort_forms' );
303 add_filter( 'request', 'give_filter_forms' );
304 }
305
306 add_action( 'load-edit.php', 'give_forms_load', 9999 );
307
308 /**
309 * Remove Forms Month Filter
310 *
311 * Removes the default drop down filter for forms by date.
312 *
313 * @since 1.0
314 *
315 * @param array $dates The preset array of dates.
316 *
317 * @global $typenow The post type we are viewing.
318 * @return array Empty array disables the dropdown.
319 */
320 function give_remove_month_filter( $dates ) {
321 global $typenow;
322
323 if ( $typenow == 'give_forms' ) {
324 $dates = [];
325 }
326
327 return $dates;
328 }
329
330 add_filter( 'months_dropdown_results', 'give_remove_month_filter', 99 );
331
332 /**
333 * Updates price when saving post
334 *
335 * @since 1.0
336 * @since 2.1.4 If the donation amount is less than the Minimum amount then set the donation amount as Donation minimum amount.
337 *
338 * @param int $post_id Download (Post) ID
339 *
340 * @return int|null
341 */
342 function give_price_save_quick_edit( $post_id ) {
343 if ( ! isset( $_POST['post_type'] ) || 'give_forms' !== $_POST['post_type'] ) {
344 return;
345 }
346 if ( ! current_user_can( 'edit_post', $post_id ) ) {
347 return $post_id;
348 }
349 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
350 return $post_id;
351 }
352
353 if ( isset( $_REQUEST['_give_regprice'] ) ) {
354 give_update_meta( $post_id, '_give_set_price', give_sanitize_amount_for_db( strip_tags( stripslashes( $_REQUEST['_give_regprice'] ) ) ) );
355 }
356
357 // Override the Donation minimum amount.
358 if (
359 isset( $_REQUEST['_give_custom_amount'], $_REQUEST['_give_set_price'], $_REQUEST['_give_price_option'], $_REQUEST['_give_custom_amount_range'] )
360 && 'set' === $_REQUEST['_give_price_option']
361 && give_is_setting_enabled( $_REQUEST['_give_custom_amount'] )
362 && give_maybe_sanitize_amount( $_REQUEST['_give_set_price'] ) < give_maybe_sanitize_amount( $_REQUEST['_give_custom_amount_range']['minimum'] )
363 ) {
364 give_update_meta( $post_id, '_give_custom_amount_range_minimum', give_sanitize_amount_for_db( $_REQUEST['_give_set_price'] ) );
365 }
366 }
367
368 add_action( 'save_post', 'give_price_save_quick_edit' );
369
370 /**
371 * Function is used to filter the query for search result.
372 *
373 * @since 2.4.0
374 *
375 * @param $wp WP WordPress environment instance (passed by reference).
376 */
377 function give_form_search_query_filter( $wp ) {
378
379 if (
380 isset( $wp->query_vars['post_type'] )
381 && 'give_forms' == $wp->query_vars['post_type']
382 && isset( $_GET['give-forms-goal-filter'] )
383 ) {
384
385 $wp->query_vars['date_query'] =
386 [
387 'after' => ! empty( $_GET['start-date'] ) ? date( 'Y-m-d', strtotime( give_clean( $_GET['start-date'] ) ) ) : false,
388 'before' => ! empty( $_GET['end-date'] ) ? date( 'Y-m-d 23:59:59 ', strtotime( give_clean( $_GET['end-date'] ) ) ) : false,
389 'inclusive' => true,
390 ];
391 switch ( $_GET['give-forms-goal-filter'] ) {
392 case 'goal_in_progress':
393 $wp->query_vars['meta_query'] =
394 [
395 'relation' => 'AND',
396 [
397 'key' => '_give_form_goal_progress',
398 'value' => [ 1, 99 ],
399 'compare' => 'BETWEEN',
400 'type' => 'NUMERIC',
401 ],
402 ];
403
404 break;
405 case 'goal_achieved':
406 $wp->query_vars['meta_query'] =
407 [
408 'relation' => 'AND',
409 [
410 'key' => '_give_form_goal_progress',
411 'value' => 100,
412 'compare' => '>=',
413 'type' => 'NUMERIC',
414 ],
415 ];
416 break;
417 case 'goal_not_set':
418 $wp->query_vars['meta_query'] =
419 [
420 'relation' => 'OR',
421 [
422 'key' => '_give_goal_option',
423 'value' => 'disabled',
424 'compare' => '=',
425 ],
426 [
427 'key' => '_give_goal_option',
428 'compare' => 'NOT EXISTS',
429 ],
430 ];
431 break;
432 }
433 }
434 }
435
436 add_action( 'parse_request', 'give_form_search_query_filter' );
437
438 /**
439 * function is used to search give forms by ID or title.
440 *
441 * @since 2.4.0
442 *
443 * @param $query WP_Query the WP_Query instance (passed by reference).
444 */
445
446 function give_search_form_by_id( $query ) {
447 // Verify that we are on the give forms list page.
448 if (
449 empty( $query->query_vars['post_type'] )
450 || 'give_forms' !== $query->query_vars['post_type']
451 ) {
452 return;
453 }
454
455 if ( '' !== $query->query_vars['s'] && is_search() ) {
456 if ( absint( $query->query_vars['s'] ) ) {
457 // Set the post id value
458 $query->set( 'p', $query->query_vars['s'] );
459 // Reset the search value
460 $query->set( 's', '' );
461 }
462 }
463 }
464
465 add_filter( 'pre_get_posts', 'give_search_form_by_id' );
466
467 /**
468 * Outputs advanced filter html in Give forms list admin screen.
469 *
470 * @sicne 2.4.0
471 *
472 * @param $which
473 */
474 function give_forms_advanced_filter( $which ) {
475 /* @var stdClass $screen */
476 $screen = get_current_screen();
477
478 if ( 'edit' !== $screen->parent_base || 'give_forms' !== $screen->post_type ) {
479 return;
480 }
481
482 // Apply this only on a specific post type
483 if ( 'top' !== $which ) {
484 return;
485 }
486
487 $start_date = isset( $_GET['start-date'] ) ? strtotime( give_clean( $_GET['start-date'] ) ) : '';
488 $end_date = isset( $_GET['end-date'] ) ? strtotime( give_clean( $_GET['end-date'] ) ) : '';
489 $search = isset( $_GET['s'] ) ? give_clean( $_GET['s'] ) : '';
490 $give_forms_goal_filter = isset( $_GET['give-forms-goal-filter'] ) ? $_GET['give-forms-goal-filter'] : '';
491 ?>
492 <div id="give-forms-advanced-filter" class="give-filters">
493 <div class="give-filter give-filter-search">
494 <input type="text" id="give-forms-search-input" placeholder="<?php _e( 'Form Name or ID', 'give' ); ?>" name="s" value="<?php echo esc_attr( $search ); ?>">
495 <?php
496 submit_button(
497 __( 'Search', 'give' ),
498 'button',
499 false,
500 false,
501 [
502 'ID' => 'form-search-submit',
503 ]
504 );
505 ?>
506 </div>
507 <div id="give-payment-date-filters">
508 <div class="give-filter give-filter-half">
509 <label for="start-date"
510 class="give-start-date-label"><?php _e( 'Start Date', 'give' ); ?></label>
511 <input type="text"
512 id="start-date"
513 name="start-date"
514 class="give_datepicker"
515 autocomplete="off"
516 value="<?php echo $start_date ? date_i18n( give_date_format(), $start_date ) : ''; ?>"
517 data-standard-date="<?php echo $start_date ? date( 'Y-m-d', $start_date ) : $start_date; ?>"
518 placeholder="<?php _e( 'Start Date', 'give' ); ?>"
519 />
520 </div>
521 <div class="give-filter give-filter-half">
522 <label for="end-date" class="give-end-date-label"><?php _e( 'End Date', 'give' ); ?></label>
523 <input type="text"
524 id="end-date"
525 name="end-date"
526 class="give_datepicker"
527 autocomplete="off"
528 value="<?php echo $end_date ? date_i18n( give_date_format(), $end_date ) : ''; ?>"
529 data-standard-date="<?php echo $end_date ? date( 'Y-m-d', $end_date ) : $end_date; ?>"
530 placeholder="<?php _e( 'End Date', 'give' ); ?>"
531 />
532 </div>
533 </div>
534 <div id="give-payment-form-filter" class="give-filter">
535 <label for="give-donation-forms-filter"
536 class="give-donation-forms-filter-label"><?php _e( 'Goal', 'give' ); ?></label>
537 <select id="give-forms-goal-filter" name="give-forms-goal-filter" class="give-forms-goal-filter">
538 <option value="any_goal_status"
539 <?php
540 if ( 'any_goal_status' === $give_forms_goal_filter ) {
541 echo 'selected';
542 }
543 ?>
544 ><?php _e( 'Any Goal Status', 'give' ); ?></option>
545 <option value="goal_achieved"
546 <?php
547 if ( 'goal_achieved' === $give_forms_goal_filter ) {
548 echo 'selected';
549 }
550 ?>
551 ><?php _e( 'Goal Achieved', 'give' ); ?></option>
552 <option value="goal_in_progress"
553 <?php
554 if ( 'goal_in_progress' === $give_forms_goal_filter ) {
555 echo 'selected';
556 }
557 ?>
558 ><?php _e( 'Goal In Progress', 'give' ); ?></option>
559 <option value="goal_not_set"
560 <?php
561 if ( 'goal_not_set' === $give_forms_goal_filter ) {
562 echo 'selected';
563 }
564 ?>
565 ><?php _e( 'Goal Not Set', 'give' ); ?></option>
566 </select>
567 </div>
568 <div class="give-filter">
569 <?php submit_button( __( 'Apply', 'give' ), 'secondary', '', false ); ?>
570 <?php
571 // Clear active filters button.
572 if ( ! empty( $start_date ) || ! empty( $end_date ) || ! empty( $search ) || ! empty( $give_forms_goal_filter ) ) :
573 ?>
574 <a href="<?php echo admin_url( 'edit.php?post_type=give_forms' ); ?>"
575 class="button give-clear-filters-button"><?php _e( 'Clear Filters', 'give' ); ?></a>
576 <?php endif; ?>
577 </div>
578 </div>
579 <?php
580 }
581
582 add_action( 'manage_posts_extra_tablenav', 'give_forms_advanced_filter', 10, 1 );
583