home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2006 January / PCA126_DVD.iso / ADVISORS / phpBB-2.0.17 / phpBB2 / includes / page_header.php < prev    next >
Encoding:
PHP Script  |  2005-07-19  |  15.0 KB  |  482 lines

  1. <?php
  2. /***************************************************************************
  3.  *                              page_header.php
  4.  *                            -------------------
  5.  *   begin                : Saturday, Feb 13, 2001
  6.  *   copyright            : (C) 2001 The phpBB Group
  7.  *   email                : support@phpbb.com
  8.  *
  9.  *   $Id: page_header.php,v 1.106.2.24 2005/03/26 14:15:59 acydburn Exp $
  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. if ( !defined('IN_PHPBB') )
  24. {
  25.     die("Hacking attempt");
  26. }
  27.  
  28. define('HEADER_INC', TRUE);
  29.  
  30. //
  31. // gzip_compression
  32. //
  33. $do_gzip_compress = FALSE;
  34. if ( $board_config['gzip_compress'] )
  35. {
  36.     $phpver = phpversion();
  37.  
  38.     $useragent = (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) ? $HTTP_SERVER_VARS['HTTP_USER_AGENT'] : getenv('HTTP_USER_AGENT');
  39.  
  40.     if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
  41.     {
  42.         if ( extension_loaded('zlib') )
  43.         {
  44.             ob_start('ob_gzhandler');
  45.         }
  46.     }
  47.     else if ( $phpver > '4.0' )
  48.     {
  49.         if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
  50.         {
  51.             if ( extension_loaded('zlib') )
  52.             {
  53.                 $do_gzip_compress = TRUE;
  54.                 ob_start();
  55.                 ob_implicit_flush(0);
  56.  
  57.                 header('Content-Encoding: gzip');
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. //
  64. // Parse and show the overall header.
  65. //
  66. $template->set_filenames(array(
  67.     'overall_header' => ( empty($gen_simple_header) ) ? 'overall_header.tpl' : 'simple_header.tpl')
  68. );
  69.  
  70. //
  71. // Generate logged in/logged out status
  72. //
  73. if ( $userdata['session_logged_in'] )
  74. {
  75.     $u_login_logout = 'login.'.$phpEx.'?logout=true&sid=' . $userdata['session_id'];
  76.     $l_login_logout = $lang['Logout'] . ' [ ' . $userdata['username'] . ' ]';
  77. }
  78. else
  79. {
  80.     $u_login_logout = 'login.'.$phpEx;
  81.     $l_login_logout = $lang['Login'];
  82. }
  83.  
  84. $s_last_visit = ( $userdata['session_logged_in'] ) ? create_date($board_config['default_dateformat'], $userdata['user_lastvisit'], $board_config['board_timezone']) : '';
  85.  
  86. //
  87. // Get basic (usernames + totals) online
  88. // situation
  89. //
  90. $logged_visible_online = 0;
  91. $logged_hidden_online = 0;
  92. $guests_online = 0;
  93. $online_userlist = '';
  94. $l_online_users = '';
  95.  
  96. if (defined('SHOW_ONLINE'))
  97. {
  98.  
  99.     $user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : '';
  100.     $sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_ip
  101.         FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
  102.         WHERE u.user_id = s.session_user_id
  103.             AND s.session_time >= ".( time() - 300 ) . "
  104.             $user_forum_sql
  105.         ORDER BY u.username ASC, s.session_ip ASC";
  106.     if( !($result = $db->sql_query($sql)) )
  107.     {
  108.         message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
  109.     }
  110.  
  111.     $userlist_ary = array();
  112.     $userlist_visible = array();
  113.  
  114.     $prev_user_id = 0;
  115.     $prev_user_ip = $prev_session_ip = '';
  116.  
  117.     while( $row = $db->sql_fetchrow($result) )
  118.     {
  119.         // User is logged in and therefor not a guest
  120.         if ( $row['session_logged_in'] )
  121.         {
  122.             // Skip multiple sessions for one user
  123.             if ( $row['user_id'] != $prev_user_id )
  124.             {
  125.                 $style_color = '';
  126.                 if ( $row['user_level'] == ADMIN )
  127.                 {
  128.                     $row['username'] = '<b>' . $row['username'] . '</b>';
  129.                     $style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
  130.                 }
  131.                 else if ( $row['user_level'] == MOD )
  132.                 {
  133.                     $row['username'] = '<b>' . $row['username'] . '</b>';
  134.                     $style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
  135.                 }
  136.  
  137.                 if ( $row['user_allow_viewonline'] )
  138.                 {
  139.                     $user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>';
  140.                     $logged_visible_online++;
  141.                 }
  142.                 else
  143.                 {
  144.                     $user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>';
  145.                     $logged_hidden_online++;
  146.                 }
  147.  
  148.                 if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN )
  149.                 {
  150.                     $online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link;
  151.                 }
  152.             }
  153.  
  154.             $prev_user_id = $row['user_id'];
  155.         }
  156.         else
  157.         {
  158.             // Skip multiple sessions for one user
  159.             if ( $row['session_ip'] != $prev_session_ip )
  160.             {
  161.                 $guests_online++;
  162.             }
  163.         }
  164.  
  165.         $prev_session_ip = $row['session_ip'];
  166.     }
  167.     $db->sql_freeresult($result);
  168.  
  169.     if ( empty($online_userlist) )
  170.     {
  171.         $online_userlist = $lang['None'];
  172.     }
  173.     $online_userlist = ( ( isset($forum_id) ) ? $lang['Browsing_forum'] : $lang['Registered_users'] ) . ' ' . $online_userlist;
  174.  
  175.     $total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online;
  176.  
  177.     if ( $total_online_users > $board_config['record_online_users'])
  178.     {
  179.         $board_config['record_online_users'] = $total_online_users;
  180.         $board_config['record_online_date'] = time();
  181.  
  182.         $sql = "UPDATE " . CONFIG_TABLE . "
  183.             SET config_value = '$total_online_users'
  184.             WHERE config_name = 'record_online_users'";
  185.         if ( !$db->sql_query($sql) )
  186.         {
  187.             message_die(GENERAL_ERROR, 'Could not update online user record (nr of users)', '', __LINE__, __FILE__, $sql);
  188.         }
  189.  
  190.         $sql = "UPDATE " . CONFIG_TABLE . "
  191.             SET config_value = '" . $board_config['record_online_date'] . "'
  192.             WHERE config_name = 'record_online_date'";
  193.         if ( !$db->sql_query($sql) )
  194.         {
  195.             message_die(GENERAL_ERROR, 'Could not update online user record (date)', '', __LINE__, __FILE__, $sql);
  196.         }
  197.     }
  198.  
  199.     if ( $total_online_users == 0 )
  200.     {
  201.         $l_t_user_s = $lang['Online_users_zero_total'];
  202.     }
  203.     else if ( $total_online_users == 1 )
  204.     {
  205.         $l_t_user_s = $lang['Online_user_total'];
  206.     }
  207.     else
  208.     {
  209.         $l_t_user_s = $lang['Online_users_total'];
  210.     }
  211.  
  212.     if ( $logged_visible_online == 0 )
  213.     {
  214.         $l_r_user_s = $lang['Reg_users_zero_total'];
  215.     }
  216.     else if ( $logged_visible_online == 1 )
  217.     {
  218.         $l_r_user_s = $lang['Reg_user_total'];
  219.     }
  220.     else
  221.     {
  222.         $l_r_user_s = $lang['Reg_users_total'];
  223.     }
  224.  
  225.     if ( $logged_hidden_online == 0 )
  226.     {
  227.         $l_h_user_s = $lang['Hidden_users_zero_total'];
  228.     }
  229.     else if ( $logged_hidden_online == 1 )
  230.     {
  231.         $l_h_user_s = $lang['Hidden_user_total'];
  232.     }
  233.     else
  234.     {
  235.         $l_h_user_s = $lang['Hidden_users_total'];
  236.     }
  237.  
  238.     if ( $guests_online == 0 )
  239.     {
  240.         $l_g_user_s = $lang['Guest_users_zero_total'];
  241.     }
  242.     else if ( $guests_online == 1 )
  243.     {
  244.         $l_g_user_s = $lang['Guest_user_total'];
  245.     }
  246.     else
  247.     {
  248.         $l_g_user_s = $lang['Guest_users_total'];
  249.     }
  250.  
  251.     $l_online_users = sprintf($l_t_user_s, $total_online_users);
  252.     $l_online_users .= sprintf($l_r_user_s, $logged_visible_online);
  253.     $l_online_users .= sprintf($l_h_user_s, $logged_hidden_online);
  254.     $l_online_users .= sprintf($l_g_user_s, $guests_online);
  255. }
  256.  
  257. //
  258. // Obtain number of new private messages
  259. // if user is logged in
  260. //
  261. if ( ($userdata['session_logged_in']) && (empty($gen_simple_header)) )
  262. {
  263.     if ( $userdata['user_new_privmsg'] )
  264.     {
  265.         $l_message_new = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['New_pm'] : $lang['New_pms'];
  266.         $l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']);
  267.  
  268.         if ( $userdata['user_last_privmsg'] > $userdata['user_lastvisit'] )
  269.         {
  270.             $sql = "UPDATE " . USERS_TABLE . "
  271.                 SET user_last_privmsg = " . $userdata['user_lastvisit'] . "
  272.                 WHERE user_id = " . $userdata['user_id'];
  273.             if ( !$db->sql_query($sql) )
  274.             {
  275.                 message_die(GENERAL_ERROR, 'Could not update private message new/read time for user', '', __LINE__, __FILE__, $sql);
  276.             }
  277.  
  278.             $s_privmsg_new = 1;
  279.             $icon_pm = $images['pm_new_msg'];
  280.         }
  281.         else
  282.         {
  283.             $s_privmsg_new = 0;
  284.             $icon_pm = $images['pm_new_msg'];
  285.         }
  286.     }
  287.     else
  288.     {
  289.         $l_privmsgs_text = $lang['No_new_pm'];
  290.  
  291.         $s_privmsg_new = 0;
  292.         $icon_pm = $images['pm_no_new_msg'];
  293.     }
  294.  
  295.     if ( $userdata['user_unread_privmsg'] )
  296.     {
  297.         $l_message_unread = ( $userdata['user_unread_privmsg'] == 1 ) ? $lang['Unread_pm'] : $lang['Unread_pms'];
  298.         $l_privmsgs_text_unread = sprintf($l_message_unread, $userdata['user_unread_privmsg']);
  299.     }
  300.     else
  301.     {
  302.         $l_privmsgs_text_unread = $lang['No_unread_pm'];
  303.     }
  304. }
  305. else
  306. {
  307.     $icon_pm = $images['pm_no_new_msg'];
  308.     $l_privmsgs_text = $lang['Login_check_pm'];
  309.     $l_privmsgs_text_unread = '';
  310.     $s_privmsg_new = 0;
  311. }
  312.  
  313. //
  314. // Generate HTML required for Mozilla Navigation bar
  315. //
  316. if (!isset($nav_links))
  317. {
  318.     $nav_links = array();
  319. }
  320.  
  321. $nav_links_html = '';
  322. $nav_link_proto = '<link rel="%s" href="%s" title="%s" />' . "\n";
  323. while( list($nav_item, $nav_array) = @each($nav_links) )
  324. {
  325.     if ( !empty($nav_array['url']) )
  326.     {
  327.         $nav_links_html .= sprintf($nav_link_proto, $nav_item, append_sid($nav_array['url']), $nav_array['title']);
  328.     }
  329.     else
  330.     {
  331.         // We have a nested array, used for items like <link rel='chapter'> that can occur more than once.
  332.         while( list(,$nested_array) = each($nav_array) )
  333.         {
  334.             $nav_links_html .= sprintf($nav_link_proto, $nav_item, $nested_array['url'], $nested_array['title']);
  335.         }
  336.     }
  337. }
  338.  
  339. // Format Timezone. We are unable to use array_pop here, because of PHP3 compatibility
  340. $l_timezone = explode('.', $board_config['board_timezone']);
  341. $l_timezone = (count($l_timezone) > 1 && $l_timezone[count($l_timezone)-1] != 0) ? $lang[sprintf('%.1f', $board_config['board_timezone'])] : $lang[number_format($board_config['board_timezone'])];
  342. //
  343. // The following assigns all _common_ variables that may be used at any point
  344. // in a template.
  345. //
  346. $template->assign_vars(array(
  347.     'SITENAME' => $board_config['sitename'],
  348.     'SITE_DESCRIPTION' => $board_config['site_desc'],
  349.     'PAGE_TITLE' => $page_title,
  350.     'LAST_VISIT_DATE' => sprintf($lang['You_last_visit'], $s_last_visit),
  351.     'CURRENT_TIME' => sprintf($lang['Current_time'], create_date($board_config['default_dateformat'], time(), $board_config['board_timezone'])),
  352.     'TOTAL_USERS_ONLINE' => $l_online_users,
  353.     'LOGGED_IN_USER_LIST' => $online_userlist,
  354.     'RECORD_USERS' => sprintf($lang['Record_online_users'], $board_config['record_online_users'], create_date($board_config['default_dateformat'], $board_config['record_online_date'], $board_config['board_timezone'])),
  355.     'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
  356.     'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
  357.     'PRIVATE_MESSAGE_NEW_FLAG' => $s_privmsg_new,
  358.  
  359.     'PRIVMSG_IMG' => $icon_pm,
  360.  
  361.     'L_USERNAME' => $lang['Username'],
  362.     'L_PASSWORD' => $lang['Password'],
  363.     'L_LOGIN_LOGOUT' => $l_login_logout,
  364.     'L_LOGIN' => $lang['Login'],
  365.     'L_LOG_ME_IN' => $lang['Log_me_in'],
  366.     'L_AUTO_LOGIN' => $lang['Log_me_in'],
  367.     'L_INDEX' => sprintf($lang['Forum_Index'], $board_config['sitename']),
  368.     'L_REGISTER' => $lang['Register'],
  369.     'L_PROFILE' => $lang['Profile'],
  370.     'L_SEARCH' => $lang['Search'],
  371.     'L_PRIVATEMSGS' => $lang['Private_Messages'],
  372.     'L_WHO_IS_ONLINE' => $lang['Who_is_Online'],
  373.     'L_MEMBERLIST' => $lang['Memberlist'],
  374.     'L_FAQ' => $lang['FAQ'],
  375.     'L_USERGROUPS' => $lang['Usergroups'],
  376.     'L_SEARCH_NEW' => $lang['Search_new'],
  377.     'L_SEARCH_UNANSWERED' => $lang['Search_unanswered'],
  378.     'L_SEARCH_SELF' => $lang['Search_your_posts'],
  379.     'L_WHOSONLINE_ADMIN' => sprintf($lang['Admin_online_color'], '<span style="color:#' . $theme['fontcolor3'] . '">', '</span>'),
  380.     'L_WHOSONLINE_MOD' => sprintf($lang['Mod_online_color'], '<span style="color:#' . $theme['fontcolor2'] . '">', '</span>'),
  381.  
  382.     'U_SEARCH_UNANSWERED' => append_sid('search.'.$phpEx.'?search_id=unanswered'),
  383.     'U_SEARCH_SELF' => append_sid('search.'.$phpEx.'?search_id=egosearch'),
  384.     'U_SEARCH_NEW' => append_sid('search.'.$phpEx.'?search_id=newposts'),
  385.     'U_INDEX' => append_sid('index.'.$phpEx),
  386.     'U_REGISTER' => append_sid('profile.'.$phpEx.'?mode=register'),
  387.     'U_PROFILE' => append_sid('profile.'.$phpEx.'?mode=editprofile'),
  388.     'U_PRIVATEMSGS' => append_sid('privmsg.'.$phpEx.'?folder=inbox'),
  389.     'U_PRIVATEMSGS_POPUP' => append_sid('privmsg.'.$phpEx.'?mode=newpm'),
  390.     'U_SEARCH' => append_sid('search.'.$phpEx),
  391.     'U_MEMBERLIST' => append_sid('memberlist.'.$phpEx),
  392.     'U_MODCP' => append_sid('modcp.'.$phpEx),
  393.     'U_FAQ' => append_sid('faq.'.$phpEx),
  394.     'U_VIEWONLINE' => append_sid('viewonline.'.$phpEx),
  395.     'U_LOGIN_LOGOUT' => append_sid($u_login_logout),
  396.     'U_GROUP_CP' => append_sid('groupcp.'.$phpEx),
  397.  
  398.     'S_CONTENT_DIRECTION' => $lang['DIRECTION'],
  399.     'S_CONTENT_ENCODING' => $lang['ENCODING'],
  400.     'S_CONTENT_DIR_LEFT' => $lang['LEFT'],
  401.     'S_CONTENT_DIR_RIGHT' => $lang['RIGHT'],
  402.     'S_TIMEZONE' => sprintf($lang['All_times'], $l_timezone),
  403.     'S_LOGIN_ACTION' => append_sid('login.'.$phpEx),
  404.  
  405.     'T_HEAD_STYLESHEET' => $theme['head_stylesheet'],
  406.     'T_BODY_BACKGROUND' => $theme['body_background'],
  407.     'T_BODY_BGCOLOR' => '#'.$theme['body_bgcolor'],
  408.     'T_BODY_TEXT' => '#'.$theme['body_text'],
  409.     'T_BODY_LINK' => '#'.$theme['body_link'],
  410.     'T_BODY_VLINK' => '#'.$theme['body_vlink'],
  411.     'T_BODY_ALINK' => '#'.$theme['body_alink'],
  412.     'T_BODY_HLINK' => '#'.$theme['body_hlink'],
  413.     'T_TR_COLOR1' => '#'.$theme['tr_color1'],
  414.     'T_TR_COLOR2' => '#'.$theme['tr_color2'],
  415.     'T_TR_COLOR3' => '#'.$theme['tr_color3'],
  416.     'T_TR_CLASS1' => $theme['tr_class1'],
  417.     'T_TR_CLASS2' => $theme['tr_class2'],
  418.     'T_TR_CLASS3' => $theme['tr_class3'],
  419.     'T_TH_COLOR1' => '#'.$theme['th_color1'],
  420.     'T_TH_COLOR2' => '#'.$theme['th_color2'],
  421.     'T_TH_COLOR3' => '#'.$theme['th_color3'],
  422.     'T_TH_CLASS1' => $theme['th_class1'],
  423.     'T_TH_CLASS2' => $theme['th_class2'],
  424.     'T_TH_CLASS3' => $theme['th_class3'],
  425.     'T_TD_COLOR1' => '#'.$theme['td_color1'],
  426.     'T_TD_COLOR2' => '#'.$theme['td_color2'],
  427.     'T_TD_COLOR3' => '#'.$theme['td_color3'],
  428.     'T_TD_CLASS1' => $theme['td_class1'],
  429.     'T_TD_CLASS2' => $theme['td_class2'],
  430.     'T_TD_CLASS3' => $theme['td_class3'],
  431.     'T_FONTFACE1' => $theme['fontface1'],
  432.     'T_FONTFACE2' => $theme['fontface2'],
  433.     'T_FONTFACE3' => $theme['fontface3'],
  434.     'T_FONTSIZE1' => $theme['fontsize1'],
  435.     'T_FONTSIZE2' => $theme['fontsize2'],
  436.     'T_FONTSIZE3' => $theme['fontsize3'],
  437.     'T_FONTCOLOR1' => '#'.$theme['fontcolor1'],
  438.     'T_FONTCOLOR2' => '#'.$theme['fontcolor2'],
  439.     'T_FONTCOLOR3' => '#'.$theme['fontcolor3'],
  440.     'T_SPAN_CLASS1' => $theme['span_class1'],
  441.     'T_SPAN_CLASS2' => $theme['span_class2'],
  442.     'T_SPAN_CLASS3' => $theme['span_class3'],
  443.  
  444.     'NAV_LINKS' => $nav_links_html)
  445. );
  446.  
  447. //
  448. // Login box?
  449. //
  450. if ( !$userdata['session_logged_in'] )
  451. {
  452.     $template->assign_block_vars('switch_user_logged_out', array());
  453. }
  454. else
  455. {
  456.     $template->assign_block_vars('switch_user_logged_in', array());
  457.  
  458.     if ( !empty($userdata['user_popup_pm']) )
  459.     {
  460.         $template->assign_block_vars('switch_enable_pm_popup', array());
  461.     }
  462. }
  463.  
  464. // Add no-cache control for cookies if they are set
  465. //$c_no_cache = (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_sid']) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_data'])) ? 'no-cache="set-cookie", ' : '';
  466.  
  467. // Work around for "current" Apache 2 + PHP module which seems to not
  468. // cope with private cache control setting
  469. if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
  470. {
  471.     header ('Cache-Control: no-cache, pre-check=0, post-check=0');
  472. }
  473. else
  474. {
  475.     header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
  476. }
  477. header ('Expires: 0');
  478. header ('Pragma: no-cache');
  479.  
  480. $template->pparse('overall_header');
  481.  
  482. ?>