[ Index ] |
PHP Cross Reference of MyBB 1.8.38 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * MyBB 1.8 4 * Copyright 2014 MyBB Group, All Rights Reserved 5 * 6 * Website: http://www.mybb.com 7 * License: http://www.mybb.com/about/license 8 * 9 */ 10 11 define("IN_MYBB", 1); 12 define('THIS_SCRIPT', 'forumdisplay.php'); 13 14 $templatelist = "forumdisplay,forumdisplay_thread,forumbit_depth1_cat,forumbit_depth2_cat,forumbit_depth2_forum,forumdisplay_subforums,forumdisplay_threadlist,forumdisplay_moderatedby,forumdisplay_searchforum,forumdisplay_forumsort,forumdisplay_thread_rating,forumdisplay_threadlist_rating"; 15 $templatelist .= ",forumbit_depth1_forum_lastpost,forumdisplay_thread_multipage_page,forumdisplay_thread_multipage,forumdisplay_thread_multipage_more,forumdisplay_thread_gotounread,forumbit_depth2_forum_lastpost,forumdisplay_rules_link,forumdisplay_orderarrow,forumdisplay_newthread"; 16 $templatelist .= ",multipage,multipage_breadcrumb,multipage_end,multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage,multipage_start,forumdisplay_thread_unapproved_posts,forumdisplay_nothreads"; 17 $templatelist .= ",forumjump_advanced,forumjump_special,forumjump_bit,forumdisplay_password_wrongpass,forumdisplay_password,forumdisplay_inlinemoderation_custom_tool,forumbit_subforums,forumbit_moderators,forumbit_depth2_forum_lastpost_never,forumbit_depth2_forum_lastpost_hidden"; 18 $templatelist .= ",forumdisplay_usersbrowsing_user,forumdisplay_usersbrowsing,forumdisplay_inlinemoderation,forumdisplay_thread_modbit,forumdisplay_inlinemoderation_col,forumdisplay_inlinemoderation_selectall,forumdisplay_threadlist_clearpass,forumdisplay_thread_rating_moved"; 19 $templatelist .= ",forumdisplay_announcements_announcement,forumdisplay_announcements,forumdisplay_threads_sep,forumbit_depth3_statusicon,forumbit_depth3,forumdisplay_sticky_sep,forumdisplay_thread_attachment_count,forumdisplay_rssdiscovery,forumbit_moderators_group"; 20 $templatelist .= ",forumdisplay_inlinemoderation_openclose,forumdisplay_inlinemoderation_stickunstick,forumdisplay_inlinemoderation_softdelete,forumdisplay_inlinemoderation_restore,forumdisplay_inlinemoderation_delete,forumdisplay_inlinemoderation_manage,forumdisplay_nopermission"; 21 $templatelist .= ",forumbit_depth2_forum_unapproved_posts,forumbit_depth2_forum_unapproved_threads,forumbit_moderators_user,forumdisplay_inlinemoderation_standard,forumdisplay_threadlist_prefixes_prefix,forumdisplay_threadlist_prefixes,forumdisplay_thread_icon,forumdisplay_rules"; 22 $templatelist .= ",forumdisplay_thread_deleted,forumdisplay_announcements_announcement_modbit,forumbit_depth2_forum_viewers,forumdisplay_threadlist_sortrating,forumdisplay_inlinemoderation_custom,forumdisplay_announcement_rating,forumdisplay_inlinemoderation_approveunapprove,forumdisplay_threadlist_subscription"; 23 24 require_once "./global.php"; 25 require_once MYBB_ROOT."inc/functions_post.php"; 26 require_once MYBB_ROOT."inc/functions_forumlist.php"; 27 require_once MYBB_ROOT."inc/class_parser.php"; 28 $parser = new postParser; 29 30 $orderarrow = $sortsel = array('rating' => '', 'subject' => '', 'starter' => '', 'started' => '', 'replies' => '', 'views' => '', 'lastpost' => ''); 31 $ordersel = array('asc' => '', 'desc' => ''); 32 $datecutsel = array(1 => '', 5 => '', 10 => '', 20 => '', 50 => '', 75 => '', 100 => '', 365 => '', 9999 => ''); 33 $rules = ''; 34 35 // Load global language phrases 36 $lang->load("forumdisplay"); 37 38 $plugins->run_hooks("forumdisplay_start"); 39 40 $fid = $mybb->get_input('fid', MyBB::INPUT_INT); 41 if($fid < 0) 42 { 43 switch($fid) 44 { 45 case "-1": 46 $location = "index.php"; 47 break; 48 case "-2": 49 $location = "search.php"; 50 break; 51 case "-3": 52 $location = "usercp.php"; 53 break; 54 case "-4": 55 $location = "private.php"; 56 break; 57 case "-5": 58 $location = "online.php"; 59 break; 60 } 61 if($location) 62 { 63 header("Location: ".$location); 64 exit; 65 } 66 } 67 68 // Get forum info 69 $foruminfo = get_forum($fid); 70 if(!$foruminfo) 71 { 72 error($lang->error_invalidforum); 73 } 74 75 $archive_url = build_archive_link("forum", $fid); 76 77 $currentitem = $fid; 78 build_forum_breadcrumb($fid); 79 $parentlist = $foruminfo['parentlist']; 80 81 // To validate, turn & to & but support unicode 82 $foruminfo['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $foruminfo['name']); 83 84 $forumpermissions = forum_permissions(); 85 $fpermissions = $forumpermissions[$fid]; 86 87 if($fpermissions['canview'] != 1) 88 { 89 error_no_permission(); 90 } 91 92 if($mybb->user['uid'] == 0) 93 { 94 // Cookie'd forum read time 95 $forumsread = array(); 96 if(isset($mybb->cookies['mybb']['forumread'])) 97 { 98 $forumsread = my_unserialize($mybb->cookies['mybb']['forumread'], false); 99 } 100 101 if(is_array($forumsread) && empty($forumsread)) 102 { 103 if(isset($mybb->cookies['mybb']['readallforums'])) 104 { 105 $forumsread[$fid] = $mybb->cookies['mybb']['lastvisit']; 106 } 107 else 108 { 109 $forumsread = array(); 110 } 111 } 112 113 $query = $db->simple_select("forums", "*", "active != 0", array("order_by" => "pid, disporder")); 114 } 115 else 116 { 117 // Build a forum cache from the database 118 $query = $db->query(" 119 SELECT f.*, fr.dateline AS lastread 120 FROM ".TABLE_PREFIX."forums f 121 LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') 122 WHERE f.active != 0 123 ORDER BY pid, disporder 124 "); 125 } 126 127 while($forum = $db->fetch_array($query)) 128 { 129 if($mybb->user['uid'] == 0 && isset($forumsread[$forum['fid']])) 130 { 131 $forum['lastread'] = $forumsread[$forum['fid']]; 132 } 133 134 $fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum; 135 } 136 137 // Get the forum moderators if the setting is enabled. 138 if($mybb->settings['modlist'] != 0) 139 { 140 $moderatorcache = $cache->read("moderators"); 141 } 142 143 $bgcolor = "trow1"; 144 if($mybb->settings['subforumsindex'] != 0) 145 { 146 $showdepth = 3; 147 } 148 else 149 { 150 $showdepth = 2; 151 } 152 153 $subforums = ''; 154 $child_forums = build_forumbits($fid, 2); 155 156 if(!empty($child_forums) && !empty($child_forums['forum_list'])) 157 { 158 $forums = $child_forums['forum_list']; 159 $lang->sub_forums_in = $lang->sprintf($lang->sub_forums_in, $foruminfo['name']); 160 eval("\$subforums = \"".$templates->get("forumdisplay_subforums")."\";"); 161 } 162 163 $excols = "forumdisplay"; 164 165 // Password protected forums 166 check_forum_password($foruminfo['fid']); 167 168 if($foruminfo['linkto']) 169 { 170 header("Location: {$foruminfo['linkto']}"); 171 exit; 172 } 173 174 // Make forum jump... 175 $forumjump = ''; 176 if($mybb->settings['enableforumjump'] != 0) 177 { 178 $forumjump = build_forum_jump("", $fid, 1); 179 } 180 181 $newthread = ''; 182 if($foruminfo['type'] == "f" && $foruminfo['open'] != 0 && $fpermissions['canpostthreads'] != 0 && $mybb->user['suspendposting'] == 0) 183 { 184 eval("\$newthread = \"".$templates->get("forumdisplay_newthread")."\";"); 185 } 186 187 $searchforum = ''; 188 if($fpermissions['cansearch'] != 0 && $foruminfo['type'] == "f") 189 { 190 eval("\$searchforum = \"".$templates->get("forumdisplay_searchforum")."\";"); 191 } 192 193 // Gather forum stats 194 $has_announcements = $has_modtools = false; 195 $forum_stats = $cache->read("forumsdisplay"); 196 197 if(is_array($forum_stats)) 198 { 199 if(!empty($forum_stats[-1]['modtools']) || !empty($forum_stats[$fid]['modtools'])) 200 { 201 // Mod tools are specific to forums, not parents 202 $has_modtools = true; 203 } 204 205 if(!empty($forum_stats[-1]['announcements']) || !empty($forum_stats[$fid]['announcements'])) 206 { 207 // Global or forum-specific announcements 208 $has_announcements = true; 209 } 210 } 211 212 $done_moderators = array( 213 "users" => array(), 214 "groups" => array() 215 ); 216 217 $moderators = ''; 218 $parentlistexploded = explode(",", $parentlist); 219 $comma = ''; 220 221 foreach($parentlistexploded as $mfid) 222 { 223 // This forum has moderators 224 if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid])) 225 { 226 // Fetch each moderator from the cache and format it, appending it to the list 227 foreach($moderatorcache[$mfid] as $modtype) 228 { 229 foreach($modtype as $moderator) 230 { 231 if($moderator['isgroup']) 232 { 233 if(in_array($moderator['id'], $done_moderators['groups'])) 234 { 235 continue; 236 } 237 238 $moderator['title'] = htmlspecialchars_uni($moderator['title']); 239 240 eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";"); 241 $done_moderators['groups'][] = $moderator['id']; 242 } 243 else 244 { 245 if(in_array($moderator['id'], $done_moderators['users'])) 246 { 247 continue; 248 } 249 250 $moderator['profilelink'] = get_profile_link($moderator['id']); 251 $moderator['username'] = format_name(htmlspecialchars_uni($moderator['username']), $moderator['usergroup'], $moderator['displaygroup']); 252 253 eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";"); 254 $done_moderators['users'][] = $moderator['id']; 255 } 256 $comma = $lang->comma; 257 } 258 } 259 } 260 261 if(!empty($forum_stats[$mfid]['announcements'])) 262 { 263 $has_announcements = true; 264 } 265 } 266 $comma = ''; 267 268 // If we have a moderators list, load the template 269 if($moderators) 270 { 271 eval("\$moderatedby = \"".$templates->get("forumdisplay_moderatedby")."\";"); 272 } 273 else 274 { 275 $moderatedby = ''; 276 } 277 278 // Get the users browsing this forum. 279 $usersbrowsing = ''; 280 if($mybb->settings['browsingthisforum'] != 0) 281 { 282 $timecut = TIME_NOW - $mybb->settings['wolcutoff']; 283 284 $comma = ''; 285 $guestcount = 0; 286 $membercount = 0; 287 $inviscount = 0; 288 $onlinemembers = ''; 289 $doneusers = array(); 290 291 $query = $db->simple_select("sessions", "COUNT(DISTINCT ip) AS guestcount", "uid = 0 AND time > $timecut AND location1 = $fid AND nopermission != 1"); 292 $guestcount = $db->fetch_field($query, 'guestcount'); 293 294 $query = $db->query(" 295 SELECT 296 s.ip, s.uid, u.username, s.time, u.invisible, u.usergroup, u.usergroup, u.displaygroup 297 FROM 298 ".TABLE_PREFIX."sessions s 299 LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid) 300 WHERE s.uid != 0 AND s.time > $timecut AND location1 = $fid AND nopermission != 1 301 ORDER BY u.username ASC, s.time DESC 302 "); 303 304 while($user = $db->fetch_array($query)) 305 { 306 if(empty($doneusers[$user['uid']]) || $doneusers[$user['uid']] < $user['time']) 307 { 308 $doneusers[$user['uid']] = $user['time']; 309 ++$membercount; 310 if($user['invisible'] == 1) 311 { 312 $invisiblemark = "*"; 313 ++$inviscount; 314 } 315 else 316 { 317 $invisiblemark = ''; 318 } 319 320 if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid']) 321 { 322 $user['username'] = format_name(htmlspecialchars_uni($user['username']), $user['usergroup'], $user['displaygroup']); 323 $user['profilelink'] = build_profile_link($user['username'], $user['uid']); 324 eval("\$onlinemembers .= \"".$templates->get("forumdisplay_usersbrowsing_user", 1, 0)."\";"); 325 $comma = $lang->comma; 326 } 327 } 328 } 329 330 $guestsonline = ''; 331 if($guestcount) 332 { 333 $guestsonline = $lang->sprintf($lang->users_browsing_forum_guests, $guestcount); 334 } 335 336 $invisonline = ''; 337 if($mybb->user['invisible'] == 1) 338 { 339 // the user was counted as invisible user --> correct the inviscount 340 $inviscount -= 1; 341 } 342 if($inviscount && $mybb->usergroup['canviewwolinvis'] != 1) 343 { 344 $invisonline = $lang->sprintf($lang->users_browsing_forum_invis, $inviscount); 345 } 346 347 348 $onlinesep = ''; 349 if($invisonline != '' && $onlinemembers) 350 { 351 $onlinesep = $lang->comma; 352 } 353 354 $onlinesep2 = ''; 355 if($invisonline != '' && $guestcount || $onlinemembers && $guestcount) 356 { 357 $onlinesep2 = $lang->comma; 358 } 359 360 eval("\$usersbrowsing = \"".$templates->get("forumdisplay_usersbrowsing")."\";"); 361 } 362 363 // Do we have any forum rules to show for this forum? 364 $forumrules = ''; 365 if($foruminfo['rulestype'] != 0 && $foruminfo['rules']) 366 { 367 if(!$foruminfo['rulestitle']) 368 { 369 $foruminfo['rulestitle'] = $lang->sprintf($lang->forum_rules, $foruminfo['name']); 370 } 371 372 $rules_parser = array( 373 "allow_html" => 1, 374 "allow_mycode" => 1, 375 "allow_smilies" => 1, 376 "allow_imgcode" => 1 377 ); 378 379 $foruminfo['rules'] = $parser->parse_message($foruminfo['rules'], $rules_parser); 380 if($foruminfo['rulestype'] == 1 || $foruminfo['rulestype'] == 3) 381 { 382 eval("\$rules = \"".$templates->get("forumdisplay_rules")."\";"); 383 } 384 else if($foruminfo['rulestype'] == 2) 385 { 386 eval("\$rules = \"".$templates->get("forumdisplay_rules_link")."\";"); 387 } 388 } 389 390 $bgcolor = "trow1"; 391 392 // Set here to fetch only approved/deleted topics (and then below for a moderator we change this). 393 $visible_states = array("1"); 394 395 if($fpermissions['canviewdeletionnotice'] != 0) 396 { 397 $visible_states[] = "-1"; 398 } 399 400 // Check if the active user is a moderator and get the inline moderation tools. 401 if(is_moderator($fid)) 402 { 403 eval("\$inlinemodcol = \"".$templates->get("forumdisplay_inlinemoderation_col")."\";"); 404 $ismod = true; 405 $inlinecount = "0"; 406 $inlinemod = ''; 407 $inlinecookie = "inlinemod_forum".$fid; 408 409 if(is_moderator($fid, "canviewdeleted") == true) 410 { 411 $visible_states[] = "-1"; 412 } 413 if(is_moderator($fid, "canviewunapprove") == true) 414 { 415 $visible_states[] = "0"; 416 } 417 } 418 else 419 { 420 $inlinemod = $inlinemodcol = ''; 421 $ismod = false; 422 } 423 424 $visible_condition = "visible IN (".implode(',', array_unique($visible_states)).")"; 425 $visibleonly = "AND ".$visible_condition; 426 427 // Allow viewing own unapproved threads for logged in users 428 if($mybb->user['uid'] && $mybb->settings['showownunapproved']) 429 { 430 $visible_condition .= " OR (t.visible=0 AND t.uid=".(int)$mybb->user['uid'].")"; 431 } 432 433 $tvisibleonly = "AND (t.".$visible_condition.")"; 434 435 if(is_moderator($fid, "caneditposts") || $fpermissions['caneditposts'] == 1) 436 { 437 $can_edit_titles = 1; 438 } 439 else 440 { 441 $can_edit_titles = 0; 442 } 443 444 unset($rating); 445 446 // Pick out some sorting options. 447 // First, the date cut for the threads. 448 $datecut = 9999; 449 if(empty($mybb->input['datecut'])) 450 { 451 // If the user manually set a date cut, use it. 452 if(!empty($mybb->user['daysprune'])) 453 { 454 $datecut = $mybb->user['daysprune']; 455 } 456 else 457 { 458 // If the forum has a non-default date cut, use it. 459 if(!empty($foruminfo['defaultdatecut'])) 460 { 461 $datecut = $foruminfo['defaultdatecut']; 462 } 463 } 464 } 465 // If there was a manual date cut override, use it. 466 else 467 { 468 $datecut = $mybb->get_input('datecut', MyBB::INPUT_INT); 469 } 470 471 $datecutsel[(int)$datecut] = ' selected="selected"'; 472 if($datecut > 0 && $datecut != 9999) 473 { 474 $checkdate = TIME_NOW - ($datecut * 86400); 475 $datecutsql = "AND (lastpost >= '$checkdate' OR sticky = '1')"; 476 $datecutsql2 = "AND (t.lastpost >= '$checkdate' OR t.sticky = '1')"; 477 } 478 else 479 { 480 $datecutsql = ''; 481 $datecutsql2 = ''; 482 } 483 484 // Sort by thread prefix 485 $tprefix = $mybb->get_input('prefix', MyBB::INPUT_INT); 486 if($tprefix > 0) 487 { 488 $prefixsql = "AND prefix = {$tprefix}"; 489 $prefixsql2 = "AND t.prefix = {$tprefix}"; 490 } 491 else if($tprefix == -1) 492 { 493 $prefixsql = "AND prefix = 0"; 494 $prefixsql2 = "AND t.prefix = 0"; 495 } 496 else if($tprefix == -2) 497 { 498 $prefixsql = "AND prefix != 0"; 499 $prefixsql2 = "AND t.prefix != 0"; 500 } 501 else 502 { 503 $prefixsql = $prefixsql2 = ''; 504 } 505 506 // Pick the sort order. 507 if(!isset($mybb->input['order']) && !empty($foruminfo['defaultsortorder'])) 508 { 509 $mybb->input['order'] = $foruminfo['defaultsortorder']; 510 } 511 else 512 { 513 $mybb->input['order'] = $mybb->get_input('order'); 514 } 515 516 $mybb->input['order'] = htmlspecialchars_uni($mybb->get_input('order')); 517 518 switch(my_strtolower($mybb->input['order'])) 519 { 520 case "asc": 521 $sortordernow = "asc"; 522 $ordersel['asc'] = ' selected="selected"'; 523 $oppsort = $lang->desc; 524 $oppsortnext = "desc"; 525 break; 526 default: 527 $sortordernow = "desc"; 528 $ordersel['desc'] = ' selected="selected"'; 529 $oppsort = $lang->asc; 530 $oppsortnext = "asc"; 531 break; 532 } 533 534 // Sort by which field? 535 if(!isset($mybb->input['sortby']) && !empty($foruminfo['defaultsortby'])) 536 { 537 $mybb->input['sortby'] = $foruminfo['defaultsortby']; 538 } 539 else 540 { 541 $mybb->input['sortby'] = $mybb->get_input('sortby'); 542 } 543 544 $t = 't.'; 545 $sortfield2 = ''; 546 547 $sortby = htmlspecialchars_uni($mybb->input['sortby']); 548 549 switch($mybb->input['sortby']) 550 { 551 case "subject": 552 $sortfield = "subject"; 553 break; 554 case "replies": 555 $sortfield = "replies"; 556 break; 557 case "views": 558 $sortfield = "views"; 559 break; 560 case "starter": 561 $sortfield = "username"; 562 break; 563 case "rating": 564 $t = ""; 565 $sortfield = "averagerating"; 566 $sortfield2 = ", t.totalratings DESC"; 567 break; 568 case "started": 569 $sortfield = "dateline"; 570 break; 571 default: 572 $sortby = "lastpost"; 573 $sortfield = "lastpost"; 574 $mybb->input['sortby'] = "lastpost"; 575 break; 576 } 577 578 $sortsel['rating'] = ''; // Needs to be initialized in order to speed-up things. Fixes #2031 579 $sortsel[$mybb->input['sortby']] = ' selected="selected"'; 580 581 // Pick the right string to join the sort URL 582 if($mybb->seo_support == true) 583 { 584 $string = "?"; 585 } 586 else 587 { 588 $string = "&"; 589 } 590 591 // Are we viewing a specific page? 592 $mybb->input['page'] = $mybb->get_input('page', MyBB::INPUT_INT); 593 if($mybb->input['page'] > 1) 594 { 595 $sorturl = get_forum_link($fid, $mybb->input['page']).$string."datecut=$datecut&prefix=$tprefix"; 596 } 597 else 598 { 599 $sorturl = get_forum_link($fid).$string."datecut=$datecut&prefix=$tprefix"; 600 } 601 602 eval("\$orderarrow['$sortby'] = \"".$templates->get("forumdisplay_orderarrow")."\";"); 603 604 $threadcount = 0; 605 $useronly = $tuseronly = ""; 606 if(isset($fpermissions['canonlyviewownthreads']) && $fpermissions['canonlyviewownthreads'] == 1) 607 { 608 $useronly = "AND uid={$mybb->user['uid']}"; 609 $tuseronly = "AND t.uid={$mybb->user['uid']}"; 610 } 611 612 if($fpermissions['canviewthreads'] != 0) 613 { 614 // How many threads are there? 615 if ($useronly === "" && $datecutsql === "" && $prefixsql === "") 616 { 617 $threadcount = 0; 618 619 $query = $db->simple_select("forums", "threads, unapprovedthreads, deletedthreads", "fid=".(int)$fid); 620 $forum_threads = $db->fetch_array($query); 621 622 if(in_array(1, $visible_states)) 623 { 624 $threadcount += $forum_threads['threads']; 625 } 626 627 if(in_array(-1, $visible_states)) 628 { 629 $threadcount += $forum_threads['deletedthreads']; 630 } 631 632 if(in_array(0, $visible_states)) 633 { 634 $threadcount += $forum_threads['unapprovedthreads']; 635 } 636 elseif($mybb->user['uid'] && $mybb->settings['showownunapproved']) 637 { 638 $query = $db->simple_select("threads t", "COUNT(tid) AS threads", "fid = '$fid' AND t.visible=0 AND t.uid=".(int)$mybb->user['uid']); 639 $threadcount += $db->fetch_field($query, "threads"); 640 } 641 } 642 else 643 { 644 $query = $db->simple_select("threads t", "COUNT(tid) AS threads", "fid = '$fid' $tuseronly $tvisibleonly $datecutsql2 $prefixsql2"); 645 646 $threadcount = $db->fetch_field($query, "threads"); 647 } 648 } 649 650 // How many pages are there? 651 if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1) 652 { 653 $mybb->settings['threadsperpage'] = 20; 654 } 655 656 $perpage = $mybb->settings['threadsperpage']; 657 658 if($mybb->input['page'] > 0) 659 { 660 $page = $mybb->input['page']; 661 $start = ($page-1) * $perpage; 662 $pages = $threadcount / $perpage; 663 $pages = ceil($pages); 664 if($page > $pages || $page <= 0) 665 { 666 $start = 0; 667 $page = 1; 668 } 669 } 670 else 671 { 672 $start = 0; 673 $page = 1; 674 } 675 676 $end = $start + $perpage; 677 $lower = $start + 1; 678 $upper = $end; 679 680 if($upper > $threadcount) 681 { 682 $upper = $threadcount; 683 } 684 685 // Assemble page URL 686 if($mybb->input['sortby'] || $mybb->input['order'] || $mybb->input['datecut'] || $mybb->input['prefix']) // Ugly URL 687 { 688 $page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED); 689 690 if($mybb->seo_support == true) 691 { 692 $q = "?"; 693 $and = ''; 694 } 695 else 696 { 697 $q = ''; 698 $and = "&"; 699 } 700 701 if((!empty($foruminfo['defaultsortby']) && $sortby != $foruminfo['defaultsortby']) || (empty($foruminfo['defaultsortby']) && $sortby != "lastpost")) 702 { 703 $page_url .= "{$q}{$and}sortby={$sortby}"; 704 $q = ''; 705 $and = "&"; 706 } 707 708 if($sortordernow != "desc") 709 { 710 $page_url .= "{$q}{$and}order={$sortordernow}"; 711 $q = ''; 712 $and = "&"; 713 } 714 715 if($datecut > 0 && $datecut != 9999) 716 { 717 $page_url .= "{$q}{$and}datecut={$datecut}"; 718 $q = ''; 719 $and = "&"; 720 } 721 722 if($tprefix != 0) 723 { 724 $page_url .= "{$q}{$and}prefix={$tprefix}"; 725 } 726 } 727 else 728 { 729 $page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED); 730 } 731 $multipage = multipage($threadcount, $perpage, $page, $page_url); 732 733 $ratingcol = $ratingsort = ''; 734 if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0) 735 { 736 $lang->load("ratethread"); 737 738 switch($db->type) 739 { 740 case "pgsql": 741 $ratingadd = "CASE WHEN t.numratings=0 THEN 0 ELSE t.totalratings/t.numratings::numeric END AS averagerating, "; 742 break; 743 default: 744 $ratingadd = "(t.totalratings/t.numratings) AS averagerating, "; 745 } 746 747 $lpbackground = "trow2"; 748 eval("\$ratingcol = \"".$templates->get("forumdisplay_threadlist_rating")."\";"); 749 eval("\$ratingsort = \"".$templates->get("forumdisplay_threadlist_sortrating")."\";"); 750 $colspan = "7"; 751 } 752 else 753 { 754 if($sortfield == "averagerating") 755 { 756 $t = "t."; 757 $sortfield = "lastpost"; 758 } 759 $ratingadd = ''; 760 $lpbackground = "trow1"; 761 $colspan = "6"; 762 } 763 764 if($ismod) 765 { 766 ++$colspan; 767 } 768 769 // Get Announcements 770 $announcementlist = ''; 771 if($has_announcements == true) 772 { 773 $limit = ''; 774 $announcements = ''; 775 if($mybb->settings['announcementlimit']) 776 { 777 $limit = "LIMIT 0, ".$mybb->settings['announcementlimit']; 778 } 779 780 $sql = build_parent_list($fid, "fid", "OR", $parentlist); 781 $time = TIME_NOW; 782 $query = $db->query(" 783 SELECT a.*, u.username 784 FROM ".TABLE_PREFIX."announcements a 785 LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=a.uid) 786 WHERE a.startdate<='$time' AND (a.enddate>='$time' OR a.enddate='0') AND ($sql OR fid='-1') 787 ORDER BY a.startdate DESC $limit 788 "); 789 790 // See if this announcement has been read in our announcement array 791 $cookie = array(); 792 if(isset($mybb->cookies['mybb']['announcements'])) 793 { 794 $cookie = my_unserialize(stripslashes($mybb->cookies['mybb']['announcements']), false); 795 } 796 797 $announcementlist = ''; 798 $bgcolor = alt_trow(true); // Reset the trow colors 799 while($announcement = $db->fetch_array($query)) 800 { 801 if($announcement['startdate'] > $mybb->user['lastvisit'] && !$cookie[$announcement['aid']]) 802 { 803 $new_class = ' class="subject_new"'; 804 $folder = "newfolder"; 805 } 806 else 807 { 808 $new_class = ' class="subject_old"'; 809 $folder = "folder"; 810 } 811 812 // Mmm, eat those announcement cookies if they're older than our last visit 813 if(isset($cookie[$announcement['aid']]) && $cookie[$announcement['aid']] < $mybb->user['lastvisit']) 814 { 815 unset($cookie[$announcement['aid']]); 816 } 817 818 $announcement['announcementlink'] = get_announcement_link($announcement['aid']); 819 $announcement['subject'] = $parser->parse_badwords($announcement['subject']); 820 $announcement['subject'] = htmlspecialchars_uni($announcement['subject']); 821 $postdate = my_date('relative', $announcement['startdate']); 822 823 $announcement['username'] = htmlspecialchars_uni($announcement['username']); 824 825 $announcement['profilelink'] = build_profile_link($announcement['username'], $announcement['uid']); 826 827 if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0) 828 { 829 eval("\$rating = \"".$templates->get("forumdisplay_announcement_rating")."\";"); 830 $lpbackground = "trow2"; 831 } 832 else 833 { 834 $rating = ''; 835 $lpbackground = "trow1"; 836 } 837 838 if($ismod) 839 { 840 eval("\$modann = \"".$templates->get("forumdisplay_announcements_announcement_modbit")."\";"); 841 } 842 else 843 { 844 $modann = ''; 845 } 846 847 $plugins->run_hooks("forumdisplay_announcement"); 848 eval("\$announcements .= \"".$templates->get("forumdisplay_announcements_announcement")."\";"); 849 $bgcolor = alt_trow(); 850 } 851 852 if($announcements) 853 { 854 eval("\$announcementlist = \"".$templates->get("forumdisplay_announcements")."\";"); 855 $shownormalsep = true; 856 } 857 858 if(empty($cookie)) 859 { 860 // Clean up cookie crumbs 861 my_setcookie('mybb[announcements]', 0, (TIME_NOW - (60*60*24*365))); 862 } 863 else if(!empty($cookie)) 864 { 865 my_setcookie("mybb[announcements]", addslashes(my_serialize($cookie)), -1); 866 } 867 } 868 else 869 { 870 $announcementlist = ''; 871 } 872 873 $tids = $threadcache = array(); 874 $icon_cache = $cache->read("posticons"); 875 876 if($fpermissions['canviewthreads'] != 0) 877 { 878 $plugins->run_hooks("forumdisplay_get_threads"); 879 880 // Start Getting Threads 881 $query = $db->query(" 882 SELECT t.*, {$ratingadd}t.username AS threadusername, u.username 883 FROM ".TABLE_PREFIX."threads t 884 LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) 885 WHERE t.fid='$fid' $tuseronly $tvisibleonly $datecutsql2 $prefixsql2 886 ORDER BY t.sticky DESC, {$t}{$sortfield} $sortordernow $sortfield2 887 LIMIT $start, $perpage 888 "); 889 890 $ratings = false; 891 $moved_threads = array(); 892 while($thread = $db->fetch_array($query)) 893 { 894 $threadcache[$thread['tid']] = $thread; 895 896 if($thread['numratings'] > 0 && $ratings == false) 897 { 898 $ratings = true; // Looks for ratings in the forum 899 } 900 901 // If this is a moved thread - set the tid for participation marking and thread read marking to that of the moved thread 902 if(substr($thread['closed'], 0, 5) == "moved") 903 { 904 $tid = substr($thread['closed'], 6); 905 if(!isset($tids[$tid])) 906 { 907 $moved_threads[$tid] = $thread['tid']; 908 $tids[$thread['tid']] = $tid; 909 } 910 } 911 // Otherwise - set it to the plain thread ID 912 else 913 { 914 $tids[$thread['tid']] = $thread['tid']; 915 if(isset($moved_threads[$thread['tid']])) 916 { 917 unset($moved_threads[$thread['tid']]); 918 } 919 } 920 } 921 922 $args = array( 923 'threadcache' => &$threadcache, 924 'tids' => &$tids 925 ); 926 927 $plugins->run_hooks("forumdisplay_before_thread", $args); 928 929 if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0 && $mybb->user['uid'] && !empty($threadcache) && $ratings == true) 930 { 931 // Check if we've rated threads on this page 932 // Guests get the pleasure of not being ID'd, but will be checked when they try and rate 933 $imp = implode(",", array_keys($threadcache)); 934 $query = $db->simple_select("threadratings", "tid, uid", "tid IN ({$imp}) AND uid = '{$mybb->user['uid']}'"); 935 936 while($rating = $db->fetch_array($query)) 937 { 938 $threadcache[$rating['tid']]['rated'] = 1; 939 } 940 } 941 } 942 943 // If user has moderation tools available, prepare the Select All feature 944 $selectall = ''; 945 if(is_moderator($fid) && $threadcount > $perpage) 946 { 947 $lang->page_selected = $lang->sprintf($lang->page_selected, count($threadcache)); 948 $lang->select_all = $lang->sprintf($lang->select_all, (int)$threadcount); 949 $lang->all_selected = $lang->sprintf($lang->all_selected, (int)$threadcount); 950 eval("\$selectall = \"".$templates->get("forumdisplay_inlinemoderation_selectall")."\";"); 951 } 952 953 if(!empty($tids)) 954 { 955 $tids = implode(",", $tids); 956 } 957 958 // Check participation by the current user in any of these threads - for 'dot' folder icons 959 if($mybb->settings['dotfolders'] != 0 && $mybb->user['uid'] && !empty($threadcache)) 960 { 961 $query = $db->simple_select("posts", "DISTINCT tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids}) {$visibleonly}"); 962 while($post = $db->fetch_array($query)) 963 { 964 if(!empty($moved_threads[$post['tid']])) 965 { 966 $post['tid'] = $moved_threads[$post['tid']]; 967 } 968 if($threadcache[$post['tid']]) 969 { 970 $threadcache[$post['tid']]['doticon'] = 1; 971 } 972 } 973 } 974 975 // Read threads 976 if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0 && !empty($threadcache)) 977 { 978 $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); 979 while($readthread = $db->fetch_array($query)) 980 { 981 if(!empty($moved_threads[$readthread['tid']])) 982 { 983 $readthread['tid'] = $moved_threads[$readthread['tid']]; 984 } 985 if($threadcache[$readthread['tid']]) 986 { 987 $threadcache[$readthread['tid']]['lastread'] = $readthread['dateline']; 988 } 989 } 990 } 991 992 if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) 993 { 994 $forum_read = 0; 995 $query = $db->simple_select("forumsread", "dateline", "fid='{$fid}' AND uid='{$mybb->user['uid']}'"); 996 if($db->num_rows($query) > 0) 997 { 998 $forum_read = $db->fetch_field($query, "dateline"); 999 } 1000 1001 $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; 1002 if($forum_read == 0 || $forum_read < $read_cutoff) 1003 { 1004 $forum_read = $read_cutoff; 1005 } 1006 } 1007 else 1008 { 1009 $forum_read = my_get_array_cookie("forumread", $fid); 1010 1011 if(isset($mybb->cookies['mybb']['readallforums']) && !$forum_read) 1012 { 1013 $forum_read = $mybb->cookies['mybb']['lastvisit']; 1014 } 1015 } 1016 1017 $unreadpost = 0; 1018 $threads = ''; 1019 if(!empty($threadcache) && is_array($threadcache)) 1020 { 1021 if(!$mybb->settings['maxmultipagelinks']) 1022 { 1023 $mybb->settings['maxmultipagelinks'] = 5; 1024 } 1025 1026 if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1) 1027 { 1028 $mybb->settings['postsperpage'] = 20; 1029 } 1030 1031 foreach($threadcache as $thread) 1032 { 1033 $plugins->run_hooks("forumdisplay_thread"); 1034 1035 $moved = explode("|", $thread['closed']); 1036 1037 if($thread['visible'] == 0) 1038 { 1039 $bgcolor = "trow_shaded"; 1040 } 1041 elseif($thread['visible'] == -1 && is_moderator($fid, "canviewdeleted")) 1042 { 1043 $bgcolor = "trow_shaded trow_deleted"; 1044 } 1045 else 1046 { 1047 $bgcolor = alt_trow(); 1048 } 1049 1050 if($thread['sticky'] == 1) 1051 { 1052 $thread_type_class = " forumdisplay_sticky"; 1053 } 1054 else 1055 { 1056 $thread_type_class = " forumdisplay_regular"; 1057 } 1058 1059 $folder = ''; 1060 $prefix = ''; 1061 1062 $thread['author'] = $thread['uid']; 1063 if(!$thread['username']) 1064 { 1065 if(!$thread['threadusername']) 1066 { 1067 $thread['username'] = $thread['profilelink'] = htmlspecialchars_uni($lang->guest); 1068 } 1069 else 1070 { 1071 $thread['username'] = $thread['profilelink'] = htmlspecialchars_uni($thread['threadusername']); 1072 } 1073 } 1074 else 1075 { 1076 $thread['username'] = htmlspecialchars_uni($thread['username']); 1077 $thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']); 1078 } 1079 1080 // If this thread has a prefix, insert a space between prefix and subject 1081 $thread['threadprefix'] = $threadprefix = ''; 1082 if($thread['prefix'] != 0) 1083 { 1084 $threadprefix = build_prefixes($thread['prefix']); 1085 if(!empty($threadprefix)) 1086 { 1087 $thread['threadprefix'] = $threadprefix['displaystyle'].' '; 1088 } 1089 } 1090 1091 $thread['subject'] = $parser->parse_badwords($thread['subject']); 1092 $thread['subject'] = htmlspecialchars_uni($thread['subject']); 1093 1094 if($thread['icon'] > 0 && isset($icon_cache[$thread['icon']])) 1095 { 1096 $icon = $icon_cache[$thread['icon']]; 1097 $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']); 1098 $icon['path'] = htmlspecialchars_uni($icon['path']); 1099 $icon['name'] = htmlspecialchars_uni($icon['name']); 1100 eval("\$icon = \"".$templates->get("forumdisplay_thread_icon")."\";"); 1101 } 1102 else 1103 { 1104 $icon = " "; 1105 } 1106 1107 $prefix = ''; 1108 if($thread['poll']) 1109 { 1110 $prefix = $lang->poll_prefix; 1111 } 1112 1113 if($thread['sticky'] == "1" && !isset($donestickysep)) 1114 { 1115 eval("\$threads .= \"".$templates->get("forumdisplay_sticky_sep")."\";"); 1116 $shownormalsep = true; 1117 $donestickysep = true; 1118 } 1119 else if($thread['sticky'] == 0 && !empty($shownormalsep)) 1120 { 1121 eval("\$threads .= \"".$templates->get("forumdisplay_threads_sep")."\";"); 1122 $shownormalsep = false; 1123 } 1124 1125 $rating = ''; 1126 if($mybb->settings['allowthreadratings'] != 0 && $foruminfo['allowtratings'] != 0) 1127 { 1128 if($moved[0] == "moved" || ($fpermissions['canviewdeletionnotice'] != 0 && $thread['visible'] == -1)) 1129 { 1130 eval("\$rating = \"".$templates->get("forumdisplay_thread_rating_moved")."\";"); 1131 } 1132 else 1133 { 1134 $thread['numratings'] = (int)$thread['numratings']; 1135 1136 if($thread['numratings'] == 0) 1137 { 1138 $thread['averagerating'] = 0; 1139 $thread['width'] = 0; 1140 } 1141 else 1142 { 1143 $thread['averagerating'] = (float)round($thread['averagerating'], 2); 1144 $thread['width'] = (int)round($thread['averagerating']) * 20; 1145 } 1146 1147 $not_rated = ''; 1148 if(!isset($thread['rated']) || empty($thread['rated'])) 1149 { 1150 $not_rated = ' star_rating_notrated'; 1151 } 1152 1153 $ratingvotesav = $lang->sprintf($lang->rating_votes_average, $thread['numratings'], $thread['averagerating']); 1154 eval("\$rating = \"".$templates->get("forumdisplay_thread_rating")."\";"); 1155 } 1156 } 1157 1158 $thread['pages'] = 0; 1159 $thread['multipage'] = ''; 1160 $threadpages = ''; 1161 $morelink = ''; 1162 $thread['posts'] = $thread['replies'] + 1; 1163 if(is_moderator($fid, "canviewdeleted") == true || is_moderator($fid, "canviewunapprove") == true) 1164 { 1165 if(is_moderator($fid, "canviewdeleted") == true) 1166 { 1167 $thread['posts'] += $thread['deletedposts']; 1168 } 1169 if(is_moderator($fid, "canviewunapprove") == true) 1170 { 1171 $thread['posts'] += $thread['unapprovedposts']; 1172 } 1173 } 1174 elseif($fpermissions['canviewdeletionnotice'] != 0) 1175 { 1176 $thread['posts'] += $thread['deletedposts']; 1177 } 1178 1179 if($thread['posts'] > $mybb->settings['postsperpage']) 1180 { 1181 $thread['pages'] = $thread['posts'] / $mybb->settings['postsperpage']; 1182 $thread['pages'] = ceil($thread['pages']); 1183 1184 if($thread['pages'] > $mybb->settings['maxmultipagelinks']) 1185 { 1186 $pagesstop = $mybb->settings['maxmultipagelinks'] - 1; 1187 $page_link = get_thread_link($thread['tid'], $thread['pages']); 1188 eval("\$morelink = \"".$templates->get("forumdisplay_thread_multipage_more")."\";"); 1189 } 1190 else 1191 { 1192 $pagesstop = $thread['pages']; 1193 } 1194 1195 for($i = 1; $i <= $pagesstop; ++$i) 1196 { 1197 $page_link = get_thread_link($thread['tid'], $i); 1198 eval("\$threadpages .= \"".$templates->get("forumdisplay_thread_multipage_page")."\";"); 1199 } 1200 1201 eval("\$thread['multipage'] = \"".$templates->get("forumdisplay_thread_multipage")."\";"); 1202 } 1203 else 1204 { 1205 $threadpages = ''; 1206 $morelink = ''; 1207 $thread['multipage'] = ''; 1208 } 1209 1210 if($ismod) 1211 { 1212 if(isset($mybb->cookies[$inlinecookie]) && my_strpos($mybb->cookies[$inlinecookie], "|{$thread['tid']}|") !== false) 1213 { 1214 $inlinecheck = "checked=\"checked\""; 1215 ++$inlinecount; 1216 } 1217 else 1218 { 1219 $inlinecheck = ''; 1220 } 1221 1222 $multitid = $thread['tid']; 1223 eval("\$modbit = \"".$templates->get("forumdisplay_thread_modbit")."\";"); 1224 } 1225 else 1226 { 1227 $modbit = ''; 1228 } 1229 1230 if($moved[0] == "moved") 1231 { 1232 $prefix = $lang->moved_prefix; 1233 $thread['tid'] = $moved[1]; 1234 $thread['replies'] = "-"; 1235 $thread['views'] = "-"; 1236 } 1237 1238 $thread['threadlink'] = get_thread_link($thread['tid']); 1239 $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); 1240 1241 // Determine the folder 1242 $folder = ''; 1243 $folder_label = ''; 1244 1245 if(isset($thread['doticon'])) 1246 { 1247 $folder = "dot_"; 1248 $folder_label .= $lang->icon_dot; 1249 } 1250 1251 $gotounread = ''; 1252 $isnew = 0; 1253 $donenew = 0; 1254 1255 if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'] && $thread['lastpost'] > $forum_read) 1256 { 1257 if(!empty($thread['lastread'])) 1258 { 1259 $last_read = $thread['lastread']; 1260 } 1261 else 1262 { 1263 $last_read = $read_cutoff; 1264 } 1265 } 1266 else 1267 { 1268 $last_read = my_get_array_cookie("threadread", $thread['tid']); 1269 } 1270 1271 if($forum_read > $last_read) 1272 { 1273 $last_read = $forum_read; 1274 } 1275 1276 if($thread['lastpost'] > $last_read && $moved[0] != "moved") 1277 { 1278 $folder .= "new"; 1279 $folder_label .= $lang->icon_new; 1280 $new_class = "subject_new"; 1281 $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); 1282 eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); 1283 $unreadpost = 1; 1284 } 1285 else 1286 { 1287 $folder_label .= $lang->icon_no_new; 1288 $new_class = "subject_old"; 1289 } 1290 1291 if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) 1292 { 1293 $folder .= "hot"; 1294 $folder_label .= $lang->icon_hot; 1295 } 1296 1297 if($thread['closed'] == 1) 1298 { 1299 $folder .= "close"; 1300 $folder_label .= $lang->icon_close; 1301 } 1302 1303 if($moved[0] == "moved") 1304 { 1305 $folder = "move"; 1306 $gotounread = ''; 1307 } 1308 1309 $folder .= "folder"; 1310 1311 $inline_edit_tid = $thread['tid']; 1312 1313 // If this user is the author of the thread and it is not closed or they are a moderator, they can edit 1314 $inline_edit_class = ''; 1315 if(($thread['uid'] == $mybb->user['uid'] && $thread['closed'] != 1 && $mybb->user['uid'] != 0 && $can_edit_titles == 1) || $ismod == true) 1316 { 1317 $inline_edit_class = "subject_editable"; 1318 } 1319 1320 1321 $lastposteruid = $thread['lastposteruid']; 1322 if(!$lastposteruid && !$thread['lastposter']) 1323 { 1324 $lastposter = htmlspecialchars_uni($lang->guest); 1325 } 1326 else 1327 { 1328 $lastposter = htmlspecialchars_uni($thread['lastposter']); 1329 } 1330 $lastpostdate = my_date('relative', $thread['lastpost']); 1331 1332 // Don't link to guest's profiles (they have no profile). 1333 if($lastposteruid == 0) 1334 { 1335 $lastposterlink = $lastposter; 1336 } 1337 else 1338 { 1339 $lastposterlink = build_profile_link($lastposter, $lastposteruid); 1340 } 1341 1342 $thread['replies'] = my_number_format($thread['replies']); 1343 $thread['views'] = my_number_format($thread['views']); 1344 1345 // Threads and posts requiring moderation 1346 if($thread['unapprovedposts'] > 0 && is_moderator($fid, "canviewunapprove")) 1347 { 1348 if($thread['unapprovedposts'] > 1) 1349 { 1350 $unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_posts_count, $thread['unapprovedposts']); 1351 } 1352 else 1353 { 1354 $unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_post_count, 1); 1355 } 1356 1357 $thread['unapprovedposts'] = my_number_format($thread['unapprovedposts']); 1358 eval("\$unapproved_posts = \"".$templates->get("forumdisplay_thread_unapproved_posts")."\";"); 1359 } 1360 else 1361 { 1362 $unapproved_posts = ''; 1363 } 1364 1365 // If this thread has 1 or more attachments show the papperclip 1366 if($mybb->settings['enableattachments'] == 1 && $thread['attachmentcount'] > 0) 1367 { 1368 if($thread['attachmentcount'] > 1) 1369 { 1370 $attachment_count = $lang->sprintf($lang->attachment_count_multiple, $thread['attachmentcount']); 1371 } 1372 else 1373 { 1374 $attachment_count = $lang->attachment_count; 1375 } 1376 1377 eval("\$attachment_count = \"".$templates->get("forumdisplay_thread_attachment_count")."\";"); 1378 } 1379 else 1380 { 1381 $attachment_count = ''; 1382 } 1383 1384 $plugins->run_hooks("forumdisplay_thread_end"); 1385 1386 if($fpermissions['canviewdeletionnotice'] != 0 && $thread['visible'] == -1 && !is_moderator($fid, "canviewdeleted")) 1387 { 1388 eval("\$threads .= \"".$templates->get("forumdisplay_thread_deleted")."\";"); 1389 } 1390 else 1391 { 1392 $thread['start_datetime'] = my_date('relative', $thread['dateline']); 1393 eval("\$threads .= \"".$templates->get("forumdisplay_thread")."\";"); 1394 } 1395 } 1396 1397 $customthreadtools = $standardthreadtools = ''; 1398 if($ismod) 1399 { 1400 if(is_moderator($fid, "canusecustomtools") && $has_modtools == true) 1401 { 1402 $gids = explode(',', $mybb->user['additionalgroups']); 1403 $gids[] = $mybb->user['usergroup']; 1404 $gids = array_filter(array_unique($gids)); 1405 1406 $gidswhere = ''; 1407 switch($db->type) 1408 { 1409 case "pgsql": 1410 case "sqlite": 1411 foreach($gids as $gid) 1412 { 1413 $gid = (int)$gid; 1414 $gidswhere .= " OR ','||groups||',' LIKE '%,{$gid},%'"; 1415 } 1416 $query = $db->simple_select("modtools", 'tid, name', "(','||forums||',' LIKE '%,$fid,%' OR ','||forums||',' LIKE '%,-1,%' OR forums='') AND (groups='' OR ','||groups||',' LIKE '%,-1,%'{$gidswhere}) AND type = 't'"); 1417 break; 1418 default: 1419 foreach($gids as $gid) 1420 { 1421 $gid = (int)$gid; 1422 $gidswhere .= " OR CONCAT(',',`groups`,',') LIKE '%,{$gid},%'"; 1423 } 1424 $query = $db->simple_select("modtools", 'tid, name', "(CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND (`groups`='' OR CONCAT(',',`groups`,',') LIKE '%,-1,%'{$gidswhere}) AND type = 't'"); 1425 break; 1426 } 1427 1428 while($tool = $db->fetch_array($query)) 1429 { 1430 $tool['name'] = htmlspecialchars_uni($tool['name']); 1431 eval("\$customthreadtools .= \"".$templates->get("forumdisplay_inlinemoderation_custom_tool")."\";"); 1432 } 1433 1434 if($customthreadtools) 1435 { 1436 eval("\$customthreadtools = \"".$templates->get("forumdisplay_inlinemoderation_custom")."\";"); 1437 } 1438 } 1439 1440 $inlinemodopenclose = $inlinemodstickunstick = $inlinemodsoftdelete = $inlinemodrestore = $inlinemoddelete = $inlinemodmanage = $inlinemodapproveunapprove = ''; 1441 1442 if(is_moderator($fid, "canopenclosethreads")) 1443 { 1444 eval("\$inlinemodopenclose = \"".$templates->get("forumdisplay_inlinemoderation_openclose")."\";"); 1445 } 1446 1447 if(is_moderator($fid, "canstickunstickthreads")) 1448 { 1449 eval("\$inlinemodstickunstick = \"".$templates->get("forumdisplay_inlinemoderation_stickunstick")."\";"); 1450 } 1451 1452 if(is_moderator($fid, "cansoftdeletethreads")) 1453 { 1454 eval("\$inlinemodsoftdelete = \"".$templates->get("forumdisplay_inlinemoderation_softdelete")."\";"); 1455 } 1456 1457 if(is_moderator($fid, "canrestorethreads")) 1458 { 1459 eval("\$inlinemodrestore = \"".$templates->get("forumdisplay_inlinemoderation_restore")."\";"); 1460 } 1461 1462 if(is_moderator($fid, "candeletethreads")) 1463 { 1464 eval("\$inlinemoddelete = \"".$templates->get("forumdisplay_inlinemoderation_delete")."\";"); 1465 } 1466 1467 if(is_moderator($fid, "canmanagethreads")) 1468 { 1469 eval("\$inlinemodmanage = \"".$templates->get("forumdisplay_inlinemoderation_manage")."\";"); 1470 } 1471 1472 if(is_moderator($fid, "canapproveunapprovethreads")) 1473 { 1474 eval("\$inlinemodapproveunapprove = \"".$templates->get("forumdisplay_inlinemoderation_approveunapprove")."\";"); 1475 } 1476 1477 if(!empty($inlinemodopenclose) || !empty($inlinemodstickunstick) || !empty($inlinemodsoftdelete) || !empty($inlinemodrestore) || !empty($inlinemoddelete) || !empty($inlinemodmanage) || !empty($inlinemodapproveunapprove)) 1478 { 1479 eval("\$standardthreadtools = \"".$templates->get("forumdisplay_inlinemoderation_standard")."\";"); 1480 } 1481 1482 // Only show inline mod menu if there's options to show 1483 if(!empty($standardthreadtools) || !empty($customthreadtools)) 1484 { 1485 eval("\$inlinemod = \"".$templates->get("forumdisplay_inlinemoderation")."\";"); 1486 } 1487 } 1488 } 1489 1490 // If there are no unread threads in this forum and no unread child forums - mark it as read 1491 require_once MYBB_ROOT."inc/functions_indicators.php"; 1492 1493 $unread_threads = fetch_unread_count($fid); 1494 if($unread_threads !== false && $unread_threads == 0 && empty($unread_forums)) 1495 { 1496 mark_forum_read($fid); 1497 } 1498 1499 // Subscription status 1500 $add_remove_subscription = 'add'; 1501 $add_remove_subscription_text = $lang->subscribe_forum; 1502 $addremovesubscription = ''; 1503 1504 if($mybb->user['uid']) 1505 { 1506 $query = $db->simple_select("forumsubscriptions", "fid", "fid='".$fid."' AND uid='{$mybb->user['uid']}'", array('limit' => 1)); 1507 1508 if($db->num_rows($query) > 0) 1509 { 1510 $add_remove_subscription = 'remove'; 1511 $add_remove_subscription_text = $lang->unsubscribe_forum; 1512 } 1513 1514 eval("\$addremovesubscription = \"".$templates->get("forumdisplay_threadlist_subscription")."\";"); 1515 } 1516 1517 // Is this a real forum with threads? 1518 if($foruminfo['type'] != "c") 1519 { 1520 if($fpermissions['canviewthreads'] != 1) 1521 { 1522 eval("\$threads = \"".$templates->get("forumdisplay_nopermission")."\";"); 1523 } 1524 1525 if(!$threadcount && $fpermissions['canviewthreads'] == 1) 1526 { 1527 eval("\$threads = \"".$templates->get("forumdisplay_nothreads")."\";"); 1528 } 1529 1530 $clearstoredpass = ''; 1531 if($foruminfo['password'] != '') 1532 { 1533 eval("\$clearstoredpass = \"".$templates->get("forumdisplay_threadlist_clearpass")."\";"); 1534 } 1535 1536 $prefixselect = build_forum_prefix_select($fid, $tprefix); 1537 1538 // Populate Forumsort 1539 $forumsort = ''; 1540 eval("\$forumsort = \"".$templates->get("forumdisplay_forumsort")."\";"); 1541 1542 $plugins->run_hooks("forumdisplay_threadlist"); 1543 1544 $lang->rss_discovery_forum = $lang->sprintf($lang->rss_discovery_forum, htmlspecialchars_uni(strip_tags($foruminfo['name']))); 1545 eval("\$rssdiscovery = \"".$templates->get("forumdisplay_rssdiscovery")."\";"); 1546 eval("\$threadslist = \"".$templates->get("forumdisplay_threadlist")."\";"); 1547 } 1548 else 1549 { 1550 $rssdiscovery = ''; 1551 $threadslist = ''; 1552 1553 if(empty($forums)) 1554 { 1555 error($lang->error_containsnoforums); 1556 } 1557 } 1558 1559 $plugins->run_hooks("forumdisplay_end"); 1560 1561 $foruminfo['name'] = strip_tags($foruminfo['name']); 1562 1563 eval("\$forums = \"".$templates->get("forumdisplay")."\";"); 1564 output_page($forums);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |