2001-04-19 13:18:57 +00:00
< ? php
/***************************************************************************
* functions . php
* -------------------
* begin : Saturday , Feb 13 , 2001
* copyright : ( C ) 2001 The phpBB Group
* email : support @ phpbb . com
*
* $Id $
*
***************************************************************************/
/***************************************************************************
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
***************************************************************************/
2003-01-22 20:52:09 +00:00
function set_config ( $config_name , $config_value , $is_dynamic = FALSE )
2003-01-11 22:56:49 +00:00
{
global $db , $cache , $config ;
2003-01-13 05:11:11 +00:00
2003-08-10 18:42:20 +00:00
$sql = 'UPDATE ' . CONFIG_TABLE . "
SET config_value = '" . $db->sql_escape($config_value) . "'
WHERE config_name = '$config_name' " ;
$db -> sql_query ( $sql );
2003-01-13 05:11:11 +00:00
2003-08-10 18:42:20 +00:00
if ( ! $db -> sql_affectedrows () && ! isset ( $config [ $config_name ]))
{
2003-01-13 05:11:11 +00:00
$sql = 'INSERT INTO ' . CONFIG_TABLE . " (config_name, config_value)
2003-01-30 20:02:09 +00:00
VALUES ( '$config_name' , '" . $db->sql_escape($config_value) . "' ) " ;
2003-01-13 05:11:11 +00:00
$db -> sql_query ( $sql );
}
2003-01-11 22:56:49 +00:00
$config [ $config_name ] = $config_value ;
2003-01-22 20:16:18 +00:00
if ( ! $is_dynamic )
{
2003-08-10 18:42:20 +00:00
$cache -> destroy ( 'config' );
2003-01-22 20:16:18 +00:00
}
2003-01-11 22:56:49 +00:00
}
2002-02-12 17:14:39 +00:00
function get_userdata ( $user )
2001-05-30 20:21:42 +00:00
{
global $db ;
2003-07-13 23:29:22 +00:00
$sql = ' SELECT *
FROM ' . USERS_TABLE . '
WHERE ' ;
2003-05-03 23:58:45 +00:00
$sql .= (( is_integer ( $user )) ? " user_id = $user " : " username = ' " . $db -> sql_escape ( $user ) . " ' " ) . " AND user_id <> " . ANONYMOUS ;
2002-07-14 14:35:12 +00:00
$result = $db -> sql_query ( $sql );
2001-05-30 20:21:42 +00:00
2002-11-18 18:56:27 +00:00
return ( $row = $db -> sql_fetchrow ( $result )) ? $row : false ;
2001-05-30 20:21:42 +00:00
}
2001-04-19 13:18:57 +00:00
2002-11-19 18:55:23 +00:00
// Create forum navigation links for given forum, create parent
// list if currently null, assign basic forum info to template
function generate_forum_nav ( & $forum_data )
{
2003-01-22 20:16:18 +00:00
global $db , $user , $template , $phpEx , $SID ;
2002-11-19 18:55:23 +00:00
// Get forum parents
2003-03-28 01:25:03 +00:00
$forum_parents = get_forum_parents ( $forum_data );
// Build navigation links
foreach ( $forum_parents as $parent_forum_id => $parent_name )
{
$template -> assign_block_vars ( 'navlinks' , array (
'FORUM_NAME' => $parent_name ,
2003-05-02 15:50:11 +00:00
'U_VIEW_FORUM' => " viewforum. $phpEx $SID &f= $parent_forum_id " )
2003-04-17 17:47:41 +00:00
);
2003-03-28 01:25:03 +00:00
}
2003-04-17 17:47:41 +00:00
2003-03-28 01:25:03 +00:00
$template -> assign_block_vars ( 'navlinks' , array (
'FORUM_NAME' => $forum_data [ 'forum_name' ],
2003-05-02 15:50:11 +00:00
'U_VIEW_FORUM' => " viewforum. $phpEx $SID &f= " . $forum_data [ 'forum_id' ])
2003-04-17 17:47:41 +00:00
);
2003-03-28 01:25:03 +00:00
$template -> assign_vars ( array (
'FORUM_ID' => $forum_data [ 'forum_id' ],
'FORUM_NAME' => $forum_data [ 'forum_name' ],
2003-05-04 13:41:37 +00:00
'FORUM_DESC' => strip_tags ( $forum_data [ 'forum_desc' ]))
2003-04-17 17:47:41 +00:00
);
2003-03-28 01:25:03 +00:00
return ;
}
// Returns forum parents as an array. Get them from forum_data if available, or update the database otherwise
function get_forum_parents ( $forum_data )
{
2003-03-29 18:42:24 +00:00
global $db ;
2002-11-19 18:55:23 +00:00
$forum_parents = array ();
if ( $forum_data [ 'parent_id' ] > 0 )
{
2003-03-28 01:25:03 +00:00
if ( $forum_data [ 'forum_parents' ] == '' )
2002-11-19 18:55:23 +00:00
{
$sql = ' SELECT forum_id , forum_name
2003-02-25 18:19:34 +00:00
FROM ' . FORUMS_TABLE . '
WHERE left_id < ' . $forum_data[' left_id '] . '
AND right_id > ' . $forum_data[' right_id '] . '
ORDER BY left_id ASC ' ;
2002-11-19 18:55:23 +00:00
$result = $db -> sql_query ( $sql );
2003-05-03 23:58:45 +00:00
2002-11-19 18:55:23 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
$forum_parents [ $row [ 'forum_id' ]] = $row [ 'forum_name' ];
}
2003-04-21 16:35:32 +00:00
$db -> sql_freeresult ( $result );
2002-11-19 18:55:23 +00:00
$sql = 'UPDATE ' . FORUMS_TABLE . "
2003-02-25 18:19:34 +00:00
SET forum_parents = '" . $db->sql_escape(serialize($forum_parents)) . "'
WHERE parent_id = " . $forum_data['parent_id'] ;
2002-11-19 18:55:23 +00:00
$db -> sql_query ( $sql );
}
else
{
$forum_parents = unserialize ( $forum_data [ 'forum_parents' ]);
}
}
2003-03-28 01:25:03 +00:00
return $forum_parents ;
2002-11-19 18:55:23 +00:00
}
2002-07-14 14:35:12 +00:00
// Obtain list of moderators of each forum
function get_moderators ( & $forum_moderators , $forum_id = false )
2001-04-19 13:18:57 +00:00
{
2003-04-24 18:21:29 +00:00
global $config , $template , $db , $phpEx , $SID ;
2003-04-15 23:12:28 +00:00
// Have we disabled the display of moderators? If so, then return
2003-04-21 16:35:32 +00:00
// from whence we came ...
2003-04-15 23:12:28 +00:00
if ( empty ( $config [ 'load_moderators' ]))
{
return ;
}
2002-07-14 14:35:12 +00:00
2002-11-18 18:56:27 +00:00
if ( ! empty ( $forum_id ) && is_array ( $forum_id ))
2002-11-07 03:20:33 +00:00
{
2002-11-18 18:56:27 +00:00
$forum_sql = 'AND forum_id IN (' . implode ( ', ' , $forum_id ) . ')' ;
2002-11-07 03:20:33 +00:00
}
else
{
2002-11-18 18:56:27 +00:00
$forum_sql = ( $forum_id ) ? 'AND forum_id = ' . $forum_id : '' ;
2002-11-07 03:20:33 +00:00
}
2002-11-18 18:56:27 +00:00
$sql = ' SELECT *
FROM ' . MODERATOR_TABLE . "
WHERE display_on_index = 1
2002-10-28 00:25:38 +00:00
$forum_sql " ;
$result = $db -> sql_query ( $sql );
2002-11-18 18:56:27 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2002-10-28 00:25:38 +00:00
{
2003-05-08 03:14:51 +00:00
$forum_moderators [ $row [ 'forum_id' ]][] = ( ! empty ( $row [ 'user_id' ])) ? '<a href="memberlist.' . $phpEx . $SID . '&mode=viewprofile&u=' . $row [ 'user_id' ] . '">' . $row [ 'username' ] . '</a>' : '<a href="groupcp.' . $phpEx . $SID . '&g=' . $row [ 'group_id' ] . '">' . $row [ 'groupname' ] . '</a>' ;
2002-11-18 18:56:27 +00:00
}
$db -> sql_freeresult ( $result );
2002-07-14 14:35:12 +00:00
return ;
}
// User authorisation levels output
2003-02-25 18:19:34 +00:00
function gen_forum_rules ( $mode , & $forum_id )
2002-07-14 14:35:12 +00:00
{
2003-02-25 18:19:34 +00:00
global $SID , $template , $auth , $user ;
2002-07-14 14:35:12 +00:00
2003-04-01 21:11:07 +00:00
$rules = array ( 'post' , 'reply' , 'edit' , 'delete' , 'attach' , 'download' );
2003-02-25 18:19:34 +00:00
foreach ( $rules as $rule )
{
$template -> assign_block_vars ( 'rules' , array (
2003-04-17 17:00:33 +00:00
'RULE' => ( $auth -> acl_get ( 'f_' . $rule , intval ( $forum_id ))) ? $user -> lang [ 'RULES_' . strtoupper ( $rule ) . '_CAN' ] : $user -> lang [ 'RULES_' . strtoupper ( $rule ) . '_CANNOT' ])
2003-02-25 18:19:34 +00:00
);
}
return ;
}
2003-05-02 15:50:11 +00:00
function gen_sort_selects ( & $limit_days , & $sort_by_text , & $sort_days , & $sort_key , & $sort_dir , & $s_limit_days , & $s_sort_key , & $s_sort_dir , & $u_sort_param )
2003-02-25 18:19:34 +00:00
{
global $user ;
$sort_dir_text = array ( 'a' => $user -> lang [ 'ASCENDING' ], 'd' => $user -> lang [ 'DESCENDING' ]);
2003-02-27 16:14:46 +00:00
$s_limit_days = '<select name="st">' ;
2003-02-25 18:19:34 +00:00
foreach ( $limit_days as $day => $text )
{
$selected = ( $sort_days == $day ) ? ' selected="selected"' : '' ;
$s_limit_days .= '<option value="' . $day . '"' . $selected . '>' . $text . '</option>' ;
}
$s_limit_days .= '</select>' ;
2003-02-27 16:14:46 +00:00
$s_sort_key = '<select name="sk">' ;
2003-02-25 18:19:34 +00:00
foreach ( $sort_by_text as $key => $text )
{
$selected = ( $sort_key == $key ) ? ' selected="selected"' : '' ;
$s_sort_key .= '<option value="' . $key . '"' . $selected . '>' . $text . '</option>' ;
}
$s_sort_key .= '</select>' ;
2003-02-27 16:14:46 +00:00
$s_sort_dir = '<select name="sd">' ;
2003-02-25 18:19:34 +00:00
foreach ( $sort_dir_text as $key => $value )
{
$selected = ( $sort_dir == $key ) ? ' selected="selected"' : '' ;
$s_sort_dir .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>' ;
}
$s_sort_dir .= '</select>' ;
2001-04-19 13:18:57 +00:00
2003-05-02 15:50:11 +00:00
$u_sort_param = " st= $sort_days &sk= $sort_key &sd= $sort_dir " ;
2002-07-14 14:35:12 +00:00
return ;
}
2003-04-21 16:35:32 +00:00
function make_jumpbox ( $action , $forum_id = false , $select_all = false )
2002-07-14 14:35:12 +00:00
{
2003-05-04 17:15:23 +00:00
global $auth , $template , $user , $db , $phpEx , $SID ;
2002-07-14 14:35:12 +00:00
2003-04-21 16:35:32 +00:00
$boxstring = '' ;
2003-05-04 15:09:16 +00:00
$sql = ' SELECT forum_id , forum_name , parent_id , forum_type , left_id , right_id
2002-10-10 00:35:35 +00:00
FROM ' . FORUMS_TABLE . '
ORDER BY left_id ASC ' ;
2003-04-21 16:35:32 +00:00
$result = $db -> sql_query ( $sql , 600 );
2002-02-12 17:14:39 +00:00
2003-05-04 15:09:16 +00:00
$right = $cat_right = $padding_inc = 0 ;
2002-11-26 00:50:16 +00:00
$padding = $forum_list = $holding = '' ;
2003-05-04 15:09:16 +00:00
$padding_store = array ( '0' => '' );
2002-11-18 18:56:27 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2002-07-14 14:35:12 +00:00
{
2003-05-02 15:50:11 +00:00
if ( $row [ 'forum_type' ] == FORUM_CAT && ( $row [ 'left_id' ] + 1 == $row [ 'right_id' ]))
2002-11-19 23:12:11 +00:00
{
// Non-postable forum with no subforums, don't display
continue ;
}
2003-04-17 17:00:33 +00:00
if ( ! $auth -> acl_get ( 'f_list' , $row [ 'forum_id' ]))
2002-11-19 23:12:11 +00:00
{
// if the user does not have permissions to list this forum skip
continue ;
}
if ( $row [ 'left_id' ] < $right )
2002-10-10 00:35:35 +00:00
{
2003-05-04 15:09:16 +00:00
$padding .= ' ' ;
$padding_store [ $row [ 'parent_id' ]] = $padding ;
2002-10-10 00:35:35 +00:00
}
2002-11-18 18:56:27 +00:00
else if ( $row [ 'left_id' ] > $right + 1 )
2002-10-10 00:35:35 +00:00
{
2003-05-04 15:09:16 +00:00
$padding = $padding_store [ $row [ 'parent_id' ]];
2002-10-10 00:35:35 +00:00
}
$right = $row [ 'right_id' ];
2002-11-19 23:12:11 +00:00
$selected = ( $row [ 'forum_id' ] == $forum_id ) ? ' selected="selected"' : '' ;
2001-12-05 00:50:12 +00:00
2002-11-19 23:12:11 +00:00
if ( $row [ 'left_id' ] > $cat_right )
{
$holding = '' ;
}
2002-10-11 02:55:34 +00:00
2002-11-26 00:50:16 +00:00
if ( $row [ 'right_id' ] - $row [ 'left_id' ] > 1 )
2002-11-19 23:12:11 +00:00
{
$cat_right = max ( $cat_right , $row [ 'right_id' ]);
2001-10-14 15:48:38 +00:00
2003-05-04 15:09:16 +00:00
$holding .= '<option value="' . $row [ 'forum_id' ] . '"' . $selected . '>' . $padding . $row [ 'forum_name' ] . '</option>' ;
2002-11-19 23:12:11 +00:00
}
else
{
2003-05-04 15:09:16 +00:00
$boxstring .= $holding . '<option value="' . $row [ 'forum_id' ] . '"' . $selected . '>' . $padding . $row [ 'forum_name' ] . '</option>' ;
2002-11-19 23:12:11 +00:00
$holding = '' ;
2002-10-08 20:06:55 +00:00
}
}
$db -> sql_freeresult ( $result );
2003-05-04 15:09:16 +00:00
unset ( $padding_store );
2002-10-10 00:35:35 +00:00
2003-04-21 16:35:32 +00:00
if ( $boxstring != '' )
2002-10-10 00:35:35 +00:00
{
2003-04-21 16:35:32 +00:00
$boxstring = (( $select_all ) ? '<option value="0">' . $user -> lang [ 'ALL_FORUMS' ] : '<option value="-1">' . $user -> lang [ 'SELECT_FORUM' ]) . '</option><option value="-1">-----------------</option>' . $boxstring ;
2002-10-10 00:35:35 +00:00
}
2002-11-27 15:15:12 +00:00
2002-03-31 00:06:34 +00:00
$template -> assign_vars ( array (
2003-04-21 16:35:32 +00:00
'S_JUMPBOX_OPTIONS' => $boxstring ,
2002-07-14 14:35:12 +00:00
'S_JUMPBOX_ACTION' => $action )
2002-03-31 00:06:34 +00:00
);
return ;
2001-04-19 13:18:57 +00:00
}
2002-07-14 14:35:12 +00:00
// Pick a language, any language ...
2003-01-31 15:39:07 +00:00
function language_select ( $default = '' )
2001-04-19 13:18:57 +00:00
{
2003-05-09 14:11:55 +00:00
global $db ;
2003-05-08 01:14:14 +00:00
2003-05-09 14:11:55 +00:00
$sql = ' SELECT lang_iso , lang_local_name
FROM ' . LANG_TABLE . '
ORDER BY lang_english_name ' ;
2003-05-03 23:58:45 +00:00
$result = $db -> sql_query ( $sql );
2002-07-14 14:35:12 +00:00
2003-05-03 23:58:45 +00:00
$lang_options = '' ;
while ( $row = $db -> sql_fetchrow ( $result ))
{
$selected = ( $row [ 'lang_iso' ] == $default ) ? ' selected="selected"' : '' ;
$lang_options .= '<option value="' . $row [ 'lang_iso' ] . '"' . $selected . '>' . $row [ 'lang_local_name' ] . '</option>' ;
}
$db -> sql_freeresult ( $result );
return $lang_options ;
2002-07-14 14:35:12 +00:00
}
2001-12-14 02:41:33 +00:00
2002-08-17 22:08:34 +00:00
// Pick a template/theme combo,
2003-07-13 23:29:22 +00:00
function style_select ( $default = '' , $all = false )
2002-07-14 14:35:12 +00:00
{
global $db ;
2001-12-14 02:41:33 +00:00
2003-07-13 23:29:22 +00:00
$sql_where = ( ! $all ) ? 'WHERE style_active = 1 ' : '' ;
2003-05-09 14:11:55 +00:00
$sql = ' SELECT style_id , style_name
2003-07-13 23:29:22 +00:00
FROM ' . STYLES_TABLE . "
$sql_where
ORDER BY style_name " ;
2002-07-14 14:35:12 +00:00
$result = $db -> sql_query ( $sql );
2001-12-14 02:41:33 +00:00
2003-05-03 23:58:45 +00:00
$style_options = '' ;
2002-11-18 18:56:27 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2001-12-14 02:41:33 +00:00
{
2003-01-31 15:39:07 +00:00
$selected = ( $row [ 'style_id' ] == $default ) ? ' selected="selected"' : '' ;
2003-05-03 23:58:45 +00:00
$style_options .= '<option value="' . $row [ 'style_id' ] . '"' . $selected . '>' . $row [ 'style_name' ] . '</option>' ;
2002-07-14 14:35:12 +00:00
}
2003-05-03 23:58:45 +00:00
$db -> sql_freeresult ( $result );
2002-02-08 01:33:36 +00:00
2003-05-03 23:58:45 +00:00
return $style_options ;
2001-04-19 13:18:57 +00:00
}
2001-05-01 19:10:09 +00:00
2002-07-14 14:35:12 +00:00
// Pick a timezone
2003-01-31 15:39:07 +00:00
function tz_select ( $default = '' )
2001-04-19 13:18:57 +00:00
{
2002-10-20 19:19:07 +00:00
global $sys_timezone , $user ;
2001-05-03 22:10:23 +00:00
2002-11-18 18:56:27 +00:00
foreach ( $user -> lang [ 'tz' ] as $offset => $zone )
2001-05-01 19:10:09 +00:00
{
2003-01-31 15:39:07 +00:00
if ( is_numeric ( $offset ))
{
2003-05-10 17:19:27 +00:00
$selected = ( $offset == $default ) ? ' selected="selected"' : '' ;
2003-01-31 15:39:07 +00:00
$tz_select .= '<option value="' . $offset . '"' . $selected . '>' . $zone . '</option>' ;
}
2001-05-01 19:10:09 +00:00
}
2001-09-25 18:18:47 +00:00
2002-07-14 14:35:12 +00:00
return $tz_select ;
}
2001-09-25 18:18:47 +00:00
2002-07-14 14:35:12 +00:00
// Topic and forum watching common code
2002-11-05 04:50:55 +00:00
function watch_topic_forum ( $mode , & $s_watching , & $s_watching_img , $user_id , $match_id , $notify_status = 'unset' )
2002-07-14 14:35:12 +00:00
{
2002-10-20 19:19:07 +00:00
global $template , $db , $user , $phpEx , $SID , $start ;
2001-09-25 18:18:47 +00:00
2002-11-18 18:56:27 +00:00
$table_sql = ( $mode == 'forum' ) ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE ;
$where_sql = ( $mode == 'forum' ) ? 'forum_id' : 'topic_id' ;
$u_url = ( $mode == 'forum' ) ? 'f' : 't' ;
2001-09-25 18:18:47 +00:00
2002-08-17 22:08:34 +00:00
// Is user watching this thread?
2002-11-18 18:56:27 +00:00
if ( $user_id )
2001-09-25 18:18:47 +00:00
{
2002-07-14 14:35:12 +00:00
$can_watch = TRUE ;
2001-09-25 18:18:47 +00:00
2002-11-05 04:50:55 +00:00
if ( $notify_status == 'unset' )
{
$sql = " SELECT notify_status
FROM $table_sql
WHERE $where_sql = $match_id
AND user_id = $user_id " ;
$result = $db -> sql_query ( $sql );
2003-04-21 16:35:32 +00:00
$notify_status = ( $row = $db -> sql_fetchrow ( $result )) ? $row [ 'notify_status' ] : NULL ;
$db -> sql_freeresult ( $result );
2002-11-05 04:50:55 +00:00
}
2002-07-14 14:35:12 +00:00
2002-11-05 04:50:55 +00:00
if ( ! is_null ( $notify_status ))
2001-09-25 18:18:47 +00:00
{
2002-11-18 18:56:27 +00:00
if ( isset ( $_GET [ 'unwatch' ]))
2002-07-14 14:35:12 +00:00
{
2002-11-18 18:56:27 +00:00
if ( $_GET [ 'unwatch' ] == $mode )
2002-07-14 14:35:12 +00:00
{
$is_watching = 0 ;
$sql = " DELETE FROM " . $table_sql . "
2002-08-17 22:08:34 +00:00
WHERE $where_sql = $match_id
2002-07-14 14:35:12 +00:00
AND user_id = $user_id " ;
$db -> sql_query ( $sql );
}
2002-08-17 22:08:34 +00:00
2003-05-02 15:50:11 +00:00
meta_refresh ( 3 , " view $mode . $phpEx $SID & $u_url = $match_id &start= $start " );
2003-05-03 23:58:45 +00:00
2003-03-17 00:53:38 +00:00
$message = $user -> lang [ 'NOT_WATCHING_' . strtoupper ( $mode )] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_' . strtoupper ( $mode )], '<a href="' . " view $mode . $phpEx $SID & " . $u_url . " = $match_id &start= $start " . '">' , '</a>' );
2002-10-30 00:57:27 +00:00
trigger_error ( $message );
2002-07-14 14:35:12 +00:00
}
else
{
$is_watching = TRUE ;
2002-11-05 04:50:55 +00:00
if ( $notify_status )
2002-07-14 14:35:12 +00:00
{
$sql = " UPDATE " . $table_sql . "
SET notify_status = 0
WHERE $where_sql = $match_id
AND user_id = $user_id " ;
$db -> sql_query ( $sql );
}
}
2001-09-25 18:18:47 +00:00
}
2002-07-14 14:35:12 +00:00
else
{
2002-11-18 18:56:27 +00:00
if ( isset ( $_GET [ 'watch' ]))
2002-07-14 14:35:12 +00:00
{
2002-11-18 18:56:27 +00:00
if ( $_GET [ 'watch' ] == $mode )
2002-07-14 14:35:12 +00:00
{
$is_watching = TRUE ;
2001-09-25 18:18:47 +00:00
2002-07-14 14:35:12 +00:00
$sql = " INSERT INTO " . $table_sql . " (user_id, $where_sql , notify_status)
VALUES ( $user_id , $match_id , 0 ) " ;
$db -> sql_query ( $sql );
}
2003-05-02 15:50:11 +00:00
meta_refresh ( 3 , " view $mode . $phpEx $SID & $u_url = $match_id &start= $start " );
2003-05-03 23:58:45 +00:00
2003-03-17 00:53:38 +00:00
$message = $user -> lang [ 'ARE_WATCHING_' . strtoupper ( $mode )] . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_' . strtoupper ( $mode )], '<a href="' . " view $mode . $phpEx $SID & " . $u_url . " = $match_id &start= $start " . '">' , '</a>' );
2002-10-30 00:57:27 +00:00
trigger_error ( $message );
2002-07-14 14:35:12 +00:00
}
else
{
$is_watching = 0 ;
}
}
}
else
{
2002-11-18 18:56:27 +00:00
if ( isset ( $_GET [ 'unwatch' ]))
2002-02-04 18:31:22 +00:00
{
2002-11-18 18:56:27 +00:00
if ( $_GET [ 'unwatch' ] == $mode )
2002-03-18 13:35:23 +00:00
{
2003-03-17 00:53:38 +00:00
login_box ( preg_replace ( '#.*?([a-z]+?\.' . $phpEx . '.*?)$#i' , '\1' , htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ])));
2002-03-18 13:35:23 +00:00
}
2002-02-04 18:31:22 +00:00
}
2002-07-14 14:35:12 +00:00
else
{
$can_watch = 0 ;
$is_watching = 0 ;
}
2001-09-25 18:18:47 +00:00
}
2002-11-18 18:56:27 +00:00
if ( $can_watch )
2002-07-14 14:35:12 +00:00
{
2003-05-02 15:50:11 +00:00
$s_watching = ( $is_watching ) ? " <a href= \" view $mode . $phpEx $SID & $u_url = $match_id &unwatch= $mode &start= $start\ " > " . $user->lang ['STOP_WATCHING_' . strtoupper( $mode )] . '</a>' : " < a href = \ " view $mode . $phpEx $SID & $u_url = $match_id &watch= $mode &start= $start\ " > " . $user->lang ['START_WATCHING_' . strtoupper( $mode )] . '</a>';
2002-07-14 14:35:12 +00:00
}
return ;
2001-04-19 13:18:57 +00:00
}
2003-04-22 17:26:29 +00:00
// Marks a topic or form as read
2003-05-02 15:50:11 +00:00
function markread ( $mode , $forum_id = 0 , $topic_id = 0 , $marktime = false )
2002-11-26 00:15:45 +00:00
{
2003-04-21 16:35:32 +00:00
global $config , $db , $user ;
2003-01-07 14:37:19 +00:00
if ( $user -> data [ 'user_id' ] == ANONYMOUS )
2002-11-26 00:15:45 +00:00
{
return ;
}
2003-04-26 01:17:40 +00:00
// Default tracking type
$type = TRACK_NORMAL ;
2003-05-02 15:50:11 +00:00
$current_time = ( $marktime ) ? $marktime : time ();
2003-04-26 01:17:40 +00:00
2003-01-07 14:37:19 +00:00
switch ( $mode )
2002-11-26 00:15:45 +00:00
{
case 'mark' :
2003-04-26 01:17:40 +00:00
if ( $config [ 'load_db_lastread' ])
2002-11-26 00:15:45 +00:00
{
2003-04-26 01:17:40 +00:00
// Mark one forum as read.
// Do this by inserting a record with -$forum_id in the 'forum_id' field.
2002-11-26 00:15:45 +00:00
// User has marked this topic as read before: Update the record
2003-04-26 01:17:40 +00:00
$db -> sql_return_on_error = true ;
$sql = 'UPDATE ' . FORUMS_TRACK_TABLE . "
SET mark_time = $current_time
2003-01-07 14:37:19 +00:00
WHERE user_id = " . $user->data ['user_id'] . "
2003-05-23 23:46:55 +00:00
AND forum_id = $forum_id
AND mark_time < $current_time " ;
2003-04-26 01:17:40 +00:00
if ( ! $db -> sql_query ( $sql ) || ! $db -> sql_affectedrows ())
{
// User is marking this forum for the first time.
// Insert dummy topic_id to satisfy PRIMARY KEY (user_id, topic_id)
// dummy id = -forum_id
$sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . ' ( user_id , forum_id , mark_time )
VALUES ( ' . $user->data[' user_id ' ] . " , $forum_id , $current_time ) " ;
$db -> sql_query ( $sql );
}
$db -> sql_return_on_error = false ;
2002-11-26 00:15:45 +00:00
}
else
{
2003-06-19 16:19:59 +00:00
$tracking = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
unset ( $tracking [ $forum_id ]);
$tracking [ $forum_id ][ 0 ] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
2003-04-26 01:17:40 +00:00
2003-06-19 16:19:59 +00:00
setcookie ( $config [ 'cookie_name' ] . '_track' , serialize ( $tracking ), time () + 31536000 , $config [ 'cookie_path' ], $config [ 'cookie_domain' ], $config [ 'cookie_secure' ]);
2003-05-23 23:46:55 +00:00
unset ( $tracking );
2002-11-26 00:15:45 +00:00
}
break ;
2003-01-07 14:37:19 +00:00
2002-11-26 00:15:45 +00:00
case 'markall' :
2003-04-26 01:17:40 +00:00
// Mark all forums as read
if ( $config [ 'load_db_lastread' ])
{
$sql = 'UPDATE ' . FORUMS_TRACK_TABLE . '
SET mark_time = ' . $current_time . '
2003-05-23 23:46:55 +00:00
WHERE user_id = ' . $user->data[' user_id ' ] . "
AND mark_time < $current_time " ;
2003-04-26 01:17:40 +00:00
$db -> sql_query ( $sql );
}
else
{
2003-05-23 23:46:55 +00:00
$tracking = array ();
2003-04-26 01:17:40 +00:00
}
2002-11-26 00:15:45 +00:00
// Select all forum_id's that are not yet in the lastread table
2003-04-26 01:17:40 +00:00
switch ( SQL_LAYER )
{
case 'oracle' :
break ;
default :
$sql = ( $config [ 'load_db_lastread' ]) ? 'SELECT f.forum_id FROM (' . FORUMS_TABLE . ' f LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user -> data [ 'user_id' ] . ' AND ft.forum_id = f.forum_id)) WHERE ft.forum_id IS NULL' : 'SELECT forum_id FROM ' . FORUMS_TABLE ;
}
2003-01-07 14:37:19 +00:00
$result = $db -> sql_query ( $sql );
2003-04-26 01:17:40 +00:00
$db -> sql_return_on_error = true ;
2003-01-07 14:37:19 +00:00
if ( $row = $db -> sql_fetchrow ( $result ))
2002-11-26 00:15:45 +00:00
{
2003-04-26 01:17:40 +00:00
do
2002-11-26 00:15:45 +00:00
{
2003-04-26 01:17:40 +00:00
if ( $config [ 'load_db_lastread' ])
{
$sql = '' ;
// Some forum_id's are missing. We are not taking into account
// the auth data, even forums the user can't see are marked as read.
switch ( SQL_LAYER )
{
case 'mysql' :
case 'mysql4' :
$sql .= (( $sql != '' ) ? ', ' : '' ) . '(' . $user -> data [ 'user_id' ] . ', ' . $row [ 'forum_id' ] . " , $current_time ) " ;
2003-07-04 17:19:00 +00:00
$sql = 'VALUES ' . $sql ;
2003-04-26 01:17:40 +00:00
break ;
case 'mssql' :
2003-07-04 17:19:00 +00:00
case 'sqlite' :
2003-04-26 01:17:40 +00:00
$sql = (( $sql != '' ) ? ' UNION ALL ' : '' ) . ' SELECT ' . $user -> data [ 'user_id' ] . ', ' . $row [ 'forum_id' ] . " , $current_time " ;
break ;
default :
$sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . ' ( user_id , forum_id , mark_time )
VALUES ( ' . $user->data[' user_id '] . ' , ' . $row[' forum_id ' ] . " , $current_time ) " ;
$db -> sql_query ( $sql );
$sql = '' ;
}
if ( $sql != '' )
{
2003-07-04 17:19:00 +00:00
$sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . " (user_id, forum_id, mark_time) $sql " ;
2003-04-26 01:17:40 +00:00
$db -> sql_query ( $sql );
}
}
2003-06-19 16:19:59 +00:00
else
2003-04-26 01:17:40 +00:00
{
2003-06-19 16:19:59 +00:00
$tracking [ $row [ 'forum_id' ]][ 0 ] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
2003-04-26 01:17:40 +00:00
}
2002-11-26 00:15:45 +00:00
}
2003-01-07 14:37:19 +00:00
while ( $row = $db -> sql_fetchrow ( $result ));
2003-04-26 01:17:40 +00:00
$db -> sql_freeresult ( $result );
2003-01-07 14:37:19 +00:00
2003-04-26 01:17:40 +00:00
$db -> sql_return_on_error = false ;
2003-01-07 14:37:19 +00:00
2003-04-26 01:17:40 +00:00
if ( ! $config [ 'load_db_lastread' ])
{
2003-06-19 16:19:59 +00:00
setcookie ( $config [ 'cookie_name' ] . '_track' , serialize ( $tracking ), time () + 31536000 , $config [ 'cookie_path' ], $config [ 'cookie_domain' ], $config [ 'cookie_secure' ]);
2003-05-23 23:46:55 +00:00
unset ( $tracking );
2003-04-26 01:17:40 +00:00
}
2002-11-26 00:15:45 +00:00
}
break ;
2003-01-07 14:37:19 +00:00
2002-11-26 00:15:45 +00:00
case 'post' :
// Mark a topic as read and mark it as a topic where the user has made a post.
2003-04-26 01:17:40 +00:00
$type = TRACK_POSTED ;
2003-01-07 14:37:19 +00:00
2002-11-26 00:15:45 +00:00
case 'topic' :
2003-04-26 01:17:40 +00:00
// Mark a topic as read
if ( $config [ 'load_db_lastread' ] || ( $config [ 'load_db_track' ] && $type == TRACK_POSTED ))
2002-11-26 00:15:45 +00:00
{
2003-04-26 01:17:40 +00:00
$sql = 'UPDATE ' . TOPICS_TRACK_TABLE . "
2003-05-23 23:46:55 +00:00
SET mark_type = $type , mark_time = $current_time
2003-04-26 01:17:40 +00:00
WHERE topic_id = $topic_id
2003-05-23 23:46:55 +00:00
AND user_id = " . $user->data ['user_id'] . "
AND mark_time < $current_time " ;
2003-04-26 01:17:40 +00:00
if ( ! $db -> sql_query ( $sql ) || ! $db -> sql_affectedrows ())
2002-11-26 00:15:45 +00:00
{
2003-04-26 01:17:40 +00:00
$sql = 'INSERT INTO ' . TOPICS_TRACK_TABLE . ' ( user_id , topic_id , mark_type , mark_time )
2003-05-23 23:46:55 +00:00
VALUES ( ' . $user->data[' user_id ' ] . " , $topic_id , $type , $current_time ) " ;
2003-04-26 01:17:40 +00:00
$db -> sql_query ( $sql );
2002-11-26 00:15:45 +00:00
}
2003-04-26 01:17:40 +00:00
}
2003-01-07 14:37:19 +00:00
2003-04-26 01:17:40 +00:00
if ( ! $config [ 'load_db_lastread' ])
{
2003-06-19 16:19:59 +00:00
$tracking = array ();
if ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]))
2003-05-23 23:46:55 +00:00
{
2003-06-19 16:19:59 +00:00
$tracking = unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]));
// If the cookie grows larger than 3000 characters we will remove
// the smallest value
if ( strlen ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]) > 3000 )
{
foreach ( $tracking as $f => $t_ary )
{
if ( ! isset ( $m_value ) || min ( $t_ary ) < $m_value )
{
$m_value = min ( $t_ary );
$m_tkey = array_search ( $m_value , $t_ary );
$m_fkey = $f ;
}
}
unset ( $tracking [ $m_fkey ][ $m_tkey ]);
}
2003-05-23 23:46:55 +00:00
}
2003-04-26 01:17:40 +00:00
2003-06-19 16:19:59 +00:00
if ( base_convert ( $tracking [ $forum_id ][ 0 ], 36 , 10 ) < $current_time )
{
$tracking [ $forum_id ][ base_convert ( $topic_id , 10 , 36 )] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
setcookie ( $config [ 'cookie_name' ] . '_track' , serialize ( $tracking ), time () + 31536000 , $config [ 'cookie_path' ], $config [ 'cookie_domain' ], $config [ 'cookie_secure' ]);
}
2003-04-26 01:17:40 +00:00
unset ( $tracking );
2002-11-26 00:15:45 +00:00
}
break ;
}
}
2003-04-26 01:17:40 +00:00
2002-10-20 19:19:07 +00:00
// Pagination routine, generates page number sequence
2001-05-07 23:04:16 +00:00
function generate_pagination ( $base_url , $num_items , $per_page , $start_item , $add_prevnext_text = TRUE )
{
2002-10-20 19:19:07 +00:00
global $user ;
2001-05-27 03:11:27 +00:00
2001-05-07 23:04:16 +00:00
$total_pages = ceil ( $num_items / $per_page );
2001-10-25 23:21:12 +00:00
2002-11-18 18:56:27 +00:00
if ( $total_pages == 1 || ! $num_items )
2001-05-07 23:04:16 +00:00
{
2002-04-02 14:04:18 +00:00
return '' ;
2001-05-07 23:04:16 +00:00
}
2001-10-25 23:21:12 +00:00
$on_page = floor ( $start_item / $per_page ) + 1 ;
2001-05-07 23:04:16 +00:00
2003-01-08 22:27:16 +00:00
$page_string = ( $on_page == 1 ) ? '<b>1</b>' : '<a href="' . $base_url . " &start= " . (( $on_page - 2 ) * $per_page ) . '">' . $user -> lang [ 'PREVIOUS' ] . '</a> <a href="' . $base_url . '">1</a>' ;
2002-10-04 13:09:10 +00:00
2002-11-18 18:56:27 +00:00
if ( $total_pages > 5 )
2001-05-07 23:04:16 +00:00
{
2002-10-04 13:09:10 +00:00
$start_cnt = min ( max ( 1 , $on_page - 4 ), $total_pages - 5 );
$end_cnt = max ( min ( $total_pages , $on_page + 4 ), 6 );
2002-11-18 18:56:27 +00:00
$page_string .= ( $start_cnt > 1 ) ? ' ... ' : ', ' ;
2001-10-25 23:21:12 +00:00
2002-10-04 13:09:10 +00:00
for ( $i = $start_cnt + 1 ; $i < $end_cnt ; $i ++ )
2001-05-07 23:04:16 +00:00
{
2002-11-18 18:56:27 +00:00
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . $base_url . " &start= " . (( $i - 1 ) * $per_page ) . '">' . $i . '</a>' ;
if ( $i < $end_cnt - 1 )
2001-10-25 23:21:12 +00:00
{
2002-10-04 13:09:10 +00:00
$page_string .= ', ' ;
2001-10-25 23:21:12 +00:00
}
2001-05-07 23:04:16 +00:00
}
2002-11-18 18:56:27 +00:00
$page_string .= ( $end_cnt < $total_pages ) ? ' ... ' : ', ' ;
2001-10-25 23:21:12 +00:00
}
else
{
2002-10-04 13:09:10 +00:00
$page_string .= ', ' ;
for ( $i = 2 ; $i < $total_pages ; $i ++ )
2001-10-25 23:21:12 +00:00
{
2002-11-18 18:56:27 +00:00
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . $base_url . " &start= " . (( $i - 1 ) * $per_page ) . '">' . $i . '</a>' ;
if ( $i < $total_pages )
2001-10-25 23:21:12 +00:00
{
2002-02-08 01:33:36 +00:00
$page_string .= ', ' ;
2001-10-25 23:21:12 +00:00
}
}
2001-05-07 23:04:16 +00:00
}
2001-05-27 03:11:27 +00:00
2003-01-08 22:27:16 +00:00
$page_string .= ( $on_page == $total_pages ) ? '<b>' . $total_pages . '</b>' : '<a href="' . $base_url . '&start=' . (( $total_pages - 1 ) * $per_page ) . '">' . $total_pages . '</a> <a href="' . $base_url . " &start= " . ( $on_page * $per_page ) . '">' . $user -> lang [ 'NEXT' ] . '</a>' ;
2001-05-07 23:04:16 +00:00
2003-01-08 22:27:16 +00:00
$page_string = $user -> lang [ 'GOTO_PAGE' ] . ' ' . $page_string ;
2001-10-25 23:21:12 +00:00
2001-05-07 23:04:16 +00:00
return $page_string ;
}
2002-08-02 16:39:02 +00:00
function on_page ( $num_items , $per_page , $start )
{
2002-10-20 19:19:07 +00:00
global $user ;
2002-08-02 16:39:02 +00:00
2003-01-08 22:27:16 +00:00
return sprintf ( $user -> lang [ 'PAGE_OF' ], floor ( $start / $per_page ) + 1 , max ( ceil ( $num_items / $per_page ), 1 ));
2002-08-02 16:39:02 +00:00
}
2001-09-09 23:22:29 +00:00
// Obtain list of naughty words and build preg style replacement arrays for use by the
// calling script, note that the vars are passed as references this just makes it easier
// to return both sets of arrays
2003-01-21 15:58:32 +00:00
function obtain_word_list ( & $censors )
2001-09-02 22:08:01 +00:00
{
2003-05-20 12:16:25 +00:00
global $db , $cache , $user ;
if ( ! $user -> data [ 'user_viewcensors' ] && ! $user -> data [ 'coppa' ] && $config [ 'allow_nocensors' ])
{
return ;
}
2003-01-21 15:58:32 +00:00
2003-01-11 22:56:49 +00:00
if ( $cache -> exists ( 'word_censors' ))
{
2003-05-20 12:16:25 +00:00
$censors = $cache -> get ( 'word_censors' );
2003-01-11 22:56:49 +00:00
}
else
{
2003-07-13 23:29:22 +00:00
$sql = ' SELECT word , replacement
FROM ' . WORDS_TABLE ;
2003-01-11 22:56:49 +00:00
$result = $db -> sql_query ( $sql );
2001-09-02 22:08:01 +00:00
2003-01-21 15:58:32 +00:00
$censors = array ();
if ( $row = $db -> sql_fetchrow ( $result ))
{
do
{
2003-04-17 17:00:33 +00:00
$censors [ 'match' ][] = '#(' . str_replace ( '\*' , '\w*?' , preg_quote ( $row [ 'word' ], '#' )) . ')#i' ;
2003-01-21 15:58:32 +00:00
$censors [ 'replace' ][] = $row [ 'replacement' ];
}
while ( $row = $db -> sql_fetchrow ( $result ));
}
$db -> sql_freeresult ( $result );
2003-04-17 17:00:33 +00:00
2003-01-22 20:16:18 +00:00
$cache -> put ( 'word_censors' , $censors );
2003-01-21 15:58:32 +00:00
}
return true ;
}
// Obtain currently listed icons, re-caching if necessary
function obtain_icons ( & $icons )
{
global $db , $cache ;
2003-01-22 20:16:18 +00:00
if ( $cache -> exists ( 'icons' ))
{
$icons = $cache -> get ( 'icons' );
}
else
2003-01-21 15:58:32 +00:00
{
// Topic icons
2003-07-13 23:29:22 +00:00
$sql = ' SELECT *
FROM ' . ICONS_TABLE . '
ORDER BY icons_order ' ;
2003-01-21 15:58:32 +00:00
$result = $db -> sql_query ( $sql );
$icons = array ();
2003-01-11 22:56:49 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
2003-01-21 15:58:32 +00:00
$icons [ $row [ 'icons_id' ]][ 'img' ] = $row [ 'icons_url' ];
$icons [ $row [ 'icons_id' ]][ 'width' ] = $row [ 'icons_width' ];
$icons [ $row [ 'icons_id' ]][ 'height' ] = $row [ 'icons_height' ];
2003-01-28 18:16:53 +00:00
$icons [ $row [ 'icons_id' ]][ 'display' ] = $row [ 'display_on_posting' ];
2003-01-11 22:56:49 +00:00
}
2003-01-21 15:58:32 +00:00
$db -> sql_freeresult ( $result );
2002-02-08 01:44:27 +00:00
2003-01-21 15:58:32 +00:00
$cache -> put ( 'icons' , $icons );
2001-09-02 22:08:01 +00:00
}
2003-01-21 15:58:32 +00:00
return ;
2001-09-02 22:08:01 +00:00
}
2003-06-19 16:19:59 +00:00
// Obtain ranks
function obtain_ranks ( & $ranks )
{
global $db , $cache ;
if ( $cache -> exists ( 'ranks' ))
{
$ranks = $cache -> get ( 'ranks' );
}
else
{
$sql = ' SELECT *
FROM ' . RANKS_TABLE . '
ORDER BY rank_min DESC ' ;
$result = $db -> sql_query ( $sql );
$ranks = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
if ( $row [ 'rank_special' ])
{
$ranks [ 'special' ][ $row [ 'rank_id' ]] = array (
'rank_title' => $row [ 'rank_title' ],
'rank_image' => $row [ 'rank_image' ]
);
}
else
{
$ranks [ 'normal' ][] = array (
'rank_title' => $row [ 'rank_title' ],
'rank_min' => $row [ 'rank_min' ],
'rank_image' => $row [ 'rank_image' ]
);
}
}
$db -> sql_freeresult ( $result );
$cache -> put ( 'ranks' , $ranks );
}
}
2003-04-01 21:11:07 +00:00
// Obtain allowed extensions
function obtain_attach_extensions ( & $extensions )
{
global $db , $cache ;
if ( $cache -> exists ( 'extensions' ))
{
$extensions = $cache -> get ( 'extensions' );
}
else
{
// Don't count on forbidden extensions table, because it is not allowed to allow forbidden extensions at all
2003-07-13 23:29:22 +00:00
$sql = ' SELECT e . extension , g .*
FROM ' . EXTENSIONS_TABLE . ' e , ' . EXTENSION_GROUPS_TABLE . ' g
2003-04-01 21:11:07 +00:00
WHERE e . group_id = g . group_id
2003-07-13 23:29:22 +00:00
AND g . allow_group = 1 ' ;
2003-04-01 21:11:07 +00:00
$result = $db -> sql_query ( $sql );
$extensions = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
$extension = strtolower ( trim ( $row [ 'extension' ]));
2003-04-10 21:35:31 +00:00
$extensions [ '_allowed_' ][] = $extension ;
2003-04-01 21:11:07 +00:00
$extensions [ $extension ][ 'display_cat' ] = intval ( $row [ 'cat_id' ]);
$extensions [ $extension ][ 'download_mode' ] = intval ( $row [ 'download_mode' ]);
$extensions [ $extension ][ 'upload_icon' ] = trim ( $row [ 'upload_icon' ]);
2003-04-15 18:56:31 +00:00
$extensions [ $extension ][ 'max_filesize' ] = intval ( $row [ 'max_filesize' ]);
2003-04-01 21:11:07 +00:00
}
$db -> sql_freeresult ( $result );
$cache -> put ( 'extensions' , $extensions );
}
return ;
}
2003-03-25 14:19:23 +00:00
function generate_board_url ()
{
global $config ;
2003-08-17 17:52:30 +00:00
$path = preg_replace ( '#^/?(.*?)/?$#' , '\1' , trim ( $config [ 'script_path' ]));
return (( $config [ 'cookie_secure' ]) ? 'https://' : 'http://' ) . preg_replace ( '#^/?(.*?)/?$#' , '\1' , trim ( $config [ 'server_name' ])) . (( $config [ 'server_port' ] <> 80 ) ? ':' . trim ( $config [ 'server_port' ]) : '' ) . (( $path ) ? '/' . $path : '' );
2003-03-25 14:19:23 +00:00
}
2002-10-09 19:50:48 +00:00
// Redirects the user to another page then exits the script nicely
2002-12-02 23:53:21 +00:00
function redirect ( $url )
2002-10-09 19:50:48 +00:00
{
2003-05-02 15:50:11 +00:00
global $db , $cache , $config , $user ;
2002-10-20 19:19:07 +00:00
2002-10-10 00:35:35 +00:00
if ( isset ( $db ))
{
$db -> sql_close ();
}
2003-04-17 17:00:33 +00:00
2003-01-13 05:11:11 +00:00
if ( isset ( $cache ))
{
2003-02-21 01:51:46 +00:00
$cache -> unload ();
2003-01-13 05:11:11 +00:00
}
2002-10-09 19:50:48 +00:00
2003-05-02 15:50:11 +00:00
// Local redirect? If not, prepend the boards url
$url = ( ! strstr ( $url , '://' )) ? ( generate_board_url () . preg_replace ( '#^/?(.*?)/?$#' , '/\1' , trim ( $url ))) : $url ;
2002-12-02 23:53:21 +00:00
2003-01-08 18:27:16 +00:00
// Redirect via an HTML form for PITA webservers
2003-04-17 17:00:33 +00:00
if ( @ preg_match ( '#Microsoft|WebSTAR|Xitami#' , getenv ( 'SERVER_SOFTWARE' )))
2002-12-02 23:53:21 +00:00
{
2003-04-17 17:00:33 +00:00
header ( 'Refresh: 0; URL=' . $url );
2003-05-02 15:50:11 +00:00
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="refresh" content="0; url=' . $url . '"><title>Redirect</title></head><body><div align="center">' . sprintf ( $user -> lang [ 'URL_REDIRECT' ], '<a href="' . $url . '">' , '</a>' ) . '</div></body></html>' ;
2003-01-08 18:27:16 +00:00
exit ;
2002-12-02 23:53:21 +00:00
}
2003-01-08 18:27:16 +00:00
// Behave as per HTTP/1.1 spec for others
2003-04-17 17:00:33 +00:00
header ( 'Location: ' . $url );
2002-10-09 19:50:48 +00:00
exit ;
}
2003-04-26 01:17:40 +00:00
// Meta refresh assignment
function meta_refresh ( $time , $url )
{
global $template ;
$template -> assign_vars ( array (
'META' => '<meta http-equiv="refresh" content="' . $time . ';url=' . $url . '">' )
);
}
2002-10-30 00:57:27 +00:00
2003-03-17 00:53:38 +00:00
// Generate login box or verify password
function login_box ( $s_action , $s_hidden_fields = '' , $login_explain = '' )
{
2003-05-03 23:58:45 +00:00
global $SID , $db , $user , $template , $auth , $phpEx ;
2003-03-17 00:53:38 +00:00
$err = '' ;
if ( isset ( $_POST [ 'login' ]))
{
$autologin = ( ! empty ( $_POST [ 'autologin' ])) ? TRUE : FALSE ;
$viewonline = ( ! empty ( $_POST [ 'viewonline' ])) ? 0 : 1 ;
if (( $result = $auth -> login ( $_POST [ 'username' ], $_POST [ 'password' ], $autologin , $viewonline )) === true )
{
return true ;
}
// If we get a non-numeric (e.g. string) value we output an error
if ( is_string ( $result ))
{
trigger_error ( $result , E_USER_ERROR );
}
// If we get an integer zero then we are inactive, else the username/password is wrong
$err = ( $result === 0 ) ? $user -> lang [ 'ACTIVE_ERROR' ] : $user -> lang [ 'LOGIN_ERROR' ];
}
2003-07-04 17:19:00 +00:00
$sql = 'DELETE FROM ' . CONFIRM_TABLE . '
WHERE confirm_time < ' . (time() - $config[' session_length ' ]);
// $db->sql_query($sql);
2003-03-17 00:53:38 +00:00
$template -> assign_vars ( array (
'LOGIN_ERROR' => $err ,
'LOGIN_EXPLAIN' => $login_explain ,
'U_SEND_PASSWORD' => " ucp. $phpEx $SID &mode=sendpassword " ,
'U_TERMS_USE' => " ucp. $phpEx $SID &mode=terms " ,
'U_PRIVACY' => " ucp. $phpEx $SID &mode=privacy " ,
'S_LOGIN_ACTION' => $s_action ,
'S_HIDDEN_FIELDS' => $s_hidden_fields )
);
2003-05-03 23:58:45 +00:00
page_header ( $user -> lang [ 'LOGIN' ]);
2003-03-17 00:53:38 +00:00
$template -> set_filenames ( array (
'body' => 'login_body.html' )
);
make_jumpbox ( 'viewforum.' . $phpEx );
2003-05-03 23:58:45 +00:00
page_footer ();
2003-03-17 00:53:38 +00:00
}
2003-05-03 23:58:45 +00:00
// TODO
// If forum has parents, check to see if password has been entered
// for those (if it/they are the same as this forums).? If they are
// different then we ignore them as if they were blank
function login_forum_box ( & $forum_data )
{
global $db , $config , $user , $template , $phpEx ;
$sql = ' SELECT *
FROM phpbb_forum_access
WHERE forum_id = ' . $forum_data[' forum_id '] . '
AND user_id = ' . $user->data[' user_id ' ] . "
AND session_id = '$user->session_id' " ;
$result = $db -> sql_query ( $sql );
if ( $row = $db -> sql_fetchrow ( $result ))
{
$db -> sql_freeresult ( $result );
return true ;
}
$db -> sql_freeresult ( $result );
if ( ! empty ( $_POST [ 'password' ]))
{
if ( $_POST [ 'password' ] == $forum_data [ 'forum_password' ])
{
$sql = ' INSERT INTO phpbb_forum_access ( forum_id , user_id , session_id )
VALUES ( ' . $forum_data[' forum_id '] . ' , ' . $user->data[' user_id '] . ", ' $user -> session_id ' ) " ;
$db -> sql_query ( $sql );
return true ;
}
$template -> assign_var ( 'LOGIN_ERROR' , $user -> lang [ 'WRONG_PASSWORD' ]);
}
page_header ();
$template -> set_filenames ( array (
'body' => 'login_forum.html' )
);
page_footer ();
}
2003-03-17 00:53:38 +00:00
2002-10-08 20:06:55 +00:00
// Error and message handler, call with trigger_error if reqd
function msg_handler ( $errno , $msg_text , $errfile , $errline )
{
2003-05-04 17:15:23 +00:00
global $cache , $db , $auth , $template , $config , $user ;
2002-10-20 19:19:07 +00:00
global $phpEx , $phpbb_root_path , $starttime ;
2002-10-08 20:06:55 +00:00
2002-11-01 12:23:08 +00:00
switch ( $errno )
2002-10-08 20:06:55 +00:00
{
case E_WARNING :
case E_NOTICE :
2003-02-17 06:20:41 +00:00
if ( defined ( 'DEBUG_EXTRA' ))
{
2003-05-05 22:48:17 +00:00
// echo "PHP Notice on line <b>$errline</b> in <b>$errfile</b> :: <b>$msg_text</b><br />";
2003-02-17 06:20:41 +00:00
}
2002-10-08 20:06:55 +00:00
break ;
case E_USER_ERROR :
2002-11-01 12:23:08 +00:00
if ( isset ( $db ))
2002-10-20 19:19:07 +00:00
{
$db -> sql_close ();
}
2003-05-03 23:58:45 +00:00
2003-04-09 21:26:25 +00:00
if ( isset ( $cache ))
{
$cache -> unload ();
}
2002-10-10 00:35:35 +00:00
2003-03-30 14:39:48 +00:00
if ( ! defined ( 'HEADER_INC' ))
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8869-1"><meta http-equiv="Content-Style-Type" content="text/css"><link rel="stylesheet" href="' . $phpbb_root_path . 'adm/subSilver.css" type="text/css"><style type="text/css">' . " \n " ;
echo 'th { background-image: url(\'' . $phpbb_root_path . 'adm/images/cellpic3.gif\') }' . " \n " ;
echo 'td.cat { background-image: url(\'' . $phpbb_root_path . 'adm/images/cellpic1.gif\') }' . " \n " ;
echo '</style><title>' . $msg_title . '</title></head><body>' ;
echo '<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td><img src="' . $phpbb_root_path . 'adm/images/header_left.jpg" width="200" height="60" alt="phpBB Logo" title="phpBB Logo" border="0"/></td><td width="100%" background="' . $phpbb_root_path . 'adm/images/header_bg.jpg" height="60" align="right" nowrap="nowrap"><span class="maintitle">General Error</span> </td></tr></table>' ;
}
echo '<br clear="all" /><table width="85%" cellspacing="0" cellpadding="0" border="0" align="center"><tr><td><br clear="all" />' . $msg_text . '<hr />Please notify the board administrator or webmaster : <a href="mailto:' . $config [ 'board_contact' ] . '">' . $config [ 'board_contact' ] . '</a></td></tr></table><br clear="all" /></body></html>' ;
2002-10-26 12:34:39 +00:00
2002-10-20 19:19:07 +00:00
exit ;
2002-10-08 20:06:55 +00:00
break ;
case E_USER_NOTICE :
2003-04-01 00:06:11 +00:00
if ( empty ( $user -> data ))
2002-11-01 12:23:08 +00:00
{
$user -> start ();
}
if ( empty ( $user -> lang ))
{
$user -> setup ();
}
2002-10-08 20:06:55 +00:00
2002-11-01 12:23:08 +00:00
if ( ! defined ( 'HEADER_INC' ))
2002-10-08 20:06:55 +00:00
{
2002-11-01 12:23:08 +00:00
if ( defined ( 'IN_ADMIN' ))
2002-10-08 20:06:55 +00:00
{
2003-05-03 23:58:45 +00:00
adm_page_header ( '' , '' , false );
2002-10-08 20:06:55 +00:00
}
else
{
2003-05-03 23:58:45 +00:00
page_header ();
2002-10-08 20:06:55 +00:00
}
}
2003-05-03 23:58:45 +00:00
$msg_text = ( ! empty ( $user -> lang [ $msg_text ])) ? $user -> lang [ $msg_text ] : $msg_text ;
2002-11-01 12:23:08 +00:00
if ( defined ( 'IN_ADMIN' ))
2002-10-08 20:06:55 +00:00
{
2003-05-03 23:58:45 +00:00
adm_page_message ( $msg_title , $msg_text , $display_header );
adm_page_footer ();
2002-10-08 20:06:55 +00:00
}
else
{
$template -> set_filenames ( array (
'body' => 'message_body.html' )
);
$template -> assign_vars ( array (
2002-11-01 12:23:08 +00:00
'MESSAGE_TITLE' => $msg_title ,
'MESSAGE_TEXT' => $msg_text )
2002-10-08 20:06:55 +00:00
);
2003-05-03 23:58:45 +00:00
page_footer ();
2002-10-08 20:06:55 +00:00
}
2003-04-01 00:06:11 +00:00
exit ;
2002-10-08 20:06:55 +00:00
break ;
}
}
2003-05-03 23:58:45 +00:00
2003-05-02 15:50:11 +00:00
//
function page_header ( $page_title = '' )
{
2003-05-03 23:58:45 +00:00
global $db , $config , $template , $SID , $user , $auth , $phpEx ;
2003-05-02 15:50:11 +00:00
define ( 'HEADER_INC' , TRUE );
// gzip_compression
if ( $config [ 'gzip_compress' ])
{
if ( extension_loaded ( 'zlib' ) && ! headers_sent ())
{
ob_start ( 'ob_gzhandler' );
}
}
// Generate logged in/logged out status
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
{
2003-05-03 23:58:45 +00:00
$u_login_logout = " ucp. $phpEx $SID &mode=logout " ;
2003-05-02 15:50:11 +00:00
$l_login_logout = sprintf ( $user -> lang [ 'LOGOUT_USER' ], $user -> data [ 'username' ]);
}
else
{
2003-05-03 23:58:45 +00:00
$u_login_logout = " ucp. $phpEx $SID &mode=login " ;
2003-05-02 15:50:11 +00:00
$l_login_logout = $user -> lang [ 'LOGIN' ];
}
// Last visit date/time
$s_last_visit = ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? $user -> format_date ( $user -> data [ 'session_last_visit' ]) : '' ;
// Get users online list ... if required
$l_online_users = $online_userlist = $l_online_record = '' ;
if ( ! empty ( $config [ 'load_online' ]) && ! empty ( $config [ 'load_online_time' ]))
{
$userlist_ary = $userlist_visible = array ();
$logged_visible_online = $logged_hidden_online = $guests_online = 0 ;
$prev_user_id = 0 ;
$prev_user_ip = $reading_sql = '' ;
if ( ! empty ( $_REQUEST [ 'f' ]))
{
$reading_sql = " AND s.session_page LIKE '%f= " . intval ( $_REQUEST [ 'f' ]) . " %' " ;
}
2003-05-03 23:58:45 +00:00
$sql = ' SELECT u . username , u . user_id , u . user_allow_viewonline , u . user_colour , s . session_ip , s . session_allow_viewonline
FROM ' . USERS_TABLE . ' u , ' . SESSIONS_TABLE . ' s
WHERE s . session_time >= ' . (time() - (intval($config[' load_online_time ' ]) * 60 )) . "
2003-05-02 15:50:11 +00:00
$reading_sql
AND u . user_id = s . session_user_id
ORDER BY u . username ASC , s . session_ip ASC " ;
$result = $db -> sql_query ( $sql , false );
while ( $row = $db -> sql_fetchrow ( $result ))
{
// User is logged in and therefor not a guest
if ( $row [ 'user_id' ] != ANONYMOUS )
{
// Skip multiple sessions for one user
if ( $row [ 'user_id' ] != $prev_user_id )
{
if ( $row [ 'user_colour' ])
{
$row [ 'username' ] = '<b style="color:#' . $row [ 'user_colour' ] . '">' . $row [ 'username' ] . '</b>' ;
}
if ( $row [ 'user_allow_viewonline' ] && $row [ 'session_allow_viewonline' ])
{
$user_online_link = $row [ 'username' ];
$logged_visible_online ++ ;
}
else
{
$user_online_link = '<i>' . $row [ 'username' ] . '</i>' ;
$logged_hidden_online ++ ;
}
if ( $row [ 'user_allow_viewonline' ] || $auth -> acl_get ( 'u_viewonline' ))
{
2003-05-03 23:58:45 +00:00
$user_online_link = " <a href= \" memberlist. $phpEx $SID &mode=viewprofile&u= " . $row [ 'user_id' ] . '">' . $user_online_link . '</a>' ;
2003-05-02 15:50:11 +00:00
$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link ;
}
}
$prev_user_id = $row [ 'user_id' ];
}
else
{
// Skip multiple sessions for one user
if ( $row [ 'session_ip' ] != $prev_session_ip )
{
$guests_online ++ ;
}
}
$prev_session_ip = $row [ 'session_ip' ];
}
if ( $online_userlist == '' )
{
$online_userlist = $user -> lang [ 'NONE' ];
}
if ( empty ( $_REQUEST [ 'f' ]))
{
2003-05-03 23:58:45 +00:00
$online_userlist = $user -> lang [ 'REGISTERED_USERS' ] . ' ' . $online_userlist ;
2003-05-02 15:50:11 +00:00
}
else
{
2003-05-03 23:58:45 +00:00
$l_online = ( $guests_online == 1 ) ? $user -> lang [ 'BROWSING_FORUM_GUEST' ] : $user -> lang [ 'BROWSING_FORUM_GUESTS' ];
2003-05-02 15:50:11 +00:00
$online_userlist = sprintf ( $l_online , $online_userlist , $guests_online );
}
$total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online ;
if ( $total_online_users > $config [ 'record_online_users' ])
{
set_config ( 'record_online_users' , $total_online_users , TRUE );
set_config ( 'record_online_date' , time (), TRUE );
}
// Build online listing
$vars_online = array (
'ONLINE' => array ( 'total_online_users' , 'l_t_user_s' ),
'REG' => array ( 'logged_visible_online' , 'l_r_user_s' ),
'HIDDEN' => array ( 'logged_hidden_online' , 'l_h_user_s' ),
'GUEST' => array ( 'guests_online' , 'l_g_user_s' )
);
foreach ( $vars_online as $l_prefix => $var_ary )
{
2003-05-21 19:06:16 +00:00
switch ( $ { $var_ary [ 0 ]})
2003-05-02 15:50:11 +00:00
{
case 0 :
2003-05-21 19:06:16 +00:00
$ { $var_ary [ 1 ]} = $user -> lang [ $l_prefix . '_USERS_ZERO_TOTAL' ];
2003-05-02 15:50:11 +00:00
break ;
case 1 :
2003-05-21 19:06:16 +00:00
$ { $var_ary [ 1 ]} = $user -> lang [ $l_prefix . '_USER_TOTAL' ];
2003-05-02 15:50:11 +00:00
break ;
default :
2003-05-21 19:06:16 +00:00
$ { $var_ary [ 1 ]} = $user -> lang [ $l_prefix . '_USERS_TOTAL' ];
2003-05-02 15:50:11 +00:00
break ;
}
}
unset ( $vars_online );
$l_online_users = sprintf ( $l_t_user_s , $total_online_users );
$l_online_users .= sprintf ( $l_r_user_s , $logged_visible_online );
$l_online_users .= sprintf ( $l_h_user_s , $logged_hidden_online );
$l_online_users .= sprintf ( $l_g_user_s , $guests_online );
$l_online_record = sprintf ( $user -> lang [ 'RECORD_ONLINE_USERS' ], $config [ 'record_online_users' ], $user -> format_date ( $config [ 'record_online_date' ]));
$l_online_time = ( $config [ 'load_online_time' ] == 1 ) ? 'VIEW_ONLINE_TIME' : 'VIEW_ONLINE_TIMES' ;
$l_online_time = sprintf ( $user -> lang [ $l_online_time ], $config [ 'load_online_time' ]);
}
// Obtain number of new private messages if user is logged in
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
{
if ( $user -> data [ 'user_new_privmsg' ])
{
$l_message_new = ( $user -> data [ 'user_new_privmsg' ] == 1 ) ? $user -> lang [ 'New_pm' ] : $user -> lang [ 'New_pms' ];
$l_privmsgs_text = sprintf ( $l_message_new , $user -> data [ 'user_new_privmsg' ]);
if ( $user -> data [ 'user_last_privmsg' ] > $user -> data [ 'session_last_visit' ])
{
2003-05-03 23:58:45 +00:00
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_last_privmsg = ' . $user->data[' session_last_visit '] . '
WHERE user_id = ' . $user->data[' user_id ' ];
2003-05-02 15:50:11 +00:00
$db -> sql_query ( $sql );
$s_privmsg_new = 1 ;
}
else
{
$s_privmsg_new = 0 ;
}
}
else
{
$l_privmsgs_text = $user -> lang [ 'No_new_pm' ];
$s_privmsg_new = 0 ;
}
if ( $user -> data [ 'user_unread_privmsg' ])
{
$l_message_unread = ( $user -> data [ 'user_unread_privmsg' ] == 1 ) ? $user -> lang [ 'Unread_pm' ] : $user -> lang [ 'Unread_pms' ];
$l_privmsgs_text_unread = sprintf ( $l_message_unread , $user -> data [ 'user_unread_privmsg' ]);
}
else
{
$l_privmsgs_text_unread = $user -> lang [ 'No_unread_pm' ];
}
}
// Which timezone?
$tz = ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? strval ( doubleval ( $user -> data [ 'user_timezone' ])) : strval ( doubleval ( $config [ 'board_timezone' ]));
// The following assigns all _common_ variables that may be used at any point
// in a template.
$template -> assign_vars ( array (
'SITENAME' => $config [ 'sitename' ],
'SITE_DESCRIPTION' => $config [ 'site_desc' ],
'PAGE_TITLE' => $page_title ,
'LAST_VISIT_DATE' => sprintf ( $user -> lang [ 'YOU_LAST_VISIT' ], $s_last_visit ),
'CURRENT_TIME' => sprintf ( $user -> lang [ 'CURRENT_TIME' ], $user -> format_date ( time ())),
'TOTAL_USERS_ONLINE' => $l_online_users ,
'LOGGED_IN_USER_LIST' => $online_userlist ,
'RECORD_USERS' => $l_online_record ,
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text ,
'PRIVATE_MESSAGE_NEW_FLAG' => $s_privmsg_new ,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread ,
'L_LOGIN_LOGOUT' => $l_login_logout ,
'L_INDEX' => $user -> lang [ 'FORUM_INDEX' ],
'L_ONLINE_EXPLAIN' => $l_online_time ,
2003-07-13 15:15:05 +00:00
'U_PRIVATEMSGS' => 'ucp.' . $phpEx . $SID . '&mode=pm&folder=inbox' ,
'U_MEMBERLIST' => 'memberlist.' . $phpEx . $SID ,
'U_VIEWONLINE' => 'viewonline.' . $phpEx . $SID ,
'U_MEMBERSLIST' => 'memberlist.' . $phpEx . $SID ,
'U_GROUP_CP' => 'groupcp.' . $phpEx . $SID ,
'U_LOGIN_LOGOUT' => $u_login_logout ,
'U_INDEX' => 'index.' . $phpEx . $SID ,
'U_SEARCH' => 'search.' . $phpEx . $SID ,
'U_REGISTER' => 'ucp.' . $phpEx . $SID . '&mode=register' ,
'U_PROFILE' => 'ucp.' . $phpEx . $SID ,
'U_MODCP' => 'mcp.' . $phpEx . $SID ,
'U_FAQ' => 'faq.' . $phpEx . $SID ,
'U_SEARCH_SELF' => 'search.' . $phpEx . $SID . '&search_id=egosearch' ,
'U_SEARCH_NEW' => 'search.' . $phpEx . $SID . '&search_id=newposts' ,
2003-05-02 15:50:11 +00:00
'U_SEARCH_UNANSWERED' => 'search.' . $phpEx . $SID . '&search_id=unanswered' ,
'S_USER_LOGGED_IN' => ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? true : false ,
'S_USER_PM_POPUP' => ( ! empty ( $user -> data [ 'user_popup_pm' ])) ? true : false ,
'S_USER_BROWSER' => $user -> data [ 'session_browser' ],
'S_CONTENT_DIRECTION' => $user -> lang [ 'DIRECTION' ],
'S_CONTENT_ENCODING' => $user -> lang [ 'ENCODING' ],
'S_CONTENT_DIR_LEFT' => $user -> lang [ 'LEFT' ],
'S_CONTENT_DIR_RIGHT' => $user -> lang [ 'RIGHT' ],
'S_TIMEZONE' => ( $user -> data [ 'user_dst' ] || ( $user -> data [ 'user_id' ] == ANONYMOUS && $config [ 'board_dst' ])) ? sprintf ( $user -> lang [ 'ALL_TIMES' ], $user -> lang [ $tz ], $user -> lang [ 'tz' ][ 'dst' ]) : sprintf ( $user -> lang [ 'ALL_TIMES' ], $user -> lang [ $tz ], '' ),
'S_DISPLAY_ONLINE_LIST' => ( ! empty ( $config [ 'load_online' ])) ? 1 : 0 ,
'S_DISPLAY_SEARCH' => ( ! empty ( $config [ 'load_search' ])) ? 1 : 0 ,
'S_DISPLAY_PM' => ( empty ( $config [ 'privmsg_disable' ])) ? 1 : 0 ,
'S_DISPLAY_MEMBERLIST' => ( isset ( $auth )) ? $auth -> acl_get ( 'u_viewprofile' ) : 0 ,
2003-08-11 01:12:23 +00:00
'T_THEME_PATH' => 'styles/' . $user -> theme [ 'primary' ][ 'theme_path' ] . '/theme' ,
'T_TEMPLATE_PATH' => 'styles/' . $user -> theme [ 'primary' ][ 'template_path' ] . 'template' ,
'T_IMAGESET_PATH' => 'styles/' . $user -> theme [ 'primary' ][ 'imageset_path' ] . 'imageset' ,
2003-08-06 15:45:13 +00:00
'T_STYLESHEET_LINK' => ( ! $user -> theme [ 'primary' ][ 'theme_storedb' ]) ? 'styles/' . $user -> theme [ 'primary' ][ 'theme_path' ] . '/theme/stylesheet.css' : " style. $phpEx ?sid= $user->session_id &id= " . $user -> theme [ 'primary' ][ 'theme_id' ],
'T_THEME_DATA' => ( ! $user -> theme [ 'primary' ][ 'theme_storedb' ]) ? '' : $user -> theme [ 'primary' ][ 'theme_data' ])
2003-05-02 15:50:11 +00:00
);
2003-05-03 23:58:45 +00:00
if ( ! empty ( $config [ 'send_encoding' ]))
2003-05-02 15:50:11 +00:00
{
2003-07-24 13:58:59 +00:00
header ( 'Content-type: text/html; charset: ' . $user -> lang [ 'ENCODING' ]);
2003-05-02 15:50:11 +00:00
}
2003-07-24 13:58:59 +00:00
header ( 'Cache-Control: private, no-cache="set-cookie", pre-check=0, post-check=0' );
header ( 'Expires: 0' );
header ( 'Pragma: no-cache' );
2003-05-02 15:50:11 +00:00
return ;
}
//
function page_footer ()
{
2003-05-03 23:58:45 +00:00
global $db , $config , $template , $SID , $user , $auth , $cache , $starttime , $phpEx ;
2003-05-02 15:50:11 +00:00
// Output page creation time
if ( defined ( 'DEBUG' ))
{
$mtime = explode ( ' ' , microtime ());
$totaltime = $mtime [ 0 ] + $mtime [ 1 ] - $starttime ;
if ( ! empty ( $_REQUEST [ 'explain' ]) && $auth -> acl_get ( 'a_' ))
{
echo $db -> sql_report ;
echo " <pre><b>Page generated in $totaltime seconds with " . $db -> num_queries . " queries, \n spending " . $db -> sql_time . ' doing SQL queries and ' . ( $totaltime - $db -> sql_time ) . ' doing PHP things.</b></pre>' ;
exit ;
}
$debug_output = sprintf ( '<br /><br />[ Time : %.3fs | ' . $db -> sql_num_queries () . ' Queries | GZIP : ' . ( ( $config [ 'gzip_compress' ] ) ? 'On' : 'Off' ) . ' | Load : ' . (( $user -> load ) ? $user -> load : 'N/A' ), $totaltime );
if ( $auth -> acl_get ( 'a_' ))
{
$debug_output .= ' | <a href="' . htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ]) . '&explain=1">Explain</a>' ;
}
$debug_output .= ' ]' ;
}
$template -> assign_vars ( array (
'PHPBB_VERSION' => $config [ 'version' ],
'ADMIN_LINK' => ( $auth -> acl_get ( 'a_' )) ? sprintf ( $user -> lang [ 'ACP' ], '<a href="' . " adm/index. $phpEx ?sid= " . $user -> data [ 'session_id' ] . '">' , '</a>' ) . '<br /><br />' : '' ,
'DEBUG_OUTPUT' => ( defined ( 'DEBUG' )) ? $debug_output : '' )
);
$template -> display ( 'body' );
2003-08-06 15:45:13 +00:00
2003-08-10 18:42:20 +00:00
// Unload cache, must be done before the DB connection if closed
2003-08-06 15:45:13 +00:00
if ( ! empty ( $cache ))
{
$cache -> unload ();
}
2003-08-10 18:42:20 +00:00
// Close our DB connection.
$db -> sql_close ();
2003-05-02 15:50:11 +00:00
exit ;
}
2002-10-08 20:06:55 +00:00
2002-12-02 23:53:21 +00:00
?>