From a62df56f5f77ed706fc7b5ae91f2ac0fc8105f17 Mon Sep 17 00:00:00 2001 From: ecoslado Date: Thu, 3 Dec 2015 17:25:22 +0100 Subject: [PATCH] Avoids empty title and description --- dfTools.class.php | 4 +-- dist/doofinder-p1.5-latest.zip | Bin 43962 -> 44400 bytes doofinder.php | 46 +++++++++++++++++++++++++++++---- feed.php | 10 ++++++- package.json | 2 +- 5 files changed, 53 insertions(+), 9 deletions(-) diff --git a/dfTools.class.php b/dfTools.class.php index 1bec543..7b105a9 100644 --- a/dfTools.class.php +++ b/dfTools.class.php @@ -680,11 +680,11 @@ function cb2($matches){ $text = html_entity_decode($text, ENT_QUOTES, "ISO-8859-1"); $text = preg_replace_callback( '/&#(\d+);/mu', - cb1, + 'cb1', $text); // decimal notation $text = preg_replace_callback( '/&#x([a-f0-9]+);/miu', - cb2, + 'cb2', $text); // hex notation $text = str_replace("><", "> <", $text); $text = preg_replace('/\/i', " ", $text); diff --git a/dist/doofinder-p1.5-latest.zip b/dist/doofinder-p1.5-latest.zip index 871da7111c436afaf03828def7e11f237472ed0f..eb39e28e31b4a9cfb47ef1743ec02e609684ba31 100644 GIT binary patch delta 20604 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 delta 20269 zcmZ6yQ+S{atSwyIwr$(CJ+*D?t!>-3-A*xWr?#gyrgo?8`S$+*n{#rJl_yVfmz!j* z+-`#Ptbrk_$b&;*fc%ej`vxW>QiA^n&74lK|AVQ!>G-MeRdB7-usM+bn=mlNM>TVE zWB&iTU_fC0rz@2i6~DC!*&p+pYT)QaR@hH4R?c!rt%pp1gi-cdvKk zPda~h+bf)@$jCcV?k9-4HFMs>XM82 zMRUioGi}7gbtrJ)Q2Q#zmP7^0c2N_ZI(UdjCn(VcqhN>Lz(T~gaNO_L0i29t%lIE) z6g*)5IjnIzHy$^ePskAmKLmi6-&>RsYA0O zvg}IW&>{e4Hvw(oy0o9B!L>~qTp$)ZhMXir%1;8nX3fr2mkgY)jO^|OQL zqsyu+%HoMbw4UeL%p)|l0979lxD_;^kvM{b)+ZOE?r;uZxHUeQiB-fNfBWrgu2pMa zIu>kdJhchE5_Z~NazAR8&kp=-6#E@s42k-$Y1_^?ko<0zRpmL6cB_F7<2dXnW0by%6t~ke= zqJ_Zrif8;rJm#n|Ab}5zgovUYgKcFiQ_)vW2mjTnaZQM??Cy$?@R{$mCt}~zx8r5Y zv$MMbFW(az0$sI!7BvaQYXO!A1lj;O7c7eB1|CLH#<-EyS3G&si3 z^P0ojN5kpQ&+Hwci^M(r731|>CFzM$48n zRB9vpfadmK?^dD2u_b!%*e7pS%!GrXcQV2Tpj}Cb|Ekh?#k)C>ov5A}%@(pSHgXW+ zG^OkUk)n&Z@49_JjlZS^P!;6u-}s03&3*g*bv~0i^R$%vZC~&icj~8n>+{niBGG8! z@U*_QP}wOb_jPA}cU$}Q&mXbY6QVDt1EBFVlKQ90X~5E<-3_B*JIwXklyf!tP8*E- zrCVkeav}QfRcxpuZ6cY++E4x6uIiw_(^e+W_@=nh$53MXRuhpy!4j^LHr!ZypZ@-+{v^v$P~Q1iFko}G@a&n_7e$3iwraw2a=lx0 z!^}jv4Gfty5hY>G=VFFUpDZ9~1wF60-Y;1zrlaPk<~s`^JJq(wHQaxkaRqA}OH!@_ zM1v+Bo4b%@eiA+aE*yA%i$fk&S^hG_H9uT(y9O?-SU25IZT{XfxhMp9keHLb!)I2XF6y*O>$LCG|(hGB1vg2WOo)eXpGS2Hu%o1|CyCnxAlJ#?DxlfVMf1;#M>rRl&J)*fKPV)}m+UT^wU&&nW^pNvc@n(F} zT_pYalEP;%Q7eSzU{I6x34K2csf2@a7(ZXDLhVHWK_Ii;)K_Al8~G#|F$tzE^t1by~Dz`G#Q_Je4Fj5 zWJAd?oMyK%mTF~1cmjUNsQSxPD3R*($C0OWlu#&5b!sRD^w9v8bDe7m?0{H6n&%a) z+*uz`OPGT)c^>cOpB3|Kf`eojc-2W~5jQGEiCX#{6tgT^dwf#|6+uu7hbyf#d2%c} zilBWN;*-1-S$ET-X1}65AW-YH+9{+hTwDL1`II`-`kwjzVEJi&sZbX02~>Il+7;Va z1D1aW(mWSme@Ogvu3Lu9UeBgWJd_RMh^7Xbspshwa;?&+Y}UsJ&rinS-diYfXYh))^&wc+Q%m-*yTw6d z3YUwN!fUW#O~ZN+N}JmJpdyKaF2aW1KQa}KmV3T0?t?zPkz;K`Q+>5nJe3eJVy?O#o`y&5|>*%IxPY=E~)_n zlR(4ytR(PYhdPWJ5KUtU6Fib->#VNbYHw1;u9pNj7H|P;f&m!Y2q|Hc z>G5FGGAhmm@klggYGRtyyFX>7sG2%voDVI=wh?_7+~CGXSRksJq3W2EQ!MYJQTLzz z5fVZ;?Xe(k;YEJ)-b)Bc?2-VL71>3+)yecoyI{#!PJxujHTE;#YDi?iGj}tpuZvm< zbU8aKrb{kW=t0G|bp5b~RmrX+_WtMy0{JpzF-=#NGB!JF((M5e{KSi?0rX^EH45td zh`t@#HzdB|7bI@t^@GUeLeN)cE;8-gH~S@ThD{ba@7J#;F;+?R!8vc%z?yB@+4AqvOO$YH*NjfE)G9hz+K>&h?zY!d z^jY?hFl@bAFEFy-1eNr4r0ML0UzBPOO^RKsmRWxYo8#5=!`&D>77xM^2??tE+@E!N z3nE}0fEM%?Z$j?JF_Z+^iZ`5JI-TsYOhOx^$5g6!O);8BFhI?o=P_E>3xxXo41>k} zrAq}_rDXt{@yr|p+o?Xj+KbA4WC%82Ymsfi5ki^b81#vnGc&BwaE$NVt3W}NgjK-! z21XCf6p6}do5dQ%;iTSGQGBK!58*Ww(*W|Jmv7Vy{qR0DPoJl3-O>iPf2raW`=#D~ zFykE`rdcQN1JFvR_U+2MPt%^~)WY4yf zZP}?0_hn{9FQ+L$_ezvcf;v%2|_|2Thr2<>w*u+4r2W1nl91idr>&ai>#|w zn@9?1H1it7em|M!*;qMMae>s!Ym*2qnMnI<_KzK>2WV>$4To~rq~XeK2j9s>p;P0g zBTb?ZU=AoU!r(h4Z(toxSPtYsuvwhYtn1;^kDF`0gg!=yMaAb=$=72ttP69Yn9@3n z1p6l77Z>@t9N9!|#rI4qYa(qisOQ3gck3Jf$T|a54o4aI@vdIt$XFoO@?=s*$gR(7 zq8S=)0e5RhM|N6~^a^(EE`#$vY!$dUy#IpqGYu+tojULuk$pv*EbHW|S=S6{P~t`= zOrzxZ;X>Uihw6wR8WWI1gSMuraBp=5;i#+hOPK*@{$uhvdkrtTIV6M|UPXh`>K9Lf za+9R7a~i!s1i#*bS?Gy-d}QshGSvVK@*dE?1_lxwouUV`A~Ixt8!0)e~PFPc=wiPbCx@yAJDp z>Lo)GCX`xeDu(8aR7UV953fef{(K(jFjVS2Pk5f+fh{R-gJq2iDyLyAAr0qk@7y&m zz#K+spm5rm!u<#jZNFvw0pHt72-yxw^bj&mod_4n)RmHf}DFQONB=I{A^Oyi-`bn73dw>LCtVb!AwW_OHJ%7xE<7C zP@IONlMOk9f7O&CsP}xgxXCmp$w~PKSTUzMf?(xcVTXa6px3Gu6#tE2;7VV*!^Po? zc(Q=9CD3fE;5c{?vNWH#J!V{I(YUJ*5qcg>_+DoSa=;87AC%Jk`(*_8=F4^d>po&( z?P7<9ksqHWqlkN9-2#hu*0p5rD*86PO+=_jwlZ(=yWumsh3 zZv>6VSBA+WyNY17?$+e?8}=>|&c&De;@J~8WAa!;B4z0BA0-lN@Um3jaxBkiJU=?f z%I<6?XGpX{$3S6~1TDQ0i4fFD%k12o2@Tlvwkw6d$)j8_X}qd^-sf^+*r)>-=kw!6 zn=!J_`T2S1+VCOs={TPhG%4uwP8jP-I_@TCf)OO_$!5@-G=4Y6rbid@Mgonla*QQir^E6!^3JtcjKS}!<7);760F@P^#%1G)dIS` zA2=Yocy*aLah?D|(t&P|LF@0W?eXB*7H7oytSRYWmnF~O)M}v1Kw$wg&8WLmgo}Bm zl9p@c;CILsGxle$a%FYCb@7=}_P04J-UP~Iz|~+vOSTRR{F3~S##%W}$Lf>g>tjaL z5H!Vi8zLEe;^xpb-lzy!L9Shu4#{v91Llk3Gm0(3M<~ULkU2P28~KQ4%jby)1u%Tq z*ciq8tLwj9gepK+;VA0MNFDaE-*n8ZvtAUndcpmMlFN>_ zDw^WpPE8(BC4yxcR6E`l%UUWagbiZUTVe`+_I1!|H{HpSGm6-z`Tb7kgXxDT zj0Q3_t0pS;i337}3>ibsW>zmMD~gqmY)htJZ7$!}%i}dR#irU+TaW_3a{uMv7?MZt*;QU#PJrBC9Rg-h5ADD8X$sHl^T^ zD3ElKJEHJlFNYV(vM}X}KfQ|?tlt!OcE>PntOJA?rD>?%S;(=FnM+x1f+xrnL1sc; znzx0hz4N-hYE3(Je{ztevztVV+8-3%hTm&$s!vxDV+;?~W^B8z5uNq_NxOE{UqjHx zTpg++6t3Du$JrK1&+fC=HpV^`awq8i$P!O^8H^Wtk^GVFphau=gEe?zxkN+wM{O!5 z1{JWz5lZ&bZyLn_(`|=qEml0I5fxWo;|DgtQ2z8_2gtAcRF9{KgH{2j7lp*fA4-&A zjD%*>#66dnQ9pODt{K^h=t=wzWZXIYoJH6Onv(~sa;d`fC%1*^hm-SjOcSh6J-bCz z#z-GHWQOS#_`H@Y;szDDxbw&B+;+fMd4U&Lr6Gv4(|ZmKgW5FTwQIWL_MG3~dX30P zA%{{ol=sShypzw*y_RcTZ@UD|rb1fAhpW&t25`iMX=bGfC#<$VlupFRImSzQAb4-C zu0>K*H(Gw%%__SgGG6}6__uCDr^&`FfVtH5dp8TdzVSqdNbG zR8k&HJM_uox-$zAF7AEr0>)^fs6duR6Eni5Yj8SLN)U9=FInJ?+%gJ% z!yAh0)5X;oDt9@fb<&C|zIJo^j}kb^9|paZrr!ttln$A2*cKifUuRSS>-{*t=cphu zeKn?NzaUFgIl4u@kabL{EPB8OyUae-80!9vKM&wy!Per9+P;MUsT`%42d|>IGAhSjX8^zZllMgJr7S^g-?odzy`} zjtP%>1=DM|4DwdE%Z>dk;1o?QnU`1_#z|bv)%K$7b08NGuQ%mt(!YSWjMg-3LwbR+ z;7b-sM1f}b_>7pZ<39tVKCYJ-ZBM~sl(9{<&O)?fZ@g`vxrAc{aCVag)~pPb-;5jZOXzlbdl$+-i5a{^y570d+?2@?ltBgd$NJ>w2rkU6PfgJJ z3sSA_wJ0+L#BE00B@L85pzV4Qkl-B8wEe3-)M8iZU2#5bYJo{o8ewnFCVS$8#(+-VI+Q9Bj!x zNM1GrE7gg~FLinm5mad9OkJD~z&LC=Z3c>eF3UR1C?+|a*H z5JVY0%Pvw>40*Z{#!lYscRf_!WI7PL4j$Kff4L#G*Aif2WoTqQ8dTp$ig6=Dp{$HK z=(tCq--xug9^qYO$JG~YoA1cfxFOc!(MyuHacn#+$c7A7yiQuq;_&EW=@8lPXI?-D z==doWR0($lcH81R=M5N77Y&ogg(~~pQ_;4NX?6J$MhbKO?AtEvcH(&%8E;&kZmMLL z$(mCtek?HSsP#Ub{>1=&`jNV514%#{VeVRtkic9u(w@;qRvoBkyw8)&pffcEP7%J+ zdo*3rR=e$|Q8dc1h@nso!Z#E^N82QI!Pj?O%XLnrI^cwoxr3NoeJc^Q&e2_j54(HW zO5BHBXj@1VTS95zloRCN&$`+N;y(>-F&^7JjsiT%1U%8;60EA0@;;s9sy9P~%Ks=! zpmp+-{*d0fz?>;_wxe0VFk(1y&&MRb*>e{n*h|4Wcb5)G_2@LC)rXUVAw9h_4jOKV zW=!{R`^dHYS?gl4MTBRiztRttHr>Q;&50^$%CuiGbfXMiIiZWFjf6C7i?Jbh%%~aI z5(i*qrcY?>r5sCA8Ha&UPo+(?TaXEU^hYNL)H4yN|$ zK|)tyu3QIc$y)fE{+h5Peupp|*>lg?Dhqhar*fx_VPIU|o*8lu>c4l#H9?-ZhjA0! zS-{*jMTijc(jHh7dqHmR#X|c`jo|m}jb6(6F%^NA_4IilU=yl=oQ(gQ_caWa;8rq5 zbN3+On5H7t?q1)Jz9^+5n5OUQPX&%}pMM+|C{#QLOHK%m4(-dyLrHn~ZmEpq905ds zq-3vU(YBzmctqKnIKL6%JK`GxGyZ-?SbpXFyrP=EuF0MZ_?h-xv_rv7pgmoqIJzL9 z+#|G%Fa(re#GbgWC2a1Z*&5y-#tC%C&2du>b0o+7g z?{Cq5(WOwf=s%!iN%a~Q@dbW5P%qiXCJJ+ANvvu4JLawo@341n+nBh$l5U)REH(*C zeFQvX9Jorw!b2ePn4qF@{uG&U9M(R`zC(kDN&wj2jX`_gi}K?K(TDC23V=qkTQ*!9 zw2vZ!hQq~LKQwkuNcY4-${6buq~`&lkq~H_B%4jwL^L!R>DY?aG_G6`;YWvXzefK2 zll`6EA~h>)a6s;X;5y?x%>v%8P(qKdaL%+bgHuC0xGSY%)QZi`0lf@5VzuUNk8Ykw z`LE62K@gTCcv6h)k@tr4T7dIoU+%;Y1N>x&Xw;qNmZk%*^nvIX?JE`y{i9Tx9o3{= zo1W6NA4Ks1>_dl(<|SjWEP+{54e*oxkisDy+e~29S~VNoHQ0gRPXX3Kc}0sQ2f&^ztMx;)uYPH+ z$y7GoV8k`pwvtg@1pY0wVoGPFze7$eIOEcflXE^&Jrbp5v4}BT0bLf%E-1mkcbZET z5(1n`QtBk^%U*05&7>mNsb$z%aF>zIFA>T1@0<-EmqWnDC82gNr-CZg&65)HdoHYH z21xIa5zAm<5=(-%JFvrJvokUL_bt@`^x!AE@rPDYvuSJ<^6=5rF-3DP9qafoW^31P zOx#YJdg)5m14x&rg4m~{MneK)nU-=W*8C<0>I!E{UoHPgg-Ks_LZ1^RE|Zk+Q^(8R z$FUxj-wAoB^F={Quh#pET$E6y;$o6|IgxkODAjSQ7BHtGk3iwN$P=suS+GD>0_*q# zI;4~uvf+N*v?%+!lUE2|arvMo;V-u@!aWsuL#TE=!ly>QNs9CGl@Ls91LQ+|Cccuc z{a)+>K{t;+y|SHPO430+zBJE`@|TU-##4g3yz%m%`_bHk=Y(ab!Mfw2&d_(!yYf_l4B zAuhinBO#l07FS~CaOjlfRCvf6MME6&3X9lXUQ8@8iNgkg)(4>`o^KUoGWx2BA zf14g#qFeLWORv-Eew>`__n-r`Yi!dnao~`sO;qHobgR*H?;||}`MN;04vsJt12i;& zD650u8Zc4PZI%Gpe|6tK){hc-579IN1khXDy&o?ruddZTjnCO$UiNkfREnOF$S$D1 z57I}2#ojo+|MFnMSGL%r`EykOiZ`;jwrajaFE1<0t?e%VFl!Sn@HUp1(OOx)y%c>N zz~|FL+T^t#N07UGlZm(>V~Y%wmCHydr#^aO0Do&fES8leWFXGDW&ay+XO3UH6olZ1 zhrh%r1oZiqH_?%jm}J8@UPX%Aq`Kl1^O+;6GIQwX+ER=Z&3KJnGh@`fPIEjLW!W#A z8#mL zOD*DTQl5Bc=28$!9_(>#AnlfQdZW*CF) zwK2)&3x1j^H6r>%R*{E>$!+q(Z6XB$`E~>W`M=c~4D9rP+m=+y_tqB%dOBJXZFEYj zhqiWHxu9Md!_Hz^M%mSwJ`)awC@d=s3y8ID=Y-c!qZa|tkQM?bSHC(Qvf%83fM?awex?Tv5l^trDHi#DweX zYdv^Drgk*xYx>Tgc#mw;TB-%oHe@CGeO9GFwWJcokFju1W+XD zLXHgUMi`_c-L)W8(I~meP#)X^lyQn(T;OGVdKj*O5C(~laF~06d}&aT7)id}y5TYy zI6PO}Q4=P-Q3sl5s+w`b)G<<>Se7WsG!PQ&%KdH0qQwdniC+vk=vm+#IpevICM8DW z3v_Cs|7kO(N^-ZzDrxOq6~a-3P-@*#8PA=5Km2gAbV=J~Ta1l@%5oUwX^Rh{o{KlJ zu}A6xC`CfZaFkIapu2k^pX9Sb>82DjK!nbMgkmu?_(+!TXRc124d=x#niURt`b#&a zm&{QYFdn!zRn^}KVrcasTOY|wJ?GfbW%VT7WSvexN-2124UaoT31V^Qf({sGV_|ioj(L-v#v4 zg||mVt3T+U(Om?IhA+MS4eOT*w|+Mwedo%|QrhalSckLDzKl|*CG34zz$J1obji!o zaTj-X)IwI#laT?^yP&`|@*I@*_SbE>cW}eVf(F8SBQq; zVl05(zxGN>g`GbXBt^c=r=2yHg@S2SI(6yteLSk69|yHfL^N;)`g1l`R5>AHBOj6P zQyaQu%V)($mM38pCdfNwS*?V2NBe!yQa0ipK)183cBJ!2WfYB@>9Nj1Z+c^0H`pb~Ek2K6N8CF(N$lO$COubi6?WWEj%!1dSr}j zGQ}8^%m2Gi`0OpP^_Z}Fl@W+o2)Vq?0h#(qaDy61H*B74XLN^5(lomW_6)YP^Wqe% z$)FT=`l;j7tn^TlXB9rDD{W z!(Z3tHq@c03hdTTxGmwwT)|)7+eXrEN@taLbeCzy_32p?MD&i`;TOQ?mpwZ(o`i8u zDawcW7?N_dJxAD`9nPqa0R+2mZmZMNzDf)WedjBTlVpoK**%M4#}?dQw6vfAX3!SL z-sY)luBqF#?#77Utcfdp2_fcz$T}%!J9KgaF0OQaR`tLGQdlRP(E0B7EJ5W)9qFp< zf@7x4&@Z;IAaT9%p-(_%afCgJ?bM+*X*hzjcMV-}q-+0a$er!30)OM*hda2saxx4( zxmdh2te-&}f?*8o-W=PcmiFy4S{!^2I5)D)Ew1jX_A3?5n?YFd@0~f(Se6WM$OoSu zSvb6P)8xnvX&ne6)u`QqlrXJham0(?P_PZmb2$X|ZXVuZB6k!2U#1gA_69 zn~sT<+D?#0SaO?Be1HO_&T+!kIOrc?ijLng?yV8bPC7~$EU=N4%ckgm!XhhG3&d`* zNSAX_wlcwjc6vmo?kk$t2;*n>IsMFxYI=VvgFL$v2Tg+k1*y%>JwDrRKVQ)QMFU*f z8sTKp0=j>Q3x>g@xMjs-dP@?Zsn5PYQxkY;^=zuTH;F8Xw(?{ASW@1zxH|B4p*Biw zD=C>2ZTJw^rWh)!7Fex1jjtf#^$^XIIh7hB^E0*>&y;fQ##1I zSX|s8jNk&olO|X``0w~qQTa%Kh^pk1#avyM?ixi7aWt1ih>o2Izio3orGN>kgjFKq#a5rg8U!h5Z(*5_`b_$#f z$s*lCwxboHh{;;CyFGHH+jte>lL;LbZQ?Fr(i2(=nqGTt^ z51GA5G(@#Vk_9`8)U-0!v?wX!_!^j_Y;SrCeT9(3cLzumU;A5I*wYSYjA00y2$820 z*ciF58|I9_wAE=x;a{O-GuMQX!bUrfsbCVNyyqlR6SUpn5D7}Z&y*XP{p@+uNzfW_bs#8u zm1x*tQgaVhTd}l7FO->}^X*VB(L=?gN^1)&10Fea|YC#7! z->O4YAm{Pr1S*DrN|fiZF1$UrolB3;huWdRpH~XZbS%DwG)qDFl^nPy$5b;_R82@A z^4X)uSf)`;yT*>C*DD*#K>SgyxJk!jlxIOegJBrPD*Lt&6mAS<+7tTGoQU9!M}@Xb zDE*n12~)B;>B%~%%cJGuB?)2!2rg+u|5V;0CO;?=rUM87U6k7eLYp3Ejqb>(D_inA zO4Qau1F#+V5Y?A~*~C(#UuA$HwbJ~{}}b#yfB$vvIJl7F{qbo8o7eSY!%5!wsEQ-Mo(U z%vt+*tS)7#I(r=w=y2@*mg#@YG+|lEqu=P$R#(=ifGfuO%GTE?G|*um?Rn8+LPCkr z^r#J%VJhY2sU#?LsO1pyHVfAO)ANxfB~)Z15OdjzSMah?31h&6RUF|5F^eN@BGr&h zg;@dMmLVyA!WcO>*gJcHv4kT_8WSMnktW<@ixSP$OUVoF6cl8mO4md)bB-6m)ro#| z%2~J<$z|!mIhcIv*qMs|h9lHpH?r5nF`|vTL8!h`L6)jd#F>tl=J2Q~onR#(=Mv$9 z!EMZ9aiY((7%j;|uw?*`ZLPiQ;uh$Ae!~Q)&u!HxA?c7sE?Og8qJ&iYEepjiTHdn; zmJ?H)o@L*qcamsmY)LlLviUG|lFFHL2!_Vf_UZ1L5nACYRIOd~>Rf?~$JM3ifm61q z7D0%}KBQ8%Z?dilc`!YBR_m4=hoytyy=2J(0u|8=G)n3;=KfQ>HpC?WNeJrxd(919-aXC9Cp6_c*-q}AjH-I^9H;8cf90@UWCUYqdP9qDfm z%Vfvfr0UvvRiM#zzXR*>le%)AjktF5lyxe_cbO%WW zsRyi!mgtJ6r9tM9F;bga-hh79EkraBLa;2L?ZN8H1YIAlI0_HZIefT6Nwhw)=$TB# zbyTi<=f1C6hTgsrOc6S<)t1?g_(&F3hC$7Oi6_AKc-o9Itu85JN*7BshT}UJ+F}-{ ziwD^sxDmD?_>)z1yJ1>l38i1du(ZGFA>vWibZGYqe+qA@Y?JUD8ej&MTXl0TqN~_0@UsBr~Lu)ZyEE9(9r3lS~muY-xu$T<;>ISJvQ=O>Er%Kupd} z^qFd-3T2S!Ehy4c0_-gAEeiE!yNz&R9t@qxMa`USc=6+s!;?5pxkR@^C+ih8CC8@9 zy^uRq_YO*1iQbqO^%x~yOu}9{6mfS!s>54zS(M=rbTNol0`#I>kDX93PVre&PS^a< zaSkVF>s&hy6(lo!N194~wlxF^nltGSa1<*-feiu=t1aa*0CK#sr+oQ7p{uT=2AlP& z_wbidkM_;Mttc#P{4uy{=igdJVI?Dws_JhfAle+0v zS?1*izon7m<6K_<53+Cc6Gz6ygcu(}P*09eIyQ}|6OZy&;S{0~)aYR(*Rz~0tLS3< zFLl}G{*YTM08Ok>WqHQn=SR(X;D+9KA+JXmPsN1+cfd`* zPJY4-Y3C_Vzw|G+W4-<-`wpF(uC|_e2kC%av6|{{0Ewa=wkz4lBe@6*xwXVNG9xi> z;Z}2DmCuLphNoadY|rUA9`u;U>#sJ)(pTJ7X`iJYKwWT*MG5+;hW&ZQxh||GSl+8e z^^WEjwju}9@y|56vH&~`q z4=$z}DODgn1}lt%ylVJmY=HGb!(_ylNPBHrT$769QiP4!IX(tU=Q@0+p~8AT2D9h= z6heg($lb%CvM<;dM1tbpQQ#2|zu@X0VTEj`XzLU7TylA zjWuGw`q!jZWEc79xvzY2(hs<1M1n$Qx*Wj|;G*O|?Ku@yAML#C*!NXRc16UdG3`XH zJ=?lkD^zJpB;@mij=BuKHQ1F-x}($io^yD+6zJ5HkYo*oSl+{DDH?@QY2T*@n)YMB4zNPWS6+RgVY$4@mtSNCHJj-_5*x`Qb-e2nXyz}5keX~qK!U>_vfQ(|=L z!$AOS?CFc5u^axTZ7OoEJ$51V4neF3uPSWJ# z6eK4;{<0J~RaUyCxt&8_0`!k~1r{a0o^Lyqdje(Z`0Il7U>>IN z8SC!jct{2d)!bLurfy4H`yW*`fNzCjc@gSU|^#cqSKx2fiRp6af>T}X{-&*zy(Xy;eD$@{+< z8&&9;mSW|85P>;g5v9(8N%vN8+=KX;;}d;n;M~bVrKp${TWt59p+^J_0}jn#jZ%)C zFWXRzH~hw<)I7tfi`mfl;qZhf>8G`qR~Ykdd@@^U*6;6-kQ6%RjnhcdBa8fn`ue`a z5p_X-dOIpllCu`sI{3iz$686~4~J|2K!{S2+IkH-=XRuRyg?=?fkAAl*F2Lmsy5G| zM^^GMHI*#Q*2r35Y|M>61EkIie*+Wi;Uf>ybfuD-4+W!cLj3IS6YpU@G$0co7k47T zsP~S}9YJYKvTnHorv$oxUqjz_k(s{bEYVM9WM;QT>tZvgc%-%>5{fN@`oMx^xkd$E&fGBf4}*vOV2YR3lxvfK0HQ*8~7f-ns$EGqpFwxT^|asS z=%vMER(zf+y5uK)qK~gOb?@endybGjXE{ZdXYmo9cLae5v#9m0(<;a&qJ$Z8NkWUf zPR#|+ljw(4E|~Zkn85gtdM=P>ow-Ca3elMQ+r{7C{$xD25BRzNYcns1+Xp=;q!!P? zM)Qc1@Lr;Coex!+k|A%ZaDzNJuqokHzpt$xLgFTqd@iO+=Nc=NxV@6lhZ@XNeM2y< z&qPi&&G-tOfzU9>U}r(yN)VHWto}wBdc`myimiWN_3pYfiX<_M z0_zL1Koql>VS>cBG=m~;4qcdfLKy6o%G2L8XL)f(<9De%&8^_hh<$L&rZS#MixYV0 z=WAp9(i3iK>glKa)XJe}hX!eS-k!Ffh)BMTXYz-d>k>&S5c=&Y$n7TqYtGD0qPW~U!;Rd4EjcTQW9UTCr<4UY0wGJ zED(pDLEy-V6}+&D=1Q=-F&nIdgM@T?PbFK{Hy66cRfG=M0Wi-@N(=mv0wi)?W3w5J zSjF;=XH{JJgZcjg_LQOW*93q1c*7n3I`wJ-Z{;5RE2i`oazldFB`i7jCxhL&7nLcz z1|Y{6la$hbIT5Ya7F%SQv?JxnJ!mY?ZXa#lewAAC6n;9Y2J~9?kEuRtjpM7Ebf50} zSqnuW;>L~Hjj~muXU^=DCt&pwL6YR4Uq@-_Hi^}*s-cx3jKGsJ-2_{vbN(IS|7N-Q z>wsG>hu`egr=3CCK3GeuY3p>H5SJyH3p9C-dv0o4s*zFb?iHCjr^#BIgfY1fr8B>4 zSMwH^?HYT(f?f=z)DA2~gT(WELT>X(aOmqp*4z=oVKz=$k$Dw;;lS~+L&|afa$ndm zn#Yt*ROz^9kddxh4;}D*FaKet0V|W(R`@-PElbO2&^aJHPrb<7SiE~%^MK4q0e}Ve zJib9U{NN`(_$?5})BkQE?lp$F4(mK!xjlVTseG$DUjL$jt@(nEx?bm z2@<4vDfm*kg~BDj?Cq>1^l*-f04RcUKTeZrm?SGKb-T6;mWImBk2i@%fQu=Z*_yCW zO(*<(k~?U5T1R)tD;b$F7D%P$Nn5;po}0s0=%u!sN7A@;nTp7}KzH0%ZZNFEQjRF) zZVSkg`8<*Zc>cy4c|mc&;uyQJebE(f`3^%e`3xR)pi{5k?!*7w>K@xI0J{4@7MM=n zDgUx&6DP3Z{xS1nRJFY?q=IuDPaE_XbWsh26gM-H*Hzy;7-VdDU$KmsjYHlJg~of^ z#_p;v_S*S|^@^jxF`Z%TTZQlm=tZ1V4vgl%V3UWD5a$j<@b1E^Id=IFa$LZV{l?pu z>VJ6((q-NizlOZNYW>&F1e^<|WwZ_Z3>Ov7kA_}Ao^!Q>6P~xFX}zGe$iP1`W|xM+ zjfvpCK+;N3iW7}Sir)CY-=@XwnHdhD=U`K;4i#Erq!pa)3ric=F=Wr`fM$l9ko8R3 zPVdQGx;OJHMv2W$$Mvt4UoAL}{89XE8BB)Ift5lynWLgp?}5G;5BSOQly5>#KG%Ej zMph!oJeYC^8?-(e*2$O~w}@=q!zX!t(8A9+&M&gXM2)i0u|}?I`p!S1EKs4cp>9)?i>*1H$KD4n_WA^4J|D%VFYsTcSUwN#~y`kEG6R72~BfE9#ka!@Z3n z`vMfT!A!^;?&$;ozuB1K*W^7Zxjhd1;!v zQ6kM=7nP|T10GwH_RXuwR?5YX3z%ojg~ZA`@~TJ&cK0Pj00SI!W8dbLHt*1N4>sxv zJ{@Ku1YCV3?zmom+vh$^`ArN#6MxcAMYNPqB*?dV29}NLNpRd~rAU?S9wv{H%hi}O zp>DxjGA5VEqJHKGJui~h`h^FWRLp^1cUN>vi9hy&rln^1a^QDiQdVl!vgCaPRts!r zaNSBr(IMD?SW>dOF`-di+e#bR?ItL6Q=o^9x>L!Wk!V2E*X*Gl_2$ezudogD6CmSic%) zS1Vgd_*5IT-CR64PA0`d30Ro}Vc8NiA$`jW^(1~kawC-;*Jo`aDUd$LaSadFV3cF5 zOo7pqCH@_^i}R7iRClECnyx??|(JhroTCwFePu{OX)tmWRYcIg4W7n248T0j_xP($#dGum0OwD zYCanhUMO_SHHCgMu53TLga9$Y@iM{_N1QbmV*Vt7XW}*h0#q_&pC$%QHUne-8016d zq2;;cL!MH`y9-l)`{3NgaXvs=aZ0N$|DQ6hGAzoiiw>zWGRy#ilynRw-QCTAlprMx zf&&tQlrWTZh(k$A=+JQoB?N>E(k@krma>O$=V%s=GkAowB<0tKpWLS3nvY9%h;;8gs}knVel5S2T$d%@~Y z{opMI4tr6|N}{?;ZzW37D$vMfWdn+shq-D-`&tvk+H%02jveYVXTBhr{?CHQ%;%J) z@;CY{vRCa{Z~_KO#Tt-y7?l4dS(PvPe%BqCO_bM%$DVY1Zuzh#!?vkpo&U&-PafTq8pn69wL6U9|=)ll~0xcGS^WJ=rF(2Qp2Gmrv5yw7A@C z8-!din;y|d={dt9NLw_cM>7b+D|ufQrhA1Ds5GSWr$>7`t?n;Cl;U4y+&Q4$gCtX5 z)9OgzIq#nKou_)nbk8H~HP*6)OHbAI4F?iHp{*pT&73%XvEz3-787o;&Ky23%)!X) z0+0*~sfs@CHNrgUEB9q3>`mg*jJ=ttYB}A3*obPz5l5)6o!rU_V8S%GoMAS zyNtd*T@5uQJmeDf{O&nBnk~O4hmNb7g6?-GF;83&dF0mQpC$rDI)icudLtws%OT5z zAH1heLaY{pfDigoyc>^9kjH$II z2=JeP2PqueOZI&cH}CD`)V6(j-0pho#IQT)Y-{O9-V*Cwiu5_E7PsKzE)><&_jf;V zBM^U4y@vD-0{6k+#X9}P*aqeiel-ZAF?e#JBeMJXhq?!_UnUiSz0nL|`oVwZte}=(o z>1@n8pEAoGMqvq{KSsHlv?)8|2pl4OhrB!vF}s5*(d_El?lHubARq*%rszsi*o&tnt{;{ZM87*@X;gNIaL~Ec1KS#IYW)LG&f$kzFg<- z1XzLei#|(+Nv7ciFD})UL1fmH*^qZ>9z)%44hLRk3nqTlqbGkpvX&M)x?M%#$9DaNZu_ryVG+_fjd?KEa(dcDG}p_@F{ zq4Cf+$({O(X)Lc)ce7z|EPZlp&W0bmGZZs@Q4wS+R<(^$BJqGAl36Z9r#J_A!iyas1Kq#)X#TvqamS@Q?;( zc=p^~B?wlM_Og>|0;bBJ;@j(paW8uS{dQ}U&F3)_j%n)mFJjuB9R;g#%$e_^L`bo8 zlvbMr`B~&ag&h+&`;j&dIP*{$9xkrQO1s!x!mO`SL1&${ieiG+zF4tcD}icD4`w$b z%yKkg%Syp)x0YSkG9X__v(xf4Pd0iCqnMq2UF#l)cxZv=f@hxDc?#_4cAaeeCt4;l zj@*g^{|!TNFLBu3s2J=a(>SNN92Q;jYs@u5w0OR|T@HK5i6mP|I;@MZI{cFKa^JyQ z0Ir01qcC?W24ncSpm}kaQ6%aW{TxOK4;|!v!>nmwNRBQ=y&N5?bTVU zWfOU&lN;Yiv3o7fDJbrJUX6_7_4(475eJcDa~HF5-UQN7u3Ej^fZq(4Lp$=)%YY@z zO(m6}oJ1P#HuUF~6H?AanafOL30C`PB}DxEI3TooEzG5gG*=F*@ruwYKV~n%0X6}r}@=Y*_4XSmL;KA zV=y_k4rx5Dn#||!(ZMY;ZgjZ)u=IWhpW}8Tg)K?>N>y#i3p%ngbPqceq|c+5Vt-kV zMMw7WjPeMjv4TzPh=>JhJ1W;eBe;C?K+UnRi&nQ=3aF*#&(nOB;GQ=Pg9Nuq86lgm!MCmd!fqXmKVU=!^a8|{p zE}^W;+4JcYb!8xKzR!hCNtpEy-EqF(t#hzxYqN@Zaj(*2Ip+9HYbqvMFr5`#(-BU@ zRLH~Wm^n8%{qdO;P7(I@tYy!3tN&M~lKhE$0R&?4I29gZd{N3~OtI46>V24gcCrsc5$H5}`k;2~kfsXa-e-sXX;MHk+MBON29o{VZ$CIvS%owfbM|M8b zqE?(|_V-9O^b7nUR`-7*LpRLtyfvwxQ$sSY-#tA-A}cjh8@9ZjiHN`l*}RfP1nBjm zBT4}22A&KKeQ@QI*q)%QN|j#qbaU+#uk^tPvGyrT^c;(}ixS(Z&!|c;__%n+f|Ubx zfN09;Gn2c%Vc%-z$E1D``HEzW2JRoL?2cJYkSJsFeQbjEu_;s0kAr?YbyHy1K+Xo2 z&D@`6-I1>io-z;Xs{FKBb6!l%i|nSA9x$=e6-AoXrU9RCgS_9q-=YJx z|46VWA4jm~tIbd1uB((Ax6=aeAWv^otlZ2k4OTfsj7e6%g*5pa;9c*}4oF9mTFz;2^yRN`N1 zcI0deM2vt`j9AkfDI?XQkHxW}S~7<=ba(yN!kLi9{J(e&jp`a^ZbO#fNbOHAF#IwQ z*$uzR=|w8Rj}`r+Ns~`)-+-9L7BYz2%X&89J3_F_m)`TFo_*Rvs+sZh7bL71QXcW;qcAQOP}Qey@oB`iL(M@HoYrmG zRoj%&funkX1wlWWIGb0T871Y9oCRZ{^ftvU(jLo%b6Pl^k{4LYLiD#ie$J?Mnwks; zQ`f>aGt(IJM;VDJ{phpucPpmvd$XRsfAuuP_!PpzZQv-WcX3cqgw%4Lk$wx+&%(tO zZUB4Ft29hQWl!TJOdX9bQmbZZeoxtr@%B)*$;?~qlOhGXnZ?1Rq;$~Qt7;&S`{CC* zrijv%`P7+0FiYp6I#&HVOVnR?^sOj#3R2b1FE5%95tLqh9}IY zXtN$+G1Je zE7yM(k+lERjVyqoPzDsJgp1{h^PfN9vYh;DU2*JTD3cNvJjp+5-Lr@g0N5u60I2@v z0Io>ytx+i@tPid-{o}vffc`PSfN#o~b^w5*yStOi6Gyn$U00Wfmy_8D2&n zv)MGYr^yBam;nGr1ORXef32$zblRaHr2_byDwi@4CWN4DN?Gt`=%wi$iOT)UY`Zko zlTgfMxA_0gewF5bmHj*Wm9l470e@yUEMp+VB%wZ)asLzlw>oQ&_>)gW0D##I06_Y0 zaro;WT?J_3<=iM|AY@EI?WWS8oEIo)Nm^M73!_44wFKK1g556_&v pG##?9m?(o>(*F~1Lt$I_NR4ceii{4&&{{@(PIbZ+) diff --git a/doofinder.php b/doofinder.php index a49a393..1c08785 100644 --- a/doofinder.php +++ b/doofinder.php @@ -43,7 +43,7 @@ class Doofinder extends Module const GS_SHORT_DESCRIPTION = 1; const GS_LONG_DESCRIPTION = 2; - const VERSION = "2.0.11"; + const VERSION = "2.0.13"; const YES = 1; const NO = 0; @@ -150,7 +150,8 @@ protected function _updateConfiguration() 'DF_FEED_FULL_PATH' => $this->l('Export full categories path in the feed'), 'DF_SHOW_PRODUCT_VARIATIONS' => $this->l('Include product variations in feed'), 'DF_SHOW_PRODUCT_FEATURES' => $this->l('Include product features in feed'), - 'DF_OWSEARCH' => $this->l('Overwrite Search page with Doofinder results') + 'DF_OWSEARCH' => $this->l('Overwrite Search page with Doofinder results'), + 'DF_DEBUG' => $this->l('Activate to write debug info in file.') ); foreach ($cfgIntValues as $optname => $optname_alt) @@ -367,6 +368,12 @@ protected function _displayForm() $fields[] = $field; $helper->fields_value[$optname] = $this->cfg($optname, self::NO); + // DF_DEBUG + $optname = 'DF_DEBUG'; + $field = $this->getYesNoSelectFor($optname, $this->l('Debug Mode. Write info logs in doofinder.log file.')); + $fields[] = $field; + $helper->fields_value[$optname] = $this->cfg($optname, self::NO); + // DF_GS_MPN_FIELD $optname = 'DF_GS_MPN_FIELD'; $fields[] = array( @@ -574,14 +581,22 @@ public function cfg($key, $default=null) return dfTools::cfg(null, $key, $default); } } - + private function debug($message){ + error_log("$message\n", 3, dirname(__FILE__).'/doofinder.log'); + } public function searchOnApi($string,$page=1,$page_size=12,$timeout=8000){ + $debug = Configuration::get('DF_DEBUG', null); + if (isset($debug) && $debug){ + $this->debug('Search On API Start'); + } + if(!class_exists('DoofinderApi')){ include_once dirname(__FILE__) . '/lib/doofinder_api.php'; } $hash_id = Configuration::get('DF_HASHID', null); $api_key = Configuration::get('DF_API_KEY', null); $show_variations = Configuration::get('DF_SHOW_PRODUCT_VARIATIONS', null); + if($hash_id && $api_key){ $df = new DoofinderApi($hash_id, $api_key); @@ -619,13 +634,18 @@ function cb($entry){ } } - $map = array_map(cb, $dfResultsArray); + $map = array_map('cb', $dfResultsArray); $product_pool = implode(', ', $map); + // To avoid SQL errors. if($product_pool == ""){ $product_pool = "0"; } + if (isset($debug) && $debug){ + $this->debug("Product Pool: $product_pool"); + } + $product_pool_attributes = implode(',', $product_pool_attributes); if (!isset($context) || !$context) @@ -634,6 +654,10 @@ function cb($entry){ if ($product_pool_attributes == ""){ $product_pool_attributes = "0"; } + + if (isset($debug) && $debug){ + $this->debug("Product Pool Attributes: $product_pool_attributes"); + } $db = Db::getInstance(_PS_USE_SQL_SLAVE_); $id_lang = $context->language->id; $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, @@ -663,7 +687,19 @@ function cb($entry){ (($show_variations)? ' AND (product_attribute_shop.`id_product_attribute` IS NULL OR product_attribute_shop.`id_product_attribute` IN ('.$product_pool_attributes.')) ':''). ' GROUP BY product_shop.id_product '.(($show_variations)?' , product_attribute_shop.`id_product_attribute` ':''). ' ORDER BY FIELD (p.`id_product`,'.$product_pool.') '.(($show_variations)?' , FIELD (product_attribute_shop.`id_product_attribute`,'.$product_pool_attributes.')':''); - $result = $db->executeS($sql); + if (isset($debug) && $debug){ + $this->debug("SQL: $sql"); + } + $result = $db->executeS($sql); + if (isset($debug) && $debug && $result){ + $out = ""; + foreach($result as $elem){ + $out .= "ID: ".$elem['id_product']. " ATTRIBUTE: ".$elem['id_product_attribute']."\n"; + } + + $this->debug("RESULT: $out") ; + } + if (!$result) return false; diff --git a/feed.php b/feed.php index 0c2eb4f..c1ccdc9 100755 --- a/feed.php +++ b/feed.php @@ -64,6 +64,7 @@ $cfg_mod_rewrite = dfTools::cfg($shop->id, 'PS_REWRITING_SETTINGS', Doofinder::YES); $cfg_product_variations = dfTools::cfg($shop->id, 'DF_SHOW_PRODUCT_VARIATIONS'); $cfg_product_features = dfTools::cfg($shop->id, 'DF_SHOW_PRODUCT_FEATURES'); +$cfg_debug = dfTools::cfg($shop->id, 'DF_DEBUG'); $cfg_features_shown = explode(',', dfTools::cfg($shop->id, 'DF_FEATURES_SHOWN')); $debug = dfTools::getBooleanFromRequest('debug', false); @@ -76,6 +77,11 @@ ini_set('display_errors', 1); } +if ($cfg_debug){ + error_log("Starting feed.\n", 3, dirname(__FILE__).'/doofinder.log'); +} + + // OUTPUT if (isset($_SERVER['HTTPS'])) header('Strict-Transport-Security: max-age=500'); @@ -128,7 +134,9 @@ foreach (dfTools::getAvailableProductsForLanguage($lang->id, $shop->id, $limit, $offset) as $row) { - if(intval($row['id_product']) > 0){ + if(intval($row['id_product']) > 0 && + (isset($row['title']) && $row['title'] != "" || + isset($row['description']) && $row['description'] != "")){ // ID, TITLE, LINK if($cfg_product_variations && isset($row['id_product_attribute']) and intval($row['id_product_attribute']) > 0){ diff --git a/package.json b/package.json index 03dd585..94b3d72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "doofinder-for-prestashop", - "version": "2.0.11", + "version": "2.0.13", "devDependencies": { "grunt": "^0.4.5", "grunt-contrib-clean": "^0.5.0",