2001-04-19 13:18:57 +00:00
< ? php
2005-04-09 12:26:45 +00:00
/**
*
* @ package phpBB3
* @ version $Id $
* @ copyright ( c ) 2005 phpBB Group
* @ license http :// opensource . org / licenses / gpl - license . php GNU Public License
*
*/
/**
2005-10-02 18:15:12 +00:00
* set_var
*
2005-04-09 12:26:45 +00:00
* Set variable , used by { @ link request_var the request_var function }
2005-10-02 18:15:12 +00:00
*
* @ private
2005-04-09 12:26:45 +00:00
*/
2005-03-21 23:10:11 +00:00
function set_var ( & $result , $var , $type , $multibyte = false )
2003-11-04 21:54:40 +00:00
{
settype ( $var , $type );
$result = $var ;
if ( $type == 'string' )
{
2004-01-09 11:56:53 +00:00
$result = trim ( htmlspecialchars ( str_replace ( array ( " \r \n " , " \r " , '\xFF' ), array ( " \n " , " \n " , ' ' ), $result )));
$result = ( STRIP ) ? stripslashes ( $result ) : $result ;
2005-03-21 23:10:11 +00:00
if ( $multibyte )
{
$result = preg_replace ( '#&(\#[0-9]+;)#' , '&\1' , $result );
}
2003-11-04 21:54:40 +00:00
}
}
2005-04-09 12:26:45 +00:00
/**
* request_var
*
* Used to get passed variable
*/
2005-03-21 23:10:11 +00:00
function request_var ( $var_name , $default , $multibyte = false )
2003-10-01 17:22:58 +00:00
{
2005-05-15 20:17:35 +00:00
if ( ! isset ( $_REQUEST [ $var_name ]) || ( is_array ( $_REQUEST [ $var_name ]) && ! is_array ( $default )) || ( is_array ( $default ) && ! is_array ( $_REQUEST [ $var_name ])))
2003-10-01 17:22:58 +00:00
{
2005-05-15 20:17:35 +00:00
return ( is_array ( $default )) ? array () : $default ;
2003-10-01 17:22:58 +00:00
}
2005-05-15 20:17:35 +00:00
$var = $_REQUEST [ $var_name ];
if ( ! is_array ( $default ))
2003-10-01 17:22:58 +00:00
{
$type = gettype ( $default );
2005-05-15 20:17:35 +00:00
}
else
{
list ( $key_type , $type ) = each ( $default );
$type = gettype ( $type );
$key_type = gettype ( $key_type );
}
if ( is_array ( $var ))
{
$_var = $var ;
$var = array ();
2003-10-01 17:22:58 +00:00
2005-05-15 20:17:35 +00:00
foreach ( $_var as $k => $v )
2003-10-01 17:22:58 +00:00
{
2005-05-15 20:17:35 +00:00
if ( is_array ( $v ))
2003-10-01 17:22:58 +00:00
{
2005-05-15 20:17:35 +00:00
foreach ( $v as $_k => $_v )
2003-11-04 21:54:40 +00:00
{
2005-05-15 20:17:35 +00:00
set_var ( $k , $k , $key_type );
set_var ( $_k , $_k , $key_type );
set_var ( $var [ $k ][ $_k ], $_v , $type , $multibyte );
2003-11-04 21:54:40 +00:00
}
2003-10-01 17:22:58 +00:00
}
2005-05-15 20:17:35 +00:00
else
{
set_var ( $k , $k , $key_type );
set_var ( $var [ $k ], $v , $type , $multibyte );
}
2003-10-01 17:22:58 +00:00
}
}
2005-05-15 20:17:35 +00:00
else
{
set_var ( $var , $var , $type , $multibyte );
}
return $var ;
2003-10-01 17:22:58 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Set config value . Creates missing config entry .
*/
2004-10-06 12:05:18 +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) . "'
2004-05-02 13:06:57 +00:00
WHERE config_name = '" . $db->sql_escape($config_name) . "' " ;
2003-08-10 18:42:20 +00:00
$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 ]))
{
2004-10-06 12:05:18 +00:00
$sql = 'INSERT INTO ' . CONFIG_TABLE . ' ' . $db -> sql_build_array ( 'INSERT' , array (
'config_name' => $config_name ,
'config_value' => $config_value ,
'is_dynamic' => ( $is_dynamic ) ? 1 : 0 ));
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' );
2005-04-10 11:21:01 +00:00
$cache -> save ();
2003-01-22 20:16:18 +00:00
}
2003-01-11 22:56:49 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Generates an alphanumeric random string of given length
*/
2004-02-03 02:29:35 +00:00
function gen_rand_string ( $num_chars )
{
$chars = array ( 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' );
2005-04-30 14:24:13 +00:00
list ( $sec , $usec ) = explode ( ' ' , microtime ());
mt_srand (( float ) $sec + (( float ) $usec * 100000 ));
2004-02-03 02:29:35 +00:00
2005-04-10 18:07:12 +00:00
$max_chars = sizeof ( $chars ) - 1 ;
2004-02-03 02:29:35 +00:00
$rand_str = '' ;
for ( $i = 0 ; $i < $num_chars ; $i ++ )
{
$rand_str .= $chars [ mt_rand ( 0 , $max_chars )];
}
return $rand_str ;
}
2005-04-30 14:24:13 +00:00
/**
* Return unique id
2005-11-03 20:53:47 +00:00
* @ param $extra additional entropy for call to mt_srand
2005-04-30 14:24:13 +00:00
*/
2005-11-03 20:53:47 +00:00
function unique_id ( $extra = 0 )
2005-04-30 14:24:13 +00:00
{
list ( $sec , $usec ) = explode ( ' ' , microtime ());
2005-11-03 20:53:47 +00:00
mt_srand (( float ) $extra + ( float ) $sec + (( float ) $usec * 100000 ));
2005-04-30 14:24:13 +00:00
return uniqid ( mt_rand (), true );
}
2005-04-09 12:26:45 +00:00
/**
* Get userdata
* @ param mixed $user user id or username
*/
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
2005-04-09 12:26:45 +00:00
/**
* Generate sort selection fields
*/
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 ;
}
2005-04-09 12:26:45 +00:00
/**
* Generate Jumpbox
*/
2004-07-08 22:41:04 +00:00
function make_jumpbox ( $action , $forum_id = false , $select_all = false , $acl_list = false )
2002-07-14 14:35:12 +00:00
{
2003-11-05 18:50:12 +00:00
global $config , $auth , $template , $user , $db , $phpEx , $SID ;
2002-07-14 14:35:12 +00:00
2003-11-05 18:46:31 +00:00
if ( ! $config [ 'load_jumpbox' ])
{
return ;
}
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 ' ;
2005-02-10 20:19:48 +00:00
$result = $db -> sql_query ( $sql , 600 );
2002-02-12 17:14:39 +00:00
2004-12-22 02:06:42 +00:00
$right = $padding = 0 ;
2004-03-20 17:06:21 +00:00
$padding_store = array ( '0' => 0 );
$display_jumpbox = false ;
2004-07-08 22:41:04 +00:00
$iteration = 0 ;
2004-03-20 17:06:21 +00:00
2004-08-04 19:10:15 +00:00
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
// If this happens, the padding could be "broken"
2002-11-18 18:56:27 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2002-07-14 14:35:12 +00:00
{
2005-04-10 11:21:01 +00:00
if ( $row [ 'left_id' ] < $right )
{
$padding ++ ;
$padding_store [ $row [ 'parent_id' ]] = $padding ;
}
else if ( $row [ 'left_id' ] > $right + 1 )
{
$padding = $padding_store [ $row [ 'parent_id' ]];
}
$right = $row [ 'right_id' ];
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 ;
}
2004-07-08 22:41:04 +00:00
2004-11-06 14:22:04 +00:00
if ( $acl_list && ! $auth -> acl_gets ( $acl_list , $row [ 'forum_id' ]))
2004-07-08 22:41:04 +00:00
{
continue ;
}
2004-03-20 17:06:21 +00:00
if ( ! $display_jumpbox )
{
$template -> assign_block_vars ( 'jumpbox_forums' , array (
'FORUM_ID' => ( $select_all ) ? 0 : - 1 ,
'FORUM_NAME' => ( $select_all ) ? $user -> lang [ 'ALL_FORUMS' ] : $user -> lang [ 'SELECT_FORUM' ],
'S_FORUM_COUNT' => $iteration )
);
$iteration ++ ;
$display_jumpbox = true ;
}
2004-09-01 15:47:46 +00:00
2004-03-20 17:06:21 +00:00
$template -> assign_block_vars ( 'jumpbox_forums' , array (
'FORUM_ID' => $row [ 'forum_id' ],
'FORUM_NAME' => $row [ 'forum_name' ],
'SELECTED' => ( $row [ 'forum_id' ] == $forum_id ) ? ' selected="selected"' : '' ,
'S_FORUM_COUNT' => $iteration ,
'S_IS_CAT' => ( $row [ 'forum_type' ] == FORUM_CAT ) ? true : false ,
'S_IS_LINK' => ( $row [ 'forum_type' ] == FORUM_LINK ) ? true : false ,
'S_IS_POST' => ( $row [ 'forum_type' ] == FORUM_POST ) ? true : false )
);
for ( $i = 0 ; $i < $padding ; $i ++ )
2002-11-19 23:12:11 +00:00
{
2004-03-20 17:06:21 +00:00
$template -> assign_block_vars ( 'jumpbox_forums.level' , array ());
2002-10-08 20:06:55 +00:00
}
2004-03-20 17:06:21 +00:00
$iteration ++ ;
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
2002-03-31 00:06:34 +00:00
$template -> assign_vars ( array (
2004-03-20 17:06:21 +00:00
'S_DISPLAY_JUMPBOX' => $display_jumpbox ,
2003-11-05 18:46:31 +00:00
'S_JUMPBOX_ACTION' => $action )
2002-03-31 00:06:34 +00:00
);
return ;
2001-04-19 13:18:57 +00:00
}
2005-04-09 12:26:45 +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
2004-09-01 15:47:46 +00:00
$sql = ' SELECT lang_iso , lang_local_name
2003-05-09 14:11:55 +00:00
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
2005-04-09 12:26:45 +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
2004-09-01 15:47:46 +00:00
FROM ' . STYLES_TABLE . "
2003-07-13 23:29:22 +00:00
$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
2005-04-09 12:26:45 +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
2004-05-02 13:06:57 +00:00
$tz_select = '' ;
2005-04-10 18:07:12 +00:00
foreach ( $user -> lang [ 'tz' ][ 'zones' ] 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
2005-04-09 12:26:45 +00:00
/**
* Topic and forum watching common code
*/
2004-06-06 21:44:49 +00:00
function watch_topic_forum ( $mode , & $s_watching , & $s_watching_img , $user_id , $match_id , $notify_status = 'unset' , $start = 0 )
2002-07-14 14:35:12 +00:00
{
2004-05-26 20:46:12 +00:00
global $template , $db , $user , $phpEx , $SID , $start , $phpbb_root_path ;
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?
2003-10-12 11:59:23 +00:00
if ( $user_id != ANONYMOUS )
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 ;
2003-09-07 13:46:51 +00:00
$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
{
2003-09-07 13:46:51 +00:00
$sql = 'UPDATE ' . $table_sql . "
2002-07-14 14:35:12 +00:00
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
2003-09-07 13:46:51 +00:00
$sql = 'INSERT INTO ' . $table_sql . " (user_id, $where_sql , notify_status)
2002-07-14 14:35:12 +00:00
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
{
2005-01-20 20:57:45 +00:00
if ( isset ( $_GET [ 'unwatch' ]) && $_GET [ 'unwatch' ] == $mode )
2002-02-04 18:31:22 +00:00
{
2005-01-20 20:57:45 +00:00
login_box ();
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
{
2004-05-26 20:46:12 +00:00
$s_watching [ 'link' ] = " { $phpbb_root_path } view $mode . $phpEx $SID & $u_url = $match_id & " . (( $is_watching ) ? 'unwatch' : 'watch' ) . " = $mode &start= $start " ;
$s_watching [ 'title' ] = $user -> lang [(( $is_watching ) ? 'STOP' : 'START' ) . '_WATCHING_' . strtoupper ( $mode )];
2002-07-14 14:35:12 +00:00
}
return ;
2001-04-19 13:18:57 +00:00
}
2005-04-09 12:26:45 +00:00
/**
2005-10-19 18:00:10 +00:00
* Marks a topic / forum as read
* Marks a topic as posted to
2005-04-09 12:26:45 +00:00
*/
2005-10-19 18:00:10 +00:00
function markread ( $mode , $forum_id = false , $topic_id = false , $post_time = 0 )
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
global $db , $user , $config ;
if ( $mode == 'all' )
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
if ( $forum_id === false || ! sizeof ( $forum_id ))
{
if ( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ])
{
// Mark all forums read (index page)
$db -> sql_query ( 'DELETE FROM ' . TOPICS_TRACK_TABLE . " WHERE user_id = { $user -> data [ 'user_id' ] } " );
$db -> sql_query ( 'DELETE FROM ' . FORUMS_TRACK_TABLE . " WHERE user_id = { $user -> data [ 'user_id' ] } " );
$db -> sql_query ( 'UPDATE ' . USERS_TABLE . ' SET user_lastmark = ' . time () . " WHERE user_id = { $user -> data [ 'user_id' ] } " );
}
else
{
$tracking = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
unset ( $tracking [ 'tf' ]);
unset ( $tracking [ 't' ]);
unset ( $tracking [ 'f' ]);
$tracking [ 'l' ] = base_convert ( time () - $config [ 'board_startdate' ], 10 , 36 );
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
unset ( $tracking );
}
}
2002-11-26 00:15:45 +00:00
return ;
}
2005-10-19 18:00:10 +00:00
else if ( $mode == 'topics' )
2004-05-02 13:06:57 +00:00
{
2005-10-19 18:00:10 +00:00
// Mark all topics in forums read
if ( ! is_array ( $forum_id ))
{
$forum_id = array ( $forum_id );
}
2004-05-02 13:06:57 +00:00
2005-10-19 18:00:10 +00:00
// Add 0 to forums array to mark global announcements correctly
$forum_id [] = 0 ;
2003-04-26 01:17:40 +00:00
2005-10-19 18:00:10 +00:00
if ( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ])
{
$db -> sql_query ( 'DELETE FROM ' . TOPICS_TRACK_TABLE . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND forum_id IN ( " . implode(', ', $forum_id ) . " ) " );
$sql = ' SELECT forum_id
FROM ' . FORUMS_TRACK_TABLE . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND forum_id IN ( " . implode(', ', $forum_id ) . ')';
$result = $db -> sql_query ( $sql );
$sql_update = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
$sql_update [] = $row [ 'forum_id' ];
}
$db -> sql_freeresult ( $result );
if ( sizeof ( $sql_update ))
{
$sql = 'UPDATE ' . FORUMS_TRACK_TABLE . '
SET mark_time = ' . time () . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND forum_id IN ( " . implode(', ', $sql_update ) . ')';
$db -> sql_query ( $sql );
}
2004-09-01 15:47:46 +00:00
2005-10-19 18:00:10 +00:00
if ( $sql_insert = array_diff ( $forum_id , $sql_update ))
{
$sql_ary = array ();
foreach ( $sql_insert as $f_id )
2004-01-12 15:00:09 +00:00
{
2005-10-19 18:00:10 +00:00
$sql_ary [] = array (
'user_id' => $user -> data [ 'user_id' ],
'forum_id' => $f_id ,
'mark_time' => time ()
);
2004-01-12 15:00:09 +00:00
}
2003-04-26 01:17:40 +00:00
2005-10-19 18:00:10 +00:00
if ( sizeof ( $sql_ary ))
2004-01-12 15:00:09 +00:00
{
2005-10-19 18:00:10 +00:00
$db -> sql_query ( 'INSERT INTO ' . FORUMS_TRACK_TABLE . ' ' . $db -> sql_build_array ( 'MULTI_INSERT' , $sql_ary ));
}
}
}
else
{
$tracking = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
2005-04-30 14:24:13 +00:00
2005-10-19 18:00:10 +00:00
foreach ( $forum_id as $f_id )
{
$topic_ids36 = ( isset ( $tracking [ 'tf' ][ $f_id ])) ? $tracking [ 'tf' ][ $f_id ] : array ();
unset ( $tracking [ 'tf' ][ $f_id ]);
foreach ( $topic_ids36 as $topic_id36 )
{
unset ( $tracking [ 't' ][ $topic_id36 ]);
2004-01-12 15:00:09 +00:00
}
2005-10-19 18:00:10 +00:00
unset ( $tracking [ 'f' ][ $f_id ]);
$tracking [ 'f' ][ $f_id ] = base_convert ( time () - $config [ 'board_startdate' ], 10 , 36 );
}
2003-01-07 14:37:19 +00:00
2005-10-19 18:00:10 +00:00
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
unset ( $tracking );
}
return ;
}
else if ( $mode == 'topic' )
{
if ( $topic_id === false || $forum_id === false )
{
return ;
}
if ( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ])
{
$sql = 'UPDATE ' . TOPICS_TRACK_TABLE . '
SET mark_time = ' . (( $post_time ) ? $post_time : time ()) . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND topic_id = $topic_id " ;
$db -> sql_query ( $sql );
// insert row
if ( ! $db -> sql_affectedrows ())
{
$db -> sql_return_on_error ( true );
$sql_ary = array (
'user_id' => $user -> data [ 'user_id' ],
'topic_id' => $topic_id ,
'forum_id' => ( int ) $forum_id ,
'mark_time' => ( $post_time ) ? $post_time : time (),
);
$db -> sql_query ( 'INSERT INTO ' . TOPICS_TRACK_TABLE . ' ' . $db -> sql_build_array ( 'INSERT' , $sql_ary ));
$db -> sql_return_on_error ( false );
}
}
else
{
$tracking = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
$topic_id36 = base_convert ( $topic_id , 10 , 36 );
if ( ! isset ( $tracking [ 't' ][ $topic_id36 ]))
{
$tracking [ 'tf' ][ $forum_id ][ $topic_id36 ] = true ;
}
$post_time = ( $post_time ) ? $post_time : time ();
$tracking [ 't' ][ $topic_id36 ] = base_convert ( $post_time - $config [ 'board_startdate' ], 10 , 36 );
// If the cookie grows larger than 5000 characters we will remove the smallest value
if ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]) && strlen ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]) > 5000 )
{
// echo 'Cookie grown too large' . print_r($tracking, true);
$min_value = min ( $tracking [ 't' ]);
$m_tkey = array_search ( $min_value , $t_ary );
unset ( $tracking [ 't' ][ $m_tkey ]);
foreach ( $tracking [ 'tf' ] as $f_id => $topic_id_ary )
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
if ( in_array ( $m_tkey , array_keys ( $topic_id_ary )))
2003-04-26 01:17:40 +00:00
{
2005-10-19 18:00:10 +00:00
unset ( $tracking [ 'tf' ][ $f_id ][ $m_tkey ]);
break ;
2003-04-26 01:17:40 +00:00
}
2002-11-26 00:15:45 +00:00
}
2004-01-12 15:00:09 +00:00
}
2005-10-19 18:00:10 +00:00
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
}
return ;
}
else if ( $mode == 'post' )
{
if ( $topic_id === false )
{
return ;
}
$db -> sql_return_on_error ( true );
$sql_ary = array (
'user_id' => $user -> data [ 'user_id' ],
'topic_id' => $topic_id ,
'topic_posted' => 1
);
$db -> sql_query ( 'INSERT INTO ' . TOPICS_POSTED_TABLE . ' ' . $db -> sql_build_array ( 'INSERT' , $sql_ary ));
$db -> sql_return_on_error ( false );
return ;
}
}
/**
* Get topic tracking info by using already fetched info
*/
function get_topic_tracking ( $forum_id , $topic_ids , & $rowset , $forum_mark_time , $global_announce_list = false )
{
global $config , $user ;
$last_read = array ();
if ( ! is_array ( $topic_ids ))
{
$topic_ids = array ( $topic_ids );
}
foreach ( $topic_ids as $topic_id )
{
if ( ! empty ( $rowset [ $topic_id ][ 'mark_time' ]))
{
$last_read [ $topic_id ] = $rowset [ $topic_id ][ 'mark_time' ];
}
}
$topic_ids = array_diff ( $topic_ids , array_keys ( $last_read ));
if ( sizeof ( $topic_ids ))
{
$mark_time = array ();
// Get global announcement info
if ( $global_announce_list && sizeof ( $global_announce_list ))
{
if ( ! isset ( $forum_mark_time [ 0 ]))
2004-01-12 15:00:09 +00:00
{
2005-10-19 18:00:10 +00:00
global $db ;
2003-01-07 14:37:19 +00:00
2005-10-19 18:00:10 +00:00
$sql = ' SELECT mark_time
FROM ' . FORUMS_TRACK_TABLE . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND forum_id = 0 " ;
$result = $db -> sql_query ( $sql );
$row = $db -> sql_fetchrow ( $result );
$db -> sql_freeresult ( $result );
if ( $row )
2003-04-26 01:17:40 +00:00
{
2005-10-19 18:00:10 +00:00
$mark_time [ 0 ] = $row [ 'mark_time' ];
2003-04-26 01:17:40 +00:00
}
2002-11-26 00:15:45 +00:00
}
2005-10-19 18:00:10 +00:00
else
{
if ( $forum_mark_time [ 0 ] !== false )
{
$mark_time [ 0 ] = $forum_mark_time [ 0 ];
}
}
}
2003-01-07 14:37:19 +00:00
2005-10-19 18:00:10 +00:00
if ( ! empty ( $forum_mark_time [ $forum_id ]) && $forum_mark_time [ $forum_id ] !== false )
{
$mark_time [ $forum_id ] = $forum_mark_time [ $forum_id ];
}
$user_lastmark = ( isset ( $mark_time [ $forum_id ])) ? $mark_time [ $forum_id ] : $user -> data [ 'user_lastmark' ];
2003-01-07 14:37:19 +00:00
2005-10-19 18:00:10 +00:00
foreach ( $topic_ids as $topic_id )
{
if ( $global_announce_list && isset ( $global_announce_list [ $topic_id ]))
{
$last_read [ $topic_id ] = ( isset ( $mark_time [ 0 ])) ? $mark_time [ 0 ] : $user_lastmark ;
}
else
2005-01-02 19:06:45 +00:00
{
2005-10-19 18:00:10 +00:00
$last_read [ $topic_id ] = $user_lastmark ;
2005-01-02 19:06:45 +00:00
}
2005-10-19 18:00:10 +00:00
}
}
return $last_read ;
}
/**
* Get topic tracking info from db ( for cookie based tracking only this function is used )
*/
function get_complete_topic_tracking ( $forum_id , $topic_ids , $global_announce_list = false )
{
global $config , $user ;
$last_read = array ();
if ( ! is_array ( $topic_ids ))
{
$topic_ids = array ( $topic_ids );
}
if ( $config [ 'load_db_lastread' ] && $user -> data [ 'is_registered' ])
{
global $db ;
$sql = ' SELECT topic_id , mark_time
FROM ' . TOPICS_TRACK_TABLE . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND topic_id IN ( " . implode(', ', $topic_ids ) . " ) " ;
$result = $db -> sql_query ( $sql );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$last_read [ $row [ 'topic_id' ]] = $row [ 'mark_time' ];
}
$db -> sql_freeresult ( $result );
$topic_ids = array_diff ( $topic_ids , array_keys ( $last_read ));
if ( sizeof ( $topic_ids ))
{
$sql = ' SELECT forum_id , mark_time
FROM ' . FORUMS_TRACK_TABLE . "
WHERE user_id = { $user -> data [ 'user_id' ]}
AND forum_id " .
(( $global_announce_list && sizeof ( $global_announce_list )) ? " IN (0, $forum_id ) " : " = $forum_id " );
$result = $db -> sql_query ( $sql );
2005-01-02 19:06:45 +00:00
2005-10-19 18:00:10 +00:00
$mark_time = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
{
$mark_time [ $row [ 'forum_id' ]] = $row [ 'mark_time' ];
}
$db -> sql_freeresult ( $result );
$user_lastmark = ( isset ( $mark_time [ $forum_id ])) ? $mark_time [ $forum_id ] : $user -> data [ 'user_lastmark' ];
2004-09-01 15:47:46 +00:00
2005-10-19 18:00:10 +00:00
foreach ( $topic_ids as $topic_id )
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
if ( $global_announce_list && isset ( $global_announce_list [ $topic_id ]))
2002-11-26 00:15:45 +00:00
{
2005-10-19 18:00:10 +00:00
$last_read [ $topic_id ] = ( isset ( $mark_time [ 0 ])) ? $mark_time [ 0 ] : $user_lastmark ;
}
else
{
$last_read [ $topic_id ] = $user_lastmark ;
2002-11-26 00:15:45 +00:00
}
2003-04-26 01:17:40 +00:00
}
2005-10-19 18:00:10 +00:00
}
}
else
{
global $tracking_topics ;
if ( ! isset ( $tracking_topics ) || ! sizeof ( $tracking_topics ))
{
$tracking_topics = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
}
if ( ! $user -> data [ 'is_registered' ])
{
$user_lastmark = ( isset ( $tracking_topics [ 'l' ])) ? base_convert ( $tracking_topics [ 'l' ], 36 , 10 ) + $config [ 'board_startdate' ] : 0 ;
}
else
{
$user_lastmark = $user -> data [ 'user_lastmark' ];
}
foreach ( $topic_ids as $topic_id )
{
$topic_id36 = base_convert ( $topic_id , 10 , 36 );
if ( isset ( $tracking_topics [ 't' ][ $topic_id36 ]))
2003-04-26 01:17:40 +00:00
{
2005-10-19 18:00:10 +00:00
$last_read [ $topic_id ] = base_convert ( $tracking_topics [ 't' ][ $topic_id36 ], 36 , 10 ) + $config [ 'board_startdate' ];
}
}
2003-06-19 16:19:59 +00:00
2005-10-19 18:00:10 +00:00
$topic_ids = array_diff ( $topic_ids , array_keys ( $last_read ));
2003-04-26 01:17:40 +00:00
2005-10-19 18:00:10 +00:00
if ( sizeof ( $topic_ids ))
{
$mark_time = array ();
if ( $global_announce_list && sizeof ( $global_announce_list ))
{
if ( isset ( $tracking_topics [ 'f' ][ 0 ]))
2003-06-19 16:19:59 +00:00
{
2005-10-19 18:00:10 +00:00
$mark_time [ 0 ] = base_convert ( $tracking_topics [ 'f' ][ 0 ], 36 , 10 ) + $config [ 'board_startdate' ];
}
}
if ( isset ( $tracking_topics [ 'f' ][ $forum_id ]))
{
$mark_time [ $forum_id ] = base_convert ( $tracking_topics [ 'f' ][ $forum_id ], 36 , 10 ) + $config [ 'board_startdate' ];
}
$user_lastmark = ( isset ( $mark_time [ $forum_id ])) ? $mark_time [ $forum_id ] : $user_lastmark ;
2003-06-19 16:19:59 +00:00
2005-10-19 18:00:10 +00:00
foreach ( $topic_ids as $topic_id )
{
if ( $global_announce_list && isset ( $global_announce_list [ $topic_id ]))
{
$last_read [ $topic_id ] = ( isset ( $mark_time [ 0 ])) ? $mark_time [ 0 ] : $user_lastmark ;
2003-06-19 16:19:59 +00:00
}
2005-10-19 18:00:10 +00:00
else
2005-01-02 19:06:45 +00:00
{
2005-10-19 18:00:10 +00:00
$last_read [ $topic_id ] = $user_lastmark ;
2005-01-02 19:06:45 +00:00
}
2002-11-26 00:15:45 +00:00
}
2005-10-19 18:00:10 +00:00
}
2002-11-26 00:15:45 +00:00
}
2005-10-19 18:00:10 +00:00
return $last_read ;
2002-11-26 00:15:45 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Pagination routine , generates page number sequence
* tpl_prefix is for using different pagination blocks at one page
*/
function generate_pagination ( $base_url , $num_items , $per_page , $start_item , $add_prevnext_text = false , $tpl_prefix = '' )
2001-05-07 23:04:16 +00:00
{
2003-08-25 01:38:49 +00:00
global $template , $user ;
2001-05-27 03:11:27 +00:00
2004-05-26 20:46:12 +00:00
$seperator = $user -> theme [ 'primary' ][ 'pagination_sep' ];
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
{
2003-08-25 01:38:49 +00:00
return false ;
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
2004-09-16 18:33:22 +00:00
$page_string = ( $on_page == 1 ) ? '<strong>1</strong>' : '<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 );
2004-05-26 20:46:12 +00:00
$page_string .= ( $start_cnt > 1 ) ? ' ... ' : $seperator ;
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
{
2004-05-26 20:46:12 +00:00
$page_string .= ( $i == $on_page ) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . " &start= " . (( $i - 1 ) * $per_page ) . '">' . $i . '</a>' ;
2002-11-18 18:56:27 +00:00
if ( $i < $end_cnt - 1 )
2001-10-25 23:21:12 +00:00
{
2004-05-26 20:46:12 +00:00
$page_string .= $seperator ;
2001-10-25 23:21:12 +00:00
}
2001-05-07 23:04:16 +00:00
}
2004-05-26 20:46:12 +00:00
$page_string .= ( $end_cnt < $total_pages ) ? ' ... ' : $seperator ;
2001-10-25 23:21:12 +00:00
}
else
{
2004-05-26 20:46:12 +00:00
$page_string .= $seperator ;
2002-10-04 13:09:10 +00:00
for ( $i = 2 ; $i < $total_pages ; $i ++ )
2001-10-25 23:21:12 +00:00
{
2004-05-26 20:46:12 +00:00
$page_string .= ( $i == $on_page ) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . " &start= " . (( $i - 1 ) * $per_page ) . '">' . $i . '</a>' ;
2002-11-18 18:56:27 +00:00
if ( $i < $total_pages )
2001-10-25 23:21:12 +00:00
{
2004-05-26 20:46:12 +00:00
$page_string .= $seperator ;
2001-10-25 23:21:12 +00:00
}
}
2001-05-07 23:04:16 +00:00
}
2001-05-27 03:11:27 +00:00
2004-09-16 18:33:22 +00:00
$page_string .= ( $on_page == $total_pages ) ? '<strong>' . $total_pages . '</strong>' : '<a href="' . $base_url . '&start=' . (( $total_pages - 1 ) * $per_page ) . '">' . $total_pages . '</a>' ;
2001-10-25 23:21:12 +00:00
2005-04-09 12:26:45 +00:00
if ( $add_prevnext_text )
{
if ( $on_page != 1 )
{
$page_string = '<a href="' . $base_url . '&start=' . (( $on_page - 2 ) * $per_page ) . '">' . $user -> lang [ 'PREVIOUS' ] . '</a> ' . $page_string ;
}
if ( $on_page != $total_pages )
{
$page_string .= ' <a href="' . $base_url . '&start=' . ( $on_page * $per_page ) . '">' . $user -> lang [ 'NEXT' ] . '</a>' ;
}
}
2004-09-16 18:33:22 +00:00
$template -> assign_vars ( array (
$tpl_prefix . 'BASE_URL' => $base_url ,
$tpl_prefix . 'PER_PAGE' => $per_page ,
2004-10-01 11:27:14 +00:00
2004-09-16 18:33:22 +00:00
$tpl_prefix . 'PREVIOUS_PAGE' => ( $on_page == 1 ) ? '' : $base_url . '&start=' . (( $on_page - 2 ) * $per_page ),
$tpl_prefix . 'NEXT_PAGE' => ( $on_page == $total_pages ) ? '' : $base_url . '&start=' . ( $on_page * $per_page ))
);
2003-08-25 01:38:49 +00:00
2001-05-07 23:04:16 +00:00
return $page_string ;
}
2005-04-09 12:26:45 +00:00
/**
* Return current page ( pagination )
*/
2002-08-02 16:39:02 +00:00
function on_page ( $num_items , $per_page , $start )
{
2003-08-25 01:38:49 +00:00
global $template , $user ;
$on_page = floor ( $start / $per_page ) + 1 ;
2003-09-07 13:46:51 +00:00
$template -> assign_var ( 'ON_PAGE' , $on_page );
2002-08-02 16:39:02 +00:00
2003-08-25 01:38:49 +00:00
return sprintf ( $user -> lang [ 'PAGE_OF' ], $on_page , max ( ceil ( $num_items / $per_page ), 1 ));
2002-08-02 16:39:02 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Generate board url
*/
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
}
2005-04-09 12:26:45 +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
2004-07-08 22:41:04 +00:00
// Make sure no &'s are in, this will break the redirect
$url = str_replace ( '&' , '&' , $url );
2005-01-20 20:57:45 +00:00
// If relative path, prepend board url
if ( strpos ( $url , '://' ) === false && $url { 0 } != '/' )
2005-01-15 18:49:54 +00:00
{
$url = generate_board_url () . preg_replace ( '#^/?(.*?)/?$#' , '/\1' , trim ( $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>' ;
2004-11-06 14:22:04 +00:00
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 ;
}
2005-04-09 12:26:45 +00:00
/**
* Meta refresh assignment
*/
2003-04-26 01:17:40 +00:00
function meta_refresh ( $time , $url )
{
global $template ;
$template -> assign_vars ( array (
'META' => '<meta http-equiv="refresh" content="' . $time . ';url=' . $url . '">' )
);
}
2005-04-09 12:26:45 +00:00
/**
* Build Confirm box
*/
2005-08-18 12:48:39 +00:00
function confirm_box ( $check , $title = '' , $hidden = '' , $html_body = 'confirm_body.html' , $u_action = '' )
2004-05-02 13:06:57 +00:00
{
2004-10-08 11:01:30 +00:00
global $user , $template , $db ;
2005-08-18 12:48:39 +00:00
global $SID , $phpEx , $phpbb_root_path ;
2004-05-26 20:46:12 +00:00
if ( isset ( $_POST [ 'cancel' ]))
{
return false ;
}
2004-09-01 15:47:46 +00:00
2004-05-26 20:46:12 +00:00
$confirm = false ;
if ( isset ( $_POST [ 'confirm' ]))
{
// language frontier
if ( $_POST [ 'confirm' ] == $user -> lang [ 'YES' ])
{
$confirm = true ;
}
}
2004-05-02 13:06:57 +00:00
2004-05-26 20:46:12 +00:00
if ( $check && $confirm )
2004-05-02 13:06:57 +00:00
{
$user_id = request_var ( 'user_id' , 0 );
2004-05-26 20:46:12 +00:00
$session_id = request_var ( 'sess' , '' );
2004-08-04 19:10:15 +00:00
$confirm_key = request_var ( 'confirm_key' , '' );
2004-05-02 13:06:57 +00:00
2005-04-30 14:24:13 +00:00
if ( $user_id != $user -> data [ 'user_id' ] || $session_id != $user -> session_id || ! $confirm_key || ! $user -> data [ 'user_last_confirm_key' ] || $confirm_key != $user -> data [ 'user_last_confirm_key' ])
2004-05-02 13:06:57 +00:00
{
return false ;
}
2004-09-01 15:47:46 +00:00
2005-04-30 14:24:13 +00:00
// Reset user_last_confirm_key
$sql = 'UPDATE ' . USERS_TABLE . " SET user_last_confirm_key = ''
WHERE user_id = " . $user->data ['user_id'];
$db -> sql_query ( $sql );
2004-05-02 13:06:57 +00:00
return true ;
}
2004-05-26 20:46:12 +00:00
else if ( $check )
{
return false ;
}
2004-09-01 15:47:46 +00:00
2005-08-19 10:55:30 +00:00
$s_hidden_fields = build_hidden_fields ( array (
'user_id' => $user -> data [ 'user_id' ],
'sess' => $user -> session_id ,
'sid' => $SID )
);
2004-05-26 20:46:12 +00:00
// generate activation key
2004-08-04 19:10:15 +00:00
$confirm_key = gen_rand_string ( 10 );
2004-05-02 13:06:57 +00:00
2005-10-19 18:00:10 +00:00
if ( defined ( 'IN_ADMIN' ) && isset ( $user -> data [ 'session_admin' ]) && $user -> data [ 'session_admin' ])
{
adm_page_header (( ! isset ( $user -> lang [ $title ])) ? $user -> lang [ 'CONFIRM' ] : $user -> lang [ $title ]);
}
else
{
page_header (( ! isset ( $user -> lang [ $title ])) ? $user -> lang [ 'CONFIRM' ] : $user -> lang [ $title ]);
}
2004-05-02 13:06:57 +00:00
$template -> set_filenames ( array (
2004-07-08 22:41:04 +00:00
'body' => $html_body )
2004-05-02 13:06:57 +00:00
);
2004-05-26 20:46:12 +00:00
// If activation key already exist, we better do not re-use the key (something very strange is going on...)
2004-08-04 19:10:15 +00:00
if ( request_var ( 'confirm_key' , '' ))
2004-05-26 20:46:12 +00:00
{
2004-10-08 11:01:30 +00:00
// This should not occur, therefore we cancel the operation to safe the user
return false ;
2004-05-26 20:46:12 +00:00
}
2004-10-08 11:01:30 +00:00
// re-add $SID
2005-08-18 12:48:39 +00:00
$use_page = ( $u_action ) ? $phpbb_root_path . $u_action : $phpbb_root_path . $user -> page ;
$u_action = ( strpos ( $use_page , " . { $phpEx } ? " ) !== false ) ? str_replace ( " . { $phpEx } ? " , " . $phpEx $SID & " , $use_page ) . '&' : $use_page . '?' ;
2004-10-08 11:01:30 +00:00
$u_action .= 'confirm_key=' . $confirm_key ;
2004-05-02 13:06:57 +00:00
$template -> assign_vars ( array (
2005-08-18 12:48:39 +00:00
'MESSAGE_TITLE' => ( ! isset ( $user -> lang [ $title ])) ? $user -> lang [ 'CONFIRM' ] : $user -> lang [ $title ],
'MESSAGE_TEXT' => ( ! isset ( $user -> lang [ $title . '_CONFIRM' ])) ? $title : $user -> lang [ $title . '_CONFIRM' ],
2004-05-02 13:06:57 +00:00
2004-05-26 20:46:12 +00:00
'YES_VALUE' => $user -> lang [ 'YES' ],
2004-10-08 11:01:30 +00:00
'S_CONFIRM_ACTION' => $u_action ,
2004-05-02 13:06:57 +00:00
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields )
);
2004-09-01 15:47:46 +00:00
2004-08-04 19:10:15 +00:00
$sql = 'UPDATE ' . USERS_TABLE . " SET user_last_confirm_key = ' " . $db -> sql_escape ( $confirm_key ) . " '
WHERE user_id = " . $user->data ['user_id'];
2004-05-26 20:46:12 +00:00
$db -> sql_query ( $sql );
2005-10-19 18:00:10 +00:00
if ( defined ( 'IN_ADMIN' ) && isset ( $user -> data [ 'session_admin' ]) && $user -> data [ 'session_admin' ])
{
adm_page_footer ();
}
else
{
page_footer ();
}
2004-05-02 13:06:57 +00:00
}
2002-10-30 00:57:27 +00:00
2005-04-09 12:26:45 +00:00
/**
* Generate login box or verify password
*/
2004-09-01 15:47:46 +00:00
function login_box ( $redirect = '' , $l_explain = '' , $l_success = '' , $admin = false , $s_display = true )
2003-03-17 00:53:38 +00:00
{
2005-04-09 12:26:45 +00:00
global $SID , $db , $user , $template , $auth , $phpEx , $phpbb_root_path , $config ;
2003-03-17 00:53:38 +00:00
$err = '' ;
2004-09-01 15:47:46 +00:00
2003-03-17 00:53:38 +00:00
if ( isset ( $_POST [ 'login' ]))
{
2004-01-30 11:48:02 +00:00
$username = request_var ( 'username' , '' );
$password = request_var ( 'password' , '' );
$autologin = ( ! empty ( $_POST [ 'autologin' ])) ? TRUE : FALSE ;
2003-03-17 00:53:38 +00:00
$viewonline = ( ! empty ( $_POST [ 'viewonline' ])) ? 0 : 1 ;
2004-09-01 15:47:46 +00:00
$admin = ( $admin ) ? 1 : 0 ;
2003-03-17 00:53:38 +00:00
2004-09-01 15:47:46 +00:00
// If authentication is successful we redirect user to previous page
if (( $result = $auth -> login ( $username , $password , $autologin , $viewonline , $admin )) === true )
2003-03-17 00:53:38 +00:00
{
2005-04-09 12:26:45 +00:00
// If admin authentication
if ( $admin )
{
add_log ( 'admin' , 'LOG_ADMIN_AUTH_SUCCESS' );
}
2004-09-01 15:47:46 +00:00
$redirect = request_var ( 'redirect' , " index. $phpEx $SID " );
meta_refresh ( 3 , $redirect );
2003-10-12 11:59:23 +00:00
2004-09-01 15:47:46 +00:00
$message = (( $l_success ) ? $l_success : $user -> lang [ 'LOGIN_REDIRECT' ]) . '<br /><br />' . sprintf ( $user -> lang [ 'RETURN_PAGE' ], '<a href="' . $redirect . '">' , '</a> ' );
trigger_error ( $message );
2003-03-17 00:53:38 +00:00
}
2005-04-09 12:26:45 +00:00
if ( $admin )
{
add_log ( 'admin' , 'LOG_ADMIN_AUTH_FAIL' );
}
2003-03-17 00:53:38 +00:00
// 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
2005-04-09 12:26:45 +00:00
$err = ( $result === 0 ) ? $user -> lang [ 'ACTIVE_ERROR' ] : $user -> lang [ 'LOGIN_ERROR' ];
2003-03-17 00:53:38 +00:00
}
2004-09-01 15:47:46 +00:00
if ( ! $redirect )
{
$split_page = array ();
preg_match_all ( '#^.*?([a-z]+?)\.' . $phpEx . '\?(.*?)$#i' , $user -> page , $split_page , PREG_SET_ORDER );
// No script name set? Assume index
if ( empty ( $split_page [ 0 ][ 1 ]))
{
$split_page [ 0 ][ 1 ] = 'index' ;
}
// Current page correctly formatted for (login) redirects
$redirect = htmlspecialchars ( $split_page [ 0 ][ 1 ] . '.' . $phpEx . $SID . (( ! empty ( $split_page [ 0 ][ 2 ])) ? '&' . $split_page [ 0 ][ 2 ] : '' ));
}
2005-08-19 10:55:30 +00:00
$s_hidden_fields = build_hidden_fields ( array ( 'redirect' => $redirect , 'sid' => $SID ));
2004-01-30 11:48:02 +00:00
2003-03-17 00:53:38 +00:00
$template -> assign_vars ( array (
2004-09-01 15:47:46 +00:00
'LOGIN_ERROR' => $err ,
'LOGIN_EXPLAIN' => $l_explain ,
2003-03-17 00:53:38 +00:00
2005-04-09 12:26:45 +00:00
'U_SEND_PASSWORD' => ( $config [ 'email_enable' ]) ? " { $phpbb_root_path } ucp. $phpEx $SID &mode=sendpassword " : '' ,
'U_RESEND_ACTIVATION' => ( $config [ 'require_activation' ] != USER_ACTIVATION_NONE && $config [ 'email_enable' ]) ? " { $phpbb_root_path } ucp. $phpEx $SID &mode=resend_act " : '' ,
'U_TERMS_USE' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=terms " ,
'U_PRIVACY' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=privacy " ,
2003-03-17 00:53:38 +00:00
2004-09-01 15:47:46 +00:00
'S_DISPLAY_FULL_LOGIN' => ( $s_display ) ? true : false ,
2004-09-16 18:33:22 +00:00
'S_LOGIN_ACTION' => ( ! $admin ) ? " { $phpbb_root_path } ucp. $phpEx $SID &mode=login " : " index. $phpEx $SID " ,
2004-09-01 15:47:46 +00:00
'S_HIDDEN_FIELDS' => $s_hidden_fields )
2003-03-17 00:53:38 +00:00
);
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' )
);
2004-03-06 17:43:32 +00:00
make_jumpbox ( " { $phpbb_root_path } viewforum. $phpEx " );
2003-03-17 00:53:38 +00:00
2003-05-03 23:58:45 +00:00
page_footer ();
2003-03-17 00:53:38 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Generate forum login box
*/
2003-05-03 23:58:45 +00:00
function login_forum_box ( & $forum_data )
{
global $db , $config , $user , $template , $phpEx ;
2003-11-08 17:22:04 +00:00
$password = request_var ( 'password' , '' );
2003-08-28 00:28:18 +00:00
$sql = ' SELECT forum_id
2004-09-01 15:47:46 +00:00
FROM ' . FORUMS_ACCESS_TABLE . '
2003-05-03 23:58:45 +00:00
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 );
2003-11-08 17:22:04 +00:00
if ( $password )
2003-05-03 23:58:45 +00:00
{
2003-11-08 17:22:04 +00:00
// Remove expired authorised sessions
2004-09-01 15:47:46 +00:00
$sql = ' SELECT session_id
2003-11-08 17:22:04 +00:00
FROM ' . SESSIONS_TABLE ;
$result = $db -> sql_query ( $sql );
if ( $row = $db -> sql_fetchrow ( $result ))
{
$sql_in = array ();
do
{
2003-11-10 14:19:33 +00:00
$sql_in [] = " ' " . $db -> sql_escape ( $row [ 'session_id' ]) . " ' " ;
2003-11-08 17:22:04 +00:00
}
while ( $row = $db -> sql_fetchrow ( $result ));
2005-04-10 11:21:01 +00:00
// Remove expired sessions
2003-11-08 17:22:04 +00:00
$sql = 'DELETE FROM ' . FORUMS_ACCESS_TABLE . '
2003-11-10 14:19:33 +00:00
WHERE session_id NOT IN ( ' . implode(' , ', $sql_in) . ' ) ' ;
2003-11-08 17:22:04 +00:00
$db -> sql_query ( $sql );
}
$db -> sql_freeresult ( $result );
2003-08-27 16:31:54 +00:00
2003-11-08 17:22:04 +00:00
if ( $password == $forum_data [ 'forum_password' ])
2003-05-03 23:58:45 +00:00
{
2004-02-21 12:47:35 +00:00
$sql = 'INSERT INTO ' . FORUMS_ACCESS_TABLE . ' ( forum_id , user_id , session_id )
2003-11-10 14:19:33 +00:00
VALUES ( ' . $forum_data[' forum_id '] . ' , ' . $user->data[' user_id '] . ", ' " . $db->sql_escape ( $user->session_id ) . " ' ) " ;
2003-05-03 23:58:45 +00:00
$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
2005-04-09 12:26:45 +00:00
/**
* Bump Topic Check - used by posting and viewtopic
*/
2003-11-01 16:10:21 +00:00
function bump_topic_allowed ( $forum_id , $topic_bumped , $last_post_time , $topic_poster , $last_topic_poster )
{
global $config , $auth , $user ;
// Check permission and make sure the last post was not already bumped
if ( ! $auth -> acl_get ( 'f_bump' , $forum_id ) || $topic_bumped )
{
return false ;
}
// Check bump time range, is the user really allowed to bump the topic at this time?
2004-05-26 20:46:12 +00:00
$bump_time = ( $config [ 'bump_type' ] == 'm' ) ? $config [ 'bump_interval' ] * 60 : (( $config [ 'bump_type' ] == 'h' ) ? $config [ 'bump_interval' ] * 3600 : $config [ 'bump_interval' ] * 86400 );
2003-11-01 16:10:21 +00:00
// Check bump time
if ( $last_post_time + $bump_time > time ())
{
return false ;
}
// Check bumper, only topic poster and last poster are allowed to bump
2003-11-05 18:46:31 +00:00
if ( $topic_poster != $user -> data [ 'user_id' ] && $last_topic_poster != $user -> data [ 'user_id' ] && ! $auth -> acl_get ( 'm_' , $forum_id ))
2003-11-01 16:10:21 +00:00
{
return false ;
}
// A bump time of 0 will completely disable the bump feature... not intended but might be useful.
return $bump_time ;
}
2005-04-09 12:26:45 +00:00
/**
* Censoring
*/
2004-02-21 12:47:35 +00:00
function censor_text ( $text )
{
2005-10-02 18:15:12 +00:00
global $censors , $user , $cache ;
2004-02-21 12:47:35 +00:00
if ( ! isset ( $censors ))
{
$censors = array ();
2005-04-09 12:26:45 +00:00
// TODO: For ANONYMOUS, this option should be enabled by default
2004-02-21 12:47:35 +00:00
if ( $user -> optionget ( 'viewcensors' ))
{
2005-10-02 18:15:12 +00:00
$cache -> obtain_word_list ( $censors );
2004-02-21 12:47:35 +00:00
}
}
if ( sizeof ( $censors ) && $user -> optionget ( 'viewcensors' ))
{
return preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $text );
}
return $text ;
}
2005-04-09 12:26:45 +00:00
/**
* Smiley processing
*/
2005-03-21 23:10:11 +00:00
function smiley_text ( $text , $force_option = false )
2004-02-21 12:47:35 +00:00
{
global $config , $user , $phpbb_root_path ;
2005-03-21 23:10:11 +00:00
return ( $force_option || ! $config [ 'allow_smilies' ] || ! $user -> optionget ( 'viewsmilies' )) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $text ) : str_replace ( '<img src="{SMILIES_PATH}' , '<img src="' . $phpbb_root_path . $config [ 'smilies_path' ], $text );
2004-02-21 12:47:35 +00:00
}
2005-04-09 12:26:45 +00:00
/**
* Inline Attachment processing
*/
2004-09-16 18:33:22 +00:00
function parse_inline_attachments ( & $text , & $attachments , & $update_count , $forum_id = 0 , $preview = false )
{
global $config , $user ;
$attachments = display_attachments ( $forum_id , NULL , $attachments , $update_count , $preview , true );
$tpl_size = sizeof ( $attachments );
$unset_tpl = array ();
preg_match_all ( '#<!\-\- ia([0-9]+) \-\->(.*?)<!\-\- ia\1 \-\->#' , $text , $matches , PREG_PATTERN_ORDER );
$replace = array ();
foreach ( $matches [ 0 ] as $num => $capture )
{
// Flip index if we are displaying the reverse way
$index = ( $config [ 'display_order' ]) ? ( $tpl_size - ( $matches [ 1 ][ $num ] + 1 )) : $matches [ 1 ][ $num ];
$replace [ 'from' ][] = $matches [ 0 ][ $num ];
$replace [ 'to' ][] = ( isset ( $attachments [ $index ])) ? $attachments [ $index ] : sprintf ( $user -> lang [ 'MISSING_INLINE_ATTACHMENT' ], $matches [ 2 ][ array_search ( $index , $matches [ 1 ])]);
$unset_tpl [] = $index ;
}
if ( isset ( $replace [ 'from' ]))
{
$text = str_replace ( $replace [ 'from' ], $replace [ 'to' ], $text );
}
return array_unique ( $unset_tpl );
}
2005-04-09 12:26:45 +00:00
/**
* Check if extension is allowed to be posted within forum X ( forum_id 0 == private messaging )
*/
2004-09-17 09:11:48 +00:00
function extension_allowed ( $forum_id , $extension , & $extensions )
2004-03-20 17:06:21 +00:00
{
2004-09-17 09:11:48 +00:00
if ( ! sizeof ( $extensions ))
2004-03-20 17:06:21 +00:00
{
2005-10-02 18:15:12 +00:00
global $cache ;
2004-03-20 17:06:21 +00:00
$extensions = array ();
2005-10-02 18:15:12 +00:00
$cache -> obtain_attach_extensions ( $extensions );
2004-03-20 17:06:21 +00:00
}
2004-05-02 13:06:57 +00:00
if ( ! isset ( $extensions [ '_allowed_' ][ $extension ]))
{
return false ;
}
$check = $extensions [ '_allowed_' ][ $extension ];
if ( is_array ( $check ))
{
// Check for private messaging
if ( sizeof ( $check ) == 1 && $check [ 0 ] == 0 )
{
return true ;
}
2004-09-01 15:47:46 +00:00
2004-05-02 13:06:57 +00:00
return ( ! in_array ( $forum_id , $check )) ? false : true ;
}
else
{
return ( $forum_id == 0 ) ? false : true ;
}
return false ;
2004-03-20 17:06:21 +00:00
}
2005-08-18 12:48:39 +00:00
/**
* Build simple hidden fields from array
*/
function build_hidden_fields ( $field_ary )
{
$s_hidden_fields = '' ;
foreach ( $field_ary as $name => $vars )
{
if ( is_array ( $vars ))
{
foreach ( $vars as $key => $value )
{
$s_hidden_fields .= '<input type="hidden" name="' . $name . '[' . $key . ']" value="' . $value . '" />' ;
}
}
else
{
$s_hidden_fields .= '<input type="hidden" name="' . $name . '" value="' . $vars . '" />' ;
}
}
return $s_hidden_fields ;
}
2005-04-09 12:26:45 +00:00
/**
* Error and message handler , call with trigger_error if reqd
*/
2002-10-08 20:06:55 +00:00
function msg_handler ( $errno , $msg_text , $errfile , $errline )
{
2003-05-04 17:15:23 +00:00
global $cache , $db , $auth , $template , $config , $user ;
2005-04-30 14:24:13 +00:00
global $phpEx , $phpbb_root_path , $starttime , $display_header , $msg_title ;
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
{
2004-05-26 20:46:12 +00:00
case E_NOTICE :
case E_WARNING :
if ( defined ( 'DEBUG_EXTRA' ))
{
2005-01-02 19:06:45 +00:00
if ( ! strstr ( $errfile , 'cache' ) && ! strstr ( $errfile , 'template.php' ))
2004-05-26 20:46:12 +00:00
{
echo " <b>PHP Notice</b>: in file <b> $errfile </b> on line <b> $errline </b>: <b> $msg_text </b><br> " ;
}
}
break ;
2002-10-08 20:06:55 +00:00
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 :
2005-10-02 18:15:12 +00:00
define ( 'IN_ERROR_HANDLER' , true );
2003-04-01 00:06:11 +00:00
if ( empty ( $user -> data ))
2002-11-01 12:23:08 +00:00
{
2005-10-02 18:15:12 +00:00
$user -> session_begin ();
2002-11-01 12:23:08 +00:00
}
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
{
2005-10-02 18:15:12 +00:00
if ( defined ( 'IN_ADMIN' ) && isset ( $user -> data [ 'session_admin' ]) && $user -> data [ 'session_admin' ])
2002-10-08 20:06:55 +00:00
{
2005-10-19 18:00:10 +00:00
// adm_page_header('', '', false);
adm_page_header ( '' );
2002-10-08 20:06:55 +00:00
}
else
{
2005-10-19 18:00:10 +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 ;
2004-05-02 13:06:57 +00:00
$msg_title = ( ! isset ( $msg_title )) ? $user -> lang [ 'INFORMATION' ] : (( ! empty ( $user -> lang [ $msg_title ])) ? $user -> lang [ $msg_title ] : $msg_title );
$display_header = ( ! isset ( $display_header )) ? false : ( bool ) $display_header ;
2003-05-03 23:58:45 +00:00
2005-10-19 18:00:10 +00:00
$template -> set_filenames ( array (
'body' => 'message_body.html' )
);
2002-10-08 20:06:55 +00:00
2005-10-19 18:00:10 +00:00
$template -> assign_vars ( array (
'MESSAGE_TITLE' => $msg_title ,
'MESSAGE_TEXT' => $msg_text )
);
// We do not want the cron script to be called on error messages
define ( 'IN_CRON' , true );
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
2005-04-09 12:26:45 +00:00
/**
* Generate page header
*/
2003-05-02 15:50:11 +00:00
function page_header ( $page_title = '' )
{
2004-03-06 17:43:32 +00:00
global $db , $config , $template , $SID , $user , $auth , $phpEx , $phpbb_root_path ;
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 )
{
2004-03-06 17:43:32 +00:00
$u_login_logout = " { $phpbb_root_path } 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
{
2004-03-06 17:43:32 +00:00
$u_login_logout = " { $phpbb_root_path } 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 = '' ;
2004-01-05 11:15:11 +00:00
2005-01-27 18:59:38 +00:00
if ( $config [ 'load_online' ] && $config [ 'load_online_time' ])
2003-05-02 15:50:11 +00:00
{
$userlist_ary = $userlist_visible = array ();
2003-10-15 17:43:07 +00:00
$logged_visible_online = $logged_hidden_online = $guests_online = $prev_user_id = 0 ;
2005-02-10 20:19:48 +00:00
$prev_session_ip = $reading_sql = '' ;
2003-10-15 17:43:07 +00:00
2003-05-02 15:50:11 +00:00
if ( ! empty ( $_REQUEST [ 'f' ]))
{
2004-01-05 11:15:11 +00:00
$f = request_var ( 'f' , 0 );
2005-02-10 20:19:48 +00:00
$reading_sql = " AND s.session_page LIKE '%f= $f %' " ;
}
// Get number of online guests
if ( ! $config [ 'load_online_guests' ])
{
$sql = 'SELECT COUNT(DISTINCT s.session_ip) as num_guests FROM ' . SESSIONS_TABLE . ' s
WHERE s . session_user_id = ' . ANONYMOUS . '
AND s . session_time >= ' . (time() - ($config[' load_online_time ' ] * 60 )) .
$reading_sql ;
$result = $db -> sql_query ( $sql );
$guests_online = ( int ) $db -> sql_fetchfield ( 'num_guests' , 0 , $result );
$db -> sql_freeresult ( $result );
2003-05-02 15:50:11 +00:00
}
2004-09-01 15:47:46 +00:00
$sql = ' SELECT u . username , u . user_id , u . user_type , u . user_allow_viewonline , u . user_colour , s . session_ip , s . session_viewonline
2003-05-03 23:58:45 +00:00
FROM ' . USERS_TABLE . ' u , ' . SESSIONS_TABLE . ' s
2005-02-10 20:19:48 +00:00
WHERE s . session_time >= ' . (time() - (intval($config[' load_online_time ' ]) * 60 )) .
$reading_sql .
(( ! $config [ 'load_online_guests' ]) ? ' AND s.session_user_id <> ' . ANONYMOUS : '' ) . '
AND u . user_id = s . session_user_id
ORDER BY u . username ASC , s . session_ip ASC ' ;
2004-12-31 13:58:41 +00:00
$result = $db -> sql_query ( $sql );
2003-05-02 15:50:11 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
2005-02-10 20:19:48 +00:00
// User is logged in and therefore not a guest
2003-05-02 15:50:11 +00:00
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>' ;
}
2004-09-04 19:32:23 +00:00
if ( $row [ 'user_allow_viewonline' ] && $row [ 'session_viewonline' ])
2003-05-02 15:50:11 +00:00
{
$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' ))
{
2004-03-06 17:43:32 +00:00
$user_online_link = ( $row [ 'user_type' ] <> USER_IGNORE ) ? " <a href= \" { $phpbb_root_path } memberlist. $phpEx $SID &mode=viewprofile&u= " . $row [ 'user_id' ] . '">' . $user_online_link . '</a>' : $user_online_link ;
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' ];
}
2004-12-31 13:58:41 +00:00
$db -> sql_freeresult ( $result );
2003-05-02 15:50:11 +00:00
2004-01-05 11:15:11 +00:00
if ( ! $online_userlist )
2003-05-02 15:50:11 +00:00
{
$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 );
2004-01-05 11:15:11 +00:00
2003-05-02 15:50:11 +00:00
$l_online_record = sprintf ( $user -> lang [ 'RECORD_ONLINE_USERS' ], $config [ 'record_online_users' ], $user -> format_date ( $config [ 'record_online_date' ]));
2004-01-05 11:15:11 +00:00
2003-05-02 15:50:11 +00:00
$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' ]);
}
2005-01-27 18:59:38 +00:00
else
{
$l_online_time = '' ;
}
2003-05-02 15:50:11 +00:00
2004-05-26 20:46:12 +00:00
$l_privmsgs_text = $l_privmsgs_text_unread = '' ;
$s_privmsg_new = false ;
2005-11-08 19:29:20 +00:00
// Obtain number of new private messages if user is logged in
2005-11-17 17:32:25 +00:00
if ( isset ( $user -> data [ 'is_registered' ]) && $user -> data [ 'is_registered' ])
2003-05-02 15:50:11 +00:00
{
if ( $user -> data [ 'user_new_privmsg' ])
{
2004-01-05 11:15:11 +00:00
$l_message_new = ( $user -> data [ 'user_new_privmsg' ] == 1 ) ? $user -> lang [ 'NEW_PM' ] : $user -> lang [ 'NEW_PMS' ];
2003-05-02 15:50:11 +00:00
$l_privmsgs_text = sprintf ( $l_message_new , $user -> data [ 'user_new_privmsg' ]);
2004-05-02 13:06:57 +00:00
if ( ! $user -> data [ 'user_last_privmsg' ] || $user -> data [ 'user_last_privmsg' ] > $user -> data [ 'session_last_visit' ])
2003-05-02 15:50:11 +00:00
{
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 );
2004-01-05 11:15:11 +00:00
$s_privmsg_new = true ;
2003-05-02 15:50:11 +00:00
}
else
{
2004-01-05 11:15:11 +00:00
$s_privmsg_new = false ;
2003-05-02 15:50:11 +00:00
}
}
else
{
2003-10-12 11:59:23 +00:00
$l_privmsgs_text = $user -> lang [ 'NO_NEW_PM' ];
2004-01-05 11:15:11 +00:00
$s_privmsg_new = false ;
2003-05-02 15:50:11 +00:00
}
2004-05-02 13:06:57 +00:00
$l_privmsgs_text_unread = '' ;
if ( $user -> data [ 'user_unread_privmsg' ] && $user -> data [ 'user_unread_privmsg' ] != $user -> data [ 'user_new_privmsg' ])
2003-05-02 15:50:11 +00:00
{
2003-10-12 11:59:23 +00:00
$l_message_unread = ( $user -> data [ 'user_unread_privmsg' ] == 1 ) ? $user -> lang [ 'UNREAD_PM' ] : $user -> lang [ 'UNREAD_PMS' ];
2003-05-02 15:50:11 +00:00
$l_privmsgs_text_unread = sprintf ( $l_message_unread , $user -> data [ 'user_unread_privmsg' ]);
}
}
// Which timezone?
$tz = ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? strval ( doubleval ( $user -> data [ 'user_timezone' ])) : strval ( doubleval ( $config [ 'board_timezone' ]));
2005-04-10 18:07:12 +00:00
2003-05-02 15:50:11 +00:00
// 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 ,
2004-09-01 15:47:46 +00:00
'SCRIPT_NAME' => substr ( $user -> page , 0 , strpos ( $user -> page , '.' )),
2003-05-02 15:50:11 +00:00
'LAST_VISIT_DATE' => sprintf ( $user -> lang [ 'YOU_LAST_VISIT' ], $s_last_visit ),
2004-09-01 15:47:46 +00:00
'CURRENT_TIME' => sprintf ( $user -> lang [ 'CURRENT_TIME' ], $user -> format_date ( time (), false , true )),
2003-05-02 15:50:11 +00:00
'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_INFO_UNREAD' => $l_privmsgs_text_unread ,
2004-07-08 22:41:04 +00:00
'SID' => $SID ,
2003-05-02 15:50:11 +00:00
'L_LOGIN_LOGOUT' => $l_login_logout ,
2004-09-01 15:47:46 +00:00
'L_INDEX' => $user -> lang [ 'FORUM_INDEX' ],
'L_ONLINE_EXPLAIN' => $l_online_time ,
2003-05-02 15:50:11 +00:00
2005-10-02 18:15:12 +00:00
'U_PRIVATEMSGS' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&mode= " . (( $user -> data [ 'user_new_privmsg' ] || $l_privmsgs_text_unread ) ? 'unread' : 'view' ),
2005-04-30 14:24:13 +00:00
'U_RETURN_INBOX' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&folder=inbox " ,
2005-05-01 13:15:49 +00:00
'U_JS_RETURN_INBOX' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&folder=inbox " ,
2005-04-30 14:24:13 +00:00
'U_POPUP_PM' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&mode=popup " ,
'U_JS_POPUP_PM' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&mode=popup " ,
2004-03-06 17:43:32 +00:00
'U_MEMBERLIST' => " { $phpbb_root_path } memberlist. $phpEx $SID " ,
'U_MEMBERSLIST' => " { $phpbb_root_path } memberlist. $phpEx $SID " ,
2005-08-18 12:48:39 +00:00
'U_VIEWONLINE' => " { $phpbb_root_path } viewonline. $phpEx $SID " ,
2003-07-13 15:15:05 +00:00
'U_LOGIN_LOGOUT' => $u_login_logout ,
2004-03-06 17:43:32 +00:00
'U_INDEX' => " { $phpbb_root_path } index. $phpEx $SID " ,
'U_SEARCH' => " { $phpbb_root_path } search. $phpEx $SID " ,
'U_REGISTER' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=register " ,
'U_PROFILE' => " { $phpbb_root_path } ucp. $phpEx $SID " ,
'U_MODCP' => " { $phpbb_root_path } mcp. $phpEx $SID " ,
'U_FAQ' => " { $phpbb_root_path } faq. $phpEx $SID " ,
'U_SEARCH_SELF' => " { $phpbb_root_path } search. $phpEx $SID &search_id=egosearch " ,
'U_SEARCH_NEW' => " { $phpbb_root_path } search. $phpEx $SID &search_id=newposts " ,
'U_SEARCH_UNANSWERED' => " { $phpbb_root_path } search. $phpEx $SID &search_id=unanswered " ,
2005-06-13 17:51:55 +00:00
'U_SEARCH_ACTIVE_TOPICS' => " { $phpbb_root_path } search. $phpEx $SID &search_id=active_topics " ,
2004-05-31 18:00:10 +00:00
'U_DELETE_COOKIES' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=delete_cookies " ,
2005-08-18 12:48:39 +00:00
'U_TEAM' => " { $phpbb_root_path } memberlist. $phpEx $SID &mode=leaders " ,
2003-05-02 15:50:11 +00:00
'S_USER_LOGGED_IN' => ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? true : false ,
2005-06-13 17:51:55 +00:00
'S_REGISTERED_USER' => $user -> data [ 'is_registered' ],
2003-10-12 11:59:23 +00:00
'S_USER_PM_POPUP' => $user -> optionget ( 'popuppm' ),
2004-09-01 15:47:46 +00:00
'S_USER_LANG' => $user -> data [ 'user_lang' ],
2004-05-02 13:06:57 +00:00
'S_USER_BROWSER' => ( isset ( $user -> data [ 'session_browser' ])) ? $user -> data [ 'session_browser' ] : $user -> lang [ 'UNKNOWN_BROWSER' ],
2003-05-02 15:50:11 +00:00
'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' ],
2005-04-10 18:07:12 +00:00
'S_TIMEZONE' => ( $user -> data [ 'user_dst' ] || ( $user -> data [ 'user_id' ] == ANONYMOUS && $config [ 'board_dst' ])) ? sprintf ( $user -> lang [ 'ALL_TIMES' ], $user -> lang [ 'tz' ][ $tz ], $user -> lang [ 'tz' ][ 'dst' ]) : sprintf ( $user -> lang [ 'ALL_TIMES' ], $user -> lang [ 'tz' ][ $tz ], '' ),
'S_DISPLAY_ONLINE_LIST' => ( $config [ 'load_online' ]) ? 1 : 0 ,
'S_DISPLAY_SEARCH' => ( $config [ 'load_search' ]) ? 1 : 0 ,
'S_DISPLAY_PM' => ( $config [ 'allow_privmsg' ] && $user -> data [ 'is_registered' ]) ? 1 : 0 ,
2004-09-01 15:47:46 +00:00
'S_DISPLAY_MEMBERLIST' => ( isset ( $auth )) ? $auth -> acl_get ( 'u_viewprofile' ) : 0 ,
2004-05-02 13:06:57 +00:00
'S_NEW_PM' => ( $s_privmsg_new ) ? 1 : 0 ,
2003-05-02 15:50:11 +00:00
2004-09-01 15:47:46 +00:00
'T_THEME_PATH' => " { $phpbb_root_path } styles/ " . $user -> theme [ 'primary' ][ 'theme_path' ] . '/theme' ,
'T_TEMPLATE_PATH' => " { $phpbb_root_path } styles/ " . $user -> theme [ 'primary' ][ 'template_path' ] . '/template' ,
'T_IMAGESET_PATH' => " { $phpbb_root_path } styles/ " . $user -> theme [ 'primary' ][ 'imageset_path' ] . '/imageset' ,
2005-01-15 18:49:54 +00:00
'T_IMAGESET_LANG_PATH' => " { $phpbb_root_path } styles/ " . $user -> theme [ 'primary' ][ 'imageset_path' ] . '/imageset/' . $user -> data [ 'user_lang' ],
2005-04-11 21:32:22 +00:00
'T_SMILIES_PATH' => " { $phpbb_root_path } { $config [ 'smilies_path' ] } / " ,
'T_AVATAR_PATH' => " { $phpbb_root_path } { $config [ 'avatar_path' ] } / " ,
'T_AVATAR_GALLERY_PATH' => " { $phpbb_root_path } { $config [ 'avatar_gallery_path' ] } / " ,
'T_ICONS_PATH' => " { $phpbb_root_path } { $config [ 'icons_path' ] } / " ,
'T_RANKS_PATH' => " { $phpbb_root_path } { $config [ 'ranks_path' ] } / " ,
'T_UPLOAD_PATH' => " { $phpbb_root_path } { $config [ 'upload_path' ] } / " ,
2005-10-04 21:39:47 +00:00
'T_STYLESHEET_LINK' => ( ! $user -> theme [ 'primary' ][ 'theme_storedb' ]) ? " { $phpbb_root_path } styles/ " . $user -> theme [ 'primary' ][ 'theme_path' ] . '/theme/stylesheet.css' : " { $phpbb_root_path } style. $phpEx ?sid= $user->session_id &id= " . $user -> theme [ 'primary' ][ 'style_id' ],
2004-09-01 15:47:46 +00:00
'T_STYLESHEET_NAME' => $user -> theme [ 'primary' ][ 'theme_name' ],
2003-08-06 15:45:13 +00:00
'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 ;
}
2005-04-09 12:26:45 +00:00
/**
* Generate page footer
*/
2003-05-02 15:50:11 +00:00
function page_footer ()
{
2003-10-12 11:59:23 +00:00
global $db , $config , $template , $SID , $user , $auth , $cache , $messenger , $starttime , $phpbb_root_path , $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 ;
2003-08-28 00:28:18 +00:00
if ( ! empty ( $_REQUEST [ 'explain' ]) && $auth -> acl_get ( 'a_' ) && method_exists ( $db , 'sql_report' ))
2003-05-02 15:50:11 +00:00
{
2003-08-28 00:28:18 +00:00
$db -> sql_report ( 'display' );
2003-05-02 15:50:11 +00:00
}
2004-09-16 18:33:22 +00:00
$debug_output = sprintf ( 'Time : %.3fs | ' . $db -> sql_num_queries () . ' Queries | GZIP : ' . (( $config [ 'gzip_compress' ]) ? 'On' : 'Off' ) . ' | Load : ' . (( $user -> load ) ? $user -> load : 'N/A' ), $totaltime );
2003-05-02 15:50:11 +00:00
2004-09-16 18:33:22 +00:00
if ( $auth -> acl_get ( 'a_' ) && defined ( 'DEBUG_EXTRA' ))
2003-05-02 15:50:11 +00:00
{
2004-09-06 06:23:37 +00:00
if ( function_exists ( 'memory_get_usage' ))
{
if ( $memory_usage = memory_get_usage ())
{
2004-09-16 18:33:22 +00:00
global $base_memory_usage ;
$memory_usage -= $base_memory_usage ;
2004-09-06 06:23:37 +00:00
$memory_usage = ( $memory_usage >= 1048576 ) ? round (( round ( $memory_usage / 1048576 * 100 ) / 100 ), 2 ) . ' ' . $user -> lang [ 'MB' ] : (( $memory_usage >= 1024 ) ? round (( round ( $memory_usage / 1024 * 100 ) / 100 ), 2 ) . ' ' . $user -> lang [ 'KB' ] : $memory_usage . ' ' . $user -> lang [ 'BYTES' ]);
2004-10-01 11:27:14 +00:00
$debug_output .= ' | Memory Usage: ' . $memory_usage ;
2004-09-06 06:23:37 +00:00
}
}
2004-09-16 18:33:22 +00:00
$debug_output .= ' | <a href="' . (( $_SERVER [ 'REQUEST_URI' ]) ? htmlspecialchars ( $_SERVER [ 'REQUEST_URI' ]) : " index. $phpEx $SID " ) . (( strpos ( $_SERVER [ 'REQUEST_URI' ], '?' ) !== false ) ? '&' : '?' ) . 'explain=1">Explain</a>' ;
2003-05-02 15:50:11 +00:00
}
}
$template -> assign_vars ( array (
2004-09-01 15:47:46 +00:00
'DEBUG_OUTPUT' => ( defined ( 'DEBUG' )) ? $debug_output : '' ,
2003-12-06 12:45:38 +00:00
2005-04-30 14:24:13 +00:00
'U_ACP' => ( $auth -> acl_get ( 'a_' ) && $user -> data [ 'is_registered' ]) ? " { $phpbb_root_path } adm/index. $phpEx ?sid= " . $user -> data [ 'session_id' ] : '' )
2003-05-02 15:50:11 +00:00
);
2005-04-30 14:24:13 +00:00
// Call cron-type script
if ( ! defined ( 'IN_CRON' ))
{
$cron_type = '' ;
if ( time () - $config [ 'queue_interval' ] > $config [ 'last_queue_run' ] && ! defined ( 'IN_ADMIN' ) && file_exists ( $phpbb_root_path . 'cache/queue.' . $phpEx ))
{
// Process email queue
$cron_type = 'queue' ;
}
else if ( method_exists ( $cache , 'tidy' ) && time () - $config [ 'cache_gc' ] > $config [ 'cache_last_gc' ])
{
// Tidy the cache
$cron_type = 'tidy_cache' ;
}
else if ( time () - ( 7 * 24 * 3600 ) > $config [ 'database_last_gc' ])
{
// Tidy some table rows every week
$cron_type = 'tidy_database' ;
}
2005-10-19 18:00:10 +00:00
/**
* @ todo add session garbage collection
else if ( time () - $config [ 'session_gc' ] > $config [ 'session_last_gc' ])
{
$cron_type = 'tidy_sessions' ;
}
*/
2005-04-30 14:24:13 +00:00
if ( $cron_type )
{
$template -> assign_var ( 'RUN_CRON_TASK' , '<img src="' . $phpbb_root_path . 'cron.' . $phpEx . '?cron_type=' . $cron_type . '" width="1" height="1" />' );
}
}
2003-05-02 15:50:11 +00:00
$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
2005-04-09 12:26:45 +00:00
?>