update('index'); // // Include the page header // require(ROOT_PATH.'sources/page_head.php'); $template->add_breadcrumb($lang['ForumIndex']); // // Parse the forums // if ( !$functions->get_stats('forums') ) { // // No forums have been found. Output this notice. // $template->parse('msgbox', 'global', array( 'box_title' => $lang['Note'], 'content' => $lang['NoForums'] )); } else { // // Define wich category we should show // $view_cat = ( !empty($_GET['cat']) && valid_int($_GET['cat']) ) ? $_GET['cat'] : 0; // // Get the forums and categories out of the database // $result = $db->query("SELECT f.id, f.name, f.descr, f.status, f.topics, f.posts, f.auth, f.hide_mods_list, c.id AS cat_id, c.name AS cat_name, t.topic_title, t.last_post_id, t.count_replies, p.poster_id, p.poster_guest, p.post_time, u.displayed_name AS poster_name, u.level AS poster_level FROM ( ( ( ".TABLE_PREFIX."forums f LEFT JOIN ".TABLE_PREFIX."topics t ON f.last_topic_id = t.id ) LEFT JOIN ".TABLE_PREFIX."posts p ON t.last_post_id = p.id ) LEFT JOIN ".TABLE_PREFIX."members u ON p.poster_id = u.id ), ".TABLE_PREFIX."cats c WHERE f.cat_id = c.id ORDER BY c.sort_id ASC, c.name ASC, f.sort_id ASC, f.name ASC"); $categories = array(); $forums = array(); $forum_ids = array(); while ( $forumdata = $db->fetch_result($result) ) { if ( $functions->auth($forumdata['auth'], 'view', $forumdata['id']) ) { if ( !array_key_exists($forumdata['cat_id'], $categories) ) $categories[$forumdata['cat_id']] = 1; else $categories[$forumdata['cat_id']]++; $forums[] = $forumdata; $forum_ids[] = $forumdata['id']; } } if ( !count($forums) ) { // // There were no viewable forums. // Show this notice // $template->parse('msgbox', 'global', array( 'box_title' => $lang['Note'], 'content' => $lang['NoViewableForums'] )); } elseif ( $functions->get_config('single_forum_mode') && count($forums) === 1 ) { // // If this is the only (viewable) forum and the forum has been set up // to kick the user to this only (viewable) forum ... // $functions->redirect('forum.php', array('id' => $forums[0]['id'])); } else { // // Get all the moderators // $result = $db->query("SELECT m.forum_id, u.id, u.displayed_name, u.level FROM ".TABLE_PREFIX."moderators m, ".TABLE_PREFIX."members u WHERE m.forum_id IN(".join(', ', $forum_ids).") AND m.user_id = u.id ORDER BY u.displayed_name"); $all_mods = $mods_per_forum = array(); while ( $mods_data = $db->fetch_result($result) ) { if ( !array_key_exists($mods_data['forum_id'], $mods_per_forum) ) $mods_per_forum[$mods_data['forum_id']] = 1; else $mods_per_forum[$mods_data['forum_id']]++; $all_mods[] = $mods_data; } foreach ( $forum_ids as $forum_id ) { if ( !array_key_exists($forum_id, $mods_per_forum) ) $mods_per_forum[$forum_id] = 0; } $template->parse('header', 'forumlist'); $seen_forums = array(); // // Loop through the forums // foreach ( $forums as $forumdata ) { // // Which forum in the current category is this? // if ( empty($seen_forums[$forumdata['cat_id']]) ) $seen_forums[$forumdata['cat_id']] = 1; else $seen_forums[$forumdata['cat_id']]++; if ( $seen_forums[$forumdata['cat_id']] === 1 ) { // // If we didn't parse this category yet, than do it now // $template->parse('cat_header', 'forumlist', array( 'cat_name' => unhtml(stripslashes($forumdata['cat_name'])), 'cat_url' => $functions->make_url('index.php', array('cat' => $forumdata['cat_id'])).'#cat'.$forumdata['cat_id'], 'cat_anchor' => 'cat'.$forumdata['cat_id'] )); } if ( !$view_cat || $forumdata['cat_id'] == $view_cat ) { // // Output this forum if no category or the category // this forum is in has been chosen // if ( $forumdata['topics'] ) { $last_topic_title_full = ''; $last_topic_title = unhtml($functions->replace_badwords(stripslashes($forumdata['topic_title']))); $rtrim_topic = $template->get_config('forumlist_topic_rtrim_length'); if ( is_int($rtrim_topic) && entities_strlen($last_topic_title) > $rtrim_topic ) { $last_topic_title_full = $last_topic_title; $last_topic_title = entities_rtrim($last_topic_title, $rtrim_topic).'...'; } if ( $forumdata['count_replies'] ) { $last_topic_title_full = ( !empty($last_topic_title_full) ) ? $lang['Re'].' '.$last_topic_title_full : ''; $last_topic_title = $lang['Re'].' '.$last_topic_title; } $author = ( $forumdata['poster_id'] ) ? $functions->make_profile_link($forumdata['poster_id'], $forumdata['poster_name'], $forumdata['poster_level']) : unhtml(stripslashes($forumdata['poster_guest'])); $last_topic_title_full = ( !empty($last_topic_title_full) ) ? ' title="'.$last_topic_title_full.'"' : ''; } list($forum_icon, $forum_status) = $functions->forum_icon($forumdata['id'], $forumdata['status'], $forumdata['post_time']); $template->parse('forum', 'forumlist', array( 'forum_icon' => $forum_icon, 'forum_status' => $forum_status, 'forum_name' => ''.unhtml(stripslashes($forumdata['name'])).'', 'forum_descr' => stripslashes($forumdata['descr']), 'forum_mods' => ( $mods_per_forum[$forumdata['id']] >= 1 && !$forumdata['hide_mods_list'] ) ? sprintf($lang['ModeratorList'], $functions->get_mods_list($forumdata['id'], $all_mods)) : '', 'total_topics' => $forumdata['topics'], 'total_posts' => $forumdata['posts'], 'author_date' => ( $forumdata['topics'] ) ? sprintf($lang['AuthorDate'], $author, $functions->make_date($forumdata['post_time'])) : '-', 'by_author' => ( $forumdata['topics'] ) ? sprintf($lang['ByAuthor'], $author) : '-', 'on_date' => ( $forumdata['topics'] ) ? sprintf($lang['OnDate'], $functions->make_date($forumdata['post_time'])) : '-', 'lp_author' => ( $forumdata['topics'] ) ? $author : '-', 'lp_date' => ( $forumdata['topics'] ) ? $functions->make_date($forumdata['post_time']) : '-', 'latest_post' => ( $forumdata['topics'] ) ? ''.$last_topic_title.'' : $lang['NoPosts'] )); } if ( $seen_forums[$forumdata['cat_id']] === $categories[$forumdata['cat_id']] ) { // // If we didn't parse this category footer yet, than do it now // $template->parse('cat_footer', 'forumlist', array( 'cat_name' => unhtml(stripslashes($forumdata['cat_name'])), 'cat_url' => $functions->make_url('index.php', array('cat' => $forumdata['cat_id'])).'#cat'.$forumdata['cat_id'], 'cat_anchor' => 'cat'.$forumdata['cat_id'] )); } } // // Parse the forumlist footer // $template->parse('footer', 'forumlist'); } } $functions->forum_stats_box(); // // Include the page footer // require(ROOT_PATH.'sources/page_foot.php'); ?>