PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.4.7
GiveWP – Donation Plugin and Fundraising Platform v2.4.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 / actions.php
give / includes Last commit date
admin 7 years ago api 7 years ago deprecated 7 years ago donors 7 years ago emails 7 years ago forms 7 years ago frontend 7 years ago gateways 7 years ago libraries 7 years ago payments 7 years ago actions.php 7 years ago ajax-functions.php 7 years ago class-give-async-process.php 7 years ago class-give-background-updater.php 7 years ago class-give-cache-setting.php 7 years ago class-give-cache.php 7 years ago class-give-cli-commands.php 7 years ago class-give-comment.php 7 years ago class-give-cron.php 7 years ago class-give-db-comments-meta.php 7 years ago class-give-db-comments.php 7 years ago class-give-db-donor-meta.php 7 years ago class-give-db-donors.php 7 years ago class-give-db-form-meta.php 7 years ago class-give-db-logs-meta.php 7 years ago class-give-db-logs.php 7 years ago class-give-db-meta.php 7 years ago class-give-db-payment-meta.php 7 years ago class-give-db-sequential-ordering.php 7 years ago class-give-db-sessions.php 7 years ago class-give-db.php 7 years ago class-give-donate-form.php 7 years ago class-give-donor-wall-widget.php 7 years ago class-give-donor.php 7 years ago class-give-email-access.php 7 years ago class-give-license-handler.php 7 years ago class-give-logging.php 7 years ago class-give-readme-parser.php 7 years ago class-give-roles.php 7 years ago class-give-scripts.php 7 years ago class-give-session.php 7 years ago class-give-stats.php 7 years ago class-give-template-loader.php 8 years ago class-give-tooltips.php 7 years ago class-give-translation.php 8 years ago class-notices.php 7 years ago country-functions.php 7 years ago currencies-list.php 7 years ago currency-functions.php 7 years ago error-tracking.php 7 years ago filters.php 7 years ago formatting.php 7 years ago install.php 7 years ago login-register.php 7 years ago misc-functions.php 7 years ago plugin-compatibility.php 7 years ago post-types.php 7 years ago price-functions.php 7 years ago process-donation.php 7 years ago setting-functions.php 7 years ago shortcodes.php 7 years ago template-functions.php 7 years ago user-functions.php 7 years ago
actions.php
433 lines
1 <?php
2 /**
3 * Front-end Actions
4 *
5 * @package Give
6 * @subpackage Functions
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 * Hooks Give actions, when present in the $_GET superglobal. Every give_action
19 * present in $_GET is called using WordPress's do_action function. These
20 * functions are called on init.
21 *
22 * @since 1.0
23 *
24 * @return void
25 */
26 function give_get_actions() {
27
28 $get_data = give_clean( $_GET ); // WPCS: input var ok, sanitization ok, CSRF ok.
29
30 $_get_action = ! empty( $get_data['give_action'] ) ? $get_data['give_action'] : null;
31
32 // Add backward compatibility to give-action param ( $_GET ).
33 if ( empty( $_get_action ) ) {
34 $_get_action = ! empty( $get_data['give-action'] ) ? $get_data['give-action'] : null;
35 }
36
37 if ( isset( $_get_action ) ) {
38 /**
39 * Fires in WordPress init or admin init, when give_action is present in $_GET.
40 *
41 * @since 1.0
42 *
43 * @param array $_GET Array of HTTP GET variables.
44 */
45 do_action( "give_{$_get_action}", $get_data );
46 }
47
48 }
49
50 add_action( 'init', 'give_get_actions' );
51
52 /**
53 * Hooks Give actions, when present in the $_POST super global. Every give_action
54 * present in $_POST is called using WordPress's do_action function. These
55 * functions are called on init.
56 *
57 * @since 1.0
58 *
59 * @return void
60 */
61 function give_post_actions() {
62
63 $post_data = give_clean( $_POST ); // WPCS: input var ok, sanitization ok, CSRF ok.
64
65 $_post_action = ! empty( $post_data['give_action'] ) ? $post_data['give_action'] : null;
66
67 // Add backward compatibility to give-action param ( $_POST ).
68 if ( empty( $_post_action ) ) {
69 $_post_action = ! empty( $post_data['give-action'] ) ? $post_data['give-action'] : null;
70 }
71
72 if ( isset( $_post_action ) ) {
73 /**
74 * Fires in WordPress init or admin init, when give_action is present in $_POST.
75 *
76 * @since 1.0
77 *
78 * @param array $_POST Array of HTTP POST variables.
79 */
80 do_action( "give_{$_post_action}", $post_data );
81 }
82
83 }
84
85 add_action( 'init', 'give_post_actions' );
86
87 /**
88 * Connect WordPress user with Donor.
89 *
90 * @param int $user_id User ID.
91 * @param array $user_data User Data.
92 *
93 * @since 1.7
94 *
95 * @return void
96 */
97 function give_connect_donor_to_wpuser( $user_id, $user_data ) {
98 /* @var Give_Donor $donor */
99 $donor = new Give_Donor( $user_data['user_email'] );
100
101 // Validate donor id and check if do nor is already connect to wp user or not.
102 if ( $donor->id && ! $donor->user_id ) {
103
104 // Update donor user_id.
105 if ( $donor->update( array( 'user_id' => $user_id ) ) ) {
106 $donor_note = sprintf( esc_html__( 'WordPress user #%d is connected to #%d', 'give' ), $user_id, $donor->id );
107 $donor->add_note( $donor_note );
108
109 // Update user_id meta in payments.
110 // if( ! empty( $donor->payment_ids ) && ( $donations = explode( ',', $donor->payment_ids ) ) ) {
111 // foreach ( $donations as $donation ) {
112 // give_update_meta( $donation, '_give_payment_user_id', $user_id );
113 // }
114 // }
115 // Do not need to update user_id in payment because we will get user id from donor id now.
116 }
117 }
118 }
119
120 add_action( 'give_insert_user', 'give_connect_donor_to_wpuser', 10, 2 );
121
122
123 /**
124 * Processing after donor batch export complete
125 *
126 * @since 1.8
127 *
128 * @param $data
129 */
130 function give_donor_batch_export_complete( $data ) {
131 // Remove donor ids cache.
132 if (
133 isset( $data['class'] )
134 && 'Give_Batch_Donors_Export' === $data['class']
135 && ! empty( $data['forms'] )
136 && isset( $data['give_export_option']['query_id'] )
137 ) {
138 Give_Cache::delete( Give_Cache::get_key( $data['give_export_option']['query_id'] ) );
139 }
140 }
141
142 add_action( 'give_file_export_complete', 'give_donor_batch_export_complete' );
143
144 /**
145 * Print css for wordpress setting pages.
146 *
147 * @since 1.8.7
148 */
149 function give_admin_quick_css() {
150 /* @var WP_Screen $screen */
151 $screen = get_current_screen();
152
153 if ( ! ( $screen instanceof WP_Screen ) ) {
154 return false;
155 }
156
157 switch ( true ) {
158 case ( 'plugins' === $screen->base || 'plugins-network' === $screen->base ):
159 ?>
160 <style>
161 tr.active.update + tr.give-addon-notice-tr td {
162 box-shadow: none;
163 -webkit-box-shadow: none;
164 }
165
166 tr.active + tr.give-addon-notice-tr td {
167 position: relative;
168 top: -1px;
169 }
170
171 tr.active + tr.give-addon-notice-tr .notice {
172 margin: 5px 20px 15px 40px;
173 }
174
175 tr.give-addon-notice-tr .dashicons {
176 color: #f56e28;
177 }
178
179 tr.give-addon-notice-tr td {
180 border-left: 4px solid #00a0d2;
181 }
182
183 tr.give-addon-notice-tr td {
184 padding: 0 !important;
185 }
186
187 tr.active.update + tr.give-addon-notice-tr .notice {
188 margin: 5px 20px 5px 40px;
189 }
190 </style>
191 <?php
192 }
193 }
194
195 add_action( 'admin_head', 'give_admin_quick_css' );
196
197
198 /**
199 * Set Donation Amount for Multi Level Donation Forms
200 *
201 * @param int $form_id Donation Form ID.
202 *
203 * @since 1.8.9
204 *
205 * @return void
206 */
207 function give_set_donation_levels_max_min_amount( $form_id ) {
208 if (
209 ( 'set' === $_POST['_give_price_option'] ) ||
210 ( in_array( '_give_donation_levels', $_POST ) && count( $_POST['_give_donation_levels'] ) <= 0 ) ||
211 ! ( $donation_levels_amounts = wp_list_pluck( $_POST['_give_donation_levels'], '_give_amount' ) )
212 ) {
213 // Delete old meta.
214 give_delete_meta( $form_id, '_give_levels_minimum_amount' );
215 give_delete_meta( $form_id, '_give_levels_maximum_amount' );
216
217 return;
218 }
219
220 // Sanitize donation level amounts.
221 $donation_levels_amounts = array_map( 'give_maybe_sanitize_amount', $donation_levels_amounts );
222
223 $min_amount = min( $donation_levels_amounts );
224 $max_amount = max( $donation_levels_amounts );
225
226 // Set Minimum and Maximum amount for Multi Level Donation Forms.
227 give_update_meta( $form_id, '_give_levels_minimum_amount', $min_amount ? give_sanitize_amount_for_db( $min_amount ) : 0 );
228 give_update_meta( $form_id, '_give_levels_maximum_amount', $max_amount ? give_sanitize_amount_for_db( $max_amount ) : 0 );
229 }
230
231 add_action( 'give_pre_process_give_forms_meta', 'give_set_donation_levels_max_min_amount', 30 );
232
233
234 /**
235 * Save donor address when donation complete
236 *
237 * @since 2.0
238 *
239 * @param int $payment_id
240 */
241 function _give_save_donor_billing_address( $payment_id ) {
242 $donor_id = absint( give_get_payment_donor_id( $payment_id ));
243
244 // Bailout
245 if ( ! $donor_id ) {
246 return;
247 }
248
249
250 /* @var Give_Donor $donor */
251 $donor = new Give_Donor( $donor_id );
252
253 // Save address.
254 $donor->add_address( 'billing[]', give_get_donation_address( $payment_id ) );
255 }
256
257 add_action( 'give_complete_donation', '_give_save_donor_billing_address', 9999 );
258
259
260 /**
261 * Update form id in payment logs
262 *
263 * @since 2.0
264 *
265 * @param array $args
266 */
267 function give_update_log_form_id( $args ) {
268 $new_form_id = absint( $args[0] );
269 $payment_id = absint( $args[1] );
270 $logs = Give()->logs->get_logs( $payment_id );
271
272 // Bailout.
273 if ( empty( $logs ) ) {
274 return;
275 }
276
277 /* @var object $log */
278 foreach ( $logs as $log ) {
279 Give()->logs->logmeta_db->update_meta( $log->ID, '_give_log_form_id', $new_form_id );
280 }
281
282 // Delete cache.
283 Give()->logs->delete_cache();
284 }
285
286 add_action( 'give_update_log_form_id', 'give_update_log_form_id' );
287
288 /**
289 * Verify addon dependency before addon update
290 *
291 * @since 2.1.4
292 *
293 * @param $error
294 * @param $hook_extra
295 *
296 * @return WP_Error
297 */
298 function __give_verify_addon_dependency_before_update( $error, $hook_extra ) {
299 // Bailout.
300 if (
301 is_wp_error( $error )
302 || ! array_key_exists( 'plugin', $hook_extra )
303 ) {
304 return $error;
305 }
306
307 $plugin_base = strtolower( $hook_extra['plugin'] );
308 $licensed_addon = array_map( 'strtolower', Give_License::get_licensed_addons() );
309
310 // Skip if not a Give addon.
311 if ( ! in_array( $plugin_base, $licensed_addon ) ) {
312 return $error;
313 }
314
315 // Load file.
316 if( ! class_exists( 'Give_Readme_Parser' ) ) {
317 require_once GIVE_PLUGIN_DIR . 'includes/class-give-readme-parser.php';
318 }
319
320 $plugin_base = strtolower( $plugin_base );
321 $plugin_slug = str_replace( '.php', '', basename( $plugin_base ) );
322
323 /**
324 * Filter the addon readme.txt url
325 *
326 * @since 2.1.4
327 */
328 $url = apply_filters(
329 'give_addon_readme_file_url',
330 "https://givewp.com/downloads/plugins/{$plugin_slug}/readme.txt",
331 $plugin_slug
332 );
333
334 $parser = new Give_Readme_Parser( $url );
335 $give_min_version = $parser->requires_at_least();
336
337
338 if ( version_compare( GIVE_VERSION, $give_min_version, '<' ) ) {
339 return new WP_Error(
340 'Give_Addon_Update_Error',
341 sprintf(
342 __( 'Give version %s is required to update this add-on.', 'give' ),
343 $give_min_version
344 )
345 );
346 }
347
348 return $error;
349 }
350
351 add_filter( 'upgrader_pre_install', '__give_verify_addon_dependency_before_update', 10, 2 );
352
353 /**
354 * Function to add suppress_filters param if WPML add-on is activated.
355 *
356 * @since 2.1.4
357 *
358 * @param array WP query argument for Total Goal.
359 *
360 * @return array WP query argument for Total Goal.
361 */
362 function __give_wpml_total_goal_shortcode_agrs( $args ) {
363 $args['suppress_filters'] = true;
364
365 return $args;
366 }
367
368 /**
369 * Function to remove WPML post where filter in goal total amount shortcode.
370 *
371 * @since 2.1.4
372 * @global SitePress $sitepress
373 */
374 function __give_remove_wpml_parse_query_filter() {
375 global $sitepress;
376 remove_action('parse_query', array($sitepress, 'parse_query'));
377 }
378
379
380 /**
381 * Function to add WPML post where filter in goal total amount shortcode.
382 *
383 * @since 2.1.4
384 * @global SitePress $sitepress
385 */
386 function __give_add_wpml_parse_query_filter() {
387 global $sitepress;
388 add_action('parse_query', array($sitepress, 'parse_query'));
389 }
390
391 /**
392 * Action all the hook that add support for WPML.
393 *
394 * @since 2.1.4
395 */
396 function give_add_support_for_wpml() {
397 if ( ! function_exists( 'is_plugin_active' ) ) {
398 include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
399 }
400
401
402 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
403
404 add_filter( 'give_totals_goal_shortcode_query_args', '__give_wpml_total_goal_shortcode_agrs' );
405
406 // @see https://wpml.org/forums/topic/problem-with-query-filter-in-get_posts-function/#post-271309
407 add_action( 'give_totals_goal_shortcode_before_render', '__give_remove_wpml_parse_query_filter', 99 );
408 add_action( 'give_totals_goal_shortcode_after_render', '__give_add_wpml_parse_query_filter', 99 );
409 }
410 }
411
412 add_action( 'give_init', 'give_add_support_for_wpml', 1000 );
413
414 /**
415 * Backward compatibility for email_access property
416 * Note: only for internal purpose
417 *
418 * @todo: Need to decide when to remove this backward compatibility.
419 * We decided to load Give()->email_access on for frontend but some of email tags is still using this. Since we have option to resend email in admin then
420 * this cause of fatal error because that property does not load in backend. This is a temporary solution to prevent fatal error when resend receipt.
421 * ref: https://github.com/impress-org/give/issues/4068
422 *
423 * @since 2.4.5
424 */
425 function give_set_email_access_property(){
426 if( ! ( Give()->email_access instanceof Give_Email_Access ) ){
427 require_once GIVE_PLUGIN_DIR . 'includes/class-give-email-access.php';
428 Give()->email_access = new Give_Email_Access();
429 }
430 }
431 add_action( 'give_email_links', 'give_set_email_access_property', -1 );
432 add_action( 'give_donation-receipt_email_notification', 'give_set_email_access_property', -1 );
433