PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.9
GiveWP – Donation Plugin and Fundraising Platform v4.16.9
4.16.9 4.16.8.1 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 All 255 releases
← All changes | includes/install.php +387 -347 2.3.04.16.9 View file →
@@ -1,18 +1,25 @@
1 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 +
2 9 /**
3 10 * Install Function
4 11 *
5 12 * @package Give
13 + * @since 1.0
14 + * @copyright Copyright (c) 2016, GiveWP
15 + * @license https://opensource.org/licenses/gpl-license GNU Public License
6 16 * @subpackage Functions/Install
7 - * @copyright Copyright (c) 2016, WordImpress
8 - * @license https://opensource.org/licenses/gpl-license GNU Public License
9 - * @since 1.0
10 17 */
11 18
12 19 // Exit if accessed directly.
13 -if ( ! defined( 'ABSPATH' ) ) {
14 - exit;
20 +if (!defined('ABSPATH')) {
21 + exit;
15 22 }
16 23
17 24 /**
18 25 * Install
@@ -18,37 +25,30 @@
18 25 * Install
19 26 *
20 27 * Runs on plugin install by setting up the post types, custom taxonomies, flushing rewrite rules to initiate the new
21 28 * 'donations' slug and also creates the plugin and populates the settings fields for those plugin pages. After
22 - * successful install, the user is redirected to the Give Welcome screen.
29 + * successful install, the user is redirected to the Give Onboarding Wizard.
23 30 *
24 31 * @since 1.0
25 32 *
26 33 * @param bool $network_wide
27 34 *
35 + * @return void
28 36 * @global $wpdb
29 - * @return void
30 37 */
31 -function give_install( $network_wide = false ) {
38 +function give_install($network_wide = false)
39 +{
40 + global $wpdb;
32 41
33 - global $wpdb;
34 -
35 - if ( is_multisite() && $network_wide ) {
36 -
37 - foreach ( $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs LIMIT 100" ) as $blog_id ) {
38 -
39 - switch_to_blog( $blog_id );
40 - give_run_install();
41 - restore_current_blog();
42 -
43 - }
44 -
45 - } else {
46 -
47 - give_run_install();
48 -
49 - }
50 -
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 51 }
52 52
53 53 /**
54 54 * Run the Give Install process.
@@ -55,118 +55,130 @@
55 55 *
56 56 * @since 1.5
57 57 * @return void
58 58 */
59 -function give_run_install() {
60 - $give_options = give_get_settings();
59 +function give_run_install()
60 +{
61 + $give_options = give_get_settings();
61 62
62 - // Setup the Give Custom Post Types.
63 - give_setup_post_types();
63 + // Setup the Give Custom Post Types.
64 + give_setup_post_types();
64 65
65 - // Add Upgraded From Option.
66 - $current_version = get_option( 'give_version' );
67 - if ( $current_version ) {
68 - update_option( 'give_version_upgraded_from', $current_version, false );
69 - }
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 + }
70 71
71 - // Setup some default options.
72 - $options = array();
72 + // Setup some default options.
73 + $options = [];
73 74
74 - //Fresh Install? Setup Test Mode, Base Country (US), Test Gateway, Currency.
75 - if ( empty( $current_version ) ) {
76 - $options = array_merge( $options, give_get_default_settings() );
77 - }
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 + }
78 84
79 - // Populate the default values.
80 - update_option( 'give_settings', array_merge( $give_options, $options ), false );
85 + // Populate the default values.
86 + update_option('give_settings', array_merge($give_options, $options), false);
81 87
82 - /**
83 - * Run plugin upgrades.
84 - *
85 - * @since 1.8
86 - */
87 - do_action( 'give_upgrades' );
88 + // Create Give roles.
89 + $roles = new Give_Roles();
90 + $roles->add_roles();
91 + $roles->add_caps();
88 92
89 - if ( GIVE_VERSION !== get_option( 'give_version' ) ) {
90 - update_option( 'give_version', GIVE_VERSION, false );
91 - }
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);
92 97
93 - // Create Give roles.
94 - $roles = new Give_Roles();
95 - $roles->add_roles();
96 - $roles->add_caps();
98 + // Create databases.
99 + give_register_tables();
97 100
98 - // Set api version, end point and refresh permalink.
99 - $api = new Give_API();
100 - $api->add_endpoint();
101 - update_option( 'give_default_api_version', 'v' . $api->get_version(), false );
101 + // Add a temporary option to note that Give pages have been created.
102 + Give_Cache::set('_give_installed', $options, 30, true);
102 103
103 - flush_rewrite_rules();
104 + /**
105 + * Run plugin upgrades.
106 + *
107 + * @since 1.8
108 + */
109 + do_action('give_upgrades');
104 110
105 - // Create the donor databases.
106 - $donors_db = new Give_DB_Donors();
107 - $donors_db->create_table();
108 - $donor_meta = new Give_DB_Donor_Meta();
109 - $donor_meta->create_table();
111 + if (GIVE_VERSION !== get_option('give_version')) {
112 + update_option('give_version', GIVE_VERSION, false);
113 + }
110 114
111 - // Add a temporary option to note that Give pages have been created.
112 - Give_Cache::set( '_give_installed', $options, 30, true );
115 + if (!$current_version) {
116 + require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrade-functions.php';
113 117
114 - if ( ! $current_version ) {
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 + ];
115 161
116 - require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrade-functions.php';
162 + foreach ($upgrade_routines as $upgrade) {
163 + give_set_upgrade_complete($upgrade);
164 + }
165 + }
117 166
118 - // When new upgrade routines are added, mark them as complete on fresh install.
119 - $upgrade_routines = array(
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 - );
167 + // Bail if activating from network, or bulk.
168 + if (is_network_admin() || isset($_GET['activate-multi'])) {
169 + return;
170 + }
156 171
157 - foreach ( $upgrade_routines as $upgrade ) {
158 - give_set_upgrade_complete( $upgrade );
159 - }
160 - }
172 + // Setup embed form route on fresh install or plugin activation.
173 + Give()->routeForm->setBasePrefix();
174 + Give()->routeForm->addRule();
161 175
162 - // Bail if activating from network, or bulk.
163 - if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
164 - return;
165 - }
176 + // Flush rewrite rules.
177 + flush_rewrite_rules();
166 178
167 - // Add the transient to redirect.
168 - Give_Cache::set( '_give_activation_redirect', true, 30, true );
179 + // Add the transient to redirect.
180 + Give_Cache::set('_give_activation_redirect', true, 30, true);
169 181 }
170 182
171 183 /**
172 184 * Network Activated New Site Setup.
@@ -175,85 +187,57 @@
175 187 * up the site for Give.
176 188 *
177 189 * @since 1.3.5
178 190 *
179 - * @param int $blog_id The Blog ID created.
180 - * @param int $user_id The User ID set as the admin.
181 - * @param string $domain The URL.
182 - * @param string $path Site Path.
183 - * @param int $site_id The Site ID.
184 - * @param array $meta Blog Meta.
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.
185 197 */
186 -function give_on_create_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
187 -
188 - if ( is_plugin_active_for_network( GIVE_PLUGIN_BASENAME ) ) {
189 -
190 - switch_to_blog( $blog_id );
191 - give_install();
192 - restore_current_blog();
193 -
194 - }
195 -
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 + }
196 205 }
197 206
198 -add_action( 'wpmu_new_blog', 'give_on_create_blog', 10, 6 );
207 +add_action('wpmu_new_blog', 'give_on_create_blog', 10, 6);
199 208
200 209
201 210 /**
202 211 * Drop Give's custom tables when a mu site is deleted.
203 212 *
213 + * @since 3.4.0 updated implementation to query all give_* tables
204 214 * @since 1.4.3
205 215 *
206 - * @param array $tables The tables to drop.
207 - * @param int $blog_id The Blog ID being deleted.
216 + * @param array $tables The tables to drop.
217 + * @param int $blog_id The Blog ID being deleted.
208 218 *
209 219 * @return array The tables to drop.
210 220 */
211 -function give_wpmu_drop_tables( $tables, $blog_id ) {
221 +function give_wpmu_drop_tables($tables, $blog_id)
222 +{
223 + global $wpdb;
212 224
213 - switch_to_blog( $blog_id );
214 - $donors_db = new Give_DB_Donors();
215 - $donor_meta_db = new Give_DB_Donor_Meta();
216 - $comment_db = new Give_DB_Comments();
217 - $comment_db_meta = new Give_DB_Comment_Meta();
218 - $give_session = new Give_DB_Sessions();
219 - $log_db = new Give_DB_Logs();
220 - $logmeta_db = new Give_DB_Log_Meta();
221 - $formmeta_db = new Give_DB_Form_Meta();
222 - $sequential_db = new Give_DB_Sequential_Ordering();
223 - $payment_meta = new Give_DB_Payment_Meta();
225 + switch_to_blog($blog_id);
224 226
225 - if ( $donors_db->installed() ) {
226 - $tables[] = $donors_db->table_name;
227 - $tables[] = $donor_meta_db->table_name;
228 - }
229 - if ( $comment_db->installed() ) {
230 - $tables[] = $comment_db->table_name;
231 - $tables[] = $comment_db_meta->table_name;
232 - }
233 - if ( $give_session->installed() ) {
234 - $tables[] = $give_session->table_name;
235 - }
236 - if ( $log_db->installed() ) {
237 - $tables[] = $log_db->table_name;
238 - $tables[] = $logmeta_db->table_name;
239 - }
240 - if ( $formmeta_db->installed() ) {
241 - $tables[] = $formmeta_db->table_name;
242 - }
243 - if ( $sequential_db->installed() ) {
244 - $tables[] = $sequential_db->table_name;
245 - }
246 - if ( $payment_meta->installed() ) {
247 - $tables[] = $payment_meta->table_name;
248 - }
249 - restore_current_blog();
227 + $prefix = $wpdb->prefix . 'give_%';
228 + $giveTables = $wpdb->get_col("SHOW TABLES LIKE '{$prefix}'");
250 229
251 - return $tables;
230 + foreach ($giveTables as $table) {
231 + $tables[] = $table;
232 + }
252 233
234 + restore_current_blog();
235 +
236 + return array_unique($tables);
253 237 }
254 238
255 -add_filter( 'wpmu_drop_tables', 'give_wpmu_drop_tables', 10, 2 );
239 +add_filter('wpmu_drop_tables', 'give_wpmu_drop_tables', 10, 2);
256 240
257 241 /**
258 242 * Post-installation
259 243 *
@@ -261,55 +245,49 @@
261 245 *
262 246 * @since 1.0
263 247 * @return void
264 248 */
265 -function give_after_install() {
249 +function give_after_install()
250 +{
251 + if (!is_admin()) {
252 + return;
253 + }
266 254
267 - if ( ! is_admin() ) {
268 - return;
269 - }
255 + $give_options = Give_Cache::get('_give_installed', true);
256 + $give_table_check = get_option('_give_table_check', false);
270 257
271 - $give_options = Give_Cache::get( '_give_installed', true );
272 - $give_table_check = get_option( '_give_table_check', false );
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 + }
273 264
274 - if ( false === $give_table_check || current_time( 'timestamp' ) > $give_table_check ) {
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 + }
275 270
276 - if ( ! @Give()->donor_meta->installed() ) {
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);
277 279
278 - // Create the donor meta database.
279 - // (this ensures it creates it on multisite instances where it is network activated).
280 - @Give()->donor_meta->create_table();
280 + update_option('_give_table_check', (current_time('timestamp') + WEEK_IN_SECONDS), false);
281 + }
281 282
282 - }
283 -
284 - if ( ! @Give()->donors->installed() ) {
285 - // Create the donor database.
286 - // (this ensures it creates it on multisite instances where it is network activated).
287 - @Give()->donors->create_table();
288 -
289 - /**
290 - * Fires after plugin installation.
291 - *
292 - * @since 1.0
293 - *
294 - * @param array $give_options Give plugin options.
295 - */
296 - do_action( 'give_after_install', $give_options );
297 - }
298 -
299 - update_option( '_give_table_check', ( current_time( 'timestamp' ) + WEEK_IN_SECONDS ), false );
300 -
301 - }
302 -
303 - // Delete the transient
304 - if ( false !== $give_options ) {
305 - Give_Cache::delete( Give_Cache::get_key( '_give_installed' ) );
306 - }
307 -
308 -
283 + // Delete the transient
284 + if (false !== $give_options) {
285 + Give_Cache::delete(Give_Cache::get_key('_give_installed'));
286 + }
309 287 }
310 288
311 -add_action( 'admin_init', 'give_after_install' );
289 +add_action('admin_init', 'give_after_install');
312 290
313 291
314 292 /**
315 293 * Install user roles on sub-sites of a network
@@ -318,28 +296,25 @@
318 296 *
319 297 * @since 1.0
320 298 * @return void
321 299 */
322 -function give_install_roles_on_network() {
300 +function give_install_roles_on_network()
301 +{
302 + global $wp_roles;
323 303
324 - global $wp_roles;
304 + if (!is_object($wp_roles)) {
305 + return;
306 + }
325 307
326 - if ( ! is_object( $wp_roles ) ) {
327 - return;
328 - }
329 -
330 - if ( ! array_key_exists( 'give_manager', $wp_roles->roles ) ) {
331 -
332 - // Create Give plugin roles
333 - $roles = new Give_Roles();
334 - $roles->add_roles();
335 - $roles->add_caps();
336 -
337 - }
338 -
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 + }
339 314 }
340 315
341 -add_action( 'admin_init', 'give_install_roles_on_network' );
316 +add_action('admin_init', 'give_install_roles_on_network');
342 317
343 318 /**
344 319 * Default core setting values.
345 320 *
@@ -345,81 +320,95 @@
345 320 *
346 321 * @since 1.8
347 322 * @return array
348 323 */
349 -function give_get_default_settings() {
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',
350 338
351 - $options = array(
352 - // General.
353 - 'base_country' => 'US',
354 - 'test_mode' => 'enabled',
355 - 'currency' => 'USD',
356 - 'currency_position' => 'before',
357 - 'session_lifetime' => '604800',
358 - 'email_access' => 'enabled',
359 - 'thousands_separator' => ',',
360 - 'decimal_separator' => '.',
361 - 'number_decimals' => 2,
362 - 'sequential-ordering_status' => 'enabled',
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',
363 360
364 - // Display options.
365 - 'css' => 'enabled',
366 - 'floatlabels' => 'disabled',
367 - 'welcome' => 'enabled',
368 - 'company_field' => 'disabled',
369 - 'name_title_prefix' => 'disabled',
370 - 'forms_singular' => 'enabled',
371 - 'forms_archives' => 'enabled',
372 - 'forms_excerpt' => 'enabled',
373 - 'form_featured_img' => 'enabled',
374 - 'form_sidebar' => 'enabled',
375 - 'categories' => 'disabled',
376 - 'tags' => 'disabled',
377 - 'terms' => 'disabled',
378 - 'admin_notices' => 'enabled',
379 - 'cache' => 'enabled',
380 - 'uninstall_on_delete' => 'disabled',
381 - 'the_content_filter' => 'enabled',
382 - 'scripts_footer' => 'disabled',
383 - 'agree_to_terms_label' => __( 'Agree to Terms?', 'give' ),
384 - 'agreement_text' => give_get_default_agreement_text(),
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',
385 372
386 - // Paypal IPN verification.
387 - 'paypal_verification' => 'enabled',
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(),
388 376
389 - // Default is manual gateway.
390 - 'gateways' => array( 'manual' => 1, 'offline' => 1 ),
391 - 'default_gateway' => 'manual',
377 + // Billing address.
378 + 'give_offline_donation_enable_billing_fields' => 'disabled',
392 379
393 - // Offline gateway setup.
394 - 'global_offline_donation_content' => give_get_default_offline_donation_content(),
395 - 'global_offline_donation_email' => give_get_default_offline_donation_content(),
380 + // Default donation notification email.
381 + 'donation_notification' => give_get_default_donation_notification_email(),
396 382
397 - // Billing address.
398 - 'give_offline_donation_enable_billing_fields' => 'disabled',
383 + // Default email receipt message.
384 + 'donation_receipt' => give_get_default_donation_receipt_email(),
399 385
400 - // Default donation notification email.
401 - 'donation_notification' => give_get_default_donation_notification_email(),
386 + 'donor_default_user_role' => 'give_donor',
387 + Give()->routeForm->getOptionName() => 'give',
402 388
403 - // Default email receipt message.
404 - 'donation_receipt' => give_get_default_donation_receipt_email(),
389 + // Stripe accounts.
390 + '_give_stripe_get_all_accounts' => [],
405 391
406 - 'donor_default_user_role' => 'give_donor',
392 + // Onboarding
393 + 'setup_page_enabled' => 'enabled',
407 394
408 - );
395 + // Advanced settings
396 + 'usage_tracking' => 'disabled',
397 + ];
409 398
410 - return $options;
399 + return $options;
411 400 }
412 401
413 402 /**
414 403 * Default terms and conditions.
415 404 */
416 -function give_get_default_agreement_text() {
405 +function give_get_default_agreement_text()
406 +{
407 + $org_name = get_bloginfo('name');
417 408
418 - $org_name = get_bloginfo( 'name' );
419 -
420 - $agreement = sprintf(
421 - '<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>
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>
422 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>
423 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>
424 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>
425 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>
@@ -425,12 +414,12 @@
425 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>
426 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>
427 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>
428 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>',
429 - $org_name
430 - );
418 + $org_name
419 + );
431 420
432 - return apply_filters( 'give_get_default_agreement_text', $agreement, $org_name );
421 + return apply_filters('give_get_default_agreement_text', $agreement, $org_name);
433 422 }
434 423
435 424
436 425 /**
@@ -439,75 +428,126 @@
439 428 * @since 1.8.11
440 429 *
441 430 * @return void
442 431 */
443 -function give_create_pages() {
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 + }
444 438
445 - // Bailout if pages already created.
446 - if ( get_option( 'give_install_pages_created' ) ) {
447 - return false;
448 - }
439 + $options = [];
449 440
450 - $options = array();
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 + );
451 454
452 - // Checks if the Success Page option exists AND that the page exists.
453 - if ( ! get_post( give_get_option( 'success_page' ) ) ) {
455 + // Store our page IDs
456 + $options['success_page'] = $success;
457 + }
454 458
455 - // Donation Confirmation (Success) Page
456 - $success = wp_insert_post(
457 - array(
458 - 'post_title' => esc_html__( 'Donation Confirmation', 'give' ),
459 - 'post_content' => '[give_receipt]',
460 - 'post_status' => 'publish',
461 - 'post_author' => 1,
462 - 'post_type' => 'page',
463 - 'comment_status' => 'closed'
464 - )
465 - );
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 + );
466 475
467 - // Store our page IDs
468 - $options['success_page'] = $success;
469 - }
476 + $options['failure_page'] = $failed;
477 + }
470 478
471 - // Checks if the Failure Page option exists AND that the page exists.
472 - if ( ! get_post( give_get_option( 'failure_page' ) ) ) {
479 + if (!empty($options)) {
480 + update_option('give_settings', array_merge(give_get_settings(), $options), false);
481 + }
473 482
474 - // Failed Donation Page
475 - $failed = wp_insert_post(
476 - array(
477 - 'post_title' => esc_html__( 'Donation Failed', 'give' ),
478 - 'post_content' => esc_html__( 'We\'re sorry, your donation failed to process. Please try again or contact site support.', 'give' ),
479 - 'post_status' => 'publish',
480 - 'post_author' => 1,
481 - 'post_type' => 'page',
482 - 'comment_status' => 'closed'
483 - )
484 - );
483 + add_option('give_install_pages_created', 1, '', false);
484 +}
485 485
486 - $options['failure_page'] = $failed;
487 - }
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);
488 489
489 - // Checks if the History Page option exists AND that the page exists.
490 - if ( ! get_post( give_get_option( 'history_page' ) ) ) {
491 - // Donation History Page
492 - $history = wp_insert_post(
493 - array(
494 - 'post_title' => esc_html__( 'Donation History', 'give' ),
495 - 'post_content' => '[donation_history]',
496 - 'post_status' => 'publish',
497 - 'post_author' => 1,
498 - 'post_type' => 'page',
499 - 'comment_status' => 'closed'
500 - )
501 - );
502 490
503 - $options['history_page'] = $history;
504 - }
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 +}
505 504
506 - if ( ! empty( $options ) ) {
507 - update_option( 'give_settings', array_merge( give_get_settings(), $options ), false );
508 - }
505 +add_action('update_option_give_version', 'give_install_tables_on_plugin_update', 0, 2);
509 506
510 - add_option( 'give_install_pages_created', 1, '', false );
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;
511 530 }
512 531
513 -add_action( 'admin_init', 'give_create_pages', - 1 );
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 +}