PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.5.8
GiveWP – Donation Plugin and Fundraising Platform v2.5.8
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 / upgrades / upgrade-functions.php
give / includes / admin / upgrades Last commit date
views 6 years ago class-give-updates.php 6 years ago upgrade-functions.php 6 years ago
upgrade-functions.php
3560 lines
1 <?php
2 /**
3 * Upgrade Functions
4 *
5 * @package Give
6 * @subpackage Admin/Upgrades
7 * @copyright Copyright (c) 2016, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 *
11 * NOTICE: When adding new upgrade notices, please be sure to put the action into the upgrades array during install:
12 * /includes/install.php @ Appox Line 156
13 */
14
15 // Exit if accessed directly.
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit;
18 }
19
20 /**
21 * Perform automatic database upgrades when necessary.
22 *
23 * @since 1.6
24 * @return void
25 */
26 function give_do_automatic_upgrades() {
27 $did_upgrade = false;
28 $give_version = preg_replace( '/[^0-9.].*/', '', Give_Cache_Setting::get_option( 'give_version' ) );
29
30 if ( ! $give_version ) {
31 // 1.0 is the first version to use this option so we must add it.
32 $give_version = '1.0';
33 }
34
35 switch ( true ) {
36
37 case version_compare( $give_version, '1.6', '<' ):
38 give_v16_upgrades();
39 $did_upgrade = true;
40
41 case version_compare( $give_version, '1.7', '<' ):
42 give_v17_upgrades();
43 $did_upgrade = true;
44
45 case version_compare( $give_version, '1.8', '<' ):
46 give_v18_upgrades();
47 $did_upgrade = true;
48
49 case version_compare( $give_version, '1.8.7', '<' ):
50 give_v187_upgrades();
51 $did_upgrade = true;
52
53 case version_compare( $give_version, '1.8.8', '<' ):
54 give_v188_upgrades();
55 $did_upgrade = true;
56
57 case version_compare( $give_version, '1.8.9', '<' ):
58 give_v189_upgrades();
59 $did_upgrade = true;
60
61 case version_compare( $give_version, '1.8.12', '<' ):
62 give_v1812_upgrades();
63 $did_upgrade = true;
64
65 case version_compare( $give_version, '1.8.13', '<' ):
66 give_v1813_upgrades();
67 $did_upgrade = true;
68
69 case version_compare( $give_version, '1.8.17', '<' ):
70 give_v1817_upgrades();
71 $did_upgrade = true;
72
73 case version_compare( $give_version, '1.8.18', '<' ):
74 give_v1818_upgrades();
75 $did_upgrade = true;
76
77 case version_compare( $give_version, '2.0', '<' ):
78 give_v20_upgrades();
79 $did_upgrade = true;
80
81 case version_compare( $give_version, '2.0.1', '<' ):
82 // Do nothing on fresh install.
83 if ( ! doing_action( 'give_upgrades' ) ) {
84 give_v201_create_tables();
85 Give_Updates::get_instance()->__health_background_update( Give_Updates::get_instance() );
86 Give_Updates::$background_updater->dispatch();
87 }
88
89 $did_upgrade = true;
90
91 case version_compare( $give_version, '2.0.2', '<' ):
92 // Remove 2.0.1 update to rerun on 2.0.2
93 $completed_upgrades = give_get_completed_upgrades();
94 $v201_updates = array(
95 'v201_upgrades_payment_metadata',
96 'v201_add_missing_donors',
97 'v201_move_metadata_into_new_table',
98 'v201_logs_upgrades',
99 );
100
101 foreach ( $v201_updates as $v201_update ) {
102 if ( in_array( $v201_update, $completed_upgrades ) ) {
103 unset( $completed_upgrades[ array_search( $v201_update, $completed_upgrades ) ] );
104 }
105 }
106
107 update_option( 'give_completed_upgrades', $completed_upgrades, false );
108
109 // Do nothing on fresh install.
110 if ( ! doing_action( 'give_upgrades' ) ) {
111 give_v201_create_tables();
112 Give_Updates::get_instance()->__health_background_update( Give_Updates::get_instance() );
113 Give_Updates::$background_updater->dispatch();
114 }
115
116 $did_upgrade = true;
117
118 case version_compare( $give_version, '2.0.3', '<' ):
119 give_v203_upgrades();
120 $did_upgrade = true;
121
122 case version_compare( $give_version, '2.2.0', '<' ):
123 give_v220_upgrades();
124 $did_upgrade = true;
125
126 case version_compare( $give_version, '2.2.1', '<' ):
127 give_v221_upgrades();
128 $did_upgrade = true;
129
130 case version_compare( $give_version, '2.3.0', '<' ):
131 give_v230_upgrades();
132 $did_upgrade = true;
133
134 case version_compare( $give_version, '2.5.0', '<' ):
135 give_v250_upgrades();
136 $did_upgrade = true;
137
138 case version_compare( $give_version, '2.5.8', '<' ):
139 give_v258_upgrades();
140 $did_upgrade = true;
141 }
142
143 if ( $did_upgrade || version_compare( $give_version, GIVE_VERSION, '<' ) ) {
144 update_option( 'give_version', preg_replace( '/[^0-9.].*/', '', GIVE_VERSION ), false );
145 }
146 }
147
148 add_action( 'admin_init', 'give_do_automatic_upgrades', 0 );
149 add_action( 'give_upgrades', 'give_do_automatic_upgrades', 0 );
150
151 /**
152 * Display Upgrade Notices.
153 *
154 * IMPORTANT: ALSO UPDATE INSTALL.PHP WITH THE ID OF THE UPGRADE ROUTINE SO IT DOES NOT AFFECT NEW INSTALLS.
155 *
156 * @since 1.0
157 * @since 1.8.12 Update new update process code.
158 *
159 * @param Give_Updates $give_updates
160 *
161 * @return void
162 */
163 function give_show_upgrade_notices( $give_updates ) {
164 // v1.3.2 Upgrades
165 $give_updates->register(
166 array(
167 'id' => 'upgrade_give_payment_customer_id',
168 'version' => '1.3.2',
169 'callback' => 'give_v132_upgrade_give_payment_customer_id',
170 )
171 );
172
173 // v1.3.4 Upgrades ensure the user has gone through 1.3.4.
174 $give_updates->register(
175 array(
176 'id' => 'upgrade_give_offline_status',
177 'depend' => 'upgrade_give_payment_customer_id',
178 'version' => '1.3.4',
179 'callback' => 'give_v134_upgrade_give_offline_status',
180 )
181 );
182
183 // v1.8 form metadata upgrades.
184 $give_updates->register(
185 array(
186 'id' => 'v18_upgrades_form_metadata',
187 'version' => '1.8',
188 'callback' => 'give_v18_upgrades_form_metadata',
189 )
190 );
191
192 // v1.8.9 Upgrades
193 $give_updates->register(
194 array(
195 'id' => 'v189_upgrades_levels_post_meta',
196 'version' => '1.8.9',
197 'callback' => 'give_v189_upgrades_levels_post_meta_callback',
198 )
199 );
200
201 // v1.8.12 Upgrades
202 $give_updates->register(
203 array(
204 'id' => 'v1812_update_amount_values',
205 'version' => '1.8.12',
206 'callback' => 'give_v1812_update_amount_values_callback',
207 )
208 );
209
210 // v1.8.12 Upgrades
211 $give_updates->register(
212 array(
213 'id' => 'v1812_update_donor_purchase_values',
214 'version' => '1.8.12',
215 'callback' => 'give_v1812_update_donor_purchase_value_callback',
216 )
217 );
218
219 // v1.8.13 Upgrades for donor
220 $give_updates->register(
221 array(
222 'id' => 'v1813_update_donor_user_roles',
223 'version' => '1.8.13',
224 'callback' => 'give_v1813_update_donor_user_roles_callback',
225 )
226 );
227
228 // v1.8.17 Upgrades for donations.
229 $give_updates->register(
230 array(
231 'id' => 'v1817_update_donation_iranian_currency_code',
232 'version' => '1.8.17',
233 'callback' => 'give_v1817_update_donation_iranian_currency_code',
234 )
235 );
236
237 // v1.8.17 Upgrades for cleanup of user roles.
238 $give_updates->register(
239 array(
240 'id' => 'v1817_cleanup_user_roles',
241 'version' => '1.8.17',
242 'callback' => 'give_v1817_cleanup_user_roles',
243 )
244 );
245
246 // v1.8.18 Upgrades for assigning custom amount to existing set donations.
247 $give_updates->register(
248 array(
249 'id' => 'v1818_assign_custom_amount_set_donation',
250 'version' => '1.8.18',
251 'callback' => 'give_v1818_assign_custom_amount_set_donation',
252 )
253 );
254
255 // v1.8.18 Cleanup the Give Worker Role Caps.
256 $give_updates->register(
257 array(
258 'id' => 'v1818_give_worker_role_cleanup',
259 'version' => '1.8.18',
260 'callback' => 'give_v1818_give_worker_role_cleanup',
261 )
262 );
263
264 // v2.0.0 Upgrades
265 $give_updates->register(
266 array(
267 'id' => 'v20_upgrades_form_metadata',
268 'version' => '2.0.0',
269 'callback' => 'give_v20_upgrades_form_metadata_callback',
270 )
271 );
272
273 // v2.0.0 User Address Upgrades
274 $give_updates->register(
275 array(
276 'id' => 'v20_upgrades_user_address',
277 'version' => '2.0.0',
278 'callback' => 'give_v20_upgrades_user_address',
279 )
280 );
281
282 // v2.0.0 Upgrades
283 $give_updates->register(
284 array(
285 'id' => 'v20_upgrades_payment_metadata',
286 'version' => '2.0.0',
287 'callback' => 'give_v20_upgrades_payment_metadata_callback',
288 )
289 );
290
291 // v2.0.0 Upgrades
292 $give_updates->register(
293 array(
294 'id' => 'v20_logs_upgrades',
295 'version' => '2.0.0',
296 'callback' => 'give_v20_logs_upgrades_callback',
297
298 )
299 );
300
301 // v2.0.0 Donor Name Upgrades
302 $give_updates->register(
303 array(
304 'id' => 'v20_upgrades_donor_name',
305 'version' => '2.0.0',
306 'callback' => 'give_v20_upgrades_donor_name',
307 )
308 );
309
310 // v2.0.0 Upgrades
311 $give_updates->register(
312 array(
313 'id' => 'v20_move_metadata_into_new_table',
314 'version' => '2.0.0',
315 'callback' => 'give_v20_move_metadata_into_new_table_callback',
316 'depend' => array( 'v20_upgrades_payment_metadata', 'v20_upgrades_form_metadata' ),
317 )
318 );
319
320 // v2.0.0 Upgrades
321 $give_updates->register(
322 array(
323 'id' => 'v20_rename_donor_tables',
324 'version' => '2.0.0',
325 'callback' => 'give_v20_rename_donor_tables_callback',
326 'depend' => array(
327 'v20_move_metadata_into_new_table',
328 'v20_logs_upgrades',
329 'v20_upgrades_form_metadata',
330 'v20_upgrades_payment_metadata',
331 'v20_upgrades_user_address',
332 'v20_upgrades_donor_name',
333 ),
334 )
335 );
336
337 // v2.0.1 Upgrades
338 $give_updates->register(
339 array(
340 'id' => 'v201_upgrades_payment_metadata',
341 'version' => '2.0.1',
342 'callback' => 'give_v201_upgrades_payment_metadata_callback',
343 )
344 );
345
346 // v2.0.1 Upgrades
347 $give_updates->register(
348 array(
349 'id' => 'v201_add_missing_donors',
350 'version' => '2.0.1',
351 'callback' => 'give_v201_add_missing_donors_callback',
352 )
353 );
354
355 // Run v2.0.0 Upgrades again in 2.0.1
356 $give_updates->register(
357 array(
358 'id' => 'v201_move_metadata_into_new_table',
359 'version' => '2.0.1',
360 'callback' => 'give_v201_move_metadata_into_new_table_callback',
361 'depend' => array( 'v201_upgrades_payment_metadata', 'v201_add_missing_donors' ),
362 )
363 );
364
365 // Run v2.0.0 Upgrades again in 2.0.1
366 $give_updates->register(
367 array(
368 'id' => 'v201_logs_upgrades',
369 'version' => '2.0.1',
370 'callback' => 'give_v201_logs_upgrades_callback',
371 )
372 );
373
374 // v2.1 Verify Form Status Upgrade.
375 $give_updates->register(
376 array(
377 'id' => 'v210_verify_form_status_upgrades',
378 'version' => '2.1.0',
379 'callback' => 'give_v210_verify_form_status_upgrades_callback',
380 )
381 );
382
383 // v2.1.3 Delete non attached donation meta.
384 $give_updates->register(
385 array(
386 'id' => 'v213_delete_donation_meta',
387 'version' => '2.1.3',
388 'callback' => 'give_v213_delete_donation_meta_callback',
389 'depends' => array( 'v201_move_metadata_into_new_table' ),
390 )
391 );
392
393 // v2.1.5 Add additional capability to the give_manager role.
394 $give_updates->register(
395 array(
396 'id' => 'v215_update_donor_user_roles',
397 'version' => '2.1.5',
398 'callback' => 'give_v215_update_donor_user_roles_callback',
399 )
400 );
401
402 // v2.2.4 set each donor to anonymous by default.
403 $give_updates->register(
404 array(
405 'id' => 'v224_update_donor_meta',
406 'version' => '2.2.4',
407 'callback' => 'give_v224_update_donor_meta_callback',
408 )
409 );
410
411 // v2.2.4 Associate form IDs with donor meta of anonymous donations.
412 $give_updates->register(
413 array(
414 'id' => 'v224_update_donor_meta_forms_id',
415 'version' => '2.2.4',
416 'callback' => 'give_v224_update_donor_meta_forms_id_callback',
417 'depend' => 'v224_update_donor_meta',
418 )
419 );
420
421 // v2.3.0 Move donor notes to custom comment table.
422 $give_updates->register(
423 array(
424 'id' => 'v230_move_donor_note',
425 'version' => '2.3.0',
426 'callback' => 'give_v230_move_donor_note_callback',
427 )
428 );
429
430 // v2.3.0 Move donation notes to custom comment table.
431 $give_updates->register(
432 array(
433 'id' => 'v230_move_donation_note',
434 'version' => '2.3.0',
435 'callback' => 'give_v230_move_donation_note_callback',
436 )
437 );
438
439 // v2.3.0 remove donor wall related donor meta data.
440 $give_updates->register(
441 array(
442 'id' => 'v230_delete_donor_wall_related_donor_data',
443 'version' => '2.3.0',
444 'depend' => array(
445 'v224_update_donor_meta',
446 'v224_update_donor_meta_forms_id',
447 'v230_move_donor_note',
448 'v230_move_donation_note'
449 ),
450 'callback' => 'give_v230_delete_dw_related_donor_data_callback',
451 )
452 );
453
454 // v2.3.0 remove donor wall related comment meta data.
455 $give_updates->register(
456 array(
457 'id' => 'v230_delete_donor_wall_related_comment_data',
458 'version' => '2.3.0',
459 'callback' => 'give_v230_delete_dw_related_comment_data_callback',
460 'depend' => array(
461 'v230_move_donor_note',
462 'v230_move_donation_note'
463 ),
464 )
465 );
466
467 // v2.4.0 Update donation form goal progress data.
468 $give_updates->register(
469 array(
470 'id' => 'v240_update_form_goal_progress',
471 'version' => '2.4.0',
472 'callback' => 'give_v240_update_form_goal_progress_callback',
473 )
474 );
475
476 // v2.4.1 Update to remove sale type log
477 $give_updates->register(
478 array(
479 'id' => 'v241_remove_sale_logs',
480 'version' => '2.4.1',
481 'callback' => 'give_v241_remove_sale_logs_callback',
482 'depend' => array( 'v201_logs_upgrades' ),
483 )
484 );
485
486 }
487
488 add_action( 'give_register_updates', 'give_show_upgrade_notices' );
489
490 /**
491 * Triggers all upgrade functions
492 *
493 * This function is usually triggered via AJAX
494 *
495 * @since 1.0
496 * @return void
497 */
498 function give_trigger_upgrades() {
499
500 if ( ! current_user_can( 'manage_give_settings' ) ) {
501 wp_die(
502 esc_html__( 'You do not have permission to do GiveWP upgrades.', 'give' ), esc_html__( 'Error', 'give' ), array(
503 'response' => 403,
504 )
505 );
506 }
507
508 $give_version = get_option( 'give_version' );
509
510 if ( ! $give_version ) {
511 // 1.0 is the first version to use this option so we must add it.
512 $give_version = '1.0';
513 add_option( 'give_version', $give_version, '', false );
514 }
515
516 update_option( 'give_version', GIVE_VERSION, false );
517 delete_option( 'give_doing_upgrade' );
518
519 if ( DOING_AJAX ) {
520 die( 'complete' );
521 } // End if().
522 }
523
524 add_action( 'wp_ajax_give_trigger_upgrades', 'give_trigger_upgrades' );
525
526
527 /**
528 * Upgrades the
529 *
530 * Standardizes the discrepancies between two metakeys `_give_payment_customer_id` and `_give_payment_donor_id`
531 *
532 * @since 1.3.2
533 */
534 function give_v132_upgrade_give_payment_customer_id() {
535 global $wpdb;
536
537 /* @var Give_Updates $give_updates */
538 $give_updates = Give_Updates::get_instance();
539
540 // UPDATE DB METAKEYS.
541 $sql = "UPDATE $wpdb->postmeta SET meta_key = '_give_payment_customer_id' WHERE meta_key = '_give_payment_donor_id'";
542 $query = $wpdb->query( $sql );
543
544 $give_updates->percentage = 100;
545 give_set_upgrade_complete( 'upgrade_give_payment_customer_id' );
546 }
547
548
549 /**
550 * Upgrades the Offline Status
551 *
552 * Reverses the issue where offline donations in "pending" status where inappropriately marked as abandoned
553 *
554 * @since 1.3.4
555 */
556 function give_v134_upgrade_give_offline_status() {
557 global $wpdb;
558
559 /* @var Give_Updates $give_updates */
560 $give_updates = Give_Updates::get_instance();
561
562 // Get abandoned offline payments.
563 $select = "SELECT ID FROM $wpdb->posts p ";
564 $join = "LEFT JOIN $wpdb->postmeta m ON p.ID = m.post_id ";
565 $where = "WHERE p.post_type = 'give_payment' ";
566 $where .= "AND ( p.post_status = 'abandoned' )";
567 $where .= "AND ( m.meta_key = '_give_payment_gateway' AND m.meta_value = 'offline' )";
568
569 $sql = $select . $join . $where;
570 $found_payments = $wpdb->get_col( $sql );
571
572 foreach ( $found_payments as $payment ) {
573
574 // Only change ones marked abandoned since our release last week because the admin may have marked some abandoned themselves.
575 $modified_time = get_post_modified_time( 'U', false, $payment );
576
577 // 1450124863 = 12/10/2015 20:42:25.
578 if ( $modified_time >= 1450124863 ) {
579
580 give_update_payment_status( $payment, 'pending' );
581
582 }
583 }
584
585 $give_updates->percentage = 100;
586 give_set_upgrade_complete( 'upgrade_give_offline_status' );
587 }
588
589
590 /**
591 * Cleanup User Roles
592 *
593 * This upgrade routine removes unused roles and roles with typos
594 *
595 * @since 1.5.2
596 */
597 function give_v152_cleanup_users() {
598
599 $give_version = get_option( 'give_version' );
600
601 if ( ! $give_version ) {
602 // 1.0 is the first version to use this option so we must add it.
603 $give_version = '1.0';
604 }
605
606 $give_version = preg_replace( '/[^0-9.].*/', '', $give_version );
607
608 // v1.5.2 Upgrades
609 if ( version_compare( $give_version, '1.5.2', '<' ) || ! give_has_upgrade_completed( 'upgrade_give_user_caps_cleanup' ) ) {
610
611 // Delete all caps with "ss".
612 // Also delete all unused "campaign" roles.
613 $delete_caps = array(
614 'delete_give_formss',
615 'delete_others_give_formss',
616 'delete_private_give_formss',
617 'delete_published_give_formss',
618 'read_private_forms',
619 'edit_give_formss',
620 'edit_others_give_formss',
621 'edit_private_give_formss',
622 'edit_published_give_formss',
623 'publish_give_formss',
624 'read_private_give_formss',
625 'assign_give_campaigns_terms',
626 'delete_give_campaigns',
627 'delete_give_campaigns_terms',
628 'delete_give_campaignss',
629 'delete_others_give_campaignss',
630 'delete_private_give_campaignss',
631 'delete_published_give_campaignss',
632 'edit_give_campaigns',
633 'edit_give_campaigns_terms',
634 'edit_give_campaignss',
635 'edit_others_give_campaignss',
636 'edit_private_give_campaignss',
637 'edit_published_give_campaignss',
638 'manage_give_campaigns_terms',
639 'publish_give_campaignss',
640 'read_give_campaigns',
641 'read_private_give_campaignss',
642 'view_give_campaigns_stats',
643 'delete_give_paymentss',
644 'delete_others_give_paymentss',
645 'delete_private_give_paymentss',
646 'delete_published_give_paymentss',
647 'edit_give_paymentss',
648 'edit_others_give_paymentss',
649 'edit_private_give_paymentss',
650 'edit_published_give_paymentss',
651 'publish_give_paymentss',
652 'read_private_give_paymentss',
653 );
654
655 global $wp_roles;
656 foreach ( $delete_caps as $cap ) {
657 foreach ( array_keys( $wp_roles->roles ) as $role ) {
658 $wp_roles->remove_cap( $role, $cap );
659 }
660 }
661
662 // Create Give plugin roles.
663 $roles = new Give_Roles();
664 $roles->add_roles();
665 $roles->add_caps();
666
667 // The Update Ran.
668 update_option( 'give_version', preg_replace( '/[^0-9.].*/', '', GIVE_VERSION ), false );
669 give_set_upgrade_complete( 'upgrade_give_user_caps_cleanup' );
670 delete_option( 'give_doing_upgrade' );
671
672 }// End if().
673
674 }
675
676 add_action( 'admin_init', 'give_v152_cleanup_users' );
677
678 /**
679 * 1.6 Upgrade routine to create the customer meta table.
680 *
681 * @since 1.6
682 * @return void
683 */
684 function give_v16_upgrades() {
685 // Create the donor databases.
686 $donors_db = new Give_DB_Donors();
687 $donors_db->create_table();
688 $donor_meta = new Give_DB_Donor_Meta();
689 $donor_meta->create_table();
690 }
691
692 /**
693 * 1.7 Upgrades.
694 *
695 * a. Update license api data for plugin addons.
696 * b. Cleanup user roles.
697 *
698 * @since 1.7
699 * @return void
700 */
701 function give_v17_upgrades() {
702 // Upgrade license data.
703 give_v17_upgrade_addon_license_data();
704 give_v17_cleanup_roles();
705 }
706
707 /**
708 * Upgrade license data
709 *
710 * @since 1.7
711 */
712 function give_v17_upgrade_addon_license_data() {
713 $give_options = give_get_settings();
714
715 $api_url = 'https://givewp.com/give-sl-api/';
716
717 // Get addons license key.
718 $addons = array();
719 foreach ( $give_options as $key => $value ) {
720 if ( false !== strpos( $key, '_license_key' ) ) {
721 $addons[ $key ] = $value;
722 }
723 }
724
725 // Bailout: We do not have any addon license data to upgrade.
726 if ( empty( $addons ) ) {
727 return false;
728 }
729
730 foreach ( $addons as $key => $addon_license ) {
731
732 // Get addon shortname.
733 $shortname = str_replace( '_license_key', '', $key );
734
735 // Addon license option name.
736 $addon_license_option_name = $shortname . '_license_active';
737
738 // bailout if license is empty.
739 if ( empty( $addon_license ) ) {
740 delete_option( $addon_license_option_name );
741 continue;
742 }
743
744 // Get addon name.
745 $addon_name = array();
746 $addon_name_parts = explode( '_', str_replace( 'give_', '', $shortname ) );
747 foreach ( $addon_name_parts as $name_part ) {
748
749 // Fix addon name
750 switch ( $name_part ) {
751 case 'authorizenet':
752 $name_part = 'authorize.net';
753 break;
754 }
755
756 $addon_name[] = ucfirst( $name_part );
757 }
758
759 $addon_name = implode( ' ', $addon_name );
760
761 // Data to send to the API.
762 $api_params = array(
763 'edd_action' => 'activate_license', // never change from "edd_" to "give_"!
764 'license' => $addon_license,
765 'item_name' => urlencode( $addon_name ),
766 'url' => home_url(),
767 );
768
769 // Call the API.
770 $response = wp_remote_post(
771 $api_url,
772 array(
773 'timeout' => 15,
774 'sslverify' => false,
775 'body' => $api_params,
776 )
777 );
778
779 // Make sure there are no errors.
780 if ( is_wp_error( $response ) ) {
781 delete_option( $addon_license_option_name );
782 continue;
783 }
784
785 // Tell WordPress to look for updates.
786 set_site_transient( 'update_plugins', null );
787
788 // Decode license data.
789 $license_data = json_decode( wp_remote_retrieve_body( $response ) );
790 update_option( $addon_license_option_name, $license_data, false );
791 }// End foreach().
792 }
793
794
795 /**
796 * Cleanup User Roles.
797 *
798 * This upgrade routine removes unused roles and roles with typos.
799 *
800 * @since 1.7
801 */
802 function give_v17_cleanup_roles() {
803
804 // Delete all caps with "_give_forms_" and "_give_payments_".
805 // These roles have no usage; the proper is singular.
806 $delete_caps = array(
807 'view_give_forms_stats',
808 'delete_give_forms_terms',
809 'assign_give_forms_terms',
810 'edit_give_forms_terms',
811 'manage_give_forms_terms',
812 'view_give_payments_stats',
813 'manage_give_payments_terms',
814 'edit_give_payments_terms',
815 'assign_give_payments_terms',
816 'delete_give_payments_terms',
817 );
818
819 global $wp_roles;
820 foreach ( $delete_caps as $cap ) {
821 foreach ( array_keys( $wp_roles->roles ) as $role ) {
822 $wp_roles->remove_cap( $role, $cap );
823 }
824 }
825
826 // Set roles again.
827 $roles = new Give_Roles();
828 $roles->add_roles();
829 $roles->add_caps();
830
831 }
832
833 /**
834 * 1.8 Upgrades.
835 *
836 * a. Upgrade checkbox settings to radio button settings.
837 * a. Update form meta for new metabox settings.
838 *
839 * @since 1.8
840 * @return void
841 */
842 function give_v18_upgrades() {
843 // Upgrade checkbox settings to radio button settings.
844 give_v18_upgrades_core_setting();
845 }
846
847 /**
848 * Upgrade core settings.
849 *
850 * @since 1.8
851 * @return void
852 */
853 function give_v18_upgrades_core_setting() {
854 // Core settings which changes from checkbox to radio.
855 $core_setting_names = array_merge(
856 array_keys( give_v18_renamed_core_settings() ),
857 array(
858 'uninstall_on_delete',
859 'scripts_footer',
860 'test_mode',
861 'email_access',
862 'terms',
863 'give_offline_donation_enable_billing_fields',
864 )
865 );
866
867 // Bailout: If not any setting define.
868 if ( $give_settings = get_option( 'give_settings' ) ) {
869
870 $setting_changed = false;
871
872 // Loop: check each setting field.
873 foreach ( $core_setting_names as $setting_name ) {
874 // New setting name.
875 $new_setting_name = preg_replace( '/^(enable_|disable_)/', '', $setting_name );
876
877 // Continue: If setting already set.
878 if (
879 array_key_exists( $new_setting_name, $give_settings )
880 && in_array( $give_settings[ $new_setting_name ], array( 'enabled', 'disabled' ) )
881 ) {
882 continue;
883 }
884
885 // Set checkbox value to radio value.
886 $give_settings[ $setting_name ] = ( ! empty( $give_settings[ $setting_name ] ) && 'on' === $give_settings[ $setting_name ] ? 'enabled' : 'disabled' );
887
888 // @see https://github.com/impress-org/give/issues/1063.
889 if ( false !== strpos( $setting_name, 'disable_' ) ) {
890
891 $give_settings[ $new_setting_name ] = ( give_is_setting_enabled( $give_settings[ $setting_name ] ) ? 'disabled' : 'enabled' );
892 } elseif ( false !== strpos( $setting_name, 'enable_' ) ) {
893
894 $give_settings[ $new_setting_name ] = ( give_is_setting_enabled( $give_settings[ $setting_name ] ) ? 'enabled' : 'disabled' );
895 }
896
897 // Tell bot to update core setting to db.
898 if ( ! $setting_changed ) {
899 $setting_changed = true;
900 }
901 }
902
903 // Update setting only if they changed.
904 if ( $setting_changed ) {
905 update_option( 'give_settings', $give_settings, false );
906 }
907 }// End if().
908
909 give_set_upgrade_complete( 'v18_upgrades_core_setting' );
910 }
911
912 /**
913 * Upgrade form metadata for new metabox settings.
914 *
915 * @since 1.8
916 * @return void
917 */
918 function give_v18_upgrades_form_metadata() {
919 /* @var Give_Updates $give_updates */
920 $give_updates = Give_Updates::get_instance();
921
922 // form query
923 $forms = new WP_Query(
924 array(
925 'paged' => $give_updates->step,
926 'status' => 'any',
927 'order' => 'ASC',
928 'post_type' => 'give_forms',
929 'posts_per_page' => 20,
930 )
931 );
932
933 if ( $forms->have_posts() ) {
934 $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 20 ) );
935
936 while ( $forms->have_posts() ) {
937 $forms->the_post();
938
939 // Form content.
940 // Note in version 1.8 display content setting split into display content and content placement setting.
941 // You can delete _give_content_option in future.
942 $show_content = give_get_meta( get_the_ID(), '_give_content_option', true );
943 if ( $show_content && ! give_get_meta( get_the_ID(), '_give_display_content', true ) ) {
944 $field_value = ( 'none' !== $show_content ? 'enabled' : 'disabled' );
945 give_update_meta( get_the_ID(), '_give_display_content', $field_value );
946
947 $field_value = ( 'none' !== $show_content ? $show_content : 'give_pre_form' );
948 give_update_meta( get_the_ID(), '_give_content_placement', $field_value );
949 }
950
951 // "Disable" Guest Donation. Checkbox.
952 // See: https://github.com/impress-org/give/issues/1470.
953 $guest_donation = give_get_meta( get_the_ID(), '_give_logged_in_only', true );
954 $guest_donation_newval = ( in_array( $guest_donation, array( 'yes', 'on' ) ) ? 'disabled' : 'enabled' );
955 give_update_meta( get_the_ID(), '_give_logged_in_only', $guest_donation_newval );
956
957 // Offline Donations.
958 // See: https://github.com/impress-org/give/issues/1579.
959 $offline_donation = give_get_meta( get_the_ID(), '_give_customize_offline_donations', true );
960 if ( 'no' === $offline_donation ) {
961 $offline_donation_newval = 'global';
962 } elseif ( 'yes' === $offline_donation ) {
963 $offline_donation_newval = 'enabled';
964 } else {
965 $offline_donation_newval = 'disabled';
966 }
967 give_update_meta( get_the_ID(), '_give_customize_offline_donations', $offline_donation_newval );
968
969 // Convert yes/no setting field to enabled/disabled.
970 $form_radio_settings = array(
971 // Custom Amount.
972 '_give_custom_amount',
973
974 // Donation Gaol.
975 '_give_goal_option',
976
977 // Close Form.
978 '_give_close_form_when_goal_achieved',
979
980 // Term & conditions.
981 '_give_terms_option',
982
983 // Billing fields.
984 '_give_offline_donation_enable_billing_fields_single',
985 );
986
987 foreach ( $form_radio_settings as $meta_key ) {
988 // Get value.
989 $field_value = give_get_meta( get_the_ID(), $meta_key, true );
990
991 // Convert meta value only if it is in yes/no/none.
992 if ( in_array( $field_value, array( 'yes', 'on', 'no', 'none' ) ) ) {
993
994 $field_value = ( in_array( $field_value, array( 'yes', 'on' ) ) ? 'enabled' : 'disabled' );
995 give_update_meta( get_the_ID(), $meta_key, $field_value );
996 }
997 }
998 }// End while().
999
1000 wp_reset_postdata();
1001
1002 } else {
1003 // No more forms found, finish up.
1004 give_set_upgrade_complete( 'v18_upgrades_form_metadata' );
1005 }
1006 }
1007
1008
1009 /**
1010 * Get list of core setting renamed in version 1.8.
1011 *
1012 * @since 1.8
1013 * @return array
1014 */
1015 function give_v18_renamed_core_settings() {
1016 return array(
1017 'disable_paypal_verification' => 'paypal_verification',
1018 'disable_css' => 'css',
1019 'disable_welcome' => 'welcome',
1020 'disable_forms_singular' => 'forms_singular',
1021 'disable_forms_archives' => 'forms_archives',
1022 'disable_forms_excerpt' => 'forms_excerpt',
1023 'disable_form_featured_img' => 'form_featured_img',
1024 'disable_form_sidebar' => 'form_sidebar',
1025 'disable_admin_notices' => 'admin_notices',
1026 'disable_the_content_filter' => 'the_content_filter',
1027 'enable_floatlabels' => 'floatlabels',
1028 'enable_categories' => 'categories',
1029 'enable_tags' => 'tags',
1030 );
1031 }
1032
1033
1034 /**
1035 * Upgrade core settings.
1036 *
1037 * @since 1.8.7
1038 * @return void
1039 */
1040 function give_v187_upgrades() {
1041 global $wpdb;
1042
1043 /**
1044 * Upgrade 1: Remove stat and cache transients.
1045 */
1046 $cached_options = $wpdb->get_col(
1047 $wpdb->prepare(
1048 "
1049 SELECT *
1050 FROM {$wpdb->options}
1051 WHERE (
1052 option_name LIKE %s
1053 OR option_name LIKE %s
1054 OR option_name LIKE %s
1055 OR option_name LIKE %s
1056 OR option_name LIKE %s
1057 OR option_name LIKE %s
1058 OR option_name LIKE %s
1059 OR option_name LIKE %s
1060 OR option_name LIKE %s
1061 OR option_name LIKE %s
1062 OR option_name LIKE %s
1063 OR option_name LIKE %s
1064 OR option_name LIKE %s
1065 )
1066 ",
1067 array(
1068 '%_transient_give_stats_%',
1069 'give_cache%',
1070 '%_transient_give_add_ons_feed%',
1071 '%_transient__give_ajax_works' .
1072 '%_transient_give_total_api_keys%',
1073 '%_transient_give_i18n_give_promo_hide%',
1074 '%_transient_give_contributors%',
1075 '%_transient_give_estimated_monthly_stats%',
1076 '%_transient_give_earnings_total%',
1077 '%_transient_give_i18n_give_%',
1078 '%_transient__give_installed%',
1079 '%_transient__give_activation_redirect%',
1080 '%_transient__give_hide_license_notices_shortly_%',
1081 '%give_income_total%',
1082 )
1083 ),
1084 1
1085 );
1086
1087 // User related transients.
1088 $user_apikey_options = $wpdb->get_results(
1089 $wpdb->prepare(
1090 "SELECT user_id, meta_key
1091 FROM $wpdb->usermeta
1092 WHERE meta_value=%s",
1093 'give_user_public_key'
1094 ),
1095 ARRAY_A
1096 );
1097
1098 if ( ! empty( $user_apikey_options ) ) {
1099 foreach ( $user_apikey_options as $user ) {
1100 $cached_options[] = '_transient_' . md5( 'give_api_user_' . $user['meta_key'] );
1101 $cached_options[] = '_transient_' . md5( 'give_api_user_public_key' . $user['user_id'] );
1102 $cached_options[] = '_transient_' . md5( 'give_api_user_secret_key' . $user['user_id'] );
1103 }
1104 }
1105
1106 if ( ! empty( $cached_options ) ) {
1107 foreach ( $cached_options as $option ) {
1108 switch ( true ) {
1109 case ( false !== strpos( $option, 'transient' ) ):
1110 $option = str_replace( '_transient_', '', $option );
1111 delete_transient( $option );
1112 break;
1113
1114 default:
1115 delete_option( $option );
1116 }
1117 }
1118 }
1119 }
1120
1121 /**
1122 * Update Capabilities for Give_Worker User Role.
1123 *
1124 * This upgrade routine will update access rights for Give_Worker User Role.
1125 *
1126 * @since 1.8.8
1127 */
1128 function give_v188_upgrades() {
1129
1130 global $wp_roles;
1131
1132 // Get the role object.
1133 $give_worker = get_role( 'give_worker' );
1134
1135 // A list of capabilities to add for give workers.
1136 $caps_to_add = array(
1137 'edit_posts',
1138 'edit_pages',
1139 );
1140
1141 foreach ( $caps_to_add as $cap ) {
1142 // Add the capability.
1143 $give_worker->add_cap( $cap );
1144 }
1145
1146 }
1147
1148 /**
1149 * Update Post meta for minimum and maximum amount for multi level donation forms
1150 *
1151 * This upgrade routine adds post meta for give_forms CPT for multi level donation form.
1152 *
1153 * @since 1.8.9
1154 */
1155 function give_v189_upgrades_levels_post_meta_callback() {
1156 /* @var Give_Updates $give_updates */
1157 $give_updates = Give_Updates::get_instance();
1158
1159 // form query.
1160 $donation_forms = new WP_Query(
1161 array(
1162 'paged' => $give_updates->step,
1163 'status' => 'any',
1164 'order' => 'ASC',
1165 'post_type' => 'give_forms',
1166 'posts_per_page' => 20,
1167 )
1168 );
1169
1170 if ( $donation_forms->have_posts() ) {
1171 $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) );
1172
1173 while ( $donation_forms->have_posts() ) {
1174 $donation_forms->the_post();
1175 $form_id = get_the_ID();
1176
1177 // Remove formatting from _give_set_price.
1178 update_post_meta(
1179 $form_id,
1180 '_give_set_price',
1181 give_sanitize_amount( get_post_meta( $form_id, '_give_set_price', true ) )
1182 );
1183
1184 // Remove formatting from _give_custom_amount_minimum.
1185 update_post_meta(
1186 $form_id,
1187 '_give_custom_amount_minimum',
1188 give_sanitize_amount( get_post_meta( $form_id, '_give_custom_amount_minimum', true ) )
1189 );
1190
1191 // Bailout.
1192 if ( 'set' === get_post_meta( $form_id, '_give_price_option', true ) ) {
1193 continue;
1194 }
1195
1196 $donation_levels = get_post_meta( $form_id, '_give_donation_levels', true );
1197
1198 if ( ! empty( $donation_levels ) ) {
1199
1200 foreach ( $donation_levels as $index => $donation_level ) {
1201 if ( isset( $donation_level['_give_amount'] ) ) {
1202 $donation_levels[ $index ]['_give_amount'] = give_sanitize_amount( $donation_level['_give_amount'] );
1203 }
1204 }
1205
1206 update_post_meta( $form_id, '_give_donation_levels', $donation_levels );
1207
1208 $donation_levels_amounts = wp_list_pluck( $donation_levels, '_give_amount' );
1209
1210 $min_amount = min( $donation_levels_amounts );
1211 $max_amount = max( $donation_levels_amounts );
1212
1213 // Set Minimum and Maximum amount for Multi Level Donation Forms
1214 give_update_meta( $form_id, '_give_levels_minimum_amount', $min_amount ? give_sanitize_amount( $min_amount ) : 0 );
1215 give_update_meta( $form_id, '_give_levels_maximum_amount', $max_amount ? give_sanitize_amount( $max_amount ) : 0 );
1216 }
1217 }
1218
1219 /* Restore original Post Data */
1220 wp_reset_postdata();
1221 } else {
1222 // The Update Ran.
1223 give_set_upgrade_complete( 'v189_upgrades_levels_post_meta' );
1224 }
1225
1226 }
1227
1228
1229 /**
1230 * Give version 1.8.9 upgrades
1231 *
1232 * @since 1.8.9
1233 */
1234 function give_v189_upgrades() {
1235 /**
1236 * 1. Remove user license related notice show blocked ( Give_Notice will handle )
1237 */
1238 global $wpdb;
1239
1240 // Delete permanent notice blocker.
1241 $wpdb->query(
1242 $wpdb->prepare(
1243 "
1244 DELETE FROM $wpdb->usermeta
1245 WHERE meta_key
1246 LIKE '%%%s%%'
1247 ",
1248 '_give_hide_license_notices_permanently'
1249 )
1250 );
1251
1252 // Delete short notice blocker.
1253 $wpdb->query(
1254 $wpdb->prepare(
1255 "
1256 DELETE FROM $wpdb->options
1257 WHERE option_name
1258 LIKE '%%%s%%'
1259 ",
1260 '__give_hide_license_notices_shortly_'
1261 )
1262 );
1263 }
1264
1265 /**
1266 * 2.0 Upgrades.
1267 *
1268 * @since 2.0
1269 * @return void
1270 */
1271 function give_v20_upgrades() {
1272 // Update cache setting.
1273 give_update_option( 'cache', 'enabled' );
1274
1275 // Upgrade email settings.
1276 give_v20_upgrades_email_setting();
1277 }
1278
1279 /**
1280 * Move old email api settings to new email setting api for following emails:
1281 * 1. new offline donation [This was hard coded]
1282 * 2. offline donation instruction
1283 * 3. new donation
1284 * 4. donation receipt
1285 *
1286 * @since 2.0
1287 */
1288 function give_v20_upgrades_email_setting() {
1289 $all_setting = give_get_settings();
1290
1291 // Bailout on fresh install.
1292 if ( empty( $all_setting ) ) {
1293 return;
1294 }
1295
1296 $settings = array(
1297 'offline_donation_subject' => 'offline-donation-instruction_email_subject',
1298 'global_offline_donation_email' => 'offline-donation-instruction_email_message',
1299 'donation_subject' => 'donation-receipt_email_subject',
1300 'donation_receipt' => 'donation-receipt_email_message',
1301 'donation_notification_subject' => 'new-donation_email_subject',
1302 'donation_notification' => 'new-donation_email_message',
1303 'admin_notice_emails' => array(
1304 'new-donation_recipient',
1305 'new-offline-donation_recipient',
1306 'new-donor-register_recipient',
1307 ),
1308 'admin_notices' => 'new-donation_notification',
1309 );
1310
1311 foreach ( $settings as $old_setting => $new_setting ) {
1312 // Do not update already modified
1313 if ( ! is_array( $new_setting ) ) {
1314 if ( array_key_exists( $new_setting, $all_setting ) || ! array_key_exists( $old_setting, $all_setting ) ) {
1315 continue;
1316 }
1317 }
1318
1319 switch ( $old_setting ) {
1320 case 'admin_notices':
1321 $notification_status = give_get_option( $old_setting, 'enabled' );
1322
1323 give_update_option( $new_setting, $notification_status );
1324
1325 // @todo: Delete this option later ( version > 2.0 ), We need this for per form email addon.
1326 // give_delete_option( $old_setting );
1327 break;
1328
1329 // @todo: Delete this option later ( version > 2.0 ) because we need this for backward compatibility give_get_admin_notice_emails.
1330 case 'admin_notice_emails':
1331 $recipients = give_get_admin_notice_emails();
1332
1333 foreach ( $new_setting as $setting ) {
1334 // bailout if setting already exist.
1335 if ( array_key_exists( $setting, $all_setting ) ) {
1336 continue;
1337 }
1338
1339 give_update_option( $setting, $recipients );
1340 }
1341 break;
1342
1343 default:
1344 give_update_option( $new_setting, give_get_option( $old_setting ) );
1345 give_delete_option( $old_setting );
1346 }
1347 }
1348 }
1349
1350 /**
1351 * Give version 1.8.9 upgrades
1352 *
1353 * @since 1.8.9
1354 */
1355 function give_v1812_upgrades() {
1356 /**
1357 * Validate number format settings.
1358 */
1359 $give_settings = give_get_settings();
1360 $give_setting_updated = false;
1361
1362 if ( $give_settings['thousands_separator'] === $give_settings['decimal_separator'] ) {
1363 $give_settings['number_decimals'] = 0;
1364 $give_settings['decimal_separator'] = '';
1365 $give_setting_updated = true;
1366
1367 } elseif ( empty( $give_settings['decimal_separator'] ) ) {
1368 $give_settings['number_decimals'] = 0;
1369 $give_setting_updated = true;
1370
1371 } elseif ( 6 < absint( $give_settings['number_decimals'] ) ) {
1372 $give_settings['number_decimals'] = 5;
1373 $give_setting_updated = true;
1374 }
1375
1376 if ( $give_setting_updated ) {
1377 update_option( 'give_settings', $give_settings, false );
1378 }
1379 }
1380
1381
1382 /**
1383 * Give version 1.8.12 update
1384 *
1385 * Standardized amount values to six decimal
1386 *
1387 * @see https://github.com/impress-org/give/issues/1849#issuecomment-315128602
1388 *
1389 * @since 1.8.12
1390 */
1391 function give_v1812_update_amount_values_callback() {
1392 /* @var Give_Updates $give_updates */
1393 $give_updates = Give_Updates::get_instance();
1394
1395 // form query.
1396 $donation_forms = new WP_Query(
1397 array(
1398 'paged' => $give_updates->step,
1399 'status' => 'any',
1400 'order' => 'ASC',
1401 'post_type' => array( 'give_forms', 'give_payment' ),
1402 'posts_per_page' => 20,
1403 )
1404 );
1405 if ( $donation_forms->have_posts() ) {
1406 $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) );
1407
1408 while ( $donation_forms->have_posts() ) {
1409 $donation_forms->the_post();
1410 global $post;
1411
1412 $meta = get_post_meta( $post->ID );
1413
1414 switch ( $post->post_type ) {
1415 case 'give_forms':
1416 // _give_set_price.
1417 if ( ! empty( $meta['_give_set_price'][0] ) ) {
1418 update_post_meta( $post->ID, '_give_set_price', give_sanitize_amount_for_db( $meta['_give_set_price'][0] ) );
1419 }
1420
1421 // _give_custom_amount_minimum.
1422 if ( ! empty( $meta['_give_custom_amount_minimum'][0] ) ) {
1423 update_post_meta( $post->ID, '_give_custom_amount_minimum', give_sanitize_amount_for_db( $meta['_give_custom_amount_minimum'][0] ) );
1424 }
1425
1426 // _give_levels_minimum_amount.
1427 if ( ! empty( $meta['_give_levels_minimum_amount'][0] ) ) {
1428 update_post_meta( $post->ID, '_give_levels_minimum_amount', give_sanitize_amount_for_db( $meta['_give_levels_minimum_amount'][0] ) );
1429 }
1430
1431 // _give_levels_maximum_amount.
1432 if ( ! empty( $meta['_give_levels_maximum_amount'][0] ) ) {
1433 update_post_meta( $post->ID, '_give_levels_maximum_amount', give_sanitize_amount_for_db( $meta['_give_levels_maximum_amount'][0] ) );
1434 }
1435
1436 // _give_set_goal.
1437 if ( ! empty( $meta['_give_set_goal'][0] ) ) {
1438 update_post_meta( $post->ID, '_give_set_goal', give_sanitize_amount_for_db( $meta['_give_set_goal'][0] ) );
1439 }
1440
1441 // _give_form_earnings.
1442 if ( ! empty( $meta['_give_form_earnings'][0] ) ) {
1443 update_post_meta( $post->ID, '_give_form_earnings', give_sanitize_amount_for_db( $meta['_give_form_earnings'][0] ) );
1444 }
1445
1446 // _give_custom_amount_minimum.
1447 if ( ! empty( $meta['_give_donation_levels'][0] ) ) {
1448 $donation_levels = unserialize( $meta['_give_donation_levels'][0] );
1449
1450 foreach ( $donation_levels as $index => $level ) {
1451 if ( empty( $level['_give_amount'] ) ) {
1452 continue;
1453 }
1454
1455 $donation_levels[ $index ]['_give_amount'] = give_sanitize_amount_for_db( $level['_give_amount'] );
1456 }
1457
1458 $meta['_give_donation_levels'] = $donation_levels;
1459 update_post_meta( $post->ID, '_give_donation_levels', $meta['_give_donation_levels'] );
1460 }
1461
1462 break;
1463
1464 case 'give_payment':
1465 // _give_payment_total.
1466 if ( ! empty( $meta['_give_payment_total'][0] ) ) {
1467 update_post_meta( $post->ID, '_give_payment_total', give_sanitize_amount_for_db( $meta['_give_payment_total'][0] ) );
1468 }
1469
1470 break;
1471 }
1472 }
1473
1474 /* Restore original Post Data */
1475 wp_reset_postdata();
1476 } else {
1477 // The Update Ran.
1478 give_set_upgrade_complete( 'v1812_update_amount_values' );
1479 }
1480 }
1481
1482
1483 /**
1484 * Give version 1.8.12 update
1485 *
1486 * Standardized amount values to six decimal for donor
1487 *
1488 * @see https://github.com/impress-org/give/issues/1849#issuecomment-315128602
1489 *
1490 * @since 1.8.12
1491 */
1492 function give_v1812_update_donor_purchase_value_callback() {
1493 /* @var Give_Updates $give_updates */
1494 $give_updates = Give_Updates::get_instance();
1495
1496 // form query.
1497 $donors = Give()->donors->get_donors(
1498 array(
1499 'number' => 20,
1500 'offset' => $give_updates->get_offset( 20 ),
1501 )
1502 );
1503
1504 if ( ! empty( $donors ) ) {
1505 $give_updates->set_percentage( Give()->donors->count(), $give_updates->get_offset( 20 ) );
1506
1507 /* @var Object $donor */
1508 foreach ( $donors as $donor ) {
1509 Give()->donors->update( $donor->id, array( 'purchase_value' => give_sanitize_amount_for_db( $donor->purchase_value ) ) );
1510 }
1511 } else {
1512 // The Update Ran.
1513 give_set_upgrade_complete( 'v1812_update_donor_purchase_values' );
1514 }
1515 }
1516
1517 /**
1518 * Upgrade routine for updating user roles for existing donors.
1519 *
1520 * @since 1.8.13
1521 */
1522 function give_v1813_update_donor_user_roles_callback() {
1523 /* @var Give_Updates $give_updates */
1524 $give_updates = Give_Updates::get_instance();
1525
1526 // Fetch all the existing donors.
1527 $donors = Give()->donors->get_donors(
1528 array(
1529 'number' => 20,
1530 'offset' => $give_updates->get_offset( 20 ),
1531 )
1532 );
1533
1534 if ( ! empty( $donors ) ) {
1535 $give_updates->set_percentage( Give()->donors->count(), $give_updates->get_offset( 20 ) );
1536
1537 /* @var Object $donor */
1538 foreach ( $donors as $donor ) {
1539 $user_id = $donor->user_id;
1540
1541 // Proceed, if donor is attached with user.
1542 if ( $user_id ) {
1543 $user = get_userdata( $user_id );
1544
1545 // Update user role, if user has subscriber role.
1546 if ( is_array( $user->roles ) && in_array( 'subscriber', $user->roles ) ) {
1547 wp_update_user(
1548 array(
1549 'ID' => $user_id,
1550 'role' => 'give_donor',
1551 )
1552 );
1553 }
1554 }
1555 }
1556 } else {
1557 // The Update Ran.
1558 give_set_upgrade_complete( 'v1813_update_donor_user_roles' );
1559 }
1560 }
1561
1562
1563 /**
1564 * Version 1.8.13 automatic updates
1565 *
1566 * @since 1.8.13
1567 */
1568 function give_v1813_upgrades() {
1569 // Update admin setting.
1570 give_update_option( 'donor_default_user_role', 'give_donor' );
1571
1572 // Update Give roles.
1573 $roles = new Give_Roles();
1574 $roles->add_roles();
1575 $roles->add_caps();
1576 }
1577
1578 /**
1579 * Correct currency code for "Iranian Currency" for all of the payments.
1580 *
1581 * @since 1.8.17
1582 */
1583 function give_v1817_update_donation_iranian_currency_code() {
1584 /* @var Give_Updates $give_updates */
1585 $give_updates = Give_Updates::get_instance();
1586
1587 // form query.
1588 $payments = new WP_Query(
1589 array(
1590 'paged' => $give_updates->step,
1591 'status' => 'any',
1592 'order' => 'ASC',
1593 'post_type' => array( 'give_payment' ),
1594 'posts_per_page' => 100,
1595 )
1596 );
1597
1598 if ( $payments->have_posts() ) {
1599 $give_updates->set_percentage( $payments->found_posts, ( $give_updates->step * 100 ) );
1600
1601 while ( $payments->have_posts() ) {
1602 $payments->the_post();
1603
1604 $payment_meta = give_get_payment_meta( get_the_ID() );
1605
1606 if ( 'RIAL' === $payment_meta['currency'] ) {
1607 $payment_meta['currency'] = 'IRR';
1608 give_update_meta( get_the_ID(), '_give_payment_meta', $payment_meta );
1609 }
1610 }
1611 } else {
1612 // The Update Ran.
1613 give_set_upgrade_complete( 'v1817_update_donation_iranian_currency_code' );
1614 }
1615 }
1616
1617 /**
1618 * Correct currency code for "Iranian Currency" in Give setting.
1619 * Version 1.8.17 automatic updates
1620 *
1621 * @since 1.8.17
1622 */
1623 function give_v1817_upgrades() {
1624 $give_settings = give_get_settings();
1625
1626 if ( 'RIAL' === $give_settings['currency'] ) {
1627 $give_settings['currency'] = 'IRR';
1628 update_option( 'give_settings', $give_settings, false );
1629 }
1630 }
1631
1632 /**
1633 * Process Clean up of User Roles for more flexibility.
1634 *
1635 * @since 1.8.17
1636 */
1637 function give_v1817_process_cleanup_user_roles() {
1638
1639 global $wp_roles;
1640
1641 if ( ! ( $wp_roles instanceof WP_Roles ) ) {
1642 return;
1643 }
1644
1645 // Add Capabilities to user roles as required.
1646 $add_caps = array(
1647 'administrator' => array(
1648 'view_give_payments',
1649 ),
1650 );
1651
1652 // Remove Capabilities to user roles as required.
1653 $remove_caps = array(
1654 'give_manager' => array(
1655 'edit_others_pages',
1656 'edit_others_posts',
1657 'delete_others_pages',
1658 'delete_others_posts',
1659 'manage_categories',
1660 'import',
1661 'export',
1662 ),
1663 );
1664
1665 foreach ( $add_caps as $role => $caps ) {
1666 foreach ( $caps as $cap ) {
1667 $wp_roles->add_cap( $role, $cap );
1668 }
1669 }
1670
1671 foreach ( $remove_caps as $role => $caps ) {
1672 foreach ( $caps as $cap ) {
1673 $wp_roles->remove_cap( $role, $cap );
1674 }
1675 }
1676
1677 }
1678
1679 /**
1680 * Upgrade Routine - Clean up of User Roles for more flexibility.
1681 *
1682 * @since 1.8.17
1683 */
1684 function give_v1817_cleanup_user_roles() {
1685 /* @var Give_Updates $give_updates */
1686 $give_updates = Give_Updates::get_instance();
1687
1688 give_v1817_process_cleanup_user_roles();
1689
1690 $give_updates->percentage = 100;
1691
1692 // Create Give plugin roles.
1693 $roles = new Give_Roles();
1694 $roles->add_roles();
1695 $roles->add_caps();
1696
1697 give_set_upgrade_complete( 'v1817_cleanup_user_roles' );
1698 }
1699
1700 /**
1701 * Automatic Upgrade for release 1.8.18.
1702 *
1703 * @since 1.8.18
1704 */
1705 function give_v1818_upgrades() {
1706
1707 // Remove email_access_installed from give_settings.
1708 give_delete_option( 'email_access_installed' );
1709 }
1710
1711 /**
1712 * Upgrade Routine - Assigns Custom Amount to existing donation of type set donation.
1713 *
1714 * @since 1.8.18
1715 */
1716 function give_v1818_assign_custom_amount_set_donation() {
1717
1718 /* @var Give_Updates $give_updates */
1719 $give_updates = Give_Updates::get_instance();
1720
1721 $donations = new WP_Query(
1722 array(
1723 'paged' => $give_updates->step,
1724 'status' => 'any',
1725 'order' => 'ASC',
1726 'post_type' => array( 'give_payment' ),
1727 'posts_per_page' => 100,
1728 )
1729 );
1730
1731 if ( $donations->have_posts() ) {
1732 $give_updates->set_percentage( $donations->found_posts, $give_updates->step * 100 );
1733
1734 while ( $donations->have_posts() ) {
1735 $donations->the_post();
1736
1737 $form = new Give_Donate_Form( give_get_meta( get_the_ID(), '_give_payment_form_id', true ) );
1738 $donation_meta = give_get_payment_meta( get_the_ID() );
1739
1740 // Update Donation meta with price_id set as custom, only if it is:
1741 // 1. Donation Type = Set Donation.
1742 // 2. Donation Price Id is not set to custom.
1743 // 3. Form has not enabled custom price and donation amount assures that it is custom amount.
1744 if (
1745 $form->ID &&
1746 $form->is_set_type_donation_form() &&
1747 ( 'custom' !== $donation_meta['price_id'] ) &&
1748 $form->is_custom_price( give_get_meta( get_the_ID(), '_give_payment_total', true ) )
1749 ) {
1750 $donation_meta['price_id'] = 'custom';
1751 give_update_meta( get_the_ID(), '_give_payment_meta', $donation_meta );
1752 give_update_meta( get_the_ID(), '_give_payment_price_id', 'custom' );
1753 }
1754 }
1755
1756 wp_reset_postdata();
1757 } else {
1758 // Update Ran Successfully.
1759 give_set_upgrade_complete( 'v1818_assign_custom_amount_set_donation' );
1760 }
1761 }
1762
1763 /**
1764 * Upgrade Routine - Removed Give Worker caps.
1765 *
1766 * See: https://github.com/impress-org/give/issues/2476
1767 *
1768 * @since 1.8.18
1769 */
1770 function give_v1818_give_worker_role_cleanup() {
1771
1772 /* @var Give_Updates $give_updates */
1773 $give_updates = Give_Updates::get_instance();
1774
1775 global $wp_roles;
1776
1777 if ( ! ( $wp_roles instanceof WP_Roles ) ) {
1778 return;
1779 }
1780
1781 // Remove Capabilities to user roles as required.
1782 $remove_caps = array(
1783 'give_worker' => array(
1784 'delete_give_payments',
1785 'delete_others_give_payments',
1786 'delete_private_give_payments',
1787 'delete_published_give_payments',
1788 'edit_others_give_payments',
1789 'edit_private_give_payments',
1790 'edit_published_give_payments',
1791 'read_private_give_payments',
1792 ),
1793 );
1794
1795 foreach ( $remove_caps as $role => $caps ) {
1796 foreach ( $caps as $cap ) {
1797 $wp_roles->remove_cap( $role, $cap );
1798 }
1799 }
1800
1801 $give_updates->percentage = 100;
1802
1803 // Create Give plugin roles.
1804 $roles = new Give_Roles();
1805 $roles->add_roles();
1806 $roles->add_caps();
1807
1808 give_set_upgrade_complete( 'v1818_give_worker_role_cleanup' );
1809 }
1810
1811 /**
1812 *
1813 * Upgrade form metadata for new metabox settings.
1814 *
1815 * @since 2.0
1816 * @return void
1817 */
1818 function give_v20_upgrades_form_metadata_callback() {
1819 $give_updates = Give_Updates::get_instance();
1820
1821 // form query
1822 $forms = new WP_Query(
1823 array(
1824 'paged' => $give_updates->step,
1825 'status' => 'any',
1826 'order' => 'ASC',
1827 'post_type' => 'give_forms',
1828 'posts_per_page' => 100,
1829 )
1830 );
1831
1832 if ( $forms->have_posts() ) {
1833 $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 100 ) );
1834
1835 while ( $forms->have_posts() ) {
1836 $forms->the_post();
1837 global $post;
1838
1839 // Update offline instruction email notification status.
1840 $offline_instruction_notification_status = get_post_meta( get_the_ID(), '_give_customize_offline_donations', true );
1841 $offline_instruction_notification_status = give_is_setting_enabled(
1842 $offline_instruction_notification_status, array(
1843 'enabled',
1844 'global',
1845 )
1846 )
1847 ? $offline_instruction_notification_status
1848 : 'global';
1849 update_post_meta( get_the_ID(), '_give_offline-donation-instruction_notification', $offline_instruction_notification_status );
1850
1851 // Update offline instruction email message.
1852 update_post_meta(
1853 get_the_ID(),
1854 '_give_offline-donation-instruction_email_message',
1855 get_post_meta(
1856 get_the_ID(),
1857 // @todo: Delete this option later ( version > 2.0 ).
1858 '_give_offline_donation_email',
1859 true
1860 )
1861 );
1862
1863 // Update offline instruction email subject.
1864 update_post_meta(
1865 get_the_ID(),
1866 '_give_offline-donation-instruction_email_subject',
1867 get_post_meta(
1868 get_the_ID(),
1869 // @todo: Delete this option later ( version > 2.0 ).
1870 '_give_offline_donation_subject',
1871 true
1872 )
1873 );
1874
1875 }// End while().
1876
1877 wp_reset_postdata();
1878 } else {
1879 // No more forms found, finish up.
1880 give_set_upgrade_complete( 'v20_upgrades_form_metadata' );
1881 }
1882 }
1883
1884
1885 /**
1886 * Upgrade payment metadata for new metabox settings.
1887 *
1888 * @since 2.0
1889 * @global wpdb $wpdb
1890 * @return void
1891 */
1892 function give_v20_upgrades_payment_metadata_callback() {
1893 global $wpdb;
1894 $give_updates = Give_Updates::get_instance();
1895
1896 // form query
1897 $forms = new WP_Query(
1898 array(
1899 'paged' => $give_updates->step,
1900 'status' => 'any',
1901 'order' => 'ASC',
1902 'post_type' => 'give_payment',
1903 'posts_per_page' => 100,
1904 )
1905 );
1906
1907 if ( $forms->have_posts() ) {
1908 $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 100 ) );
1909
1910 while ( $forms->have_posts() ) {
1911 $forms->the_post();
1912 global $post;
1913
1914 // Split _give_payment_meta meta.
1915 // @todo Remove _give_payment_meta after releases 2.0
1916 $payment_meta = give_get_meta( $post->ID, '_give_payment_meta', true );
1917
1918 if ( ! empty( $payment_meta ) ) {
1919 _give_20_bc_split_and_save_give_payment_meta( $post->ID, $payment_meta );
1920 }
1921
1922 $deprecated_meta_keys = array(
1923 '_give_payment_customer_id' => '_give_payment_donor_id',
1924 '_give_payment_user_email' => '_give_payment_donor_email',
1925 '_give_payment_user_ip' => '_give_payment_donor_ip',
1926 );
1927
1928 foreach ( $deprecated_meta_keys as $old_meta_key => $new_meta_key ) {
1929 // Do not add new meta key if already exist.
1930 if ( $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id=%d AND meta_key=%s", $post->ID, $new_meta_key ) ) ) {
1931 continue;
1932 }
1933
1934 $wpdb->insert(
1935 $wpdb->postmeta,
1936 array(
1937 'post_id' => $post->ID,
1938 'meta_key' => $new_meta_key,
1939 'meta_value' => give_get_meta( $post->ID, $old_meta_key, true ),
1940 )
1941 );
1942 }
1943
1944 // Bailout
1945 if ( $donor_id = give_get_meta( $post->ID, '_give_payment_donor_id', true ) ) {
1946 /* @var Give_Donor $donor */
1947 $donor = new Give_Donor( $donor_id );
1948
1949 $address['line1'] = give_get_meta( $post->ID, '_give_donor_billing_address1', true, '' );
1950 $address['line2'] = give_get_meta( $post->ID, '_give_donor_billing_address2', true, '' );
1951 $address['city'] = give_get_meta( $post->ID, '_give_donor_billing_city', true, '' );
1952 $address['state'] = give_get_meta( $post->ID, '_give_donor_billing_state', true, '' );
1953 $address['zip'] = give_get_meta( $post->ID, '_give_donor_billing_zip', true, '' );
1954 $address['country'] = give_get_meta( $post->ID, '_give_donor_billing_country', true, '' );
1955
1956 // Save address.
1957 $donor->add_address( 'billing[]', $address );
1958 }
1959 }// End while().
1960
1961 wp_reset_postdata();
1962 } else {
1963 // @todo Delete user id meta after releases 2.0
1964 // $wpdb->get_var( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key=%s", '_give_payment_user_id' ) );
1965 // No more forms found, finish up.
1966 give_set_upgrade_complete( 'v20_upgrades_payment_metadata' );
1967 }
1968 }
1969
1970
1971 /**
1972 * Upgrade logs data.
1973 *
1974 * @since 2.0
1975 * @return void
1976 */
1977 function give_v20_logs_upgrades_callback() {
1978 global $wpdb;
1979 $give_updates = Give_Updates::get_instance();
1980
1981 // form query
1982 $forms = new WP_Query(
1983 array(
1984 'paged' => $give_updates->step,
1985 'order' => 'DESC',
1986 'post_type' => 'give_log',
1987 'post_status' => 'any',
1988 'posts_per_page' => 100,
1989 )
1990 );
1991
1992 if ( $forms->have_posts() ) {
1993 $give_updates->set_percentage( $forms->found_posts, $give_updates->step * 100 );
1994
1995 while ( $forms->have_posts() ) {
1996 $forms->the_post();
1997 global $post;
1998
1999 if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_logs WHERE ID=%d", $post->ID ) ) ) {
2000 continue;
2001 }
2002
2003 $term = get_the_terms( $post->ID, 'give_log_type' );
2004 $term = ! is_wp_error( $term ) && ! empty( $term ) ? $term[0] : array();
2005 $term_name = ! empty( $term ) ? $term->slug : '';
2006
2007 $log_data = array(
2008 'ID' => $post->ID,
2009 'log_title' => $post->post_title,
2010 'log_content' => $post->post_content,
2011 'log_parent' => 0,
2012 'log_type' => $term_name,
2013 'log_date' => $post->post_date,
2014 'log_date_gmt' => $post->post_date_gmt,
2015 );
2016 $log_meta = array();
2017
2018 if ( $old_log_meta = get_post_meta( $post->ID ) ) {
2019 foreach ( $old_log_meta as $meta_key => $meta_value ) {
2020 switch ( $meta_key ) {
2021 case '_give_log_payment_id':
2022 $log_data['log_parent'] = current( $meta_value );
2023 $log_meta['_give_log_form_id'] = $post->post_parent;
2024 break;
2025
2026 default:
2027 $log_meta[ $meta_key ] = current( $meta_value );
2028 }
2029 }
2030 }
2031
2032 if ( 'api_request' === $term_name ) {
2033 $log_meta['_give_log_api_query'] = $post->post_excerpt;
2034 }
2035
2036 $wpdb->insert( "{$wpdb->prefix}give_logs", $log_data );
2037
2038 if ( ! empty( $log_meta ) ) {
2039 foreach ( $log_meta as $meta_key => $meta_value ) {
2040 Give()->logs->logmeta_db->update_meta( $post->ID, $meta_key, $meta_value );
2041 }
2042 }
2043
2044 $logIDs[] = $post->ID;
2045 }// End while().
2046
2047 wp_reset_postdata();
2048 } else {
2049 // @todo: Delete terms and taxonomy after releases 2.0.
2050 /*
2051 $terms = get_terms( 'give_log_type', array( 'fields' => 'ids', 'hide_empty' => false ) );
2052 if ( ! empty( $terms ) ) {
2053 foreach ( $terms as $term ) {
2054 wp_delete_term( $term, 'give_log_type' );
2055 }
2056 }*/
2057
2058 // @todo: Delete logs after releases 2.0.
2059 /*
2060 $logIDs = get_posts( array(
2061 'order' => 'DESC',
2062 'post_type' => 'give_log',
2063 'post_status' => 'any',
2064 'posts_per_page' => - 1,
2065 'fields' => 'ids',
2066 )
2067 );*/
2068
2069 /*
2070 if ( ! empty( $logIDs ) ) {
2071 foreach ( $logIDs as $log ) {
2072 // Delete term relationship and posts.
2073 wp_delete_object_term_relationships( $log, 'give_log_type' );
2074 wp_delete_post( $log, true );
2075 }
2076 }*/
2077
2078 // @todo: Unregister taxonomy after releases 2.0.
2079 /*unregister_taxonomy( 'give_log_type' );*/
2080
2081 // Delete log cache.
2082 Give()->logs->delete_cache();
2083
2084 // No more forms found, finish up.
2085 give_set_upgrade_complete( 'v20_logs_upgrades' );
2086 }
2087 }
2088
2089
2090 /**
2091 * Move payment and form metadata to new table
2092 *
2093 * @since 2.0
2094 * @return void
2095 */
2096 function give_v20_move_metadata_into_new_table_callback() {
2097 global $wpdb;
2098 $give_updates = Give_Updates::get_instance();
2099
2100 // form query
2101 $payments = new WP_Query(
2102 array(
2103 'paged' => $give_updates->step,
2104 'status' => 'any',
2105 'order' => 'ASC',
2106 'post_type' => array( 'give_forms', 'give_payment' ),
2107 'posts_per_page' => 100,
2108 )
2109 );
2110
2111 if ( $payments->have_posts() ) {
2112 $give_updates->set_percentage( $payments->found_posts, $give_updates->step * 100 );
2113
2114 while ( $payments->have_posts() ) {
2115 $payments->the_post();
2116 global $post;
2117
2118 $meta_data = $wpdb->get_results(
2119 $wpdb->prepare(
2120 "SELECT * FROM $wpdb->postmeta where post_id=%d",
2121 get_the_ID()
2122 ),
2123 ARRAY_A
2124 );
2125
2126 if ( ! empty( $meta_data ) ) {
2127 foreach ( $meta_data as $index => $data ) {
2128 // Check for duplicate meta values.
2129 if ( $result = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . ( 'give_forms' === $post->post_type ? $wpdb->formmeta : $wpdb->paymentmeta ) . ' WHERE meta_id=%d', $data['meta_id'] ), ARRAY_A ) ) {
2130 continue;
2131 }
2132
2133 switch ( $post->post_type ) {
2134 case 'give_forms':
2135 $data['form_id'] = $data['post_id'];
2136 unset( $data['post_id'] );
2137
2138 Give()->form_meta->insert( $data );
2139 // @todo: delete form meta from post meta table after releases 2.0.
2140 /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/
2141
2142 break;
2143
2144 case 'give_payment':
2145 $data['payment_id'] = $data['post_id'];
2146 unset( $data['post_id'] );
2147
2148 Give()->payment_meta->insert( $data );
2149
2150 // @todo: delete donation meta from post meta table after releases 2.0.
2151 /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/
2152
2153 break;
2154 }
2155 }
2156 }
2157 }// End while().
2158
2159 wp_reset_postdata();
2160 } else {
2161 // No more forms found, finish up.
2162 give_set_upgrade_complete( 'v20_move_metadata_into_new_table' );
2163 }
2164
2165 }
2166
2167 /**
2168 * Upgrade routine for splitting donor name into first name and last name.
2169 *
2170 * @since 2.0
2171 *
2172 * @return void
2173 */
2174 function give_v20_upgrades_donor_name() {
2175 /* @var Give_Updates $give_updates */
2176 $give_updates = Give_Updates::get_instance();
2177
2178 $donors = Give()->donors->get_donors(
2179 array(
2180 'paged' => $give_updates->step,
2181 'number' => 100,
2182 )
2183 );
2184
2185 if ( $donors ) {
2186 $give_updates->set_percentage( count( $donors ), $give_updates->step * 100 );
2187 // Loop through Donors
2188 foreach ( $donors as $donor ) {
2189
2190 $donor_name = explode( ' ', $donor->name, 2 );
2191 $donor_first_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_first_name' );
2192 $donor_last_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_last_name' );
2193
2194 // If first name meta of donor is not created, then create it.
2195 if ( ! $donor_first_name && isset( $donor_name[0] ) ) {
2196 Give()->donor_meta->add_meta( $donor->id, '_give_donor_first_name', $donor_name[0] );
2197 }
2198
2199 // If last name meta of donor is not created, then create it.
2200 if ( ! $donor_last_name && isset( $donor_name[1] ) ) {
2201 Give()->donor_meta->add_meta( $donor->id, '_give_donor_last_name', $donor_name[1] );
2202 }
2203
2204 // If Donor is connected with WP User then update user meta.
2205 if ( $donor->user_id ) {
2206 if ( isset( $donor_name[0] ) ) {
2207 update_user_meta( $donor->user_id, 'first_name', $donor_name[0] );
2208 }
2209 if ( isset( $donor_name[1] ) ) {
2210 update_user_meta( $donor->user_id, 'last_name', $donor_name[1] );
2211 }
2212 }
2213 }
2214 } else {
2215 // The Update Ran.
2216 give_set_upgrade_complete( 'v20_upgrades_donor_name' );
2217 }
2218
2219 }
2220
2221 /**
2222 * Upgrade routine for user addresses.
2223 *
2224 * @since 2.0
2225 * @global wpdb $wpdb
2226 *
2227 * @return void
2228 */
2229 function give_v20_upgrades_user_address() {
2230 global $wpdb;
2231
2232 /* @var Give_Updates $give_updates */
2233 $give_updates = Give_Updates::get_instance();
2234
2235 /* @var WP_User_Query $user_query */
2236 $user_query = new WP_User_Query(
2237 array(
2238 'number' => 100,
2239 'paged' => $give_updates->step,
2240 )
2241 );
2242
2243 $users = $user_query->get_results();
2244
2245 if ( $users ) {
2246 $give_updates->set_percentage( $user_query->get_total(), $give_updates->step * 100 );
2247
2248 // Loop through Donors
2249 foreach ( $users as $user ) {
2250 /* @var Give_Donor $donor */
2251 $donor = new Give_Donor( $user->ID, true );
2252
2253 if ( ! $donor->id ) {
2254 continue;
2255 }
2256
2257 $address = $wpdb->get_var(
2258 $wpdb->prepare(
2259 "
2260 SELECT meta_value FROM {$wpdb->usermeta}
2261 WHERE user_id=%s
2262 AND meta_key=%s
2263 ",
2264 $user->ID,
2265 '_give_user_address'
2266 )
2267 );
2268
2269 if ( ! empty( $address ) ) {
2270 $address = maybe_unserialize( $address );
2271 $donor->add_address( 'personal', $address );
2272 $donor->add_address( 'billing[]', $address );
2273
2274 // @todo: delete _give_user_address from user meta after releases 2.0.
2275 /*delete_user_meta( $user->ID, '_give_user_address' );*/
2276 }
2277 }
2278 } else {
2279 // The Update Ran.
2280 give_set_upgrade_complete( 'v20_upgrades_user_address' );
2281 }
2282
2283 }
2284
2285 /**
2286 * Upgrade logs data.
2287 *
2288 * @since 2.0
2289 * @global wpdb $wpdb
2290 * @return void
2291 */
2292 function give_v20_rename_donor_tables_callback() {
2293 global $wpdb;
2294
2295 /* @var Give_Updates $give_updates */
2296 $give_updates = Give_Updates::get_instance();
2297
2298 $tables = array(
2299 "{$wpdb->prefix}give_customers" => "{$wpdb->prefix}give_donors",
2300 "{$wpdb->prefix}give_customermeta" => "{$wpdb->prefix}give_donormeta",
2301 );
2302
2303 // Alter customer table
2304 foreach ( $tables as $old_table => $new_table ) {
2305 if (
2306 $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', $old_table ) ) &&
2307 ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', $new_table ) )
2308 ) {
2309 $wpdb->query( "ALTER TABLE {$old_table} RENAME TO {$new_table}" );
2310
2311 if ( "{$wpdb->prefix}give_donormeta" === $new_table ) {
2312 $wpdb->query( "ALTER TABLE {$new_table} CHANGE COLUMN customer_id donor_id bigint(20)" );
2313 }
2314 }
2315 }
2316
2317 $give_updates->percentage = 100;
2318
2319 // No more forms found, finish up.
2320 give_set_upgrade_complete( 'v20_rename_donor_tables' );
2321
2322 // Re initiate donor classes.
2323 Give()->donors = new Give_DB_Donors();
2324 Give()->donor_meta = new Give_DB_Donor_Meta();
2325 }
2326
2327
2328 /**
2329 * Create missing meta tables.
2330 *
2331 * @since 2.0.1
2332 * @global wpdb $wpdb
2333 * @return void
2334 */
2335 function give_v201_create_tables() {
2336 global $wpdb;
2337
2338 if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_paymentmeta" ) ) ) {
2339 Give()->payment_meta->create_table();
2340 }
2341
2342 if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_formmeta" ) ) ) {
2343 Give()->form_meta->create_table();
2344 }
2345
2346 if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_logs" ) ) ) {
2347 Give()->logs->log_db->create_table();
2348 }
2349
2350 if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_logmeta" ) ) ) {
2351 Give()->logs->logmeta_db->create_table();
2352 }
2353 }
2354
2355 /**
2356 * Upgrade payment metadata for new metabox settings.
2357 *
2358 * @since 2.0.1
2359 * @global wpdb $wpdb
2360 * @return void
2361 */
2362 function give_v201_upgrades_payment_metadata_callback() {
2363 global $wpdb, $post;
2364 $give_updates = Give_Updates::get_instance();
2365 give_v201_create_tables();
2366
2367 $payments = $wpdb->get_col(
2368 "
2369 SELECT ID FROM $wpdb->posts
2370 WHERE 1=1
2371 AND (
2372 $wpdb->posts.post_date >= '2018-01-08 00:00:00'
2373 )
2374 AND $wpdb->posts.post_type = 'give_payment'
2375 AND {$wpdb->posts}.post_status IN ('" . implode( "','", array_keys( give_get_payment_statuses() ) ) . "')
2376 ORDER BY $wpdb->posts.post_date ASC
2377 LIMIT 100
2378 OFFSET " . $give_updates->get_offset( 100 )
2379 );
2380
2381 if ( ! empty( $payments ) ) {
2382 $give_updates->set_percentage( give_get_total_post_type_count( 'give_payment' ), ( $give_updates->step * 100 ) );
2383
2384 foreach ( $payments as $payment_id ) {
2385 $post = get_post( $payment_id );
2386 setup_postdata( $post );
2387
2388 // Do not add new meta keys if already refactored.
2389 if ( $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id=%d AND meta_key=%s", $post->ID, '_give_payment_donor_id' ) ) ) {
2390 continue;
2391 }
2392
2393 // Split _give_payment_meta meta.
2394 // @todo Remove _give_payment_meta after releases 2.0
2395 $payment_meta = give_get_meta( $post->ID, '_give_payment_meta', true );
2396
2397 if ( ! empty( $payment_meta ) ) {
2398 _give_20_bc_split_and_save_give_payment_meta( $post->ID, $payment_meta );
2399 }
2400
2401 $deprecated_meta_keys = array(
2402 '_give_payment_customer_id' => '_give_payment_donor_id',
2403 '_give_payment_user_email' => '_give_payment_donor_email',
2404 '_give_payment_user_ip' => '_give_payment_donor_ip',
2405 );
2406
2407 foreach ( $deprecated_meta_keys as $old_meta_key => $new_meta_key ) {
2408 // Do not add new meta key if already exist.
2409 if ( $wpdb->get_var( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id=%d AND meta_key=%s", $post->ID, $new_meta_key ) ) ) {
2410 continue;
2411 }
2412
2413 $wpdb->insert(
2414 $wpdb->postmeta,
2415 array(
2416 'post_id' => $post->ID,
2417 'meta_key' => $new_meta_key,
2418 'meta_value' => give_get_meta( $post->ID, $old_meta_key, true ),
2419 )
2420 );
2421 }
2422
2423 // Bailout
2424 if ( $donor_id = give_get_meta( $post->ID, '_give_payment_donor_id', true ) ) {
2425 /* @var Give_Donor $donor */
2426 $donor = new Give_Donor( $donor_id );
2427
2428 $address['line1'] = give_get_meta( $post->ID, '_give_donor_billing_address1', true, '' );
2429 $address['line2'] = give_get_meta( $post->ID, '_give_donor_billing_address2', true, '' );
2430 $address['city'] = give_get_meta( $post->ID, '_give_donor_billing_city', true, '' );
2431 $address['state'] = give_get_meta( $post->ID, '_give_donor_billing_state', true, '' );
2432 $address['zip'] = give_get_meta( $post->ID, '_give_donor_billing_zip', true, '' );
2433 $address['country'] = give_get_meta( $post->ID, '_give_donor_billing_country', true, '' );
2434
2435 // Save address.
2436 $donor->add_address( 'billing[]', $address );
2437 }
2438 }// End while().
2439
2440 wp_reset_postdata();
2441 } else {
2442 // @todo Delete user id meta after releases 2.0
2443 // $wpdb->get_var( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key=%s", '_give_payment_user_id' ) );
2444 // No more forms found, finish up.
2445 give_set_upgrade_complete( 'v201_upgrades_payment_metadata' );
2446 }
2447 }
2448
2449 /**
2450 * Move payment and form metadata to new table
2451 *
2452 * @since 2.0.1
2453 * @return void
2454 */
2455 function give_v201_move_metadata_into_new_table_callback() {
2456 global $wpdb, $post;
2457 $give_updates = Give_Updates::get_instance();
2458 give_v201_create_tables();
2459
2460 $payments = $wpdb->get_col(
2461 "
2462 SELECT ID FROM $wpdb->posts
2463 WHERE 1=1
2464 AND ( $wpdb->posts.post_type = 'give_payment' OR $wpdb->posts.post_type = 'give_forms' )
2465 AND {$wpdb->posts}.post_status IN ('" . implode( "','", array_keys( give_get_payment_statuses() ) ) . "')
2466 ORDER BY $wpdb->posts.post_date ASC
2467 LIMIT 100
2468 OFFSET " . $give_updates->get_offset( 100 )
2469 );
2470
2471 if ( ! empty( $payments ) ) {
2472 $give_updates->set_percentage(
2473 give_get_total_post_type_count(
2474 array(
2475 'give_forms',
2476 'give_payment',
2477 )
2478 ), $give_updates->step * 100
2479 );
2480
2481 foreach ( $payments as $payment_id ) {
2482 $post = get_post( $payment_id );
2483 setup_postdata( $post );
2484
2485 $meta_data = $wpdb->get_results(
2486 $wpdb->prepare(
2487 "SELECT * FROM $wpdb->postmeta where post_id=%d",
2488 get_the_ID()
2489 ),
2490 ARRAY_A
2491 );
2492
2493 if ( ! empty( $meta_data ) ) {
2494 foreach ( $meta_data as $index => $data ) {
2495 // Check for duplicate meta values.
2496 if ( $result = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM ' . ( 'give_forms' === $post->post_type ? $wpdb->formmeta : $wpdb->paymentmeta ) . ' WHERE meta_id=%d', $data['meta_id'] ), ARRAY_A ) ) {
2497 continue;
2498 }
2499
2500 switch ( $post->post_type ) {
2501 case 'give_forms':
2502 $data['form_id'] = $data['post_id'];
2503 unset( $data['post_id'] );
2504
2505 Give()->form_meta->insert( $data );
2506 // @todo: delete form meta from post meta table after releases 2.0.
2507 /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/
2508
2509 break;
2510
2511 case 'give_payment':
2512 $data['payment_id'] = $data['post_id'];
2513 unset( $data['post_id'] );
2514
2515 Give()->payment_meta->insert( $data );
2516
2517 // @todo: delete donation meta from post meta table after releases 2.0.
2518 /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/
2519
2520 break;
2521 }
2522 }
2523 }
2524 }// End while().
2525
2526 wp_reset_postdata();
2527 } else {
2528 // No more forms found, finish up.
2529 give_set_upgrade_complete( 'v201_move_metadata_into_new_table' );
2530 }
2531
2532 }
2533
2534 /**
2535 * Move data to new log table.
2536 *
2537 * @since 2.0.1
2538 * @return void
2539 */
2540 function give_v201_logs_upgrades_callback() {
2541 global $wpdb, $post;
2542 $give_updates = Give_Updates::get_instance();
2543 give_v201_create_tables();
2544
2545 $logs = $wpdb->get_col(
2546 "
2547 SELECT ID FROM $wpdb->posts
2548 WHERE 1=1
2549 AND $wpdb->posts.post_type = 'give_log'
2550 AND {$wpdb->posts}.post_status IN ('" . implode( "','", array_keys( give_get_payment_statuses() ) ) . "')
2551 ORDER BY $wpdb->posts.post_date ASC
2552 LIMIT 100
2553 OFFSET " . $give_updates->get_offset( 100 )
2554 );
2555
2556 if ( ! empty( $logs ) ) {
2557 $give_updates->set_percentage( give_get_total_post_type_count( 'give_log' ), $give_updates->step * 100 );
2558
2559 foreach ( $logs as $log_id ) {
2560 $post = get_post( $log_id );
2561 setup_postdata( $post );
2562
2563 if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_logs WHERE ID=%d", $post->ID ) ) ) {
2564 continue;
2565 }
2566
2567 $term = get_the_terms( $post->ID, 'give_log_type' );
2568 $term = ! is_wp_error( $term ) && ! empty( $term ) ? $term[0] : array();
2569 $term_name = ! empty( $term ) ? $term->slug : '';
2570
2571 $log_data = array(
2572 'ID' => $post->ID,
2573 'log_title' => $post->post_title,
2574 'log_content' => $post->post_content,
2575 'log_parent' => 0,
2576 'log_type' => $term_name,
2577 'log_date' => $post->post_date,
2578 'log_date_gmt' => $post->post_date_gmt,
2579 );
2580 $log_meta = array();
2581
2582 if ( $old_log_meta = get_post_meta( $post->ID ) ) {
2583 foreach ( $old_log_meta as $meta_key => $meta_value ) {
2584 switch ( $meta_key ) {
2585 case '_give_log_payment_id':
2586 $log_data['log_parent'] = current( $meta_value );
2587 $log_meta['_give_log_form_id'] = $post->post_parent;
2588 break;
2589
2590 default:
2591 $log_meta[ $meta_key ] = current( $meta_value );
2592 }
2593 }
2594 }
2595
2596 if ( 'api_request' === $term_name ) {
2597 $log_meta['_give_log_api_query'] = $post->post_excerpt;
2598 }
2599
2600 $wpdb->insert( "{$wpdb->prefix}give_logs", $log_data );
2601
2602 if ( ! empty( $log_meta ) ) {
2603 foreach ( $log_meta as $meta_key => $meta_value ) {
2604 Give()->logs->logmeta_db->update_meta( $post->ID, $meta_key, $meta_value );
2605 }
2606 }
2607
2608 $logIDs[] = $post->ID;
2609 }// End while().
2610
2611 wp_reset_postdata();
2612 } else {
2613 // Delete log cache.
2614 Give()->logs->delete_cache();
2615
2616 // No more forms found, finish up.
2617 give_set_upgrade_complete( 'v201_logs_upgrades' );
2618 }
2619 }
2620
2621
2622 /**
2623 * Add missing donor.
2624 *
2625 * @since 2.0.1
2626 * @return void
2627 */
2628 function give_v201_add_missing_donors_callback() {
2629 global $wpdb;
2630 give_v201_create_tables();
2631
2632 $give_updates = Give_Updates::get_instance();
2633
2634 // Bailout.
2635 if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_customers" ) ) ) {
2636 Give_Updates::get_instance()->percentage = 100;
2637 give_set_upgrade_complete( 'v201_add_missing_donors' );
2638 }
2639
2640 $total_customers = $wpdb->get_var( "SELECT COUNT(id) FROM {$wpdb->prefix}give_customers " );
2641 $customers = wp_list_pluck( $wpdb->get_results( "SELECT id FROM {$wpdb->prefix}give_customers LIMIT 20 OFFSET " . $give_updates->get_offset( 20 ) ), 'id' );
2642 $donors = wp_list_pluck( $wpdb->get_results( "SELECT id FROM {$wpdb->prefix}give_donors" ), 'id' );
2643
2644 if ( ! empty( $customers ) ) {
2645 $give_updates->set_percentage( $total_customers, ( $give_updates->step * 20 ) );
2646
2647 $missing_donors = array_diff( $customers, $donors );
2648 $donor_data = array();
2649
2650 if ( $missing_donors ) {
2651 foreach ( $missing_donors as $donor_id ) {
2652 $donor_data[] = array(
2653 'info' => $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_customers WHERE id=%d", $donor_id ) ),
2654 'meta' => $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_customermeta WHERE customer_id=%d", $donor_id ) ),
2655
2656 );
2657 }
2658 }
2659
2660 if ( ! empty( $donor_data ) ) {
2661 $donor_table_name = Give()->donors->table_name;
2662 $donor_meta_table_name = Give()->donor_meta->table_name;
2663
2664 Give()->donors->table_name = "{$wpdb->prefix}give_donors";
2665 Give()->donor_meta->table_name = "{$wpdb->prefix}give_donormeta";
2666
2667 foreach ( $donor_data as $donor ) {
2668 $donor['info'][0] = (array) $donor['info'][0];
2669
2670 // Prevent duplicate meta id issue.
2671 if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_donors WHERE id=%d", $donor['info'][0]['id'] ) ) ) {
2672 continue;
2673 }
2674
2675 $donor_id = Give()->donors->add( $donor['info'][0] );
2676
2677 if ( ! empty( $donor['meta'] ) ) {
2678 foreach ( $donor['meta'] as $donor_meta ) {
2679 $donor_meta = (array) $donor_meta;
2680
2681 // Prevent duplicate meta id issue.
2682 if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_donormeta WHERE meta_id=%d", $donor_meta['meta_id'] ) ) ) {
2683 unset( $donor_meta['meta_id'] );
2684 }
2685
2686 $donor_meta['donor_id'] = $donor_meta['customer_id'];
2687 unset( $donor_meta['customer_id'] );
2688
2689 Give()->donor_meta->insert( $donor_meta );
2690 }
2691 }
2692
2693 /**
2694 * Fix donor name and address
2695 */
2696 $address = $wpdb->get_var(
2697 $wpdb->prepare(
2698 "
2699 SELECT meta_value FROM {$wpdb->usermeta}
2700 WHERE user_id=%s
2701 AND meta_key=%s
2702 ",
2703 $donor['info'][0]['user_id'],
2704 '_give_user_address'
2705 )
2706 );
2707
2708 $donor = new Give_Donor( $donor_id );
2709
2710 if ( ! empty( $address ) ) {
2711 $address = maybe_unserialize( $address );
2712 $donor->add_address( 'personal', $address );
2713 $donor->add_address( 'billing[]', $address );
2714 }
2715
2716 $donor_name = explode( ' ', $donor->name, 2 );
2717 $donor_first_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_first_name' );
2718 $donor_last_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_last_name' );
2719
2720 // If first name meta of donor is not created, then create it.
2721 if ( ! $donor_first_name && isset( $donor_name[0] ) ) {
2722 Give()->donor_meta->add_meta( $donor->id, '_give_donor_first_name', $donor_name[0] );
2723 }
2724
2725 // If last name meta of donor is not created, then create it.
2726 if ( ! $donor_last_name && isset( $donor_name[1] ) ) {
2727 Give()->donor_meta->add_meta( $donor->id, '_give_donor_last_name', $donor_name[1] );
2728 }
2729
2730 // If Donor is connected with WP User then update user meta.
2731 if ( $donor->user_id ) {
2732 if ( isset( $donor_name[0] ) ) {
2733 update_user_meta( $donor->user_id, 'first_name', $donor_name[0] );
2734 }
2735 if ( isset( $donor_name[1] ) ) {
2736 update_user_meta( $donor->user_id, 'last_name', $donor_name[1] );
2737 }
2738 }
2739 }
2740
2741 Give()->donors->table_name = $donor_table_name;
2742 Give()->donor_meta->table_name = $donor_meta_table_name;
2743 }
2744 } else {
2745 give_set_upgrade_complete( 'v201_add_missing_donors' );
2746 }
2747 }
2748
2749
2750 /**
2751 * Version 2.0.3 automatic updates
2752 *
2753 * @since 2.0.3
2754 */
2755 function give_v203_upgrades() {
2756 global $wpdb;
2757
2758 // Do not auto load option.
2759 $wpdb->update( $wpdb->options, array( 'autoload' => 'no' ), array( 'option_name' => 'give_completed_upgrades' ) );
2760
2761 // Remove from cache.
2762 $all_options = wp_load_alloptions();
2763
2764 if ( isset( $all_options['give_completed_upgrades'] ) ) {
2765 unset( $all_options['give_completed_upgrades'] );
2766 wp_cache_set( 'alloptions', $all_options, 'options' );
2767 }
2768
2769 }
2770
2771
2772 /**
2773 * Version 2.2.0 automatic updates
2774 *
2775 * @since 2.2.0
2776 */
2777 function give_v220_upgrades() {
2778 global $wpdb;
2779
2780 /**
2781 * Update 1
2782 *
2783 * Delete wp session data
2784 */
2785 give_v220_delete_wp_session_data();
2786
2787 /**
2788 * Update 2
2789 *
2790 * Rename payment table
2791 */
2792 give_v220_rename_donation_meta_type_callback();
2793
2794 /**
2795 * Update 2
2796 *
2797 * Set autoload to no to reduce result weight from WordPress query
2798 */
2799
2800 $options = array(
2801 'give_settings',
2802 'give_version',
2803 'give_version_upgraded_from',
2804 'give_default_api_version',
2805 'give_site_address_before_migrate',
2806 '_give_table_check',
2807 'give_recently_activated_addons',
2808 'give_is_addon_activated',
2809 'give_last_paypal_ipn_received',
2810 'give_use_php_sessions',
2811 'give_subscriptions',
2812 '_give_subscriptions_edit_last',
2813 );
2814
2815 // Add all table version option name
2816 // Add banner option *_active_by_user
2817 $option_like = $wpdb->get_col(
2818 "
2819 SELECT option_name
2820 FROM $wpdb->options
2821 WHERE option_name like '%give%'
2822 AND (
2823 option_name like '%_db_version%'
2824 OR option_name like '%_active_by_user%'
2825 OR option_name like '%_license_active%'
2826 )
2827 "
2828 );
2829
2830 if ( ! empty( $option_like ) ) {
2831 $options = array_merge( $options, $option_like );
2832 }
2833
2834 $options_str = '\'' . implode( "','", $options ) . '\'';
2835
2836 $wpdb->query(
2837 "
2838 UPDATE $wpdb->options
2839 SET autoload = 'no'
2840 WHERE option_name IN ( {$options_str} )
2841 "
2842 );
2843 }
2844
2845 /**
2846 * Version 2.2.1 automatic updates
2847 *
2848 * @since 2.2.1
2849 */
2850 function give_v221_upgrades() {
2851 global $wpdb;
2852
2853 /**
2854 * Update 1
2855 *
2856 * Change column length
2857 */
2858 $wpdb->query( "ALTER TABLE $wpdb->donors MODIFY email varchar(255) NOT NULL" );
2859 }
2860
2861 /**
2862 * Version 2.3.0 automatic updates
2863 *
2864 * @since 2.3.0
2865 */
2866 function give_v230_upgrades() {
2867
2868 $options_key = array(
2869 'give_temp_delete_form_ids', // delete import donor
2870 'give_temp_delete_donation_ids', // delete import donor
2871 'give_temp_delete_step', // delete import donor
2872 'give_temp_delete_donor_ids', // delete import donor
2873 'give_temp_delete_step_on', // delete import donor
2874 'give_temp_delete_donation_ids', // delete test donor
2875 'give_temp_delete_donor_ids', // delete test donor
2876 'give_temp_delete_step', // delete test donor
2877 'give_temp_delete_step_on', // delete test donor
2878 'give_temp_delete_test_ids', // delete test donations
2879 'give_temp_all_payments_data', // delete all stats
2880 'give_recount_all_total', // delete all stats
2881 'give_temp_recount_all_stats', // delete all stats
2882 'give_temp_payment_items', // delete all stats
2883 'give_temp_form_ids', // delete all stats
2884 'give_temp_processed_payments', // delete all stats
2885 'give_temp_recount_form_stats', // delete form stats
2886 'give_temp_recount_earnings', // recount income
2887 'give_recount_earnings_total', // recount income
2888 'give_temp_reset_ids', // reset stats
2889 );
2890
2891 $options_key = '\'' . implode( "','", $options_key ) . '\'';
2892
2893 global $wpdb;
2894
2895 /**
2896 * Update 1
2897 *
2898 * delete unwanted key from option table
2899 */
2900 $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name IN ( {$options_key} )" );
2901 }
2902
2903 /**
2904 * Upgrade routine for 2.1 to set form closed status for all the donation forms.
2905 *
2906 * @since 2.1
2907 */
2908 function give_v210_verify_form_status_upgrades_callback() {
2909
2910 $give_updates = Give_Updates::get_instance();
2911
2912 // form query.
2913 $donation_forms = new WP_Query(
2914 array(
2915 'paged' => $give_updates->step,
2916 'status' => 'any',
2917 'order' => 'ASC',
2918 'post_type' => 'give_forms',
2919 'posts_per_page' => 20,
2920 )
2921 );
2922
2923 if ( $donation_forms->have_posts() ) {
2924 $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) );
2925
2926 while ( $donation_forms->have_posts() ) {
2927 $donation_forms->the_post();
2928 $form_id = get_the_ID();
2929
2930 $form_closed_status = give_get_meta( $form_id, '_give_form_status', true );
2931 if ( empty( $form_closed_status ) ) {
2932 give_set_form_closed_status( $form_id );
2933 }
2934 }
2935
2936 /* Restore original Post Data */
2937 wp_reset_postdata();
2938
2939 } else {
2940
2941 // The Update Ran.
2942 give_set_upgrade_complete( 'v210_verify_form_status_upgrades' );
2943 }
2944 }
2945
2946 /**
2947 * Upgrade routine for 2.1.3 to delete meta which is not attach to any donation.
2948 *
2949 * @since 2.1
2950 */
2951 function give_v213_delete_donation_meta_callback() {
2952 global $wpdb;
2953 $give_updates = Give_Updates::get_instance();
2954 $donation_meta_table = Give()->payment_meta->table_name;
2955
2956 $donations = $wpdb->get_col(
2957 "
2958 SELECT DISTINCT payment_id
2959 FROM {$donation_meta_table}
2960 LIMIT 20
2961 OFFSET {$give_updates->get_offset( 20 )}
2962 "
2963 );
2964
2965 if ( ! empty( $donations ) ) {
2966 foreach ( $donations as $donation ) {
2967 $donation_obj = get_post( $donation );
2968
2969 if ( ! $donation_obj instanceof WP_Post ) {
2970 Give()->payment_meta->delete_all_meta( $donation );
2971 }
2972 }
2973 } else {
2974
2975 // The Update Ran.
2976 give_set_upgrade_complete( 'v213_delete_donation_meta' );
2977 }
2978 }
2979
2980 /**
2981 * Rename donation meta type
2982 *
2983 * @see https://github.com/restrictcontentpro/restrict-content-pro/issues/1656
2984 *
2985 * @since 2.2.0
2986 */
2987 function give_v220_rename_donation_meta_type_callback() {
2988 global $wpdb;
2989
2990 // Check upgrade before running.
2991 if (
2992 give_has_upgrade_completed( 'v220_rename_donation_meta_type' )
2993 || ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_paymentmeta" ) )
2994 ) {
2995 // Complete update if skip somehow
2996 give_set_upgrade_complete( 'v220_rename_donation_meta_type' );
2997
2998 return;
2999 }
3000
3001 $wpdb->query( "ALTER TABLE {$wpdb->prefix}give_paymentmeta CHANGE COLUMN payment_id donation_id bigint(20)" );
3002 $wpdb->query( "ALTER TABLE {$wpdb->prefix}give_paymentmeta RENAME TO {$wpdb->prefix}give_donationmeta" );
3003
3004 give_set_upgrade_complete( 'v220_rename_donation_meta_type' );
3005 }
3006
3007 /**
3008 * Adds 'view_give_payments' capability to 'give_manager' user role.
3009 *
3010 * @since 2.1.5
3011 */
3012 function give_v215_update_donor_user_roles_callback() {
3013
3014 $role = get_role( 'give_manager' );
3015 $role->add_cap( 'view_give_payments' );
3016
3017 give_set_upgrade_complete( 'v215_update_donor_user_roles' );
3018 }
3019
3020
3021 /**
3022 * Remove all wp session data from the options table, regardless of expiration.
3023 *
3024 * @since 2.2.0
3025 *
3026 * @global wpdb $wpdb
3027 */
3028 function give_v220_delete_wp_session_data() {
3029 global $wpdb;
3030
3031 $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '_wp_session_%'" );
3032 }
3033
3034
3035 /**
3036 * Update donor meta
3037 * Set "_give_anonymous_donor" meta key to "0" if not exist
3038 *
3039 * @since 2.2.4
3040 */
3041 function give_v224_update_donor_meta_callback() {
3042 /* @var Give_Updates $give_updates */
3043 $give_updates = Give_Updates::get_instance();
3044
3045 $donor_count = Give()->donors->count(
3046 array(
3047 'number' => - 1,
3048 )
3049 );
3050
3051 $donors = Give()->donors->get_donors(
3052 array(
3053 'paged' => $give_updates->step,
3054 'number' => 100,
3055 )
3056 );
3057
3058 if ( $donors ) {
3059 $give_updates->set_percentage( $donor_count, $give_updates->step * 100 );
3060 // Loop through Donors
3061 foreach ( $donors as $donor ) {
3062 $anonymous_metadata = Give()->donor_meta->get_meta( $donor->id, '_give_anonymous_donor', true );
3063
3064 // If first name meta of donor is not created, then create it.
3065 if ( ! in_array( $anonymous_metadata, array( '0', '1' ) ) ) {
3066 Give()->donor_meta->add_meta( $donor->id, '_give_anonymous_donor', '0' );
3067 }
3068 }
3069 } else {
3070 // The Update Ran.
3071 give_set_upgrade_complete( 'v224_update_donor_meta' );
3072 }
3073 }
3074
3075 /** Update donor meta
3076 * Set "_give_anonymous_donor_forms" meta key if not exist
3077 *
3078 *
3079 * @since 2.2.4
3080 */
3081 function give_v224_update_donor_meta_forms_id_callback() {
3082 $give_updates = Give_Updates::get_instance();
3083
3084 $donations = new WP_Query( array(
3085 'paged' => $give_updates->step,
3086 'status' => 'any',
3087 'order' => 'ASC',
3088 'post_type' => array( 'give_payment' ),
3089 'posts_per_page' => 20,
3090 )
3091 );
3092
3093 if ( $donations->have_posts() ) {
3094 $give_updates->set_percentage( $donations->found_posts, $give_updates->step * 20 );
3095
3096 while ( $donations->have_posts() ) {
3097 $donations->the_post();
3098
3099 $donation_id = get_the_ID();
3100
3101 $form_id = give_get_payment_form_id( $donation_id );
3102 $donor_id = give_get_payment_donor_id( $donation_id );
3103 $is_donated_as_anonymous = give_is_anonymous_donation( $donation_id );
3104
3105 $is_anonymous_donor = Give()->donor_meta->get_meta( $donor_id, "_give_anonymous_donor_form_{$form_id}", true );
3106 $is_edit_donor_meta = ! in_array( $is_anonymous_donor, array( '0', '1' ) )
3107 ? true
3108 : ( 0 !== absint( $is_anonymous_donor ) );
3109
3110 if ( $is_edit_donor_meta ) {
3111 Give()->donor_meta->update_meta( $donor_id, "_give_anonymous_donor_form_{$form_id}", absint( $is_donated_as_anonymous ) );
3112 }
3113 }
3114
3115 wp_reset_postdata();
3116 } else {
3117 give_set_upgrade_complete( 'v224_update_donor_meta_forms_id' );
3118 }
3119 }
3120
3121 /**
3122 * Add custom comment table
3123 *
3124 * @since 2.4.0
3125 */
3126 function give_v230_add_missing_comment_tables(){
3127 $custom_tables = array(
3128 Give()->comment->db,
3129 Give()->comment->db_meta,
3130 );
3131
3132 /* @var Give_DB $table */
3133 foreach ( $custom_tables as $table ) {
3134 if ( ! $table->installed() ) {
3135 $table->register_table();
3136 }
3137 }
3138 }
3139
3140
3141 /**
3142 * Move donor notes to comment table
3143 *
3144 * @since 2.3.0
3145 */
3146 function give_v230_move_donor_note_callback() {
3147 // Add comment table if missing.
3148 give_v230_add_missing_comment_tables();
3149
3150 /* @var Give_Updates $give_updates */
3151 $give_updates = Give_Updates::get_instance();
3152
3153 $donor_count = Give()->donors->count( array(
3154 'number' => - 1,
3155 ) );
3156
3157 $donors = Give()->donors->get_donors( array(
3158 'paged' => $give_updates->step,
3159 'number' => 100,
3160 ) );
3161
3162 if ( $donors ) {
3163 $give_updates->set_percentage( $donor_count, $give_updates->step * 100 );
3164 // Loop through Donors
3165 foreach ( $donors as $donor ) {
3166 $notes = trim( Give()->donors->get_column( 'notes', $donor->id ) );
3167
3168 // If first name meta of donor is not created, then create it.
3169 if ( ! empty( $notes ) ) {
3170 $notes = array_values( array_filter( array_map( 'trim', explode( "\n", $notes ) ), 'strlen' ) );
3171
3172 foreach ( $notes as $note ) {
3173 $note = array_map( 'trim', explode( '-', $note ) );
3174 $timestamp = strtotime( $note[0] );
3175
3176 Give()->comment->db->add(
3177 array(
3178 'comment_content' => $note[1],
3179 'user_id' => absint( Give()->donors->get_column_by( 'user_id', 'id', $donor->id ) ),
3180 'comment_date' => date( 'Y-m-d H:i:s', $timestamp ),
3181 'comment_date_gmt' => get_gmt_from_date( date( 'Y-m-d H:i:s', $timestamp ) ),
3182 'comment_parent' => $donor->id,
3183 'comment_type' => 'donor',
3184 )
3185 );
3186 }
3187 }
3188 }
3189
3190 } else {
3191 // The Update Ran.
3192 give_set_upgrade_complete( 'v230_move_donor_note' );
3193 }
3194 }
3195
3196 /**
3197 * Move donation notes to comment table
3198 *
3199 * @since 2.3.0
3200 */
3201 function give_v230_move_donation_note_callback() {
3202 global $wpdb;
3203
3204 // Add comment table if missing.
3205 give_v230_add_missing_Comment_tables();
3206
3207 /* @var Give_Updates $give_updates */
3208 $give_updates = Give_Updates::get_instance();
3209
3210 $donation_note_count = $wpdb->get_var(
3211 $wpdb->prepare(
3212 "
3213 SELECT count(*)
3214 FROM {$wpdb->comments}
3215 WHERE comment_type=%s
3216 ",
3217 'give_payment_note'
3218 )
3219 );
3220
3221 $query = $wpdb->prepare(
3222 "
3223 SELECT *
3224 FROM {$wpdb->comments}
3225 WHERE comment_type=%s
3226 ORDER BY comment_ID ASC
3227 LIMIT 100
3228 OFFSET %d
3229 ",
3230 'give_payment_note',
3231 $give_updates->get_offset( 100 )
3232 );
3233
3234 $comments = $wpdb->get_results( $query );
3235
3236 if ( $comments ) {
3237 $give_updates->set_percentage( $donation_note_count, $give_updates->step * 100 );
3238
3239 // Loop through Donors
3240 foreach ( $comments as $comment ) {
3241 $donation_id = $comment->comment_post_ID;
3242 $form_id = give_get_payment_form_id( $donation_id );
3243
3244 $comment_id = Give()->comment->db->add(
3245 array(
3246 'comment_content' => $comment->comment_content,
3247 'user_id' => $comment->user_id,
3248 'comment_date' => date( 'Y-m-d H:i:s', strtotime( $comment->comment_date ) ),
3249 'comment_date_gmt' => get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $comment->comment_date_gmt ) ) ),
3250 'comment_parent' => $comment->comment_post_ID,
3251 'comment_type' => is_numeric( get_comment_meta( $comment->comment_ID, '_give_donor_id', true ) )
3252 ? 'donor_donation'
3253 : 'donation',
3254 )
3255 );
3256
3257 if( ! $comment_id ) {
3258 continue;
3259 }
3260
3261 // @see https://github.com/impress-org/give/issues/3737#issuecomment-428460802
3262 $restricted_meta_keys = array(
3263 'akismet_result',
3264 'akismet_as_submitted',
3265 'akismet_history'
3266 );
3267
3268 if ( $comment_meta = get_comment_meta( $comment->comment_ID ) ) {
3269 foreach ( $comment_meta as $meta_key => $meta_value ) {
3270 // Skip few comment meta keys.
3271 if( in_array( $meta_key, $restricted_meta_keys) ) {
3272 continue;
3273 }
3274
3275 $meta_value = maybe_unserialize( $meta_value );
3276 $meta_value = is_array( $meta_value ) ? current( $meta_value ) : $meta_value;
3277
3278 Give()->comment->db_meta->update_meta( $comment_id, $meta_key, $meta_value );
3279 }
3280 }
3281
3282 Give()->comment->db_meta->update_meta( $comment_id, '_give_form_id', $form_id );
3283
3284 // Delete comment.
3285 update_comment_meta( $comment->comment_ID, '_give_comment_moved', 1 );
3286 }
3287
3288 } else {
3289 $comment_ids = $wpdb->get_col(
3290 $wpdb->prepare(
3291 "
3292 SELECT DISTINCT comment_id
3293 FROM {$wpdb->commentmeta}
3294 WHERE meta_key=%s
3295 AND meta_value=%d
3296 ",
3297 '_give_comment_moved',
3298 1
3299 )
3300 );
3301
3302 if( ! empty( $comment_ids ) ) {
3303 $comment_ids = "'" . implode( "','", $comment_ids ). "'";
3304
3305 $wpdb->query( "DELETE FROM {$wpdb->comments} WHERE comment_ID IN ({$comment_ids})" );
3306 $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE comment_id IN ({$comment_ids})" );
3307 }
3308
3309 // The Update Ran.
3310 give_set_upgrade_complete( 'v230_move_donation_note' );
3311 }
3312 }
3313
3314 /**
3315 * Delete donor wall related donor meta data
3316 *
3317 * @since 2.3.0
3318 *
3319 */
3320 function give_v230_delete_dw_related_donor_data_callback(){
3321 global $wpdb;
3322
3323 $give_updates = Give_Updates::get_instance();
3324
3325 $wpdb->query( "DELETE FROM {$wpdb->donormeta} WHERE meta_key LIKE '%_give_anonymous_donor%' OR meta_key='_give_has_comment';" );
3326
3327 $give_updates->percentage = 100;
3328
3329 // The Update Ran.
3330 give_set_upgrade_complete( 'v230_delete_donor_wall_related_donor_data' );
3331 }
3332
3333 /**
3334 * Delete donor wall related comment meta data
3335 *
3336 * @since 2.3.0
3337 *
3338 */
3339 function give_v230_delete_dw_related_comment_data_callback(){
3340 global $wpdb;
3341
3342 $give_updates = Give_Updates::get_instance();
3343
3344 $wpdb->query( "DELETE FROM {$wpdb->give_commentmeta} WHERE meta_key='_give_anonymous_donation';" );
3345
3346 $give_updates->percentage = 100;
3347
3348 // The Update Ran.
3349 give_set_upgrade_complete( 'v230_delete_donor_wall_related_comment_data' );
3350 }
3351
3352 /**
3353 * Update donation form goal progress data.
3354 *
3355 * @since 2.4.0
3356 *
3357 */
3358 function give_v240_update_form_goal_progress_callback() {
3359
3360 /* @var Give_Updates $give_updates */
3361 $give_updates = Give_Updates::get_instance();
3362
3363 // form query
3364 $forms = new WP_Query(
3365 array(
3366 'paged' => $give_updates->step,
3367 'status' => 'any',
3368 'order' => 'ASC',
3369 'post_type' => 'give_forms',
3370 'posts_per_page' => 20,
3371 )
3372 );
3373
3374 if ( $forms->have_posts() ) {
3375 while ( $forms->have_posts() ) {
3376 $forms->the_post();
3377
3378 // Update the goal progress for donation form.
3379 give_update_goal_progress( get_the_ID() );
3380
3381 }// End while().
3382
3383 wp_reset_postdata();
3384
3385 } else {
3386
3387 // No more forms found, finish up.
3388 give_set_upgrade_complete( 'v240_update_form_goal_progress' );
3389
3390 }
3391 }
3392
3393
3394 /**
3395 * Manual update handler for v241_remove_sale_logs
3396 *
3397 * @since 2.4.1
3398 */
3399 function give_v241_remove_sale_logs_callback() {
3400 global $wpdb;
3401
3402 $log_table = Give()->logs->log_db->table_name;
3403 $log_meta_table = Give()->logs->logmeta_db->table_name;
3404
3405 $sql = "DELETE {$log_table}, {$log_meta_table}
3406 FROM {$log_table}
3407 INNER JOIN {$log_meta_table} ON {$log_meta_table}.log_id={$log_table}.ID
3408 WHERE log_type='sale'
3409 ";
3410
3411 // Remove donation logs.
3412 $wpdb->query( $sql );
3413
3414 give_set_upgrade_complete( 'v241_remove_sale_logs' );
3415 }
3416
3417
3418 /**
3419 * DB upgrades for Give 2.5.0
3420 *
3421 * @since 2.5.0
3422 */
3423 function give_v250_upgrades() {
3424 global $wpdb;
3425
3426 $old_license = array();
3427 $new_license = array();
3428 $give_licenses = get_option( 'give_licenses', array() );
3429 $give_options = give_get_settings();
3430
3431 // Get add-ons license key.
3432 $addons = array();
3433 foreach ( $give_options as $key => $value ) {
3434 if ( false !== strpos( $key, '_license_key' ) ) {
3435 $addons[ $key ] = $value;
3436 }
3437 }
3438
3439 // Bailout: We do not have any add-on license data to upgrade.
3440 if ( empty( $addons ) ) {
3441 return false;
3442 }
3443
3444 foreach ( $addons as $key => $license_key ) {
3445
3446 // Get addon shortname.
3447 $addon_shortname = str_replace( '_license_key', '', $key );
3448
3449 // Addon license option name.
3450 $addon_shortname = "{$addon_shortname}_license_active";
3451 $addon_license_data = get_option( "{$addon_shortname}_license_active", array() );
3452
3453 if (
3454 ! $license_key
3455 || array_key_exists( $license_key, $give_licenses )
3456 ) {
3457 continue;
3458 }
3459
3460 $old_license[ $license_key ] = $addon_license_data;
3461 }
3462
3463 // Bailout.
3464 if ( empty( $old_license ) ) {
3465 return false;
3466 }
3467
3468 /* @var stdClass $data */
3469 foreach ( $old_license as $key => $data ) {
3470 $tmp = Give_License::request_license_api( array(
3471 'edd_action' => 'check_license',
3472 'license' => $key,
3473 ), true );
3474
3475 if ( is_wp_error( $tmp ) || ! $tmp['success'] ) {
3476 continue;
3477 }
3478
3479 $new_license[ $key ] = $tmp;
3480 }
3481
3482 // Bailout.
3483 if ( empty( $new_license ) ) {
3484 return false;
3485 }
3486
3487 $give_licenses = array_merge( $give_licenses, $new_license );
3488
3489 update_option( 'give_licenses', $give_licenses );
3490
3491 /**
3492 * Delete data.
3493 */
3494
3495 // 1. license keys
3496 foreach ( get_option( 'give_settings' ) as $index => $setting ) {
3497 if ( false !== strpos( $index, '_license_key' ) ) {
3498 give_delete_option( $index );
3499 }
3500 }
3501
3502 // 2. license api data
3503 $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name like '%_license_active%' AND option_name like 'give_%'" );
3504
3505 // 3. subscriptions data
3506 delete_option( '_give_subscriptions_edit_last' );
3507 delete_option( 'give_subscriptions' );
3508
3509 // 4. misc
3510 delete_option( 'give_is_addon_activated' );
3511
3512 give_refresh_licenses();
3513 }
3514
3515 /**
3516 * DB upgrades for Give 2.5.8
3517 *
3518 * @since 2.5.8
3519 */
3520 function give_v258_upgrades() {
3521
3522 $is_checkout_enabled = give_is_setting_enabled( give_get_option( 'stripe_checkout_enabled', 'disabled' ) );
3523
3524 // Bailout, if stripe checkout is not active as a gateway.
3525 if ( ! $is_checkout_enabled ) {
3526 return;
3527 }
3528
3529 $enabled_gateways = give_get_option( 'gateways', array() );
3530
3531 // Bailout, if Stripe Checkout is already enabled.
3532 if ( ! empty( $enabled_gateways['stripe_checkout'] ) ) {
3533 return;
3534 }
3535
3536 $gateways_label = give_get_option( 'gateways_label', array() );
3537 $default_gateway = give_get_option( 'default_gateway' );
3538
3539 // Set Stripe Checkout as active gateway.
3540 $enabled_gateways['stripe_checkout'] = 1;
3541
3542 // Unset Stripe - Credit Card as an active gateway.
3543 unset( $enabled_gateways['stripe'] );
3544
3545 // Set Stripe Checkout same as Stripe as they have enabled Stripe Checkout under Stripe using same label.
3546 $gateways_label['stripe_checkout'] = $gateways_label['stripe'];
3547 give_update_option( 'gateways_label', $gateways_label );
3548
3549 // If default gateway selected is `stripe` then set `stripe checkout` as default.
3550 if ( 'stripe' === $default_gateway ) {
3551 give_update_option( 'default_gateway', 'stripe_checkout' );
3552 }
3553
3554 // Update the enabled gateways in database.
3555 give_update_option( 'gateways', $enabled_gateways );
3556
3557 // Delete the old legacy settings.
3558 give_delete_option( 'stripe_checkout_enabled' );
3559 }
3560