PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.2
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 3 years ago class-metabox-form-data.php 3 years ago dashboard-columns.php 1 year ago metabox.php 6 years ago
dashboard-columns.php
588 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 3.14.0 Use the 'give_donate_form_get_sales" filter to ensure the correct donation count will be used
172 * @since 1.0
173 *
174 * @param array $vars Array of all the sort variables.
175 *
176 * @return array $vars Array of all the sort variables.
177 */
178 function give_sort_forms( $vars ) {
179 // Check if we're viewing the "give_forms" post type.
180 if ( ! isset( $vars['post_type'] ) || ! isset( $vars['orderby'] ) || 'give_forms' !== $vars['post_type'] ) {
181 return $vars;
182 }
183
184 add_filter('give_donate_form_get_sales', function ($sales, $donationFormId) {
185 return (new Give\MultiFormGoals\ProgressBar\Model(['ids' => [$donationFormId]]))->getDonationCount();
186 }, 10, 2);
187
188 switch ( $vars['orderby'] ) {
189 // Check if 'orderby' is set to "sales".
190 case 'sales':
191 $vars = array_merge(
192 $vars,
193 [
194 'meta_key' => '_give_form_sales',
195 'orderby' => 'meta_value_num',
196 ]
197 );
198 break;
199
200 // Check if "orderby" is set to "earnings".
201 case 'earnings':
202 $vars = array_merge(
203 $vars,
204 [
205 'meta_key' => '_give_form_earnings',
206 'orderby' => 'meta_value_num',
207 ]
208 );
209 break;
210
211 // Check if "orderby" is set to "price/amount".
212 case 'amount':
213 $multi_level_meta_key = ( 'asc' === $vars['order'] ) ? '_give_levels_minimum_amount' : '_give_levels_maximum_amount';
214
215 $vars['orderby'] = 'meta_value_num';
216 $vars['meta_query'] = [
217 'relation' => 'OR',
218 [
219 'key' => $multi_level_meta_key,
220 'type' => 'NUMERIC',
221 ],
222 [
223 'key' => '_give_set_price',
224 'type' => 'NUMERIC',
225 ],
226 ];
227
228 break;
229
230 // Check if "orderby" is set to "goal".
231 case 'goal':
232 $meta_key = give_has_upgrade_completed( 'v240_update_form_goal_progress' )
233 ? '_give_form_goal_progress'
234 : '_give_set_goal'; // Backward compatibility
235
236 $vars = array_merge(
237 $vars,
238 [
239 'meta_key' => $meta_key,
240 'orderby' => 'meta_value_num',
241 ]
242 );
243 break;
244
245 // Check if "orderby" is set to "donations".
246 case 'donations':
247 $vars = array_merge(
248 $vars,
249 [
250 'meta_key' => '_give_form_sales',
251 'orderby' => 'meta_value_num',
252 ]
253 );
254 break;
255 }// End switch().
256
257 return $vars;
258 }
259
260 /**
261 * Sets restrictions on author of Forms List Table
262 *
263 * @since 1.0
264 *
265 * @param array $vars Array of all sort variables.
266 *
267 * @return array Array of all sort variables.
268 */
269 function give_filter_forms( $vars ) {
270 if ( isset( $vars['post_type'] ) && 'give_forms' == $vars['post_type'] ) {
271
272 // If an author ID was passed, use it
273 if ( isset( $_REQUEST['author'] ) && ! current_user_can( 'view_give_reports' ) ) {
274
275 $author_id = $_REQUEST['author'];
276 if ( (int) $author_id !== get_current_user_id() ) {
277 wp_die(
278 esc_html__( 'You do not have permission to view this data.', 'give' ),
279 esc_html__( 'Error', 'give' ),
280 [
281 'response' => 403,
282 ]
283 );
284 }
285 $vars = array_merge(
286 $vars,
287 [
288 'author' => get_current_user_id(),
289 ]
290 );
291
292 }
293 }
294
295 return $vars;
296 }
297
298 /**
299 * Form Load
300 *
301 * Sorts the form columns.
302 *
303 * @since 1.0
304 * @return void
305 */
306 function give_forms_load() {
307 add_filter( 'request', 'give_sort_forms' );
308 add_filter( 'request', 'give_filter_forms' );
309 }
310
311 add_action( 'load-edit.php', 'give_forms_load', 9999 );
312
313 /**
314 * Remove Forms Month Filter
315 *
316 * Removes the default drop down filter for forms by date.
317 *
318 * @since 1.0
319 *
320 * @param array $dates The preset array of dates.
321 *
322 * @global $typenow The post type we are viewing.
323 * @return array Empty array disables the dropdown.
324 */
325 function give_remove_month_filter( $dates ) {
326 global $typenow;
327
328 if ( $typenow == 'give_forms' ) {
329 $dates = [];
330 }
331
332 return $dates;
333 }
334
335 add_filter( 'months_dropdown_results', 'give_remove_month_filter', 99 );
336
337 /**
338 * Updates price when saving post
339 *
340 * @since 1.0
341 * @since 2.1.4 If the donation amount is less than the Minimum amount then set the donation amount as Donation minimum amount.
342 *
343 * @param int $post_id Download (Post) ID
344 *
345 * @return int|null
346 */
347 function give_price_save_quick_edit( $post_id ) {
348 if ( ! isset( $_POST['post_type'] ) || 'give_forms' !== $_POST['post_type'] ) {
349 return;
350 }
351 if ( ! current_user_can( 'edit_post', $post_id ) ) {
352 return $post_id;
353 }
354 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
355 return $post_id;
356 }
357
358 if ( isset( $_REQUEST['_give_regprice'] ) ) {
359 give_update_meta( $post_id, '_give_set_price', give_sanitize_amount_for_db( strip_tags( stripslashes( $_REQUEST['_give_regprice'] ) ) ) );
360 }
361
362 // Override the Donation minimum amount.
363 if (
364 isset( $_REQUEST['_give_custom_amount'], $_REQUEST['_give_set_price'], $_REQUEST['_give_price_option'], $_REQUEST['_give_custom_amount_range'] )
365 && 'set' === $_REQUEST['_give_price_option']
366 && give_is_setting_enabled( $_REQUEST['_give_custom_amount'] )
367 && give_maybe_sanitize_amount( $_REQUEST['_give_set_price'] ) < give_maybe_sanitize_amount( $_REQUEST['_give_custom_amount_range']['minimum'] )
368 ) {
369 give_update_meta( $post_id, '_give_custom_amount_range_minimum', give_sanitize_amount_for_db( $_REQUEST['_give_set_price'] ) );
370 }
371 }
372
373 add_action( 'save_post', 'give_price_save_quick_edit' );
374
375 /**
376 * Function is used to filter the query for search result.
377 *
378 * @since 2.4.0
379 *
380 * @param $wp WP WordPress environment instance (passed by reference).
381 */
382 function give_form_search_query_filter( $wp ) {
383
384 if (
385 isset( $wp->query_vars['post_type'] )
386 && 'give_forms' == $wp->query_vars['post_type']
387 && isset( $_GET['give-forms-goal-filter'] )
388 ) {
389
390 $wp->query_vars['date_query'] =
391 [
392 'after' => ! empty( $_GET['start-date'] ) ? date( 'Y-m-d', strtotime( give_clean( $_GET['start-date'] ) ) ) : false,
393 'before' => ! empty( $_GET['end-date'] ) ? date( 'Y-m-d 23:59:59 ', strtotime( give_clean( $_GET['end-date'] ) ) ) : false,
394 'inclusive' => true,
395 ];
396 switch ( $_GET['give-forms-goal-filter'] ) {
397 case 'goal_in_progress':
398 $wp->query_vars['meta_query'] =
399 [
400 'relation' => 'AND',
401 [
402 'key' => '_give_form_goal_progress',
403 'value' => [ 1, 99 ],
404 'compare' => 'BETWEEN',
405 'type' => 'NUMERIC',
406 ],
407 ];
408
409 break;
410 case 'goal_achieved':
411 $wp->query_vars['meta_query'] =
412 [
413 'relation' => 'AND',
414 [
415 'key' => '_give_form_goal_progress',
416 'value' => 100,
417 'compare' => '>=',
418 'type' => 'NUMERIC',
419 ],
420 ];
421 break;
422 case 'goal_not_set':
423 $wp->query_vars['meta_query'] =
424 [
425 'relation' => 'OR',
426 [
427 'key' => '_give_goal_option',
428 'value' => 'disabled',
429 'compare' => '=',
430 ],
431 [
432 'key' => '_give_goal_option',
433 'compare' => 'NOT EXISTS',
434 ],
435 ];
436 break;
437 }
438 }
439 }
440
441 add_action( 'parse_request', 'give_form_search_query_filter' );
442
443 /**
444 * function is used to search give forms by ID or title.
445 *
446 * @since 2.4.0
447 *
448 * @param $query WP_Query the WP_Query instance (passed by reference).
449 */
450
451 function give_search_form_by_id( $query ) {
452 // Verify that we are on the give forms list page.
453 if (
454 empty( $query->query_vars['post_type'] )
455 || 'give_forms' !== $query->query_vars['post_type']
456 ) {
457 return;
458 }
459
460 if ( '' !== $query->query_vars['s'] && is_search() ) {
461 if ( absint( $query->query_vars['s'] ) ) {
462 // Set the post id value
463 $query->set( 'p', $query->query_vars['s'] );
464 // Reset the search value
465 $query->set( 's', '' );
466 }
467 }
468 }
469
470 add_filter( 'pre_get_posts', 'give_search_form_by_id' );
471
472 /**
473 * Outputs advanced filter html in Give forms list admin screen.
474 *
475 * @sicne 2.4.0
476 *
477 * @param $which
478 */
479 function give_forms_advanced_filter( $which ) {
480 /* @var stdClass $screen */
481 $screen = get_current_screen();
482
483 if ( 'edit' !== $screen->parent_base || 'give_forms' !== $screen->post_type ) {
484 return;
485 }
486
487 // Apply this only on a specific post type
488 if ( 'top' !== $which ) {
489 return;
490 }
491
492 $start_date = isset( $_GET['start-date'] ) ? strtotime( give_clean( $_GET['start-date'] ) ) : '';
493 $end_date = isset( $_GET['end-date'] ) ? strtotime( give_clean( $_GET['end-date'] ) ) : '';
494 $search = isset( $_GET['s'] ) ? give_clean( $_GET['s'] ) : '';
495 $give_forms_goal_filter = isset( $_GET['give-forms-goal-filter'] ) ? $_GET['give-forms-goal-filter'] : '';
496 ?>
497 <div id="give-forms-advanced-filter" class="give-filters">
498 <div class="give-filter give-filter-search">
499 <input type="text" id="give-forms-search-input" placeholder="<?php _e( 'Form Name or ID', 'give' ); ?>" name="s" value="<?php echo esc_attr( $search ); ?>">
500 <?php
501 submit_button(
502 __( 'Search', 'give' ),
503 'button',
504 false,
505 false,
506 [
507 'ID' => 'form-search-submit',
508 ]
509 );
510 ?>
511 </div>
512 <div id="give-payment-date-filters">
513 <div class="give-filter give-filter-half">
514 <label for="start-date"
515 class="give-start-date-label"><?php _e( 'Start Date', 'give' ); ?></label>
516 <input type="text"
517 id="start-date"
518 name="start-date"
519 class="give_datepicker"
520 autocomplete="off"
521 value="<?php echo $start_date ? date_i18n( give_date_format(), $start_date ) : ''; ?>"
522 data-standard-date="<?php echo $start_date ? date( 'Y-m-d', $start_date ) : $start_date; ?>"
523 placeholder="<?php _e( 'Start Date', 'give' ); ?>"
524 />
525 </div>
526 <div class="give-filter give-filter-half">
527 <label for="end-date" class="give-end-date-label"><?php _e( 'End Date', 'give' ); ?></label>
528 <input type="text"
529 id="end-date"
530 name="end-date"
531 class="give_datepicker"
532 autocomplete="off"
533 value="<?php echo $end_date ? date_i18n( give_date_format(), $end_date ) : ''; ?>"
534 data-standard-date="<?php echo $end_date ? date( 'Y-m-d', $end_date ) : $end_date; ?>"
535 placeholder="<?php _e( 'End Date', 'give' ); ?>"
536 />
537 </div>
538 </div>
539 <div id="give-payment-form-filter" class="give-filter">
540 <label for="give-donation-forms-filter"
541 class="give-donation-forms-filter-label"><?php _e( 'Goal', 'give' ); ?></label>
542 <select id="give-forms-goal-filter" name="give-forms-goal-filter" class="give-forms-goal-filter">
543 <option value="any_goal_status"
544 <?php
545 if ( 'any_goal_status' === $give_forms_goal_filter ) {
546 echo 'selected';
547 }
548 ?>
549 ><?php _e( 'Any Goal Status', 'give' ); ?></option>
550 <option value="goal_achieved"
551 <?php
552 if ( 'goal_achieved' === $give_forms_goal_filter ) {
553 echo 'selected';
554 }
555 ?>
556 ><?php _e( 'Goal Achieved', 'give' ); ?></option>
557 <option value="goal_in_progress"
558 <?php
559 if ( 'goal_in_progress' === $give_forms_goal_filter ) {
560 echo 'selected';
561 }
562 ?>
563 ><?php _e( 'Goal In Progress', 'give' ); ?></option>
564 <option value="goal_not_set"
565 <?php
566 if ( 'goal_not_set' === $give_forms_goal_filter ) {
567 echo 'selected';
568 }
569 ?>
570 ><?php _e( 'Goal Not Set', 'give' ); ?></option>
571 </select>
572 </div>
573 <div class="give-filter">
574 <?php submit_button( __( 'Apply', 'give' ), 'secondary', '', false ); ?>
575 <?php
576 // Clear active filters button.
577 if ( ! empty( $start_date ) || ! empty( $end_date ) || ! empty( $search ) || ! empty( $give_forms_goal_filter ) ) :
578 ?>
579 <a href="<?php echo admin_url( 'edit.php?post_type=give_forms' ); ?>"
580 class="button give-clear-filters-button"><?php _e( 'Clear Filters', 'give' ); ?></a>
581 <?php endif; ?>
582 </div>
583 </div>
584 <?php
585 }
586
587 add_action( 'manage_posts_extra_tablenav', 'give_forms_advanced_filter', 10, 1 );
588