PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 2.0.0
GiveWP – Donation Plugin and Fundraising Platform v2.0.0
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 All 253 releases
← All changes | includes/admin/plugins.php +16 -554 2.3.12.0.0 View file →
@@ -3,9 +3,9 @@
3 3 * Admin Plugins
4 4 *
5 5 * @package Give
6 6 * @subpackage Admin/Plugins
7 - * @copyright Copyright (c) 2016, GiveWP
7 + * @copyright Copyright (c) 2016, WordImpress
8 8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 9 * @since 1.4
10 10 */
11 11
@@ -42,15 +42,15 @@
42 42 * Plugin row meta links
43 43 *
44 44 * @since 1.4
45 45 *
46 - * @param array $plugin_meta An array of the plugin's metadata.
46 + * @param array $plugin_meta An array of the plugin's metadata.
47 47 * @param string $plugin_file Path to the plugin file, relative to the plugins directory.
48 48 *
49 49 * @return array
50 50 */
51 51 function give_plugin_row_meta( $plugin_meta, $plugin_file ) {
52 - if ( GIVE_PLUGIN_BASENAME !== $plugin_file ) {
52 + if ( $plugin_file != GIVE_PLUGIN_BASENAME ) {
53 53 return $plugin_meta;
54 54 }
55 55
56 56 $new_meta_links = array(
@@ -55,29 +55,23 @@
55 55
56 56 $new_meta_links = array(
57 57 sprintf(
58 58 '<a href="%1$s" target="_blank">%2$s</a>',
59 - esc_url(
60 - add_query_arg(
61 - array(
62 - 'utm_source' => 'plugins-page',
63 - 'utm_medium' => 'plugin-row',
64 - 'utm_campaign' => 'admin',
65 - ), 'https://givewp.com/documentation/'
66 - )
59 + esc_url( add_query_arg( array(
60 + 'utm_source' => 'plugins-page',
61 + 'utm_medium' => 'plugin-row',
62 + 'utm_campaign' => 'admin',
63 + ), 'https://givewp.com/documentation/' )
67 64 ),
68 65 __( 'Documentation', 'give' )
69 66 ),
70 67 sprintf(
71 68 '<a href="%1$s" target="_blank">%2$s</a>',
72 - esc_url(
73 - add_query_arg(
74 - array(
75 - 'utm_source' => 'plugins-page',
76 - 'utm_medium' => 'plugin-row',
77 - 'utm_campaign' => 'admin',
78 - ), 'https://givewp.com/addons/'
79 - )
69 + esc_url( add_query_arg( array(
70 + 'utm_source' => 'plugins-page',
71 + 'utm_medium' => 'plugin-row',
72 + 'utm_campaign' => 'admin',
73 + ), 'https://givewp.com/addons/' )
80 74 ),
81 75 __( 'Add-ons', 'give' )
82 76 ),
83 77 );
@@ -93,9 +87,9 @@
93 87 * Based on get_admin_page_title WordPress Function.
94 88 *
95 89 * @since 1.8.17
96 90 *
97 - * @global array $submenu
91 + * @global array $submenu
98 92 * @global string $plugin_page
99 93 *
100 94 * @return string $title Page title
101 95 */
@@ -103,14 +97,14 @@
103 97 $title = '';
104 98 global $submenu, $plugin_page;
105 99
106 100 foreach ( array_keys( $submenu ) as $parent ) {
107 - if ( 'edit.php?post_type=give_forms' !== $parent ) {
101 + if( 'edit.php?post_type=give_forms' !== $parent ) {
108 102 continue;
109 103 }
110 104
111 105 foreach ( $submenu[ $parent ] as $submenu_array ) {
112 - if ( $plugin_page !== $submenu_array[2] ) {
106 + if( $plugin_page !== $submenu_array[2] ){
113 107 continue;
114 108 }
115 109
116 110 $title = isset( $submenu_array[0] ) ?
@@ -120,536 +114,4 @@
120 114 }
121 115
122 116 return $title;
123 117 }
124 -
125 -/**
126 - * Store recently activated Give's addons to wp options.
127 - *
128 - * @since 2.1.0
129 - */
130 -function give_recently_activated_addons() {
131 - // Check if action is set.
132 - if ( isset( $_REQUEST['action'] ) ) {
133 - $plugin_action = ( '-1' !== $_REQUEST['action'] ) ? $_REQUEST['action'] : ( isset( $_REQUEST['action2'] ) ? $_REQUEST['action2'] : '' );
134 - $plugins = array();
135 -
136 - switch ( $plugin_action ) {
137 - case 'activate': // Single add-on activation.
138 - $plugins[] = $_REQUEST['plugin'];
139 - break;
140 - case 'activate-selected': // If multiple add-ons activated.
141 - $plugins = $_REQUEST['checked'];
142 - break;
143 - }
144 -
145 -
146 - if ( ! empty( $plugins ) ) {
147 -
148 - $give_addons = give_get_recently_activated_addons();
149 -
150 - foreach ( $plugins as $plugin ) {
151 - // Get plugins which has 'Give-' as prefix.
152 - if ( stripos( $plugin, 'Give-' ) !== false ) {
153 - $give_addons[] = $plugin;
154 - }
155 - }
156 -
157 - if ( ! empty( $give_addons ) ) {
158 - // Update the Give's activated add-ons.
159 - update_option( 'give_recently_activated_addons', $give_addons, false );
160 - }
161 - }
162 - }
163 -}
164 -
165 -// Add add-on plugins to wp option table.
166 -add_action( 'activated_plugin', 'give_recently_activated_addons', 10 );
167 -
168 -/**
169 - * Create new menu in plugin section that include all the add-on
170 - *
171 - * @since 2.1.0
172 - *
173 - * @param $plugin_menu
174 - *
175 - * @return mixed
176 - */
177 -function give_filter_addons_do_filter_addons( $plugin_menu ) {
178 - global $plugins;
179 -
180 - foreach ( $plugins['all'] as $plugin_slug => $plugin_data ) {
181 -
182 - if ( false !== strpos( $plugin_data['Name'], 'Give' ) && ( false !== strpos( $plugin_data['AuthorName'], 'WordImpress' ) || false !== strpos( $plugin_data['AuthorName'], 'GiveWP' ) ) ) {
183 - $plugins['give'][ $plugin_slug ] = $plugins['all'][ $plugin_slug ];
184 - $plugins['give'][ $plugin_slug ]['plugin'] = $plugin_slug;
185 - // replicate the next step.
186 - if ( current_user_can( 'update_plugins' ) ) {
187 - $current = get_site_transient( 'update_plugins' );
188 - if ( isset( $current->response[ $plugin_slug ] ) ) {
189 - $plugins['give'][ $plugin_slug ]['update'] = true;
190 - }
191 - }
192 - }
193 - }
194 -
195 - return $plugin_menu;
196 -
197 -}
198 -
199 -add_filter( 'show_advanced_plugins', 'give_filter_addons_do_filter_addons' );
200 -add_filter( 'show_network_active_plugins', 'give_filter_addons_do_filter_addons' );
201 -
202 -/**
203 - * Keep activating the same add-on when admin activate or deactivate from Give Menu
204 - *
205 - * @since 2.2.0
206 - *
207 - * @param $action
208 - * @param $result
209 - */
210 -function give_prepare_filter_addons_referer( $action, $result ) {
211 - if ( ! function_exists( 'get_current_screen' ) ) {
212 - return;
213 - }
214 - $screen = get_current_screen();
215 - if ( is_object( $screen ) && $screen->base === 'plugins' && ! empty( $_REQUEST['plugin_status'] ) && $_REQUEST['plugin_status'] === 'give' ) {
216 - global $status;
217 - $status = 'give';
218 - }
219 -}
220 -
221 -add_action( 'check_admin_referer', 'give_prepare_filter_addons_referer', 10, 2 );
222 -
223 -/**
224 - * Make the Give Menu as an default menu and update the Menu Name
225 - *
226 - * @since 2.1.0
227 - *
228 - * @param $views
229 - *
230 - * @return mixed
231 - */
232 -function give_filter_addons_filter_addons( $views ) {
233 -
234 - global $status, $plugins;
235 -
236 - if ( ! empty( $plugins['give'] ) ) {
237 - $class = '';
238 -
239 - if ( 'give' === $status ) {
240 - $class = 'current';
241 - }
242 -
243 - $views['give'] = sprintf(
244 - '<a class="%s" href="plugins.php?plugin_status=give"> %s <span class="count">(%s) </span></a>',
245 - $class,
246 - __( 'Give', 'give' ),
247 - count( $plugins['give'] )
248 - );
249 - }
250 -
251 - return $views;
252 -}
253 -
254 -add_filter( 'views_plugins', 'give_filter_addons_filter_addons' );
255 -add_filter( 'views_plugins-network', 'give_filter_addons_filter_addons' );
256 -
257 -/**
258 - * Set the Give as the Main menu when admin click on the Give Menu in Plugin section.
259 - *
260 - * @since 2.1.0
261 - *
262 - * @param $plugins
263 - *
264 - * @return mixed
265 - */
266 -function give_prepare_filter_addons( $plugins ) {
267 - global $status;
268 -
269 - if ( isset( $_REQUEST['plugin_status'] ) && 'give' === $_REQUEST['plugin_status'] ) {
270 - $status = 'give';
271 - }
272 -
273 - return $plugins;
274 -}
275 -
276 -add_filter( 'all_plugins', 'give_prepare_filter_addons' );
277 -
278 -
279 -/**
280 - * Display the upgrade notice message.
281 - *
282 - * @param array $data Array of plugin metadata.
283 - * @param array $response An array of metadata about the available plugin update.
284 - *
285 - * @since 2.1
286 - */
287 -function give_in_plugin_update_message( $data, $response ) {
288 - $new_version = $data['new_version'];
289 - $current_version_parts = explode( '.', GIVE_VERSION );
290 - $new_version_parts = explode( '.', $new_version );
291 -
292 - // If it is a minor upgrade then return.
293 - if ( version_compare( $current_version_parts[0] . '.' . $current_version_parts[1], $new_version_parts[0] . '.' . $new_version_parts[1], '=' ) ) {
294 -
295 - return;
296 - }
297 -
298 - // Get the upgrade notice from the trunk.
299 - $upgrade_notice = give_get_plugin_upgrade_notice( $new_version );
300 -
301 - // Display upgrade notice.
302 - echo apply_filters( 'give_in_plugin_update_message', $upgrade_notice ? '</p>' . wp_kses_post( $upgrade_notice ) . '<p class="dummy">' : '' );
303 -}
304 -
305 -// Display upgrade notice.
306 -add_action( 'in_plugin_update_message-' . GIVE_PLUGIN_BASENAME, 'give_in_plugin_update_message', 10, 2 );
307 -
308 -
309 -/**
310 - * Get the upgrade notice from WordPress.org.
311 - *
312 - * Note: internal purpose use only
313 - *
314 - * @since 2.1
315 - *
316 - * @param string $new_version New verison of the plugin.
317 - *
318 - * @return string
319 - */
320 -function give_get_plugin_upgrade_notice( $new_version ) {
321 -
322 - // Cache the upgrade notice.
323 - $transient_name = "give_upgrade_notice_{$new_version}";
324 - $upgrade_notice = get_transient( $transient_name );
325 -
326 - if ( false === $upgrade_notice ) {
327 - $response = wp_safe_remote_get( 'https://plugins.svn.wordpress.org/give/trunk/readme.txt' );
328 -
329 - if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
330 - $upgrade_notice = give_parse_plugin_update_notice( $response['body'], $new_version );
331 - set_transient( $transient_name, $upgrade_notice, DAY_IN_SECONDS );
332 - }
333 - }
334 -
335 - return $upgrade_notice;
336 -}
337 -
338 -
339 -/**
340 - * Parse update notice from readme file.
341 - *
342 - * Note: internal purpose use only
343 - *
344 - * @since 2.1
345 - *
346 - * @param string $content Content of the readme.txt file.
347 - * @param string $new_version The version with current version is compared.
348 - *
349 - * @return string
350 - */
351 -function give_parse_plugin_update_notice( $content, $new_version ) {
352 - $version_parts = explode( '.', $new_version );
353 - $check_for_notices = array(
354 - $version_parts[0] . '.0',
355 - $version_parts[0] . '.0.0',
356 - $version_parts[0] . '.' . $version_parts[1] . '.' . '0',
357 - );
358 -
359 - // Regex to extract Upgrade notice from the readme.txt file.
360 - $notice_regexp = '~==\s*Upgrade Notice\s*==\s*=\s*(.*)\s*=(.*)(=\s*' . preg_quote( $new_version ) . '\s*=|$)~Uis';
361 -
362 - $upgrade_notice = '';
363 -
364 - foreach ( $check_for_notices as $check_version ) {
365 - if ( version_compare( GIVE_VERSION, $check_version, '>' ) ) {
366 - continue;
367 - }
368 -
369 - $matches = null;
370 -
371 - if ( preg_match( $notice_regexp, $content, $matches ) ) {
372 - $notices = (array) preg_split( '~[\r\n]+~', trim( $matches[2] ) );
373 -
374 - if ( version_compare( trim( $matches[1] ), $check_version, '=' ) ) {
375 - $upgrade_notice .= '<p class="give-plugin-upgrade-notice">';
376 -
377 - foreach ( $notices as $index => $line ) {
378 - $upgrade_notice .= preg_replace( '~\[([^\]]*)\]\(([^\)]*)\)~', '<a href="${2}">${1}</a>', $line );
379 - }
380 -
381 - $upgrade_notice .= '</p>';
382 - }
383 -
384 - if ( ! empty( $upgrade_notice ) ) {
385 - break;
386 - }
387 - }
388 - }
389 -
390 - return wp_kses_post( $upgrade_notice );
391 -}
392 -
393 -
394 -/**
395 - * Add styling to the plugin upgrade notice.
396 - *
397 - * @since 2.1
398 - */
399 -function give_plugin_notice_css() {
400 - ?>
401 - <style type="text/css">
402 - #give-update .give-plugin-upgrade-notice {
403 - font-weight: 400;
404 - background: #fff8e5 !important;
405 - border-left: 4px solid #ffb900;
406 - border-top: 1px solid #ffb900;
407 - padding: 9px 0 9px 12px !important;
408 - margin: 0 -12px 0 -16px !important;
409 - }
410 -
411 - #give-update .give-plugin-upgrade-notice:before {
412 - content: '\f348';
413 - display: inline-block;
414 - font: 400 18px/1 dashicons;
415 - speak: none;
416 - margin: 0 8px 0 -2px;
417 - vertical-align: top;
418 - }
419 -
420 - #give-update .dummy {
421 - display: none;
422 - }
423 - </style>
424 - <?php
425 -}
426 -
427 -add_action( 'admin_head', 'give_plugin_notice_css' );
428 -
429 -/**
430 - * Get list of add-on last activated.
431 - *
432 - * @since 2.1.3
433 - *
434 - * @return mixed|array list of recently activated add-on
435 - */
436 -function give_get_recently_activated_addons() {
437 - return get_option( 'give_recently_activated_addons', array() );
438 -}
439 -
440 -/**
441 - * Renders the Give Deactivation Survey Form.
442 - * Note: only for internal use
443 - *
444 - * @since 2.2
445 - */
446 -function give_deactivation_popup() {
447 - // Bailout.
448 - if ( ! current_user_can( 'delete_plugins' ) ) {
449 - give_die();
450 - }
451 -
452 - $results = array();
453 -
454 - // Start output buffering.
455 - ob_start();
456 - ?>
457 -
458 - <h2 id="deactivation-survey-title">
459 - <img src="<?php echo esc_url( GIVE_PLUGIN_URL ) ?>/assets/dist/images/give-icon-full-circle.svg">
460 - <span><?php esc_html_e( 'Give Deactivation', 'give' ); ?></span>
461 - </h2>
462 - <form class="deactivation-survey-form" method="POST">
463 - <p><?php esc_html_e( 'If you have a moment, please let us know why you are deactivating Give. All submissions are anonymous and we only use this feedback to improve this plugin.', 'give' ); ?></p>
464 -
465 - <div>
466 - <label class="give-field-description">
467 - <input type="radio" name="give-survey-radios" value="1">
468 - <?php esc_html_e( "I'm only deactivating temporarily", 'give' ); ?>
469 - </label>
470 - </div>
471 -
472 - <div>
473 - <label class="give-field-description">
474 - <input type="radio" name="give-survey-radios" value="2">
475 - <?php esc_html_e( 'I no longer need the plugin', 'give' ); ?>
476 - </label>
477 - </div>
478 -
479 - <div>
480 - <label class="give-field-description">
481 - <input type="radio" name="give-survey-radios" value="3" data-has-field="true">
482 - <?php esc_html_e( 'I found a better plugin', 'give' ); ?>
483 - </label>
484 -
485 - <div class="give-survey-extra-field">
486 - <p><?php esc_html_e( 'What is the name of the plugin?', 'give' ); ?></p>
487 - <input type="text" name="user-reason" class="widefat">
488 - </div>
489 - </div>
490 -
491 - <div>
492 - <label class="give-field-description">
493 - <input type="radio" name="give-survey-radios" value="4">
494 - <?php esc_html_e( 'I only needed the plugin for a short period', 'give' ); ?>
495 - </label>
496 - </div>
497 -
498 - <div>
499 - <label class="give-field-description">
500 - <input type="radio" name="give-survey-radios" value="5" data-has-field="true">
501 - <?php esc_html_e( 'The plugin broke my site', 'give' ); ?>
502 - </label>
503 -
504 - <div class="give-survey-extra-field">
505 - <p><?php
506 - printf(
507 - '%1$s %2$s %3$s',
508 - __( "We're sorry to hear that, check", 'give' ),
509 - '<a href="https://wordpress.org/support/plugin/give">Give Support</a>.',
510 - __( 'Can you describe the issue?', 'give' )
511 - );
512 - ?>
513 - </p>
514 - <textarea disabled name="user-reason" class="widefat" rows="6"></textarea disabled>
515 - </div>
516 - </div>
517 -
518 - <div>
519 - <label class="give-field-description">
520 - <input type="radio" name="give-survey-radios" value="6" data-has-field="true">
521 - <?php esc_html_e( 'The plugin suddenly stopped working', 'give' ); ?>
522 - </label>
523 -
524 - <div class="give-survey-extra-field">
525 - <p><?php
526 - printf(
527 - '%1$s %2$s %3$s',
528 - __( "We're sorry to hear that, check", 'give' ),
529 - '<a href="https://wordpress.org/support/plugin/give">Give Support</a>.',
530 - __( 'Can you describe the issue?', 'give' )
531 - );
532 - ?>
533 - </p>
534 - <textarea disabled name="user-reason" class="widefat" rows="6"></textarea disabled>
535 - </div>
536 - </div>
537 -
538 - <div>
539 - <label class="give-field-description">
540 - <input type="radio" name="give-survey-radios" value="7" data-has-field="true">
541 - <?php esc_html_e( 'Other', 'give' ); ?>
542 - </label>
543 -
544 - <div class="give-survey-extra-field">
545 - <p><?php esc_html_e( "Please describe why you're deactivating Give", 'give' ); ?></p>
546 - <textarea disabled name="user-reason" class="widefat" rows="6"></textarea disabled>
547 - </div>
548 - </div>
549 -
550 - <div id="survey-and-delete-data">
551 - <p>
552 - <label>
553 - <input type="checkbox" name="confirm_reset_store" value="1">
554 - <?php esc_html_e( 'Would you like to delete all Give data?', 'give' ); ?>
555 - </label>
556 - <section class="give-field-description">
557 - <?php esc_html_e( 'By default the custom roles, Give options, and database entries are not deleted when you deactivate Give. If you are deleting Give completely from your website and want those items removed as well check this option. Note: This will permanently delete all Give data from your database.', 'give' ); ?>
558 - </section>
559 - </p>
560 - </div>
561 - <?php
562 - $current_user = wp_get_current_user();
563 - $current_user_email = $current_user->user_email;
564 - ?>
565 - <input type="hidden" name="current-user-email" value="<?php echo $current_user_email; ?>">
566 - <input type="hidden" name="current-site-url" value="<?php echo esc_url( get_bloginfo( 'url' ) ); ?>">
567 - <input type="hidden" name="give-export-class" value="Give_Tools_Reset_Stats">
568 - <?php wp_nonce_field( 'give_ajax_export', 'give_ajax_export' ); ?>
569 - </form>
570 -
571 - <?php
572 -
573 - // Echo content (deactivation form) from the output buffer.
574 - $output = ob_get_contents();
575 -
576 - // Erase and stop output buffer.
577 - ob_end_clean();
578 -
579 - $results['html'] = $output;
580 -
581 - wp_send_json( $results );
582 -}
583 -
584 -add_action( 'wp_ajax_give_deactivation_popup', 'give_deactivation_popup' );
585 -
586 -/**
587 - * Ajax callback after the deactivation survey form has been submitted.
588 - * Note: only for internal use
589 - *
590 - * @since 2.2
591 - */
592 -function give_deactivation_form_submit() {
593 -
594 - if ( ! check_ajax_referer( 'deactivation_survey_nonce', 'nonce', false ) ) {
595 - wp_send_json_error();
596 - wp_die();
597 - }
598 -
599 - $form_data = give_clean( wp_parse_args( $_POST['form-data'] ) );
600 -
601 - // Get the selected radio value.
602 - $radio_value = isset( $form_data['give-survey-radios'] ) ? $form_data['give-survey-radios'] : 0;
603 -
604 - // Get the reason if any radio button has an optional text field.
605 - $user_reason = isset( $form_data['user-reason'] ) ? $form_data['user-reason'] : '';
606 -
607 - // Get the email of the user who deactivated the plugin.
608 - $user_email = isset( $form_data['current-user-email'] ) ? $form_data['current-user-email'] : '';
609 -
610 - // Get the URL of the website on which Give plugin is being deactivated.
611 - $site_url = isset( $form_data['current-site-url'] ) ? $form_data['current-site-url'] : '';
612 -
613 - // Get the value of the checkbox for deleting Give's data.
614 - $delete_data = isset( $form_data['confirm_reset_store'] ) ? $form_data['confirm_reset_store'] : '';
615 -
616 - /**
617 - * Make a POST request to the endpoint to send the survey data.
618 - */
619 - $response = wp_remote_post(
620 - 'http://survey.givewp.com/wp-json/give/v2/survey/',
621 - array(
622 - 'body' => array(
623 - 'radio_value' => $radio_value,
624 - 'user_reason' => $user_reason,
625 - 'current_user_email' => $user_email,
626 - 'site_url' => $site_url,
627 - ),
628 - )
629 - );
630 -
631 - // Check if the data is sent and stored correctly.
632 - $response = wp_remote_retrieve_body( $response );
633 -
634 - if ( 'true' === $response ) {
635 - if ( '1' === $delete_data ) {
636 - wp_send_json_success(
637 - array(
638 - 'delete_data' => true,
639 - )
640 - );
641 - } else {
642 - wp_send_json_success(
643 - array(
644 - 'delete_data' => false,
645 - )
646 - );
647 - }
648 - } else {
649 - wp_send_json_error();
650 - }
651 -
652 - wp_die();
653 -}
654 -
655 -add_action( 'wp_ajax_deactivation_form_submit', 'give_deactivation_form_submit' );