root / tags / release_2_0_1 / phpBB / index.php
History | View | Annotate | Download (13.9 kB)
| 1 | <?php
|
|---|---|
| 2 | /***************************************************************************
|
| 3 | * index.php |
| 4 | * ------------------- |
| 5 | * begin : Saturday, Feb 13, 2001 |
| 6 | * copyright : (C) 2001 The phpBB Group |
| 7 | * email : support@phpbb.com |
| 8 | * |
| 9 | * $Id: index.php 2453 2002-03-31 13:58:01Z psotfx $ |
| 10 | * |
| 11 | * |
| 12 | ***************************************************************************/ |
| 13 | |
| 14 | /***************************************************************************
|
| 15 | * |
| 16 | * This program is free software; you can redistribute it and/or modify |
| 17 | * it under the terms of the GNU General Public License as published by |
| 18 | * the Free Software Foundation; either version 2 of the License, or |
| 19 | * (at your option) any later version. |
| 20 | * |
| 21 | ***************************************************************************/ |
| 22 | |
| 23 | define('IN_PHPBB', true); |
| 24 | $phpbb_root_path = './'; |
| 25 | include($phpbb_root_path . 'extension.inc'); |
| 26 | include($phpbb_root_path . 'common.'.$phpEx); |
| 27 | |
| 28 | //
|
| 29 | // Start session management
|
| 30 | //
|
| 31 | $userdata = session_pagestart($user_ip, PAGE_INDEX); |
| 32 | init_userprefs($userdata);
|
| 33 | //
|
| 34 | // End session management
|
| 35 | //
|
| 36 | |
| 37 | $viewcat = ( !empty($HTTP_GET_VARS[POST_CAT_URL]) ) ? $HTTP_GET_VARS[POST_CAT_URL] : -1; |
| 38 | |
| 39 | if( isset($HTTP_GET_VARS['mark']) || isset($HTTP_POST_VARS['mark']) ) |
| 40 | {
|
| 41 | $mark_read = ( isset($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : $HTTP_GET_VARS['mark']; |
| 42 | } |
| 43 | else
|
| 44 | {
|
| 45 | $mark_read = ''; |
| 46 | } |
| 47 | |
| 48 | //
|
| 49 | // Handle marking posts
|
| 50 | //
|
| 51 | if( $mark_read == 'forums' ) |
| 52 | {
|
| 53 | if( $userdata['session_logged_in'] ) |
| 54 | {
|
| 55 | setcookie($board_config['cookie_name'] . '_f_all', time(), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']); |
| 56 | } |
| 57 | |
| 58 | $template->assign_vars(array( |
| 59 | "META" => '<meta http-equiv="refresh" content="3;url=' .append_sid("index.$phpEx") . '">') |
| 60 | ); |
| 61 | |
| 62 | $message = $lang['Forums_marked_read'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a> '); |
| 63 | |
| 64 | message_die(GENERAL_MESSAGE, $message); |
| 65 | } |
| 66 | //
|
| 67 | // End handle marking posts
|
| 68 | //
|
| 69 | |
| 70 | $tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_t"]) : array(); |
| 71 | $tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f"]) : array(); |
| 72 | |
| 73 | //
|
| 74 | // If you don't use these stats on your index you may want to consider
|
| 75 | // removing them
|
| 76 | //
|
| 77 | $total_posts = get_db_stat('postcount'); |
| 78 | $total_users = get_db_stat('usercount'); |
| 79 | $newest_userdata = get_db_stat('newestuser'); |
| 80 | $newest_user = $newest_userdata['username']; |
| 81 | $newest_uid = $newest_userdata['user_id']; |
| 82 | |
| 83 | if( $total_posts == 0 ) |
| 84 | {
|
| 85 | $l_total_post_s = $lang['Posted_articles_zero_total']; |
| 86 | } |
| 87 | else if( $total_posts == 1 ) |
| 88 | {
|
| 89 | $l_total_post_s = $lang['Posted_article_total']; |
| 90 | } |
| 91 | else
|
| 92 | {
|
| 93 | $l_total_post_s = $lang['Posted_articles_total']; |
| 94 | } |
| 95 | |
| 96 | if( $total_users == 0 ) |
| 97 | {
|
| 98 | $l_total_user_s = $lang['Registered_users_zero_total']; |
| 99 | } |
| 100 | else if( $total_users == 1 ) |
| 101 | {
|
| 102 | $l_total_user_s = $lang['Registered_user_total']; |
| 103 | } |
| 104 | else
|
| 105 | {
|
| 106 | $l_total_user_s = $lang['Registered_users_total']; |
| 107 | } |
| 108 | |
| 109 | |
| 110 | //
|
| 111 | // Start page proper
|
| 112 | //
|
| 113 | $sql = "SELECT c.cat_id, c.cat_title, c.cat_order |
| 114 | FROM " . CATEGORIES_TABLE . " c |
| 115 | ORDER BY c.cat_order";
|
| 116 | if( !($result = $db->sql_query($sql)) ) |
| 117 | {
|
| 118 | message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql); |
| 119 | } |
| 120 | |
| 121 | while( $category_rows[] = $db->sql_fetchrow($result) ); |
| 122 | |
| 123 | if( ( $total_categories = count($category_rows) ) ) |
| 124 | {
|
| 125 | //
|
| 126 | // Define appropriate SQL
|
| 127 | //
|
| 128 | switch(SQL_LAYER) |
| 129 | {
|
| 130 | case 'postgresql': |
| 131 | $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id |
| 132 | FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u |
| 133 | WHERE p.post_id = f.forum_last_post_id |
| 134 | AND u.user_id = p.poster_id |
| 135 | UNION ( |
| 136 | SELECT f.*, NULL, NULL, NULL, NULL |
| 137 | FROM " . FORUMS_TABLE . " f |
| 138 | WHERE NOT EXISTS ( |
| 139 | SELECT p.post_time |
| 140 | FROM " . POSTS_TABLE . " p |
| 141 | WHERE p.post_id = f.forum_last_post_id |
| 142 | ) |
| 143 | ) |
| 144 | ORDER BY cat_id, forum_order";
|
| 145 | break;
|
| 146 | |
| 147 | case 'oracle': |
| 148 | $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id |
| 149 | FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u |
| 150 | WHERE p.post_id = f.forum_last_post_id(+) |
| 151 | AND u.user_id = p.poster_id(+) |
| 152 | ORDER BY f.cat_id, f.forum_order";
|
| 153 | break;
|
| 154 | |
| 155 | default:
|
| 156 | $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id |
| 157 | FROM (( " . FORUMS_TABLE . " f |
| 158 | LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id ) |
| 159 | LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id ) |
| 160 | ORDER BY f.cat_id, f.forum_order";
|
| 161 | break;
|
| 162 | } |
| 163 | if ( !($result = $db->sql_query($sql)) ) |
| 164 | {
|
| 165 | message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql); |
| 166 | } |
| 167 | |
| 168 | $forum_data = array(); |
| 169 | while( $row = $db->sql_fetchrow($result) ) |
| 170 | {
|
| 171 | $forum_data[] = $row; |
| 172 | } |
| 173 | |
| 174 | if ( !($total_forums = count($forum_data)) ) |
| 175 | {
|
| 176 | message_die(GENERAL_MESSAGE, $lang['No_forums']); |
| 177 | } |
| 178 | |
| 179 | //
|
| 180 | // Obtain a list of topic ids which contain
|
| 181 | // posts made since user last visited
|
| 182 | //
|
| 183 | if ( $userdata['session_logged_in'] ) |
| 184 | {
|
| 185 | $sql = "SELECT t.forum_id, t.topic_id, p.post_time |
| 186 | FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p |
| 187 | WHERE p.post_id = t.topic_last_post_id |
| 188 | AND p.post_time > " . $userdata['user_lastvisit'] . " |
| 189 | AND t.topic_moved_id = 0";
|
| 190 | if ( !($result = $db->sql_query($sql)) ) |
| 191 | {
|
| 192 | message_die(GENERAL_ERROR, 'Could not query new topic information', '', __LINE__, __FILE__, $sql); |
| 193 | } |
| 194 | |
| 195 | $new_topic_data = array(); |
| 196 | while( $topic_data = $db->sql_fetchrow($result) ) |
| 197 | {
|
| 198 | $new_topic_data[$topic_data['forum_id']][$topic_data['topic_id']] = $topic_data['post_time']; |
| 199 | } |
| 200 | } |
| 201 | |
| 202 | //
|
| 203 | // Obtain list of moderators of each forum
|
| 204 | // First users, then groups ... broken into two queries
|
| 205 | //
|
| 206 | $sql = "SELECT aa.forum_id, u.user_id, u.username |
| 207 | FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u |
| 208 | WHERE aa.auth_mod = " . TRUE . " |
| 209 | AND g.group_single_user = 1 |
| 210 | AND ug.group_id = aa.group_id |
| 211 | AND g.group_id = aa.group_id |
| 212 | AND u.user_id = ug.user_id |
| 213 | GROUP BY u.user_id, u.username, aa.forum_id |
| 214 | ORDER BY aa.forum_id, u.user_id";
|
| 215 | if ( !($result = $db->sql_query($sql)) ) |
| 216 | {
|
| 217 | message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql); |
| 218 | } |
| 219 | |
| 220 | $forum_moderators = array(); |
| 221 | while( $row = $db->sql_fetchrow($result) ) |
| 222 | {
|
| 223 | $forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>'; |
| 224 | } |
| 225 | |
| 226 | $sql = "SELECT aa.forum_id, g.group_id, g.group_name |
| 227 | FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g |
| 228 | WHERE aa.auth_mod = " . TRUE . " |
| 229 | AND g.group_single_user = 0 |
| 230 | AND g.group_type <> " . GROUP_HIDDEN . " |
| 231 | AND ug.group_id = aa.group_id |
| 232 | AND g.group_id = aa.group_id |
| 233 | GROUP BY g.group_id, g.group_name, aa.forum_id |
| 234 | ORDER BY aa.forum_id, g.group_id";
|
| 235 | if ( !($result = $db->sql_query($sql)) ) |
| 236 | {
|
| 237 | message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql); |
| 238 | } |
| 239 | |
| 240 | while( $row = $db->sql_fetchrow($result) ) |
| 241 | {
|
| 242 | $forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>'; |
| 243 | } |
| 244 | |
| 245 | //
|
| 246 | // Find which forums are visible for this user
|
| 247 | //
|
| 248 | $is_auth_ary = array(); |
| 249 | $is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_data); |
| 250 | |
| 251 | //
|
| 252 | // Start output of page
|
| 253 | //
|
| 254 | $page_title = $lang['Index']; |
| 255 | include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
| 256 | |
| 257 | $template->set_filenames(array( |
| 258 | 'body' => 'index_body.tpl') |
| 259 | ); |
| 260 | |
| 261 | $template->assign_vars(array( |
| 262 | 'TOTAL_POSTS' => sprintf($l_total_post_s, $total_posts), |
| 263 | 'TOTAL_USERS' => sprintf($l_total_user_s, $total_users), |
| 264 | 'NEWEST_USER' => sprintf($lang['Newest_user'], '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$newest_uid") . '">', $newest_user, '</a>'), |
| 265 | |
| 266 | 'FORUM_IMG' => $images['forum'], |
| 267 | 'FORUM_NEW_IMG' => $images['forum_new'], |
| 268 | 'FORUM_LOCKED_IMG' => $images['forum_locked'], |
| 269 | |
| 270 | 'L_FORUM' => $lang['Forum'], |
| 271 | 'L_TOPICS' => $lang['Topics'], |
| 272 | 'L_REPLIES' => $lang['Replies'], |
| 273 | 'L_VIEWS' => $lang['Views'], |
| 274 | 'L_POSTS' => $lang['Posts'], |
| 275 | 'L_LASTPOST' => $lang['Last_Post'], |
| 276 | 'L_NO_NEW_POSTS' => $lang['No_new_posts'], |
| 277 | 'L_NEW_POSTS' => $lang['New_posts'], |
| 278 | 'L_NO_NEW_POSTS_LOCKED' => $lang['No_new_posts_locked'], |
| 279 | 'L_NEW_POSTS_LOCKED' => $lang['New_posts_locked'], |
| 280 | 'L_ONLINE_EXPLAIN' => $lang['Online_explain'], |
| 281 | |
| 282 | 'L_MODERATOR' => $lang['Moderators'], |
| 283 | 'L_FORUM_LOCKED' => $lang['Forum_is_locked'], |
| 284 | 'L_MARK_FORUMS_READ' => $lang['Mark_all_forums'], |
| 285 | |
| 286 | 'U_MARK_READ' => append_sid("index.$phpEx?mark=forums")) |
| 287 | ); |
| 288 | |
| 289 | //
|
| 290 | // Okay, let's build the index
|
| 291 | //
|
| 292 | for($i = 0; $i < $total_categories; $i++) |
| 293 | {
|
| 294 | $cat_id = $category_rows[$i]['cat_id']; |
| 295 | |
| 296 | //
|
| 297 | // Should we display this category/forum set?
|
| 298 | //
|
| 299 | $display_forums = false; |
| 300 | for($j = 0; $j < $total_forums; $j++) |
| 301 | {
|
| 302 | if ( $is_auth_ary[$forum_data[$j]['forum_id']]['auth_view'] && $forum_data[$j]['cat_id'] == $cat_id ) |
| 303 | {
|
| 304 | $display_forums = true; |
| 305 | } |
| 306 | } |
| 307 | |
| 308 | //
|
| 309 | // Yes, we should, so first dump out the category
|
| 310 | // title, then, if appropriate the forum list
|
| 311 | //
|
| 312 | if ( $display_forums ) |
| 313 | {
|
| 314 | $template->assign_block_vars('catrow', array( |
| 315 | 'CAT_ID' => $cat_id, |
| 316 | 'CAT_DESC' => $category_rows[$i]['cat_title'], |
| 317 | 'U_VIEWCAT' => append_sid("index.$phpEx?" . POST_CAT_URL . "=$cat_id")) |
| 318 | ); |
| 319 | |
| 320 | if ( $viewcat == $cat_id || $viewcat == -1 ) |
| 321 | {
|
| 322 | for($j = 0; $j < $total_forums; $j++) |
| 323 | {
|
| 324 | if ( $forum_data[$j]['cat_id'] == $cat_id ) |
| 325 | {
|
| 326 | $forum_id = $forum_data[$j]['forum_id']; |
| 327 | |
| 328 | if ( $is_auth_ary[$forum_id]['auth_view'] ) |
| 329 | {
|
| 330 | if ( $forum_data[$j]['forum_status'] == FORUM_LOCKED ) |
| 331 | {
|
| 332 | $folder_image = $images['forum_locked']; |
| 333 | $folder_alt = $lang['Forum_locked']; |
| 334 | } |
| 335 | else
|
| 336 | {
|
| 337 | $unread_topics = false; |
| 338 | if ( $userdata['session_logged_in'] ) |
| 339 | {
|
| 340 | if ( !empty($new_topic_data[$forum_id]) ) |
| 341 | {
|
| 342 | $forum_last_post_time = 0; |
| 343 | |
| 344 | while( list($check_topic_id, $check_post_time) = @each($new_topic_data[$forum_id]) ) |
| 345 | {
|
| 346 | if ( empty($tracking_topics[$check_topic_id]) ) |
| 347 | {
|
| 348 | $unread_topics = true; |
| 349 | $forum_last_post_time = max($check_post_time, $forum_last_post_time); |
| 350 | |
| 351 | } |
| 352 | else
|
| 353 | {
|
| 354 | if ( $tracking_topics[$check_topic_id] < $check_post_time ) |
| 355 | {
|
| 356 | $unread_topics = true; |
| 357 | $forum_last_post_time = max($check_post_time, $forum_last_post_time); |
| 358 | } |
| 359 | } |
| 360 | } |
| 361 | |
| 362 | if ( !empty($tracking_forums[$forum_id]) ) |
| 363 | {
|
| 364 | if ( $tracking_forums[$forum_id] > $forum_last_post_time ) |
| 365 | {
|
| 366 | $unread_topics = false; |
| 367 | } |
| 368 | } |
| 369 | |
| 370 | if ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']) ) |
| 371 | {
|
| 372 | if ( $HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'] > $forum_last_post_time ) |
| 373 | {
|
| 374 | $unread_topics = false; |
| 375 | } |
| 376 | } |
| 377 | |
| 378 | } |
| 379 | } |
| 380 | |
| 381 | $folder_image = ( $unread_topics ) ? $images['forum_new'] : $images['forum']; |
| 382 | $folder_alt = ( $unread_topics ) ? $lang['New_posts'] : $lang['No_new_posts']; |
| 383 | } |
| 384 | |
| 385 | $posts = $forum_data[$j]['forum_posts']; |
| 386 | $topics = $forum_data[$j]['forum_topics']; |
| 387 | |
| 388 | if ( $forum_data[$j]['forum_last_post_id'] ) |
| 389 | {
|
| 390 | $last_post_time = create_date($board_config['default_dateformat'], $forum_data[$j]['post_time'], $board_config['board_timezone']); |
| 391 | |
| 392 | $last_post = $last_post_time . '<br />'; |
| 393 | |
| 394 | $last_post .= ( $forum_data[$j]['user_id'] == ANONYMOUS ) ? ( ($forum_data[$j]['post_username'] != '' ) ? $forum_data[$j]['post_username'] . ' ' : $lang['Guest'] . ' ' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '=' . $forum_data[$j]['user_id']) . '">' . $forum_data[$j]['username'] . '</a> '; |
| 395 | |
| 396 | $last_post .= '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $forum_data[$j]['forum_last_post_id']) . '#' . $forum_data[$j]['forum_last_post_id'] . '"><img src="' . $images['icon_latest_reply'] . '" border="0" alt="' . $lang['View_latest_post'] . '" title="' . $lang['View_latest_post'] . '" /></a>'; |
| 397 | } |
| 398 | else
|
| 399 | {
|
| 400 | $last_post = $lang['No_Posts']; |
| 401 | } |
| 402 | |
| 403 | if ( count($forum_moderators[$forum_id]) > 0 ) |
| 404 | {
|
| 405 | $l_moderators = ( count($forum_moderators[$forum_id]) == 1 ) ? $lang['Moderator'] : $lang['Moderators']; |
| 406 | $moderator_list = implode(', ', $forum_moderators[$forum_id]); |
| 407 | } |
| 408 | else
|
| 409 | {
|
| 410 | $l_moderators = ' '; |
| 411 | $moderator_list = ' '; |
| 412 | } |
| 413 | |
| 414 | $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2']; |
| 415 | $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2']; |
| 416 | |
| 417 | $template->assign_block_vars('catrow.forumrow', array( |
| 418 | 'ROW_COLOR' => '#' . $row_color, |
| 419 | 'ROW_CLASS' => $row_class, |
| 420 | 'FORUM_FOLDER_IMG' => $folder_image, |
| 421 | 'FORUM_NAME' => $forum_data[$j]['forum_name'], |
| 422 | 'FORUM_DESC' => $forum_data[$j]['forum_desc'], |
| 423 | 'POSTS' => $forum_data[$j]['forum_posts'], |
| 424 | 'TOPICS' => $forum_data[$j]['forum_topics'], |
| 425 | 'LAST_POST' => $last_post, |
| 426 | 'MODERATORS' => $moderator_list, |
| 427 | |
| 428 | 'L_MODERATOR' => $l_moderators, |
| 429 | 'L_FORUM_FOLDER_ALT' => $folder_alt, |
| 430 | |
| 431 | 'U_VIEWFORUM' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id")) |
| 432 | ); |
| 433 | } |
| 434 | } |
| 435 | } |
| 436 | } |
| 437 | } |
| 438 | } // for ... categories
|
| 439 | |
| 440 | }// if ... total_categories
|
| 441 | else
|
| 442 | {
|
| 443 | message_die(GENERAL_MESSAGE, $lang['No_forums']); |
| 444 | } |
| 445 | |
| 446 | //
|
| 447 | // Generate the page
|
| 448 | //
|
| 449 | $template->pparse('body'); |
| 450 | |
| 451 | include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
| 452 | |
| 453 | ?> |

