PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.5.0
GiveWP – Donation Plugin and Fundraising Platform v2.5.0
4.16.3 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 / add-ons / actions.php
give / includes / admin / add-ons Last commit date
actions.php 6 years ago add-ons.php 6 years ago
actions.php
658 lines
1 <?php
2 /**
3 * Admin Add-ons Actions
4 *
5 * @package Give
6 * @subpackage Admin/Add-ons/Actions
7 * @copyright Copyright (c) 2019, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 2.5.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Ajax addon upload handler
19 *
20 * Note: only for internal use
21 *
22 * @since 2.5.0
23 */
24 function give_upload_addon_handler() {
25 /* @var WP_Filesystem_Direct $wp_filesystem */
26 global $wp_filesystem;
27
28 $addon_authors = array( 'WordImpress', 'GiveWP' );
29 $filename = basename( $_FILES['file']['name'], '.zip' );
30
31 check_admin_referer( 'give-upload-addon' );
32
33 // Bailout if user does not has permission.
34 if ( ! current_user_can( 'upload_plugins' ) ) {
35 wp_send_json_error( array( 'errorMsg' => __( 'Sorry, you are not allowed to upload add-ons on this site.', 'give' ) ) );
36 }
37
38 // Bailout if not upload file or not uploading Give addon
39 if ( empty( $_FILES ) || false === stripos( $filename, 'Give' ) ) {
40 wp_send_json_error( array( 'errorMsg' => __( 'Please upload a valid add-on file.', 'give' ) ) );
41 }
42
43 $access_type = get_filesystem_method();
44
45 if ( 'direct' !== $access_type ) {
46 wp_send_json_error(
47 array(
48 'errorMsg' => sprintf(
49 __( 'Sorry, you can not upload plugins because Give does not have direct access to the file system. Please <a href="%1$s" target="_blank">click here</a> to upload the add-on.', 'give' ),
50 admin_url( 'plugin-install.php?tab=upload' )
51 ),
52 )
53 );
54 }
55
56 $file_type = wp_check_filetype( $_FILES['file']['name'], array( 'zip' => 'application/zip' ) );
57
58 if ( empty( $file_type['ext'] ) ) {
59 wp_send_json_error( array( 'errorMsg' => __( 'Only zip file type allowed to upload. Please upload a valid add-on file.', 'give' ) ) );
60 }
61
62 $give_addons_list = give_get_plugins();
63 $is_addon_installed = array();
64
65 if ( ! empty( $give_addons_list ) ) {
66 foreach ( $give_addons_list as $addon => $give_addon ) {
67 // Only show Give Core Activated Add-Ons.
68 if ( ! in_array( $give_addon['AuthorName'], $addon_authors ) ) {
69 continue;
70 }
71
72 if ( false !== stripos( $addon, $filename ) ) {
73 $is_addon_installed = $give_addon;
74 }
75 }
76 }
77
78 // Bailout if addon already installed
79 if ( ! empty( $is_addon_installed ) ) {
80 wp_send_json_error( array(
81 'errorMsg' => __( 'This add-on is already installed.', 'give' ),
82 'pluginInfo' => $is_addon_installed,
83 ) );
84 }
85
86 $upload_status = wp_handle_upload( $_FILES['file'], array( 'test_form' => false ) );
87
88 // Bailout if has any upload error
89 if ( empty( $upload_status['file'] ) ) {
90 wp_send_json_error( $upload_status );
91 }
92
93 // @todo: check how wordpress verify plugin files before uploading to plugin directory
94
95 /* you can safely run request_filesystem_credentials() without any issues and don't need to worry about passing in a URL */
96 $creds = request_filesystem_credentials( site_url() . '/wp-admin/', '', false, false, array() );
97
98 /* initialize the API */
99 if ( ! WP_Filesystem( $creds ) ) {
100 /* any problems and we exit */
101 wp_send_json_error(array(
102 'errorMsg' => __( 'File system does not load correctly.', 'give' )
103 ));
104 }
105
106 $unzip_status = unzip_file( $upload_status['file'], $wp_filesystem->wp_plugins_dir() );
107
108 // Remove file.
109 @unlink( $upload_status['file'] );
110
111 // Bailout if not able to unzip file successfully
112 if ( is_wp_error( $unzip_status ) ) {
113 wp_send_json_error( array(
114 'errorMsg' => $unzip_status
115 ) );
116 }
117
118 // Delete cache and get current installed addon plugin path.
119 wp_cache_delete( 'plugins', 'plugins' );
120 $give_addons_list = get_plugins();
121 $installed_addon = array();
122
123 if ( ! empty( $give_addons_list ) ) {
124 foreach ( $give_addons_list as $addon => $give_addon ) {
125 // Only show Give Core Activated Add-Ons.
126 if ( ! in_array( $give_addon['AuthorName'], $addon_authors ) ) {
127 continue;
128 }
129
130 if ( false !== stripos( $addon, $filename ) ) {
131 $installed_addon = $give_addon;
132 $installed_addon['path'] = $addon;
133 }
134 }
135 }
136
137 wp_send_json_success( array(
138 'pluginPath' => $installed_addon['path'],
139 'pluginName' => $installed_addon['Name'],
140 'nonce' => wp_create_nonce( "give_activate-{$installed_addon['path']}" ),
141 'licenseSectionHtml' => Give_License::render_licenses_list(),
142 ) );
143 }
144
145 add_action( 'wp_ajax_give_upload_addon', 'give_upload_addon_handler' );
146
147 /**
148 * Ajax license inquiry handler
149 *
150 * Note: only for internal use
151 *
152 * @since 2.5.0
153 */
154 function give_get_license_info_handler() {
155 check_admin_referer( 'give-license-activator-nonce' );
156
157 // check user permission.
158 if ( ! current_user_can( 'manage_give_settings' ) ) {
159 give_die();
160 }
161
162 $license_key = ! empty( $_POST['license'] ) ? give_clean( $_POST['license'] ) : '';
163 $is_activating_single_license = ! empty( $_POST['single'] ) ? absint( $_POST['single'] ) : '';
164 $is_reactivating_license = ! empty( $_POST['reactivate'] ) ? absint( $_POST['reactivate'] ) : '';
165 $plugin_slug = $is_activating_single_license ? give_clean( $_POST['addon'] ) : '';
166 $licenses = get_option( 'give_licenses', array() );
167
168
169 if ( ! $license_key ) {
170 wp_send_json_error( array(
171 'errorMsg' => __( 'Sorry, you entered an invalid key.', 'give' ),
172 ) );
173
174 } else if (
175 ! $is_reactivating_license
176 && array_key_exists( $license_key, $licenses )
177 ) {
178 // If admin already activated license but did not install add-on then send license info show notice to admin with download link.
179 $license = $licenses[$license_key];
180 if( empty( $license['is_all_access_pass'] ) ) {
181 $plugin_data = Give_License::get_plugin_by_slug( $license['plugin_slug' ] );
182
183 // Plugin license activated but does not install, sent notice which allow admin to download add-on.
184 if( empty( $plugin_data ) ) {
185 wp_send_json_success( $license );
186 }
187 }
188
189 wp_send_json_error( array(
190 'errorMsg' => __( 'This license key is already in use on this website.', 'give' ),
191 ) );
192 }
193
194
195 // Check license.
196 $check_license_res = Give_License::request_license_api( array(
197 'edd_action' => 'check_license',
198 'license' => $license_key,
199 ), true );
200
201 // Make sure there are no errors.
202 if ( is_wp_error( $check_license_res ) ) {
203 wp_send_json_error( array(
204 'errorMsg' => $check_license_res->get_error_message(),
205 ) );
206 }
207
208 // Check if license valid or not.
209 if ( ! $check_license_res['success'] ) {
210 wp_send_json_error( array(
211 'errorMsg' => sprintf(
212 __( 'Sorry, this license was unable to activate because the license status returned as <code>%2$s</code>. Please visit your <a href="%1$s" target="_blank">license dashboard</a> to check the details and access priority support.' ),
213 Give_License::get_account_url(),
214 $check_license_res['license']
215 ),
216 ) );
217 }
218
219 if(
220 $is_activating_single_license
221 && ! empty( $check_license_res['plugin_slug'] )
222 && $plugin_slug !== $check_license_res['plugin_slug']
223 ) {
224 wp_send_json_error( array(
225 'errorMsg' => sprintf(
226 __( 'Sorry, we are unable to activate this license because this key does not belong to this add-on. Please visit your <a href="%1$s" target="_blank">license dashboard</a> to check the details and access priority support.' ),
227 Give_License::get_account_url()
228 ),
229 ) );
230 }
231
232 // Activate license.
233 $activate_license_res = Give_License::request_license_api( array(
234 'edd_action' => 'activate_license',
235 'item_name' => $check_license_res['item_name'],
236 'license' => $license_key,
237 ), true );
238
239 if ( is_wp_error( $activate_license_res ) ) {
240 wp_send_json_error( array(
241 'errorMsg' => $check_license_res->get_error_message(),
242 ) );
243 }
244
245 // Return error if license activation is not success and admin is not reactivating add-on.
246 if ( ! $is_reactivating_license && ! $activate_license_res['success'] ) {
247
248 $response['errorMsg'] = sprintf(
249 __( 'Sorry, this license was unable to activate because the license status returned as <code>%2$s</code>. Please visit your <a href="%1$s" target="_blank">license dashboard</a> to check the details and access priority support.' ),
250 Give_License::get_account_url(),
251 $check_license_res['license']
252 );
253
254 wp_send_json_error( $response );
255 }
256
257 $check_license_res['license'] = $activate_license_res['license'];
258 $check_license_res['site_count'] = $activate_license_res['site_count'];
259 $check_license_res['activations_left'] = $activate_license_res['activations_left'];
260
261 $licenses[ $check_license_res['license_key'] ] = $check_license_res;
262 update_option( 'give_licenses', $licenses );
263
264 // Get license section HTML.
265 $response = $check_license_res;
266 $response['html'] = $is_activating_single_license && empty( $check_license_res['is_all_access_pass'] )
267 ? Give_License::html_by_plugin( Give_License::get_plugin_by_slug( $check_license_res['plugin_slug'] ) )
268 : Give_License::render_licenses_list();
269
270 // Return error if license activation is not success and admin is reactivating add-on.
271 if ( $is_reactivating_license && ! $activate_license_res['success'] ) {
272
273 $response['errorMsg'] = sprintf(
274 __( 'Sorry, this license was unable to activate because the license status returned as <code>%2$s</code>. Please visit your <a href="%1$s" target="_blank">license dashboard</a> to check the details and access priority support.' ),
275 Give_License::get_account_url(),
276 $check_license_res['license']
277 );
278
279 wp_send_json_error( $response );
280 }
281
282
283 // Tell WordPress to look for updates.
284 give_refresh_licenses();
285
286 wp_send_json_success( $response );
287 }
288
289 add_action( 'wp_ajax_give_get_license_info', 'give_get_license_info_handler' );
290
291
292 /**
293 * Activate addon handler
294 *
295 * Note: only for internal use
296 *
297 * @since 2.5.0
298 */
299 function give_activate_addon_handler() {
300 $plugin_path = give_clean( $_POST['plugin'] );
301
302 check_admin_referer( "give_activate-{$plugin_path}" );
303
304 // check user permission.
305 if ( ! current_user_can( 'manage_give_settings' ) ) {
306 give_die();
307 }
308
309 $status = activate_plugin( $plugin_path );
310
311 if ( is_wp_error( $status ) ) {
312 wp_send_json_error( array( 'errorMsg' => $status->get_error_message() ) );
313 }
314
315 // Tell WordPress to look for updates.
316 give_refresh_licenses();
317
318 wp_send_json_success( array(
319 'licenseSectionHtml' => Give_License::render_licenses_list(),
320 ) );
321 }
322
323 add_action( 'wp_ajax_give_activate_addon', 'give_activate_addon_handler' );
324
325
326 /**
327 * deactivate addon handler
328 *
329 * Note: only for internal use
330 *
331 * @since 2.5.0
332 */
333 function give_deactivate_license_handler() {
334 $license = give_clean( $_POST['license'] );
335 $item_name = give_clean( $_POST['item_name'] );
336 $plugin_dirname = give_clean( $_POST['plugin_dirname'] );
337
338 if ( ! $license || ! $item_name ) {
339 wp_send_json_error();
340 }
341
342 check_admin_referer( "give-deactivate-license-{$item_name}" );
343
344 // check user permission.
345 if ( ! current_user_can( 'manage_give_settings' ) ) {
346 give_die();
347 }
348
349 $give_licenses = get_option( 'give_licenses', array() );
350
351 if ( empty( $give_licenses[ $license ] ) ) {
352 wp_send_json_error( array(
353 'errorMsg' => __( 'We are unable to deactivate invalid license', 'give' ),
354 )
355 );
356 }
357
358 /* @var array|WP_Error $response */
359 $response = Give_License::request_license_api( array(
360 'edd_action' => 'deactivate_license',
361 'license' => $license,
362 'item_name' => $item_name,
363 ), true );
364
365 if ( is_wp_error( $response ) ) {
366 wp_send_json_error( array(
367 'errorMsg' => $response->get_error_message(),
368 'response' => $license,
369 ) );
370 }
371
372 $is_all_access_pass = $give_licenses[ $license ]['is_all_access_pass'];
373
374 if ( ! empty( $give_licenses[ $license ] ) ) {
375 unset( $give_licenses[ $license ] );
376 update_option( 'give_licenses', $give_licenses );
377 }
378
379 $response['html'] = $is_all_access_pass
380 ? Give_License::render_licenses_list()
381 : Give_License::html_by_plugin( Give_License::get_plugin_by_slug( $plugin_dirname ) );
382
383 $response['msg'] = __( 'You have successfully deactivated the license.', 'give' );
384
385 // Tell WordPress to look for updates.
386 give_refresh_licenses();
387
388 wp_send_json_success( $response );
389 }
390
391 add_action( 'wp_ajax_give_deactivate_license', 'give_deactivate_license_handler' );
392
393
394 /**
395 * Refresh all addons licenses handler
396 *
397 * Note: only for internal use
398 *
399 * @since 2.5.0
400 */
401 function give_refresh_all_licenses_handler() {
402 check_admin_referer( 'give-refresh-all-licenses' );
403
404 // check user permission.
405 if ( ! current_user_can( 'manage_give_settings' ) ) {
406 give_die();
407 }
408
409 $data = Give_License::refresh_license_status();
410
411 // Update date and reset counter.
412 if ( $data['compare'] === date( 'Ymd' ) && 5 <= $data['count'] ) {
413 wp_send_json_error();
414 }
415
416 // Update date and reset counter.
417 if ( $data['compare'] < date( 'Ymd' ) ) {
418 $data['compare'] = date( 'Ymd' );
419 $data['count'] = 0;
420 }
421
422 // Update time.
423 $data['time'] = current_time( 'timestamp', 1 );
424
425 ++ $data['count'];
426
427 update_option( 'give_licenses_refreshed_last_checked', $data, 'no' );
428
429 give_refresh_licenses();
430
431 $local_date = strtotime( get_date_from_gmt( date( 'Y-m-d H:i:s', $data['time'] ) ) );
432 wp_send_json_success( array(
433 'html' => Give_License::render_licenses_list(),
434 'refreshButton' => 5 <= $data['count'],
435 'refreshStatus' => $data,
436 'lastUpdateMsg' => sprintf(
437 __( 'Last refreshed on %1$s at %2$s', 'give' ),
438 date( give_date_format(), $local_date ),
439 date( 'g:i a', $local_date )
440 ),
441 ) );
442 }
443
444 add_action( 'wp_ajax_give_refresh_all_licenses', 'give_refresh_all_licenses_handler' );
445
446
447 /**
448 * Updates information on the "View version x.x details" page with custom data.
449 * Note: only for internal use
450 *
451 * @param mixed $_data
452 * @param string $_action
453 * @param object $_args
454 *
455 * @return object $_data
456 * @since 2.5.0
457 * @uses api_request()
458 *
459 */
460 function give_plugins_api_filter( $_data, $_action = '', $_args = null ) {
461 // Exit.
462 if ( 'plugin_information' !== $_action ) {
463 return $_data;
464 }
465
466
467 $plugin = Give_License::get_plugin_by_slug( $_args->slug );
468
469 if (
470 ! $plugin
471 || 'add-on' !== $plugin['Type']
472 || false === strpos( $_args->slug, 'give-' )
473 ) {
474 return $_data;
475 }
476
477 $plugin_data = get_site_transient( 'update_plugins' );
478
479 if ( ! $plugin_data ) {
480 give_refresh_licenses();
481 }
482
483 $plugin_data = ! empty( $plugin_data->response[ $plugin['Path'] ] )
484 ? $plugin_data->response[ $plugin['Path'] ]
485 : array();
486
487 if ( ! $plugin_data ) {
488 return $_data;
489 }
490
491 $_data = $plugin_data;
492
493 return $_data;
494 }
495
496 add_filter( 'plugins_api', 'give_plugins_api_filter', 9999, 3 );
497
498
499 /**
500 * Check add-ons updates when WordPress check plugin updates
501 *
502 * @since 2.5.0
503 */
504 add_filter( 'pre_set_site_transient_update_plugins', 'give_check_addon_updates', 999, 1 );
505
506
507 /**
508 * Show plugin update notification on multi-site
509 *
510 * @param string $file
511 * @param array $plugin
512 *
513 * @since 2.5.0
514 */
515 function give_show_update_notification_on_multisite( $file, $plugin ) {
516 if ( is_network_admin() ) {
517 return;
518 }
519
520 if ( ! current_user_can( 'update_plugins' ) ) {
521 return;
522 }
523
524 if ( ! is_multisite() ) {
525 return;
526 }
527
528 if (
529 ! $plugin
530 || empty( $plugin['slug'] )
531 || false === strpos( $plugin['slug'], 'give-' )
532 ) {
533 return;
534 }
535
536 $plugin_data = Give_License::get_plugin_by_slug( $plugin['slug'] );
537
538 // Only show notices for Give add-ons
539 if ( 'add-on' !== $plugin_data['Type'] ) {
540 return;
541 }
542
543 // Do not print any message if updates does not exist.
544 $update_cache = get_site_transient( 'update_plugins' );
545
546 if( ! isset( $update_cache->response[$file] ) ) {
547 return;
548 }
549
550
551 if ( ! empty( $update_cache->response[ $plugin_data['Path'] ] ) && version_compare( $plugin_data['Version'], $plugin['new_version'], '<' ) ) {
552 printf(
553 '<tr class="plugin-update-tr %3$s" id="%1$s-update" data-slug="%1$s" data-plugin="%2$s">',
554 $plugin['slug'],
555 $file,
556 'active' === $plugin_data['Status'] ? 'active' : 'inactive'
557 );
558
559 echo '<td colspan="3" class="plugin-update colspanchange">';
560 echo '<div class="update-message notice inline notice-warning notice-alt"><p>';
561
562 $changelog_link = self_admin_url( "plugin-install.php?tab=plugin-information&plugin={$plugin['slug']}&section=changelog&TB_iframe=true&width=772&height=299" );
563
564 if ( empty( $plugin['download_link'] ) ) {
565 printf(
566 __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'give' ),
567 esc_html( $plugin_data['Name'] ),
568 '<a target="_blank" class="thickbox open-plugin-details-modal" href="' . esc_url( $changelog_link ) . '">',
569 esc_html( $plugin['new_version'] ),
570 '</a>'
571 );
572 } else {
573 printf(
574 __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'give' ),
575 esc_html( $plugin_data['Name'] ),
576 '<a target="_blank" class="thickbox open-plugin-details-modal" href="' . esc_url( $changelog_link ) . '">',
577 esc_html( $plugin['new_version'] ),
578 '</a>',
579 '<a target="_blank" class="update-link" href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ) ) . '">',
580 '</a>'
581 );
582 }
583
584 do_action( "in_plugin_update_message-{$file}", $plugin, $plugin );
585
586 echo '</p></div></td></tr>';
587 }
588 }
589
590 add_action( 'after_plugin_row', 'give_show_update_notification_on_multisite', 10, 2 );
591
592 /**
593 * Show plugin update notification on single site
594 *
595 * @param $file
596 * @param $plugin
597 *
598 * @since 2.5.0
599 */
600 function give_show_update_notification_on_single_site( $file, $plugin ) {
601 if ( ! current_user_can( 'update_plugins' ) || is_multisite() ) {
602 return;
603 }
604
605
606 if (
607 ! $plugin
608 || empty( $plugin['slug'] )
609 || false === strpos( $plugin['slug'], 'give-' )
610 ) {
611 return;
612 }
613
614 $plugin_data = Give_License::get_plugin_by_slug( $plugin['slug'] );
615
616 // Only show notices for Give add-ons
617 if (
618 'add-on' !== $plugin_data['Type']
619 || $plugin_data['License']
620 ) {
621 return;
622 }
623
624 // Do not print any message if updates does not exist.
625 $update_plugins = get_site_transient( 'update_plugins' );
626 if( ! isset( $update_plugins->response[$file] ) ) {
627 return;
628 }
629
630
631 // Remove core update notice.
632 remove_action( "after_plugin_row_{$file}", 'wp_plugin_update_row' );
633
634 $update_notice_wrap = '<tr class="plugin-update-tr %3$s"><td colspan="3" class="colspanchange"><div class="update-message notice inline notice-warning notice-alt give-invalid-license"><p>%1$s %2$s</p></div></td></tr>';
635 $changelog_link = self_admin_url( "plugin-install.php?tab=plugin-information&plugin={$plugin['slug']}&section=changelog&TB_iframe=true&width=772&height=299" );
636
637 echo sprintf(
638 $update_notice_wrap,
639 sprintf(
640 __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'give' ),
641 esc_html( $plugin_data['Name'] ),
642 '<a target="_blank" class="thickbox open-plugin-details-modal" href="' . esc_url( $changelog_link ) . '">',
643 esc_html( $plugin['new_version'] ),
644 '</a>'
645 ),
646 sprintf(
647 'Please <a href="%1$s" target="_blank">activate your license</a> to receive updates and support.',
648 esc_url( admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=licenses' ) )
649 ),
650 'active' === $plugin_data['Status'] ? 'active' : 'inactive'
651 );
652 }
653
654 add_action( 'after_plugin_row', 'give_show_update_notification_on_single_site', 1, 2 );
655
656
657
658