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