/index.php
PHP | 389 lines | 291 code | 60 blank | 38 comment | 83 complexity | 1abdb40132b5d89c6f982a079bfc31a1 MD5 | raw file
Possible License(s): GPL-2.0
- <?php
- /**
- * Copyright (C) 2008-2010 FluxBB
- * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
- * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
- */
- define('PUN_ROOT', dirname(__FILE__).'/');
- require PUN_ROOT.'include/common.php';
- if ($pun_user['g_read_board'] == '0')
- message($lang_common['No view']);
- // Load the index.php language file
- require PUN_ROOT.'lang/'.$pun_user['language'].'/index.php';
- // Get list of forums and topics with new posts since last visit
- if (!$pun_user['is_guest'])
- {
- $result = $db->query('SELECT t.forum_id, t.id, t.last_post FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>'.$pun_user['last_visit'].' AND t.moved_to IS NULL') or error('Unable to fetch new topics', __FILE__, __LINE__, $db->error());
- $new_topics = array();
- while ($cur_topic = $db->fetch_assoc($result))
- $new_topics[$cur_topic['forum_id']][$cur_topic['id']] = $cur_topic['last_post'];
- $tracked_topics = get_tracked_topics();
- }
- if ($pun_config['o_feed_type'] == '1')
- $page_head = array('feed' => '<link rel="alternate" type="application/rss+xml" href="extern.php?action=feed&type=rss" title="'.$lang_common['RSS active topics feed'].'" />');
- else if ($pun_config['o_feed_type'] == '2')
- $page_head = array('feed' => '<link rel="alternate" type="application/atom+xml" href="extern.php?action=feed&type=atom" title="'.$lang_common['Atom active topics feed'].'" />');
-
- $forum_actions = array();
- // Display a "mark all as read" link
- if (!$pun_user['is_guest'])
- $forum_actions[] = '<a href="misc.php?action=markread">'.$lang_common['Mark all as read'].'</a>';
- $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']));
- define('PUN_ALLOW_INDEX', 1);
- define('PUN_ACTIVE_PAGE', 'index');
- require PUN_ROOT.'header.php';
- # Sub Forum MOD (start) #
- if (file_exists(PUN_ROOT.'lang/'.$pun_user['language'].'/sub_forum.php'))
- require PUN_ROOT.'lang/'.$pun_user['language'].'/sub_forum.php';
- else
- require PUN_ROOT.'lang/English/sub_forum.php';
- $sfdb = array();
- $forums_info = $db->query('SELECT f.num_topics, f.num_posts, f.parent_forum_id, f.last_post_id, f.last_poster, f.last_post, f.id, f.forum_name, t.subject FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') LEFT JOIN '.$db->prefix.'topics AS t ON t.last_post_id=f.last_post_id WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.parent_forum_id <> 0 ORDER BY disp_position') or error(implode($db->error(),''),__FILE__,__LINE__,$db->error());
- while ($current = $db->fetch_assoc($forums_info))
- {
- if (!isset($sfdb[$current['parent_forum_id']]))
- $sfdb[$current['parent_forum_id']] = array();
-
- $sfdb[$current['parent_forum_id']][] = $current;
- }
- # Sub Forum MOD ( end ) #
- //Let's quickly build their group list for the SQL.
- $group_list = '';
- if (!empty($pun_user['group_ids'])) {
- foreach ($pun_user['group_ids'] as $g) {
- $group_list .= ' OR fp.group_id='.$g;
- } //End foreach().
- } //End if.
- // Print the categories and forums
- if ($pun_user['g_id'] != PUN_ADMIN) {
- $sql = 'SELECT DISTINCT f.id AS fid, c.disp_position, c.id AS cid, c.cat_name, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster, f.parent_forum_id, f.disp_position, t.subject FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id INNER JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND (fp.group_id='.$pun_user['g_id'].' '.$group_list.') AND fp.read_forum=1) LEFT JOIN '.$db->prefix.'topics AS t ON t.last_post_id=f.last_post_id WHERE f.parent_forum_id IS NULL OR f.parent_forum_id=0 ORDER BY c.disp_position, c.id, f.disp_position;';
- } else {
- $sql = 'SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster, f.parent_forum_id, t.subject FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'topics AS t ON t.last_post_id=f.last_post_id WHERE f.parent_forum_id IS NULL OR f.parent_forum_id=0 ORDER BY c.disp_position, c.id, f.disp_position;';
- } //End if - else.
-
- $result = $db->query($sql, true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
- $cur_category = 0;
- $cat_count = 0;
- $forum_count = 0;
- while ($cur_forum = $db->fetch_assoc($result))
- {
- $moderators = '';
- if ($cur_forum['cid'] != $cur_category) // A new category since last iteration?
- {
- if ($cur_category != 0)
- echo "\t\t\t".'</tbody>'."\n\t\t\t".'</table>'."\n\t\t".'</div>'."\n\t".'</div>'."\n".'</div>'."\n\n";
- ++$cat_count;
- $forum_count = 0;
- ?>
- <div id="idx<?php echo $cat_count ?>" class="blocktable">
- <h2><span><?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></span></h2>
- <div class="box">
- <div class="inbox">
- <table cellspacing="0">
- <thead>
- <tr>
- <th class="tcl" scope="col"><?php echo $lang_common['Forum'] ?></th>
- <th class="tc2" scope="col"><?php echo $lang_index['Topics'] ?></th>
- <th class="tc3" scope="col"><?php echo $lang_common['Posts'] ?></th>
- <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?></th>
- </tr>
- </thead>
- <tbody>
- <?php
- $cur_category = $cur_forum['cid'];
- }
- ++$forum_count;
- $item_status = ($forum_count % 2 == 0) ? 'roweven' : 'rowodd';
- $forum_field_new = '';
- $icon_type = 'icon';
- // Are there new posts since our last visit?
- if (!$pun_user['is_guest'] && $cur_forum['last_post'] > $pun_user['last_visit'] && (empty($tracked_topics['forums'][$cur_forum['fid']]) || $cur_forum['last_post'] > $tracked_topics['forums'][$cur_forum['fid']]))
- {
- if (!empty($new_topics[$cur_forum['fid']])) {
- // There are new posts in this forum, but have we read all of them already?
- foreach ($new_topics[$cur_forum['fid']] as $check_topic_id => $check_last_post)
- {
- if ((empty($tracked_topics['topics'][$check_topic_id]) || $tracked_topics['topics'][$check_topic_id] < $check_last_post) && (empty($tracked_topics['forums'][$cur_forum['fid']]) || $tracked_topics['forums'][$cur_forum['fid']] < $check_last_post))
- {
- $item_status .= ' inew';
- $forum_field_new = '<span class="newtext">[ <a href="search.php?action=show_new&fid='.$cur_forum['fid'].'">'.$lang_common['New posts'].'</a> ]</span>';
- $icon_type = 'icon icon-new';
-
- break;
- } //End if.
- } //End foreach().
- } //End if.
- } //End if.
- // Is this a redirect forum?
- if ($cur_forum['redirect_url'] != '')
- {
- $forum_field = '<h3><span class="redirtext">'.$lang_index['Link to'].'</span> <a href="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_forum['redirect_url']).'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a></h3>';
- $num_topics = $num_posts = '-';
- $item_status .= ' iredirect';
- $icon_type = 'icon';
- }
- else
- {
- $forum_field = '<h3><a href="viewforum.php?id='.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a>'.(!empty($forum_field_new) ? ' '.$forum_field_new : '').'</h3>';
- $num_topics = $cur_forum['num_topics'];
- $num_posts = $cur_forum['num_posts'];
- # Sub Forum MOD (start) #
- if (isset($sfdb[$cur_forum['fid']]))
- {
- foreach ($sfdb[$cur_forum['fid']] as $cur_subforum)
- {
- $num_topics += $cur_subforum['num_topics'];
- $num_posts += $cur_subforum['num_posts'];
- if ($cur_forum['last_post'] < $cur_subforum['last_post'])
- {
- $cur_forum['last_post_id'] = $cur_subforum['last_post_id'];
- $cur_forum['last_poster'] = $cur_subforum['last_poster'];
- $cur_forum['last_post'] = $cur_subforum['last_post'];
- $cur_forum['subject'] = $cur_subforum['subject'];
- }
- }
- }
- # Sub Forum MOD ( end ) #
- }
- if ($cur_forum['forum_desc'] != '')
- $forum_field .= "\n\t\t\t\t\t\t\t\t".'<div class="forumdesc">'.$cur_forum['forum_desc'].'</div>';
- // If there is a last_post/last_poster
- if ($cur_forum['last_post'] != '') {
- $char;
- $last_post_user = pun_htmlspecialchars($cur_forum['last_poster']);
- if ($pun_config['o_eve_use_iga'] == '1') {
- $char = fetch_last_forum_poster_character($cur_forum['fid']);
- if ($char['character_name'] != null) {
- $last_post_user = pun_htmlspecialchars($char['character_name']);
- } //End if.
- } //End if.
-
- //Lets get some information about the last post.
-
- $last_post = '<a href="viewtopic.php?pid='.$cur_forum['last_post_id'].'#p'.$cur_forum['last_post_id'].'">'.((intval($pun_config['o_use_topic_stamp']) == 1) ? format_time($cur_forum['last_post']) : pun_htmlspecialchars($cur_forum['subject'])).'</a> <span class="byuser">'.$lang_common['by'].' '.$last_post_user.'</span>';
- } else if ($cur_forum['redirect_url'] != '') {
- $last_post = '- - -';
- }else {
- $last_post = $lang_common['Never'];
- # Sub forums #
- // Are there new posts since our last visit?
- if (!empty($sfdb) && isset($sfdb[$cur_forum['fid']]))
- {
- foreach ($sfdb[$cur_forum['fid']] as $cur_subforum)
- {
- if (!$pun_user['is_guest'] && $cur_subforum['last_post'] > $pun_user['last_visit'] && (empty($tracked_topics['forums'][$cur_subforum['id']]) || $cur_forum['last_post'] > $tracked_topics['forums'][$cur_subforum['id']]))
- {
- // There are new posts in this forum, but have we read all of them already?
- foreach ($new_topics[$cur_subforum['id']] as $check_topic_id => $check_last_post)
- {
- if ((empty($tracked_topics['topics'][$check_topic_id]) || $tracked_topics['topics'][$check_topic_id] < $check_last_post) && (empty($tracked_topics['forums'][$cur_subforum['id']]) || $tracked_topics['forums'][$cur_subforum['id']] < $check_last_post))
- {
- $item_status .= ' inew';
- $forum_field_new = '<span class="newtext">[ <a href="search.php?action=show_new&fid='.$cur_forum['fid'].'">'.$lang_common['New posts'].'</a> ]</span>';
- $icon_type = 'icon icon-new';
-
- break;
- }
- }
- }
- }
- }
- # Sub forums #
- } //End if - else block.
- if ($cur_forum['moderators'] != '')
- {
- $mods_array = unserialize($cur_forum['moderators']);
- $moderators = array();
- foreach ($mods_array as $mod_username => $mod_id)
- {
- if (!check_numeric($mod_id)) {
- continue;
- } //End if.
-
- if ($pun_user['g_view_users'] == '1')
- $moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';
- else
- $moderators[] = pun_htmlspecialchars($mod_username);
- }
- $moderators = "\t\t\t\t\t\t\t\t".'<p class="modlist">(<em>'.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
- }
- ?>
- <tr class="<?php echo $item_status ?>">
- <td class="tcl">
- <div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo forum_number_format($forum_count) ?></div></div>
- <div class="tclcon">
- <div>
- <?php echo $forum_field."\n".$moderators ?>
- <?php
- $sub_forums_list = array();
- if (!empty($sfdb) && isset($sfdb[$cur_forum['fid']]))
- {
- foreach ($sfdb[$cur_forum['fid']] as $cur_subforum)
- $sub_forums_list[] = '<a class="subforum_name" href="viewforum.php?id='.$cur_subforum['id'].'">'.pun_htmlspecialchars($cur_subforum['forum_name']).'</a>';
- // EDIT THIS FOR THE DISPLAY STYLE OF THE SUBFORUMS ON MAIN PAGE
- if(!empty($sub_forums_list))
- {
- // Leave one $sub_forums_list commented out to use the other (between the ###..)
- ################################
- // This is Single Line Wrap Style
- $sub_forums_list = "\t\t\t\t\t\t\t\t".'<span class="subforum">'.$lang_sub_forum['Sub forums'].':</span> '.implode(', ', $sub_forums_list)."\n";
- // This is List Style
- //$sub_forums_list = "\n".'<b><em>'.$lang_sub_forum['Sub forums'].':</em></b><br /> -- '.implode('<br /> -- ', $sub_forums_list)."\n";
- ################################
- /* if ($cur_forum['forum_desc'] != NULL)
- echo "<br />";
- */
- // TO TURN OFF DISPLAY OF SUBFORUMS ON INDEX PAGE, COMMENT OUT THE FOLLOWING LINE
- echo $sub_forums_list;
- }
- }
- ?>
- </div>
- </div>
- </td>
- <td class="tc2"><?php echo forum_number_format($num_topics) ?></td>
- <td class="tc3"><?php echo forum_number_format($num_posts) ?></td>
- <td class="tcr"><?php echo $last_post ?></td>
- </tr>
- <?php
- }
- // Did we output any categories and forums?
- if ($cur_category > 0)
- echo "\t\t\t".'</tbody>'."\n\t\t\t".'</table>'."\n\t\t".'</div>'."\n\t".'</div>'."\n".'</div>'."\n\n";
- else
- echo '<div id="idx0" class="block"><div class="box"><div class="inbox"><p>'.$lang_index['Empty board'].'</p></div></div></div>';
- // Collect some statistics from the database
- if (file_exists(FORUM_CACHE_DIR.'cache_users_info.php'))
- include FORUM_CACHE_DIR.'cache_users_info.php';
- if (!defined('PUN_USERS_INFO_LOADED'))
- {
- if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
- require PUN_ROOT.'include/cache.php';
-
- generate_users_info_cache();
- require FORUM_CACHE_DIR.'cache_users_info.php';
- } //End if.
- $result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error());
- list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result);
- if ($pun_user['g_view_users'] == '1')
- $stats['newest_user'] = '<a href="profile.php?id='.$stats['last_user']['id'].'">'.pun_htmlspecialchars($stats['last_user']['username']).'</a>';
- else
- $stats['newest_user'] = pun_htmlspecialchars($stats['last_user']['username']);
-
- if (!empty($forum_actions))
- {
- ?>
- <div class="linksb">
- <div class="inbox crumbsplus">
- <p class="subscribelink clearb"><?php echo implode(' - ', $forum_actions); ?></p>
- </div>
- </div>
- <?php
- }
- ?>
- <div id="brdstats" class="block">
- <h2><span><?php echo $lang_index['Board info'] ?></span></h2>
- <div class="box">
- <div class="inbox">
- <?php
- if ($pun_config['o_hide_stats'] && $pun_user['is_guest']) {
- ?>
- <dl class="conl">
- <dd><span><?php echo sprintf($lang_index['Guests online'], '<strong>'.forum_number_format(1).'</strong>'); ?></span></dd>
- <dd><span><em><?php echo $lang_index['stats_disabled']; ?></em></span></dd>
- </dl>
- <div class="clearer"></div>
- <?php
- } else {
- ?>
- <dl class="conr">
- <dt><strong><?php echo $lang_index['Board stats'] ?></strong></dt>
- <dd><span><?php printf($lang_index['No of users'], '<strong>'.forum_number_format($stats['total_users']).'</strong>') ?></span></dd>
- <dd><span><?php printf($lang_index['No of topics'], '<strong>'.forum_number_format($stats['total_topics']).'</strong>') ?></span></dd>
- <dd><span><?php printf($lang_index['No of posts'], '<strong>'.forum_number_format($stats['total_posts']).'</strong>') ?></span></dd>
- </dl>
- <dl class="conl">
- <dt><strong><?php echo $lang_index['User info'] ?></strong></dt>
- <dd><span><?php printf($lang_index['Newest user'], $stats['newest_user']) ?></span></dd>
- <?php
- if ($pun_config['o_users_online'] == '1')
- {
- $reload = false;
- //Lets see if there is a cache file!
- if (file_exists(FORUM_CACHE_DIR.'online.stamp')) {
- $now = time();
- $then = file_get_contents(FORUM_CACHE_DIR.'online.stamp');
-
- //You can fine tune how rapidly this is updated by adjusting o_users_online_refresh.
- if (($now - $then) > $pun_config['o_users_online_refresh']) {
- $reload = true;
- } //End if.
- } else {
- $reload = true;
- } //End if - else.
-
- if ($reload) {
- if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) {
- require PUN_ROOT.'include/cache.php';
- } //End if.
- generate_online_cache();
- } //End if.
- include(FORUM_CACHE_DIR.'cache_online.php');
-
- }
- else
- echo "\t\t\t".'</dl>'."\n\t\t\t".'<div class="clearer"></div>'."\n";
- } //End if.?>
- </div>
- </div>
- </div>
- <?php
- $footer_style = 'index';
- require PUN_ROOT.'footer.php';