PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.0
GiveWP – Donation Plugin and Fundraising Platform v4.14.0
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 / install.php
give / includes Last commit date
admin 5 months ago api 3 years ago database 5 months ago deprecated 9 months ago donors 5 months ago emails 9 months ago forms 9 months ago frontend 6 years ago gateways 9 months ago libraries 9 months ago payments 9 months ago actions.php 9 months ago ajax-functions.php 9 months 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 year 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 8 months 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 9 months 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
install.php
554 lines
1 <?php
2
3 use Give\Form\Migrations\MoveOptionsToVisualAppearanceSection;
4 use Give\Framework\Migrations\Exceptions\DatabaseMigrationException;
5 use Give\Log\Migrations\MigrateExistingLogs;
6 use Give\MigrationLog\Migrations\CreateMigrationsTable;
7 use Give\Revenue\Migrations\AddPastDonationsToRevenueTable;
8
9 /**
10 * Install Function
11 *
12 * @package Give
13 * @since 1.0
14 * @copyright Copyright (c) 2016, GiveWP
15 * @license https://opensource.org/licenses/gpl-license GNU Public License
16 * @subpackage Functions/Install
17 */
18
19 // Exit if accessed directly.
20 if (!defined('ABSPATH')) {
21 exit;
22 }
23
24 /**
25 * Install
26 *
27 * Runs on plugin install by setting up the post types, custom taxonomies, flushing rewrite rules to initiate the new
28 * 'donations' slug and also creates the plugin and populates the settings fields for those plugin pages. After
29 * successful install, the user is redirected to the Give Onboarding Wizard.
30 *
31 * @since 1.0
32 *
33 * @param bool $network_wide
34 *
35 * @return void
36 * @global $wpdb
37 */
38 function give_install($network_wide = false)
39 {
40 global $wpdb;
41
42 if (is_multisite() && $network_wide) {
43 foreach ($wpdb->get_col("SELECT blog_id FROM $wpdb->blogs LIMIT 100") as $blog_id) {
44 switch_to_blog($blog_id);
45 give_run_install();
46 restore_current_blog();
47 }
48 } else {
49 give_run_install();
50 }
51 }
52
53 /**
54 * Run the Give Install process.
55 *
56 * @since 1.5
57 * @return void
58 */
59 function give_run_install()
60 {
61 $give_options = give_get_settings();
62
63 // Setup the Give Custom Post Types.
64 give_setup_post_types();
65
66 // Add Upgraded From Option.
67 $current_version = get_option('give_version');
68 if ($current_version) {
69 update_option('give_version_upgraded_from', $current_version, false);
70 }
71
72 // Setup some default options.
73 $options = [];
74
75 // Fresh Install? Setup Test Mode, Base Country (US), Test Gateway, Currency.
76 if (empty($current_version)) {
77 $options = array_merge($options, give_get_default_settings());
78 } else {
79 // Otherwise, disable the Onboarding experience
80 $options = [
81 'setup_page_enabled' => 'disabled',
82 ];
83 }
84
85 // Populate the default values.
86 update_option('give_settings', array_merge($give_options, $options), false);
87
88 // Create Give roles.
89 $roles = new Give_Roles();
90 $roles->add_roles();
91 $roles->add_caps();
92
93 // Set api version, end point and refresh permalink.
94 $api = new Give_API();
95 $api->add_endpoint();
96 update_option('give_default_api_version', 'v' . $api->get_version(), false);
97
98 // Create databases.
99 give_register_tables();
100
101 // Add a temporary option to note that Give pages have been created.
102 Give_Cache::set('_give_installed', $options, 30, true);
103
104 /**
105 * Run plugin upgrades.
106 *
107 * @since 1.8
108 */
109 do_action('give_upgrades');
110
111 if (GIVE_VERSION !== get_option('give_version')) {
112 update_option('give_version', GIVE_VERSION, false);
113 }
114
115 if (!$current_version) {
116 require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrade-functions.php';
117
118 // When new upgrade routines are added, mark them as complete on fresh install.
119 $upgrade_routines = [
120 'upgrade_give_user_caps_cleanup',
121 'upgrade_give_payment_customer_id',
122 'upgrade_give_offline_status',
123 'v18_upgrades_core_setting',
124 'v18_upgrades_form_metadata',
125 'v189_upgrades_levels_post_meta',
126 'v1812_update_amount_values',
127 'v1812_update_donor_purchase_values',
128 'v1813_update_user_roles',
129 'v1813_update_donor_user_roles',
130 'v1817_update_donation_iranian_currency_code',
131 'v1817_cleanup_user_roles',
132 'v1818_assign_custom_amount_set_donation',
133 'v1818_give_worker_role_cleanup',
134 'v20_upgrades_form_metadata',
135 'v20_logs_upgrades',
136 'v20_move_metadata_into_new_table',
137 'v20_rename_donor_tables',
138 'v20_upgrades_donor_name',
139 'v20_upgrades_user_address',
140 'v20_upgrades_payment_metadata',
141 'v201_upgrades_payment_metadata',
142 'v201_add_missing_donors',
143 'v201_move_metadata_into_new_table',
144 'v201_logs_upgrades',
145 'v210_verify_form_status_upgrades',
146 'v213_delete_donation_meta',
147 'v215_update_donor_user_roles',
148 'v220_rename_donation_meta_type',
149 'v224_update_donor_meta',
150 'v224_update_donor_meta_forms_id',
151 'v230_move_donor_note',
152 'v230_move_donation_note',
153 'v230_delete_donor_wall_related_donor_data',
154 'v230_delete_donor_wall_related_comment_data',
155 'v240_update_form_goal_progress',
156 'v241_remove_sale_logs',
157 'v270_store_stripe_account_for_donation',
158 AddPastDonationsToRevenueTable::id(),
159 MigrateExistingLogs::id()
160 ];
161
162 foreach ($upgrade_routines as $upgrade) {
163 give_set_upgrade_complete($upgrade);
164 }
165 }
166
167 // Bail if activating from network, or bulk.
168 if (is_network_admin() || isset($_GET['activate-multi'])) {
169 return;
170 }
171
172 // Setup embed form route on fresh install or plugin activation.
173 Give()->routeForm->setBasePrefix();
174 Give()->routeForm->addRule();
175
176 // Flush rewrite rules.
177 flush_rewrite_rules();
178
179 // Add the transient to redirect.
180 Give_Cache::set('_give_activation_redirect', true, 30, true);
181 }
182
183 /**
184 * Network Activated New Site Setup.
185 *
186 * When a new site is created when Give is network activated this function runs the appropriate install function to set
187 * up the site for Give.
188 *
189 * @since 1.3.5
190 *
191 * @param int $blog_id The Blog ID created.
192 * @param int $user_id The User ID set as the admin.
193 * @param string $domain The URL.
194 * @param string $path Site Path.
195 * @param int $site_id The Site ID.
196 * @param array $meta Blog Meta.
197 */
198 function give_on_create_blog($blog_id, $user_id, $domain, $path, $site_id, $meta)
199 {
200 if (is_plugin_active_for_network(GIVE_PLUGIN_BASENAME)) {
201 switch_to_blog($blog_id);
202 give_install();
203 restore_current_blog();
204 }
205 }
206
207 add_action('wpmu_new_blog', 'give_on_create_blog', 10, 6);
208
209
210 /**
211 * Drop Give's custom tables when a mu site is deleted.
212 *
213 * @since 3.4.0 updated implementation to query all give_* tables
214 * @since 1.4.3
215 *
216 * @param array $tables The tables to drop.
217 * @param int $blog_id The Blog ID being deleted.
218 *
219 * @return array The tables to drop.
220 */
221 function give_wpmu_drop_tables($tables, $blog_id)
222 {
223 global $wpdb;
224
225 switch_to_blog($blog_id);
226
227 $prefix = $wpdb->prefix . 'give_%';
228 $giveTables = $wpdb->get_col("SHOW TABLES LIKE '{$prefix}'");
229
230 foreach ($giveTables as $table) {
231 $tables[] = $table;
232 }
233
234 restore_current_blog();
235
236 return array_unique($tables);
237 }
238
239 add_filter('wpmu_drop_tables', 'give_wpmu_drop_tables', 10, 2);
240
241 /**
242 * Post-installation
243 *
244 * Runs just after plugin installation and exposes the give_after_install hook.
245 *
246 * @since 1.0
247 * @return void
248 */
249 function give_after_install()
250 {
251 if (!is_admin()) {
252 return;
253 }
254
255 $give_options = Give_Cache::get('_give_installed', true);
256 $give_table_check = get_option('_give_table_check', false);
257
258 if (false === $give_table_check || current_time('timestamp') > $give_table_check) {
259 if (!@Give()->donor_meta->installed()) {
260 // Create the donor meta database.
261 // (this ensures it creates it on multisite instances where it is network activated).
262 @Give()->donor_meta->create_table();
263 }
264
265 if (!@Give()->donors->installed()) {
266 // Create the donor database.
267 // (this ensures it creates it on multisite instances where it is network activated).
268 @Give()->donors->create_table();
269 }
270
271 /**
272 * Fires after plugin installation.
273 *
274 * @since 1.0
275 *
276 * @param array $give_options Give plugin options.
277 */
278 do_action('give_after_install', $give_options);
279
280 update_option('_give_table_check', (current_time('timestamp') + WEEK_IN_SECONDS), false);
281 }
282
283 // Delete the transient
284 if (false !== $give_options) {
285 Give_Cache::delete(Give_Cache::get_key('_give_installed'));
286 }
287 }
288
289 add_action('admin_init', 'give_after_install');
290
291
292 /**
293 * Install user roles on sub-sites of a network
294 *
295 * Roles do not get created when Give is network activation so we need to create them during admin_init
296 *
297 * @since 1.0
298 * @return void
299 */
300 function give_install_roles_on_network()
301 {
302 global $wp_roles;
303
304 if (!is_object($wp_roles)) {
305 return;
306 }
307
308 if (!array_key_exists('give_manager', $wp_roles->roles)) {
309 // Create Give plugin roles
310 $roles = new Give_Roles();
311 $roles->add_roles();
312 $roles->add_caps();
313 }
314 }
315
316 add_action('admin_init', 'give_install_roles_on_network');
317
318 /**
319 * Default core setting values.
320 *
321 * @since 1.8
322 * @return array
323 */
324 function give_get_default_settings()
325 {
326 $options = [
327 // General.
328 'base_country' => 'US',
329 'test_mode' => 'enabled',
330 'currency' => 'USD',
331 'currency_position' => 'before',
332 'session_lifetime' => '604800',
333 'email_access' => 'enabled',
334 'thousands_separator' => ',',
335 'decimal_separator' => '.',
336 'number_decimals' => 2,
337 'sequential-ordering_status' => 'enabled',
338
339 // Display options.
340 'css' => 'enabled',
341 'floatlabels' => 'disabled',
342 'company_field' => 'disabled',
343 'name_title_prefix' => 'disabled',
344 'forms_singular' => 'enabled',
345 'forms_archives' => 'enabled',
346 'forms_excerpt' => 'enabled',
347 'form_featured_img' => 'enabled',
348 'form_sidebar' => 'enabled',
349 'categories' => 'disabled',
350 'tags' => 'disabled',
351 'terms' => 'disabled',
352 'admin_notices' => 'enabled',
353 'cache' => 'enabled',
354 'uninstall_on_delete' => 'disabled',
355 'the_content_filter' => 'enabled',
356 'scripts_footer' => 'disabled',
357 'agree_to_terms_label' => __('Agree to Terms?', 'give'),
358 'agreement_text' => give_get_default_agreement_text(),
359 'babel_polyfill_script' => 'enabled',
360
361 // Default is manual gateway.
362 'gateways' => [
363 'manual' => 1,
364 'offline' => 1,
365 ],
366 'gateways_v3' => [
367 'manual' => 1,
368 'offline' => 1,
369 ],
370 'default_gateway' => 'manual',
371 'default_gateway_v3' => 'manual',
372
373 // Offline gateway setup.
374 'global_offline_donation_content' => give_get_default_offline_donation_content(),
375 'global_offline_donation_email' => give_get_default_offline_donation_content(),
376
377 // Billing address.
378 'give_offline_donation_enable_billing_fields' => 'disabled',
379
380 // Default donation notification email.
381 'donation_notification' => give_get_default_donation_notification_email(),
382
383 // Default email receipt message.
384 'donation_receipt' => give_get_default_donation_receipt_email(),
385
386 'donor_default_user_role' => 'give_donor',
387 Give()->routeForm->getOptionName() => 'give',
388
389 // Stripe accounts.
390 '_give_stripe_get_all_accounts' => [],
391
392 // Onboarding
393 'setup_page_enabled' => 'enabled',
394
395 // Advanced settings
396 'usage_tracking' => 'disabled',
397 ];
398
399 return $options;
400 }
401
402 /**
403 * Default terms and conditions.
404 */
405 function give_get_default_agreement_text()
406 {
407 $org_name = get_bloginfo('name');
408
409 $agreement = sprintf(
410 '<p>Acceptance of any contribution, gift or grant is at the discretion of the %1$s. The %1$s will not accept any gift unless it can be used or expended consistently with the purpose and mission of the %1$s.</p>
411 <p>No irrevocable gift, whether outright or life-income in character, will be accepted if under any reasonable set of circumstances the gift would jeopardize the donor’s financial security.</p>
412 <p>The %1$s will refrain from providing advice about the tax or other treatment of gifts and will encourage donors to seek guidance from their own professional advisers to assist them in the process of making their donation.</p>
413 <p>The %1$s will accept donations of cash or publicly traded securities. Gifts of in-kind services will be accepted at the discretion of the %1$s.</p>
414 <p>Certain other gifts, real property, personal property, in-kind gifts, non-liquid securities, and contributions whose sources are not transparent or whose use is restricted in some manner, must be reviewed prior to acceptance due to the special obligations raised or liabilities they may pose for %1$s.</p>
415 <p>The %1$s will provide acknowledgments to donors meeting tax requirements for property received by the charity as a gift. However, except for gifts of cash and publicly traded securities, no value shall be ascribed to any receipt or other form of substantiation of a gift received by %1$s.</p>
416 <p>The %1$s will respect the intent of the donor relating to gifts for restricted purposes and those relating to the desire to remain anonymous. With respect to anonymous gifts, the %1$s will restrict information about the donor to only those staff members with a need to know.</p>
417 <p>The %1$s will not compensate, whether through commissions, finders\' fees, or other means, any third party for directing a gift or a donor to the %1$s.</p>',
418 $org_name
419 );
420
421 return apply_filters('give_get_default_agreement_text', $agreement, $org_name);
422 }
423
424
425 /**
426 * This function will install give related page which is not created already.
427 *
428 * @since 1.8.11
429 *
430 * @return void
431 */
432 function give_create_pages()
433 {
434 // Bailout if pages already created.
435 if (Give_Cache_Setting::get_option('give_install_pages_created')) {
436 return;
437 }
438
439 $options = [];
440
441 // Checks if the Success Page option exists AND that the page exists.
442 if (!get_post(give_get_option('success_page'))) {
443 // Donation Confirmation (Success) Page
444 $success = wp_insert_post(
445 [
446 'post_title' => esc_html__('Donation Confirmation', 'give'),
447 'post_content' => '[give_receipt]',
448 'post_status' => 'publish',
449 'post_author' => 1,
450 'post_type' => 'page',
451 'comment_status' => 'closed',
452 ]
453 );
454
455 // Store our page IDs
456 $options['success_page'] = $success;
457 }
458
459 // Checks if the Failure Page option exists AND that the page exists.
460 if (!get_post(give_get_option('failure_page'))) {
461 // Failed Donation Page
462 $failed = wp_insert_post(
463 [
464 'post_title' => esc_html__('Donation Failed', 'give'),
465 'post_content' => esc_html__(
466 'We\'re sorry, your donation failed to process. Please try again or contact site support.',
467 'give'
468 ),
469 'post_status' => 'publish',
470 'post_author' => 1,
471 'post_type' => 'page',
472 'comment_status' => 'closed',
473 ]
474 );
475
476 $options['failure_page'] = $failed;
477 }
478
479 if (!empty($options)) {
480 update_option('give_settings', array_merge(give_get_settings(), $options), false);
481 }
482
483 add_option('give_install_pages_created', 1, '', false);
484 }
485
486 // @TODO we can add this hook only when plugin activate instead of every admin page load.
487 // @see known issue https://github.com/impress-org/give/issues/1848
488 add_action('admin_init', 'give_create_pages', -1);
489
490
491 /**
492 * Install tables on plugin update if missing
493 * Note: only for internal use
494 *
495 * @since 2.4.1
496 *
497 * @param string $old_version
498 */
499 function give_install_tables_on_plugin_update($old_version)
500 {
501 update_option('give_version_upgraded_from', $old_version, false);
502 give_register_tables();
503 }
504
505 add_action('update_option_give_version', 'give_install_tables_on_plugin_update', 0, 2);
506
507
508 /**
509 * Get array of table class objects
510 *
511 * Note: only for internal purpose use
512 *
513 * @since 4.9.0 rename function - PHP 8 compatibility
514 * @sice 2.3.1
515 */
516 function give_get_tables()
517 {
518 $tables = [
519 'donors_db' => new Give_DB_Donors(),
520 'donor_meta_db' => new Give_DB_Donor_Meta(),
521 'comment_db' => new Give_DB_Comments(),
522 'comment_db_meta' => new Give_DB_Comment_Meta(),
523 'give_session' => new Give_DB_Sessions(),
524 'formmeta_db' => new Give_DB_Form_Meta(),
525 'sequential_db' => new Give_DB_Sequential_Ordering(),
526 'donation_meta' => new Give_DB_Payment_Meta(),
527 ];
528
529 return $tables;
530 }
531
532 /**
533 * Register classes
534 * Note: only for internal purpose use
535 *
536 * @since 4.9.0 rename function - PHP 8 compatibility
537 * @since 2.21.0 Install migration table on fresh install because this table is required to run migrations.
538 * @since 2.3.1
539 * @throws DatabaseMigrationException
540 */
541 function give_register_tables()
542 {
543 $tables = give_get_tables();
544
545 /* @var Give_DB $table */
546 foreach ($tables as $table) {
547 if (!$table->installed()) {
548 $table->register_table();
549 }
550 }
551
552 give(CreateMigrationsTable::class)->run();
553 }
554