PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 19 hours ago api 3 years ago database 5 months ago deprecated 1 month ago donors 5 months ago emails 9 months ago forms 19 hours ago frontend 6 years ago gateways 9 months ago libraries 9 months ago payments 2 months ago actions.php 9 months ago ajax-functions.php 2 days ago class-give-async-process.php 1 year ago class-give-background-updater.php 9 months ago class-give-cache-setting.php 1 year ago class-give-cache.php 9 months ago class-give-cli-commands.php 1 year ago class-give-comment.php 9 months ago class-give-cron.php 9 months ago class-give-donate-form.php 1 year ago class-give-donor.php 2 years ago class-give-email-access.php 5 years ago class-give-license-handler.php 1 month ago class-give-logging.php 9 months ago class-give-readme-parser.php 4 years ago class-give-roles.php 5 months ago class-give-scripts.php 2 weeks ago class-give-session.php 9 months ago class-give-stats.php 6 years ago class-give-template-loader.php 6 years ago class-give-tooltips.php 6 years ago class-give-translation.php 4 years ago class-notices.php 9 months ago country-functions.php 7 months ago currencies-list.php 7 months ago currency-functions.php 3 years ago error-tracking.php 6 years ago filters.php 9 months ago formatting.php 9 months ago install.php 9 months ago login-register.php 2 years ago misc-functions.php 1 month ago plugin-compatibility.php 6 years ago post-types.php 1 year ago price-functions.php 6 years ago process-donation.php 1 year ago setting-functions.php 6 years ago shortcodes.php 1 year ago template-functions.php 1 year ago user-functions.php 3 years ago
actions.php
358 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 /**
19 * Look for Give core add-ons update after every third day
20 *
21 * @since 2.5.11
22 */
23 Give_Cron::add_thricely_event( 'give_refresh_licenses' );
24
25 /**
26 * Hooks Give actions, when present in the $_GET superglobal. Every give_action
27 * present in $_GET is called using WordPress's do_action function. These
28 * functions are called on init.
29 *
30 * @since 1.0
31 *
32 * @return void
33 */
34 function give_get_actions() {
35
36 $get_data = give_clean( $_GET ); // WPCS: input var ok, sanitization ok, CSRF ok.
37
38 $_get_action = ! empty( $get_data['give_action'] ) ? $get_data['give_action'] : null;
39
40 // Add backward compatibility to give-action param ( $_GET ).
41 if ( empty( $_get_action ) ) {
42 $_get_action = ! empty( $get_data['give-action'] ) ? $get_data['give-action'] : null;
43 }
44
45 if ( isset( $_get_action ) ) {
46 /**
47 * Fires in WordPress init or admin init, when give_action is present in $_GET.
48 *
49 * @since 1.0
50 *
51 * @param array $_GET Array of HTTP GET variables.
52 */
53 do_action( "give_{$_get_action}", $get_data );
54 }
55
56 }
57
58 add_action( 'init', 'give_get_actions' );
59
60 /**
61 * Hooks Give actions, when present in the $_POST super global. Every give_action
62 * present in $_POST is called using WordPress's do_action function. These
63 * functions are called on init.
64 *
65 * @since 1.0
66 *
67 * @return void
68 */
69 function give_post_actions() {
70
71 $post_data = give_clean( $_POST ); // WPCS: input var ok, sanitization ok, CSRF ok.
72
73 $_post_action = ! empty( $post_data['give_action'] ) ? $post_data['give_action'] : null;
74
75 // Add backward compatibility to give-action param ( $_POST ).
76 if ( empty( $_post_action ) ) {
77 $_post_action = ! empty( $post_data['give-action'] ) ? $post_data['give-action'] : null;
78 }
79
80 if ( isset( $_post_action ) ) {
81 /**
82 * Fires in WordPress init or admin init, when give_action is present in $_POST.
83 *
84 * @since 1.0
85 *
86 * @param array $_POST Array of HTTP POST variables.
87 */
88 do_action( "give_{$_post_action}", $post_data );
89 }
90
91 }
92
93 add_action( 'init', 'give_post_actions' );
94
95 /**
96 * Connect WordPress user with Donor.
97 *
98 * @param int $user_id User ID.
99 * @param array $user_data User Data.
100 *
101 * @since 1.7
102 *
103 * @return void
104 */
105 function give_connect_donor_to_wpuser( $user_id, $user_data ) {
106 /* @var Give_Donor $donor */
107 $donor = new Give_Donor( $user_data['user_email'] );
108
109 // Validate donor id and check if do nor is already connect to wp user or not.
110 if ( $donor->id && ! $donor->user_id ) {
111
112 // Update donor user_id.
113 if ( $donor->update( [ 'user_id' => $user_id ] ) ) {
114 $donor_note = sprintf( esc_html__( 'WordPress user #%1$d is connected to #%2$d', 'give' ), $user_id, $donor->id );
115 $donor->add_note( $donor_note );
116
117 // Update user_id meta in payments.
118 // if( ! empty( $donor->payment_ids ) && ( $donations = explode( ',', $donor->payment_ids ) ) ) {
119 // foreach ( $donations as $donation ) {
120 // give_update_meta( $donation, '_give_payment_user_id', $user_id );
121 // }
122 // }
123 // Do not need to update user_id in payment because we will get user id from donor id now.
124 }
125 }
126 }
127
128 add_action( 'give_insert_user', 'give_connect_donor_to_wpuser', 10, 2 );
129
130
131 /**
132 * Processing after donor batch export complete
133 *
134 * @since 1.8
135 *
136 * @param $data
137 */
138 function give_donor_batch_export_complete( $data ) {
139 // Remove donor ids cache.
140 if (
141 isset( $data['class'] )
142 && 'Give_Batch_Donors_Export' === $data['class']
143 && ! empty( $data['forms'] )
144 && isset( $data['give_export_option']['query_id'] )
145 ) {
146 Give_Cache::delete( Give_Cache::get_key( $data['give_export_option']['query_id'] ) );
147 }
148 }
149
150 add_action( 'give_file_export_complete', 'give_donor_batch_export_complete' );
151
152
153 /**
154 * Set Donation Amount for Multi Level Donation Forms
155 *
156 * @param int $form_id Donation Form ID.
157 *
158 * @since 1.8.9
159 *
160 * @return void
161 */
162 function give_set_donation_levels_max_min_amount( $form_id ) {
163 if (
164 ( 'set' === $_POST['_give_price_option'] ) ||
165 ( in_array( '_give_donation_levels', $_POST ) && count( $_POST['_give_donation_levels'] ) <= 0 ) ||
166 ! ( $donation_levels_amounts = wp_list_pluck( $_POST['_give_donation_levels'], '_give_amount' ) )
167 ) {
168 // Delete old meta.
169 give_delete_meta( $form_id, '_give_levels_minimum_amount' );
170 give_delete_meta( $form_id, '_give_levels_maximum_amount' );
171
172 return;
173 }
174
175 // Sanitize donation level amounts.
176 $donation_levels_amounts = array_map( 'give_maybe_sanitize_amount', $donation_levels_amounts );
177
178 $min_amount = min( $donation_levels_amounts );
179 $max_amount = max( $donation_levels_amounts );
180
181 // Set Minimum and Maximum amount for Multi Level Donation Forms.
182 give_update_meta( $form_id, '_give_levels_minimum_amount', $min_amount ? give_sanitize_amount_for_db( $min_amount ) : 0 );
183 give_update_meta( $form_id, '_give_levels_maximum_amount', $max_amount ? give_sanitize_amount_for_db( $max_amount ) : 0 );
184 }
185
186 add_action( 'give_pre_process_give_forms_meta', 'give_set_donation_levels_max_min_amount', 30 );
187
188
189 /**
190 * Save donor address when donation complete
191 *
192 * @since 2.0
193 *
194 * @param int $payment_id
195 */
196 function _give_save_donor_billing_address( $payment_id ) {
197 $donor_id = absint( give_get_payment_donor_id( $payment_id ) );
198
199 // Bailout
200 if ( ! $donor_id ) {
201 return;
202 }
203
204 /* @var Give_Donor $donor */
205 $donor = new Give_Donor( $donor_id );
206
207 // Save address.
208 $donor->add_address( 'billing[]', give_get_donation_address( $payment_id ) );
209 }
210
211 add_action( 'give_complete_donation', '_give_save_donor_billing_address', 9999 );
212
213 /**
214 * Verify addon dependency before addon update
215 *
216 * @since 4.9.0 rename function - PHP 8 compatibility
217 * @since 4.1.0 add bailout for GiveWP to protect it from licensing issues
218 * @since 2.1.4
219 *
220 * @param $error
221 * @param $hook_extra
222 *
223 * @return WP_Error
224 */
225 function give_verify_addon_dependency_before_update( $error, $hook_extra ) {
226 // Bailout.
227 if (
228 is_wp_error( $error )
229 || ! array_key_exists( 'plugin', $hook_extra )
230 ) {
231 return $error;
232 }
233
234 // If the plugin is GiveWP then bypass the License check altogether. If there's a problem with licensing it's
235 // important that we can always upgrade GiveWP.
236 $plugin_base = strtolower( $hook_extra['plugin'] );
237 if ( GIVE_PLUGIN_BASENAME === $plugin_base ) {
238 return $error;
239 }
240
241 $licensed_addon = array_map( 'strtolower', Give_License::get_licensed_addons() );
242
243 // Skip if not a Give addon.
244 if ( ! in_array( $plugin_base, $licensed_addon ) ) {
245 return $error;
246 }
247
248 // Load file.
249 if ( ! class_exists( 'Give_Readme_Parser' ) ) {
250 require_once GIVE_PLUGIN_DIR . 'includes/class-give-readme-parser.php';
251 }
252
253 $plugin_base = strtolower( $plugin_base );
254 $plugin_slug = str_replace( '.php', '', basename( $plugin_base ) );
255
256 $url = give_get_addon_readme_url( $plugin_slug );
257
258 $parser = new Give_Readme_Parser( $url );
259 $give_min_version = $parser->requires_at_least();
260
261 if ( version_compare( GIVE_VERSION, $give_min_version, '<' ) ) {
262 return new WP_Error(
263 'Give_Addon_Update_Error',
264 sprintf(
265 __( 'GiveWP version %s is required to update this add-on.', 'give' ),
266 $give_min_version
267 )
268 );
269 }
270
271 return $error;
272 }
273
274 add_filter( 'upgrader_pre_install', 'give_verify_addon_dependency_before_update', 10, 2 );
275
276 /**
277 * Function to add suppress_filters param if WPML add-on is activated.
278 *
279 * @since 4.9.0 rename function - PHP 8 compatibility
280 * @since 2.1.4
281 *
282 * @param array WP query argument for Total Goal.
283 *
284 * @return array WP query argument for Total Goal.
285 */
286 function give_wpml_total_goal_shortcode_agrs( $args ) {
287 $args['suppress_filters'] = true;
288
289 return $args;
290 }
291
292 /**
293 * Function to remove WPML post where filter in goal total amount shortcode.
294 *
295 * @since 4.9.0 rename function - PHP 8 compatibility
296 * @since 2.1.4
297 * @global SitePress $sitepress
298 */
299 function give_remove_wpml_parse_query_filter() {
300 global $sitepress;
301 remove_action( 'parse_query', [ $sitepress, 'parse_query' ] );
302 }
303
304
305 /**
306 * Function to add WPML post where filter in goal total amount shortcode.
307 *
308 * @since 4.9.0 rename function - PHP 8 compatibility
309 * @since 2.1.4
310 * @global SitePress $sitepress
311 */
312 function give_add_wpml_parse_query_filter() {
313 global $sitepress;
314 add_action( 'parse_query', [ $sitepress, 'parse_query' ] );
315 }
316
317 /**
318 * Action all the hook that add support for WPML.
319 *
320 * @since 2.1.4
321 */
322 function give_add_support_for_wpml() {
323 if ( ! function_exists( 'is_plugin_active' ) ) {
324 include_once ABSPATH . 'wp-admin/includes/plugin.php';
325 }
326
327 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
328
329 add_filter( 'give_totals_goal_shortcode_query_args', 'give_wpml_total_goal_shortcode_agrs');
330
331 // @see https://wpml.org/forums/topic/problem-with-query-filter-in-get_posts-function/#post-271309
332 add_action( 'give_totals_goal_shortcode_before_render', 'give_remove_wpml_parse_query_filter', 99 );
333 add_action( 'give_totals_goal_shortcode_after_render', 'give_add_wpml_parse_query_filter', 99 );
334 }
335 }
336
337 add_action( 'give_init', 'give_add_support_for_wpml', 1000 );
338
339 /**
340 * Backward compatibility for email_access property
341 * Note: only for internal purpose
342 *
343 * @todo: Need to decide when to remove this backward compatibility.
344 * 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
345 * 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.
346 * ref: https://github.com/impress-org/give/issues/4068
347 *
348 * @since 2.4.5
349 */
350 function give_set_email_access_property() {
351 if ( ! ( Give()->email_access instanceof Give_Email_Access ) ) {
352 require_once GIVE_PLUGIN_DIR . 'includes/class-give-email-access.php';
353 Give()->email_access = new Give_Email_Access();
354 }
355 }
356 add_action( 'give_email_links', 'give_set_email_access_property', -1 );
357 add_action( 'give_donation-receipt_email_notification', 'give_set_email_access_property', -1 );
358