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