1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
|
<?php
$filename="thread.php";
require("./global.php");
require("./acp/lib/class_parse.php");
$lang->load("POST,POSTINGS,THREAD,MEMBERS");
if((!isset($postid) && !isset($threadid)) || $thread['closed']==3) eval("error(\"".$lang->get4eval("LANG_GLOBAL_ERROR_FALSELINK")."\");");
if(!checkpermissions("can_read_thread")) access_error();
class Thread {
var $threadid = 0;
var $pagelink = "";
var $page = 0;
var $pages = 0;
var $postids = "";
var $orderBy = "";
var $userfieldcache = array();
var $parse;
function makePostBit($posts,$count,$indentwidth=0) {
global $thread, $board, $tpl, $wbbuserdata, $style, $lang, $session, $userratings, $showuserratinginthread, $showuserlevels, $showonlineinthread, $useronlinetimeout, $showregdateinthread, $showuserfieldsinthread, $showgenderinthread, $showavatar, $_GET, $showthreadstarter, $showuserpostsinthread, $allowsigsmilies, $allowsightml, $allowsigbbcode, $max_sig_image, $authormarking, $picmaxwidth, $picmaxheight;
if($this->userfieldcache) reset($this->userfieldcache);
$userrating="";
$signature="";
$lastedit="";
$attachmentbit="";
$user_online="";
$userfields="";
$useravatar="";
$rankimages="";
$setvisible="";
$userlevel="";
$posts['username']=htmlconverter($posts['username']);
/** mod/admin option -> set visible post **/
if($posts['visible']==0 && $posts['posttime']!=$thread['starttime']) $invisible=1;
else $invisible=0;
$tdclass=getone($count,"tableb","tablea");
/* tn123: online time per user */
if ($posts['onlinetime'])
$posts['onlinetime'] = round($posts['onlinetime'] / 3600, 1);
if ($posts['onlinetime'])
$showonlinetime = 1;
/* tn123 */
$posts['message']=$this->parse->doparse($posts['message'],$posts['allowsmilies'],$posts['allowhtml'],$posts['allowbbcode'],$posts['allowimages']);
$posts['posttopic']=htmlconverter(textwrap($posts['posttopic']));
if($posts['iconid']) $posticon=makeimgtag($posts['iconpath'],getlangvar($posts['icontitle'], $lang), 0);
else $posticon="";
if($posts['posttime']>$thread['lastvisit']) $newpost=1;
else $newpost=0;
$postdate=formatdate($wbbuserdata['dateformat'],$posts['posttime'],1);
$posttime=formatdate($wbbuserdata['timeformat'],$posts['posttime']);
if($posts['attachmentid']) {
$posts['attachmentextension']=htmlconverter($posts['attachmentextension']);
$posts['attachmentname']=htmlconverter($posts['attachmentname']);
if(checkpermissions("can_download_attachments")==1 && $wbbuserdata['showimages']==1 && $wbbuserdata['can_download_attachments']==1 && ($posts['attachmentextension']=="gif" || $posts['attachmentextension']=="jpg" || $posts['attachmentextension']=="jpeg" || $posts['attachmentextension']=="png")) {
$imgsize=@getimagesize("./attachments/attachment-$posts[attachmentid].$posts[attachmentextension]");
if(($picmaxwidth!=0 && $imgsize[0]>$picmaxwidth) || ($picmaxheight!=0 && $imgsize[1]>$picmaxheight)) {
if($picmaxwidth!=0) $div1 = $picmaxwidth/$imgsize[0];
else $div1=1;
if($picmaxheight!=0) $div2 = $picmaxheight/$imgsize[1];
else $div2=1;
if($div1<$div2) {
$imgwidth=$picmaxwidth;
$imgheight=round($imgsize[1]*$div1);
}
else {
$imgheight=$picmaxheight;
$imgwidth=round($imgsize[0]*$div2);
}
eval ("\$LANG_THREAD_ATTACHMENT_IMAGE_SMALL = \"".$lang->get4eval("LANG_THREAD_ATTACHMENT_IMAGE_SMALL")."\";");
eval ("\$attachmentbit = \"".$tpl->get("thread_attachmentbit_show_small")."\";");
}
else {
eval ("\$LANG_THREAD_ATTACHMENT_IMAGE = \"".$lang->get4eval("LANG_THREAD_ATTACHMENT_IMAGE")."\";");
eval ("\$attachmentbit = \"".$tpl->get("thread_attachmentbit_show")."\";");
}
}
else {
if(!file_exists($style['imagefolder']."/filetypes/".$posts['attachmentextension'].".gif")) $extensionimage="unknown";
else $extensionimage=$posts['attachmentextension'];
$posts['attachmentsize']=ceil($posts['attachmentsize']/1024);
eval ("\$LANG_THREAD_ATTACHMENT_INFO = \"".$lang->get4eval("LANG_THREAD_ATTACHMENT_INFO")."\";");
eval ("\$attachmentbit = \"".$tpl->get("thread_attachmentbit")."\";");
}
}
if($posts['editorid']) {
$editdate=formatdate($wbbuserdata['dateformat'],$posts['edittime']);
$edittime=formatdate($wbbuserdata['timeformat'],$posts['edittime']);
$posts['editor']=htmlconverter($posts['editor']);
eval ("\$LANG_THREAD_EDITOR = \"".$lang->get4eval("LANG_THREAD_EDITOR")."\";");
}
if($posts['userid']) {
$posts['homepage']=htmlconverter($posts['homepage']);
$posts['email']=getASCIICodeString($posts['email']);
$username=$posts['username'];
$rankimages=formatRI($posts['rankimages']);
if($posts['title']) $posts['ranktitle']=htmlconverter($posts['title']);
else $posts['ranktitle']=getlangvar($posts['ranktitle'], $lang);
if($userratings==1 && $showuserratinginthread==1) $userrating=userrating($posts['ratingcount'],$posts['ratingpoints'],$posts['userid']);
if($showuserlevels==1) $userlevel=userlevel($posts['userposts'],$posts['regdate']);
if($showonlineinthread==1) {
if(($posts['invisible']==0 || $wbbuserdata['a_can_view_ghosts']==1) && $posts['lastactivity']>=time()-$useronlinetimeout*60) {
$user_online=1;
eval ("\$LANG_MEMBERS_USERONLINE = \"".$lang->get4eval("LANG_MEMBERS_USERONLINE")."\";");
}
else {
$user_online=0;
eval ("\$LANG_MEMBERS_USERONLINE = \"".$lang->get4eval("LANG_MEMBERS_USEROFFLINE")."\";");
}
}
if($showregdateinthread==1) $posts['regdate']=formatdate($wbbuserdata['dateformat'],$posts['regdate']);
if($showuserfieldsinthread==1 && is_array($this->userfieldcache) && count($this->userfieldcache)) {
while(list($key,$val)=each($this->userfieldcache)) {
$fieldcontent=textwrap($posts["field".$val['profilefieldid']],20);
if($fieldcontent && $fieldcontent!="0000-00-00") {
if($val['fieldtype']=="multiselect") $fieldcontent=str_replace("\n","; ",$fieldcontent);
elseif($val['fieldtype']=="date") {
$row_datearray = explode("-",$fieldcontent);
if($row_datearray[0]=="0000") $fieldcontent=$row_datearray[2].".".$row_datearray[1].".";
else $fieldcontent=$row_datearray[2].".".$row_datearray[1].".".$row_datearray[0];
}
$fieldcontent=htmlconverter($fieldcontent);
eval ("\$userfields .= \"".$tpl->get("thread_userfields")."\";");
}
}
}
if($showgenderinthread==0) $posts['gender']=0;
if($posts['gender']==1) eval ("\$LANG_THREAD_MALE = \"".$lang->get4eval("LANG_THREAD_MALE")."\";");
if($posts['gender']==2) eval ("\$LANG_THREAD_FEMALE = \"".$lang->get4eval("LANG_THREAD_FEMALE")."\";");
if($posts['showemail']==1 || $posts['usercanemail']==1) eval ("\$LANG_MEMBERS_SENDEMAIL = \"".$lang->get4eval("LANG_MEMBERS_SENDEMAIL")."\";");
if($posts['homepage']) eval ("\$LANG_MEMBERS_HOMEPAGE = \"".$lang->get4eval("LANG_MEMBERS_HOMEPAGE")."\";");
eval ("\$LANG_MEMBERS_SEARCH = \"".$lang->get4eval("LANG_MEMBERS_SEARCH")."\";");
eval ("\$LANG_MEMBERS_BUDDY = \"".$lang->get4eval("LANG_MEMBERS_BUDDY")."\";");
if($posts['receivepm']==1 && $wbbuserdata['can_use_pms']==1) eval ("\$LANG_MEMBERS_PM = \"".$lang->get4eval("LANG_MEMBERS_PM")."\";");
if($posts['icq']) eval ("\$LANG_MEMBERS_ICQ = \"".$lang->get4eval("LANG_MEMBERS_ICQ")."\";");
if($posts['aim']) {
$posts['aim']=htmlconverter($posts['aim']);
$aim=$posts['aim'];
eval ("\$LANG_MEMBERS_AIM = \"".$lang->get4eval("LANG_MEMBERS_AIM")."\";");
}
if($posts['yim']) {
$posts['yim']=htmlconverter($posts['yim']);
$yim=$posts['yim'];
eval ("\$LANG_MEMBERS_YIM = \"".$lang->get4eval("LANG_MEMBERS_YIM")."\";");
}
if($posts['msn']) {
$posts['msn']=htmlconverter($posts['msn']);
eval ("\$LANG_MEMBERS_MSN = \"".$lang->get4eval("LANG_MEMBERS_MSN")."\";");
}
if($posts['avatarid'] && $showavatar==1 && $wbbuserdata['showavatars']==1) {
$avatarname="images/avatars/avatar-$posts[avatarid].".htmlconverter($posts['avatarextension']);
$avatarwidth=$posts['width'];
$avatarheight=$posts['height'];
if($posts['avatarextension']=="swf" && $allowflashavatar==1) eval ("\$useravatar = \"".$tpl->get("avatar_flash")."\";");
elseif($posts['avatarextension']!="swf") eval ("\$useravatar = \"".$tpl->get("avatar_image")."\";");
}
if($authormarking==1 && $posts['useronlinemarking']!="") $posts['username']=sprintf($posts['useronlinemarking'],$posts['username']);
if(isset($_GET['hilightuser']) && $_GET['hilightuser']==$posts['userid']) $posts['username']="<span class=\"highlight\">".$posts['username']."</span>";
if($showthreadstarter==1 && $thread['starterid']==$posts['userid'] && $thread['starttime']!=$posts['posttime']) {
$threadstarter=1;
eval ("\$LANG_THREAD_THREADSTARTER_ALT = \"".$lang->get4eval("LANG_THREAD_THREADSTARTER_ALT")."\";");
}
else $threadstarter=0;
if($posts['showsignature']==1 && !$posts['disablesignature'] && $wbbuserdata['showsignatures']==1 && $posts['signature']) {
$posts['signature']=$this->parse->doparse($posts['signature'],$posts['allowsigsmilies'],$posts['allowsightml'],$posts['allowsigbbcode'],$posts['allowsigimages']);
eval ("\$signature = \"".$tpl->get("thread_signature")."\";");
}
if($showuserpostsinthread==1 && $posts['userposts']>=1000) $posts['userposts'] = number_format($posts['userposts'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));
}
eval ("\$postbit = \"".$tpl->get("thread_postbit")."\";");
return $postbit;
}
function lastpost() {
global $visible, $session, $db, $n, $wbbuserdata;
$result = $db->query_first("SELECT postid FROM bb".$n."_posts WHERE threadid = '".$this->threadid."' $visible ORDER BY posttime DESC",1);
header("Location: ".(($wbbuserdata['userid']) ? ("thread.php?postid=$result[postid]&sid=".$session['hash']) : ("thread,postid-$result[postid],sid-$session[hash].htm"))."#post$result[postid]");
exit();
}
function firstnew($lastvisit) {
global $visible, $db, $n, $session, $threadid, $wbbuserdata;
$result = $db->query_first("SELECT postid FROM bb".$n."_posts WHERE threadid='".$this->threadid."' AND posttime>'".$lastvisit."' $visible ORDER BY posttime ASC",1);
if($result['postid']) header("Location: ".(($wbbuserdata['userid']) ? ("thread.php?postid=$result[postid]&sid=$session[hash]") : ("thread,postid-$result[postid],sid-$session[hash].htm"))."#post$result[postid]");
else header("Location: ".(($wbbuserdata['userid']) ? ("thread.php?goto=lastpost&threadid=$threadid&sid=$session[hash]") : ("thread,goto-lastpost,sid-$session[hash],threadid-$threadid.htm")));
exit();
}
function nextnewest() {
global $db, $n, $thread, $boardid, $tpl, $lang, $threadid;
$result = $db->query_first("SELECT threadid FROM bb".$n."_threads WHERE visible = 1 AND lastposttime>'$thread[lastposttime]' AND closed <> 3 AND boardid = '$boardid' ORDER BY lastposttime ASC",1);
if(!$result['threadid']) error($lang->get("LANG_THREAD_ERROR_NONEXTNEWEST"));
$threadid=$result['threadid'];
$this->threadid=$threadid;
$thread = $db->query_first("SELECT * FROM bb".$n."_threads WHERE threadid = '".$this->threadid."'");
}
function nextoldest() {
global $db, $n, $thread, $boardid, $tpl, $lang, $threadid;
$result = $db->query_first("SELECT threadid FROM bb".$n."_threads WHERE visible = 1 AND lastposttime<'$thread[lastposttime]' AND closed <> 3 AND boardid = '$boardid' ORDER BY lastposttime DESC",1);
if(!$result['threadid']) error($lang->get("LANG_THREAD_ERROR_NONEXTOLDEST"));
$threadid=$result['threadid'];
$this->threadid=$threadid;
$thread = $db->query_first("SELECT * FROM bb".$n."_threads WHERE threadid = '$threadid'");
}
function makePagelink() {
global $session, $threadview, $hilight, $hilightuser, $showpagelinks;
$this->pagelink=makepagelink("thread.php?threadid=".$this->threadid."&sid=$session[hash]&threadview=$threadview&hilight=".urlencode($hilight)."&hilightuser=$hilightuser",$this->page,$this->pages,$showpagelinks-1);
}
function readPosts() {
global $docensor, $board, $wbbuserdata, $hilight, $usecode, $showuserfieldsinthread, $db, $n, $showavatar, $authormarking, $lang;
$this->parse = new parse($docensor,75,$wbbuserdata['showimages'],$hilight,$usecode);
if($showuserfieldsinthread==1) {
$userfields=", uf.*";
$userfieldsjoin="LEFT JOIN bb".$n."_userfields uf ON (uf.userid=p.userid)";
$result=$db->unbuffered_query("SELECT profilefieldid, title, fieldtype FROM bb".$n."_profilefields WHERE showinthread=1".(($wbbuserdata['a_can_use_acp']==0) ? (" AND hidden=0") : (""))." ORDER BY fieldorder ASC");
while($row=$db->fetch_array($result)) {
$row['title']=getlangvar($row['title'], $lang);
$this->userfieldcache[]=$row;
}
}
else {
$userfields="";
$userfieldsjoin="";
}
if($showavatar==1) {
$avatar=", av.avatarid, av.avatarextension, av.width, av.height";
$avatarjoin="LEFT JOIN bb".$n."_avatars av ON (u.avatarid=av.avatarid)";
}
else {
$avatar="";
$avatarjoin="";
}
if($authormarking==1) {
$marking=", g.useronlinemarking";
$markingjoin="LEFT JOIN bb".$n."_groups g ON (u.useronlinegroupid=g.groupid)";
}
else {
$marking="";
$markingjoin="";
}
$result = $db->query("SELECT p.*,
u.userposts, u.regdate, u.signature, u.email, u.homepage, u.icq, u.aim, u.yim, u.msn, u.showemail, u.receivepm, u.usercanemail, u.ratingcount, u.ratingpoints, u.gender, u.invisible, u.title, u.lastactivity, u.allowsigsmilies, u.allowsightml, u.allowsigbbcode, u.allowsigimages, u.disablesignature, u.onlinetime,
r.ranktitle, r.rankimages,
at.attachmentname, at.attachmentid, at.attachmentextension, at.attachmentsize, at.counter,
i.iconpath, i.icontitle
$userfields
$avatar
$marking
FROM bb".$n."_posts p
LEFT JOIN bb".$n."_users u USING (userid)
LEFT JOIN bb".$n."_ranks r USING (rankid)
LEFT JOIN bb".$n."_attachments at ON (p.attachmentid=at.attachmentid)
LEFT JOIN bb".$n."_icons i ON (p.iconid=i.iconid)
$userfieldsjoin
$avatarjoin
$markingjoin
WHERE p.postid IN (0".$this->postids.")".$this->orderBy);
return $result;
}
}
class FlatThread extends Thread {
function FlatThread($threadid) {
$this->threadid=$threadid;
}
function gotoPost($postid) {
global $db, $n, $visible, $postorder, $postsperpage, $_GET;
if($postorder==0) $result = $db->query_first("SELECT COUNT(*) AS posts FROM bb".$n."_posts WHERE threadid='".$this->threadid."' AND postid<='$postid' $visible");
else $result = $db->query_first("SELECT COUNT(*) AS posts FROM bb".$n."_posts WHERE threadid='$threadid' AND postid>='$postid' $visible");
$_GET['page']=ceil($result['posts']/$postsperpage);
}
function start() {
global $postorder, $db;
$this->getPostIds();
$this->orderBy="ORDER BY p.posttime ".(($postorder) ? ("DESC") : ("ASC"));
$count=0;
$postbit="";
$result = $this->readPosts();
while($row=$db->fetch_array($result)) $postbit.=$this->makePostBit($row,$count++);
return $postbit;
}
function getPostIds() {
global $visible, $db, $n, $_GET, $postsperpage, $postorder;
$result = $db->query_first("SELECT COUNT(*) FROM bb".$n."_posts WHERE threadid = '".$this->threadid."' $visible");
$postcount = $result[0];
if(isset($_GET['page'])) {
$this->page=intval($_GET['page']);
if($this->page==0) $this->page=1;
}
else $this->page=1;
$this->pages = ceil($postcount/$postsperpage);
if($this->pages>1) $this->makePagelink();
$result = $db->unbuffered_query("SELECT postid FROM bb".$n."_posts WHERE threadid = '".$this->threadid."' $visible ORDER BY posttime ".(($postorder) ? ("DESC") : ("ASC")),0,$postsperpage,$postsperpage*($this->page-1));
while($row=$db->fetch_array($result)) $this->postids .= ",".$row['postid'];
}
}
class ThreadedThread extends Thread {
var $offset = 0;
var $offset2 = 0;
var $cache = array();
var $list = array();
var $max = -1;
var $total = 0;
var $count = 0;
var $postbitlist = "";
function ThreadedThread($threadid) {
$this->threadid=$threadid;
}
function gotoPost($postid) {
global $_GET, $postsperpage, $db, $n, $visible;
$result = $db->query("SELECT postid, parentpostid FROM bb".$n."_posts WHERE threadid='".$this->threadid."' $visible ORDER BY posttime ASC");
$this->total = $db->num_rows($result);
while($row=$db->fetch_array($result)) $this->cache[$row['parentpostid']][$row['postid']]=1;
$this->countPosts($postid);
$_GET['page']=ceil($this->count/$postsperpage);
}
function countPosts($finalpostid,$count=0,$parentid=0) {
if(!isset($this->cache[$parentid])) return $count;
reset($this->cache[$parentid]);
while(list($postid,)=each($this->cache[$parentid])) {
$count++;
if($postid==$finalpostid) {
$this->count=$count;
break;
}
$count=$this->countPosts($finalpostid,$count,$postid);
}
return $count;
}
function start() {
global $db, $n, $postsperpage, $_GET, $visible;
if(isset($_GET['page'])) {
$this->page=intval($_GET['page']);
if($this->page==0) $this->page=1;
}
else $this->page=1;
$this->offset=$postsperpage*($this->page-1);
$this->offset2=$this->offset+$postsperpage;
if(count($this->cache)==0) {
$result = $db->query("SELECT postid, parentpostid FROM bb".$n."_posts WHERE threadid='".$this->threadid."' $visible ORDER BY posttime ASC");
$this->total = $db->num_rows($result);
while($row=$db->fetch_array($result)) $this->cache[$row['parentpostid']][$row['postid']]=1;
}
$this->pages = ceil($this->total/$postsperpage);
if($this->pages>1) $this->makePagelink();
reset($this->cache);
$this->generate();
if($this->max>0) $this->sync();
$result = $this->readPosts();
while($posts=$db->fetch_array($result)) {
$temp=$this->list[$posts['postid']];
$this->list[$posts['postid']]=$posts;
$this->list[$posts['postid']]['depth']=$temp;
}
$count=0;
$postbit="";
reset($this->list);
while(list($postid,)=each($this->list)) {
$postbit .= $this->makePostBit($this->list[$postid],$count++,$this->list[$postid]['depth']*15);
$this->postbitlist .= $this->makePostBitList($this->list[$postid],$this->list[$postid]['depth']*15);
}
return $postbit;
}
function generate($parentid=0,$count=0,$depth=0) {
if(!isset($this->cache[$parentid])) return $count;
reset($this->cache[$parentid]);
while(list($postid,)=each($this->cache[$parentid])) {
if($count>=$this->offset && $count<$this->offset2) {
if($this->max==-1) $this->max=$depth;
if($depth<$this->max) $this->max=$depth;
$this->list[$postid]=$depth;
$this->postids.=",".$postid;
}
$count++;
$count=$this->generate($postid,$count,$depth+1);
}
return $count;
}
function makePostBitList($posts, $imgwidth=0) {
global $tpl, $wbbuserdata, $lang, $session, $style, $thread;
$postdate=formatdate($wbbuserdata['dateformat'],$posts['posttime']);
$posttime=formatdate($wbbuserdata['timeformat'],$posts['posttime']);
if(!$posts['posttopic']) $posts['posttopic']="RE: ".$thread['topic'];
$posts['posttopic']=htmlconverter(textwrap($posts['posttopic']));
$posts['username']=htmlconverter(textwrap($posts['username'],30));
if($posts['posttime']>$thread['lastvisit']) $newpost=1;
else $newpost=0;
eval ("\$postbit = \"".$tpl->get("thread_postbitlist")."\";");
return $postbit;
}
function sync() {
reset($this->list);
while(list($postid,$depth)=each($this->list)) $this->list[$postid]=$depth-$this->max;
}
}
if($wbbuserdata['a_can_use_acp']==1 || $wbbuserdata['m_is_supermod']==1 || ($wbbuserdata['m_is_mod']==1 && $modpermissions['userid'])) $visible="";
else $visible="AND visible=1";
if(isset($_REQUEST['threadview'])) $threadview=intval($_REQUEST['threadview']);
else $threadview=$wbbuserdata['threadview'];
if(isset($_REQUEST['hilight'])) $hilight=urldecode($_REQUEST['hilight']);
else $hilight="";
if(isset($_REQUEST['hilightuser'])) $hilightuser=intval($_REQUEST['hilightuser']);
else $hilightuser=0;
if(!isset($_REQUEST['goto'])) $_REQUEST['goto']="";
if($threadview==1) $t = new ThreadedThread($threadid);
else $t = new FlatThread($threadid);
if($_REQUEST['goto']=="lastpost") $t->lastpost();
/* threadvisit */
if($board['lastvisit']>$thread['lastvisit']) $thread['lastvisit']=$board['lastvisit'];
if($wbbuserdata['lastvisit']>$thread['lastvisit']) $thread['lastvisit']=$wbbuserdata['lastvisit'];
/* goto actions */
if($_REQUEST['goto']=="firstnew") $t->firstnew($thread['lastvisit']);
if($_REQUEST['goto']=="firstnew_thread") $t->firstnew($wbbuserdata['lastvisit']);
if($_REQUEST['goto']=="nextnewest") $t->nextnewest();
if($_REQUEST['goto']=="nextoldest") $t->nextoldest();
if($wbbuserdata['umaxposts']) $postsperpage=$wbbuserdata['umaxposts'];
elseif($board['postsperpage']) $postsperpage=$board['postsperpage'];
else $postsperpage=$default_postsperpage;
$postorder=$board['postorder'];
if(isset($postid)) $t->gotoPost($postid);
$db->unbuffered_query("UPDATE bb".$n."_threads SET views=views+1 WHERE threadid='$threadid'",1);
if($wbbuserdata['userid'] && $thread['lastposttime']>$thread['lastvisit']) $db->unbuffered_query("REPLACE INTO bb".$n."_threadvisit (threadid,userid,lastvisit) VALUES ('".$threadid."','".$wbbuserdata['userid']."','".time()."')",1);
$boardnavcache=array();
if($showboardjump==1) $boardjump=makeboardjump($boardid);
$navbar=getNavbar($board['parentlist']);
eval ("\$navbar .= \"".$tpl->get("navbar_board")."\";");
$postbit = $t->start();
$thread_poll="";
if($thread['pollid']) {
if(checkmodpermissions("m_can_edit_poll")) eval ("\$mod_poll_edit = \"".$tpl->get("thread_poll_edit")."\";");
unset($votecheck);
$poll=$db->query_first("SELECT * FROM bb".$n."_polls WHERE pollid='$thread[pollid]'");
$poll['question']=htmlconverter($poll['question']);
if($poll['timeout']==0) $timeout=time()+1;
else $timeout=$poll['starttime']+$poll['timeout']*86400;
if($_REQUEST['preresult']!=1 && checkpermissions("can_vote_poll")==1 && $timeout>=time()) {
if($wbbuserdata['userid']) $votecheck=$db->query_first("SELECT id AS pollid FROM bb".$n."_votes WHERE id='$thread[pollid]' AND votemode=1 AND userid='$wbbuserdata[userid]'");
else $votecheck=$db->query_first("SELECT id AS pollid FROM bb".$n."_votes WHERE id='$thread[pollid]' AND votemode=1 AND ipaddress='$REMOTE_ADDR'");
}
if($_REQUEST['preresult']==1 || $votecheck['pollid'] || !checkpermissions("can_vote_poll") || $timeout<time()) { // already voted; show result
$votes=0;
unset($polloption);
$totalvotes=0;
$polloptions=array();
$result=$db->unbuffered_query("SELECT * FROM bb".$n."_polloptions WHERE pollid='$thread[pollid]' ORDER BY votes DESC");
while($row=$db->fetch_array($result)) {
$totalvotes+=$row['votes'];
$polloptions[]=$row;
}
$i=1;
if(count($polloptions)) {
while(list($key,$row)=each($polloptions)) {
$row['polloption']=htmlconverter(textwrap($row['polloption']));
if($totalvotes) {
$percent_float = $row['votes']*100/$totalvotes;
$percent = number_format($percent_float, 2);
$percent_int = floor($percent_float)*3;
$percent_int += 1;
}
else $percent = $percent_int = 0;
eval ("\$thread_poll_resultbit .= \"".$tpl->get("thread_poll_resultbit")."\";");
if($i==5) $i=0;
$i++;
}
}
eval ("\$lang->items['LANG_THREAD_POLL_VOTES'] = \"".$lang->get4eval("LANG_THREAD_POLL_VOTES")."\";");
eval ("\$thread_poll = \"".$tpl->get("thread_poll_result")."\";");
}
else {
if($poll['choicecount']>1) $inputtype="checkbox";
else $inputtype="radio";
$result=$db->unbuffered_query("SELECT * FROM bb".$n."_polloptions WHERE pollid='$thread[pollid]' ORDER BY showorder ASC");
while($row=$db->fetch_array($result)) {
$row['polloption']=htmlconverter(textwrap($row['polloption']));
eval ("\$thread_pollbit .= \"".$tpl->get("thread_pollbit")."\";");
}
eval ("\$thread_poll = \"".$tpl->get("thread_poll")."\";");
}
}
if($board['allowratings']==1) {
$colors = createGradient($style['gradientleft'],$style['gradientmiddle'],$style['gradientright']);
if($thread['voted'] && $thread['voted']>=$showvotes) $threadrating=threadrating($thread['votepoints'],$thread['voted']);
}
else $threadrating="";
if($board['closed']==0) eval ("\$newthread = \"".$tpl->get("board_newthread")."\";");
if($thread['closed']!=0) eval ("\$addreply = \"".$tpl->get("thread_closed")."\";");
elseif($board['closed']==0) eval ("\$addreply = \"".$tpl->get("thread_addreply")."\";");
$thread['topic']=htmlconverter(textwrap($thread['topic']));
if($board['emailnotify']==1 && $board['countemails']!=0) $db->unbuffered_query("UPDATE bb".$n."_subscribeboards SET countemails=0 WHERE userid = '".$wbbuserdata['userid']."' AND boardid = '".$boardid."'",1);
if($thread['emailnotify']==1 && $thread['countemails']!=0) $db->unbuffered_query("UPDATE bb".$n."_subscribethreads SET countemails=0 WHERE userid = '".$wbbuserdata['userid']."' AND threadid = '".$threadid."'",1);
require "quickreply.php";
eval("\$tpl->output(\"".$tpl->get("thread")."\");");
?>
|