2001-04-19 13:18:57 +00:00
< ? php
2003-08-27 16:31:54 +00:00
// -------------------------------------------------------------
//
// $Id$
//
// FILENAME : functions.php
// STARTED : Sat Feb 13, 2001
// COPYRIGHT : <20> 2001,2003 phpBB Group
// WWW : http://www.phpbb.com/
2004-09-01 15:47:46 +00:00
// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
//
2003-08-27 16:31:54 +00:00
// -------------------------------------------------------------
2001-04-19 13:18:57 +00:00
2003-09-07 13:46:51 +00:00
2003-11-04 21:54:40 +00:00
function set_var ( & $result , $var , $type )
{
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 = preg_replace ( " # \n { 3,}# " , " \n \n " , $result );
$result = ( STRIP ) ? stripslashes ( $result ) : $result ;
2003-11-04 21:54:40 +00:00
}
}
2003-10-01 17:22:58 +00:00
function request_var ( $var_name , $default )
{
if ( ! isset ( $_REQUEST [ $var_name ]))
{
return $default ;
}
else
{
$var = $_REQUEST [ $var_name ];
$type = gettype ( $default );
if ( is_array ( $var ))
{
foreach ( $var as $k => $v )
{
2003-11-04 21:54:40 +00:00
if ( is_array ( $v ))
2003-10-01 17:22:58 +00:00
{
2003-11-04 21:54:40 +00:00
foreach ( $v as $_k => $_v )
2003-10-12 11:59:23 +00:00
{
2003-11-04 21:54:40 +00:00
set_var ( $var [ $k ][ $_k ], $_v , $type );
2003-10-12 11:59:23 +00:00
}
2003-10-01 17:22:58 +00:00
}
2003-11-04 21:54:40 +00:00
else
{
set_var ( $var [ $k ], $v , $type );
}
2003-10-01 17:22:58 +00:00
}
}
else
{
2003-11-04 21:54:40 +00:00
set_var ( $var , $var , $type );
2003-10-01 17:22:58 +00:00
}
return $var ;
}
}
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' );
2003-01-22 20:16:18 +00:00
}
2003-01-11 22:56:49 +00:00
}
2004-02-03 02:29:35 +00:00
// Generates an alphanumeric random string of given length
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' );
2004-09-01 15:47:46 +00:00
list ( $usec , $sec ) = explode ( ' ' , microtime ());
mt_srand ( $sec * $usec );
2004-02-03 02:29:35 +00:00
$max_chars = count ( $chars ) - 1 ;
$rand_str = '' ;
for ( $i = 0 ; $i < $num_chars ; $i ++ )
{
$rand_str .= $chars [ mt_rand ( 0 , $max_chars )];
}
return $rand_str ;
}
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
2004-09-01 15:47:46 +00:00
// Create forum rules for given forum
2004-09-16 18:33:22 +00:00
function generate_forum_rules ( & $forum_data )
2004-05-30 19:24:53 +00:00
{
if ( ! $forum_data [ 'forum_rules' ] && ! $forum_data [ 'forum_rules_link' ])
{
return ;
}
global $template , $phpbb_root_path , $phpEx ;
if ( $forum_data [ 'forum_rules' ])
{
2004-09-04 19:32:23 +00:00
include_once ( $phpbb_root_path . 'includes/bbcode.' . $phpEx );
$bbcode = new bbcode ( $forum_data [ 'forum_rules_bbcode_bitfield' ]);
2004-10-01 11:27:14 +00:00
2004-09-04 19:32:23 +00:00
$bbcode -> bbcode_second_pass ( $forum_data [ 'forum_rules' ], $forum_data [ 'forum_rules_bbcode_uid' ]);
$forum_data [ 'forum_rules' ] = smilie_text ( $forum_data [ 'forum_rules' ], ! ( $forum_data [ 'forum_rules_flags' ] & 2 ));
$forum_data [ 'forum_rules' ] = str_replace ( " \n " , '<br />' , censor_text ( $forum_data [ 'forum_rules' ]));
unset ( $bbcode );
2004-05-30 19:24:53 +00:00
}
$template -> assign_vars ( array (
'S_FORUM_RULES' => true ,
'U_FORUM_RULES' => $forum_data [ 'forum_rules_link' ],
2004-09-04 19:32:23 +00:00
'FORUM_RULES' => $forum_data [ 'forum_rules' ])
2004-05-30 19:24:53 +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 )
{
2004-05-26 20:46:12 +00:00
global $db , $user , $template , $phpEx , $SID , $phpbb_root_path ;
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
2004-03-20 17:06:21 +00:00
foreach ( $forum_parents as $parent_forum_id => $parent_data )
2003-03-28 01:25:03 +00:00
{
2004-03-20 17:06:21 +00:00
list ( $parent_name , $parent_type ) = array_values ( $parent_data );
2003-03-28 01:25:03 +00:00
$template -> assign_block_vars ( 'navlinks' , array (
2004-07-08 22:41:04 +00:00
'S_IS_CAT' => ( $parent_type == FORUM_CAT ) ? true : false ,
'S_IS_LINK' => ( $parent_type == FORUM_LINK ) ? true : false ,
'S_IS_POST' => ( $parent_type == FORUM_POST ) ? true : false ,
'FORUM_NAME' => $parent_name ,
'FORUM_ID' => $parent_forum_id ,
'U_VIEW_FORUM' => " { $phpbb_root_path } 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 (
2004-07-08 22:41:04 +00:00
'S_IS_CAT' => ( $forum_data [ 'forum_type' ] == FORUM_CAT ) ? true : false ,
'S_IS_LINK' => ( $forum_data [ 'forum_type' ] == FORUM_LINK ) ? true : false ,
'S_IS_POST' => ( $forum_data [ 'forum_type' ] == FORUM_POST ) ? true : false ,
'FORUM_NAME' => $forum_data [ 'forum_name' ],
'FORUM_ID' => $forum_data [ 'forum_id' ],
'U_VIEW_FORUM' => " { $phpbb_root_path } 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
2003-08-28 00:28:18 +00:00
function get_forum_parents ( & $forum_data )
2003-03-28 01:25:03 +00:00
{
2003-03-29 18:42:24 +00:00
global $db ;
2002-11-19 18:55:23 +00:00
$forum_parents = array ();
2004-07-08 22:41:04 +00:00
2002-11-19 18:55:23 +00:00
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
{
2004-03-20 17:06:21 +00:00
$sql = ' SELECT forum_id , forum_name , forum_type
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 ))
{
2004-03-20 17:06:21 +00:00
$forum_parents [ $row [ 'forum_id' ]] = array ( $row [ 'forum_name' ], ( int ) $row [ 'forum_type' ]);
2002-11-19 18:55:23 +00:00
}
2003-04-21 16:35:32 +00:00
$db -> sql_freeresult ( $result );
2002-11-19 18:55:23 +00:00
2003-08-28 00:28:18 +00:00
$forum_data [ 'forum_parents' ] = serialize ( $forum_parents );
2002-11-19 18:55:23 +00:00
$sql = 'UPDATE ' . FORUMS_TABLE . "
2003-08-28 00:28:18 +00:00
SET forum_parents = '" . $db->sql_escape($forum_data[' forum_parents ']) . "'
2003-02-25 18:19:34 +00:00
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
2004-09-01 15:47:46 +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
{
2004-09-01 15:47:46 +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="memberlist.' . $phpEx . $SID . '&mode=group&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
2004-09-05 15:45:50 +00:00
function gen_forum_auth_level ( $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
2004-09-05 15:45:50 +00:00
$rules = array (
( $auth -> acl_get ( 'f_post' , $forum_id )) ? $user -> lang [ 'RULES_POST_CAN' ] : $user -> lang [ 'RULES_POST_CANNOT' ],
( $auth -> acl_get ( 'f_reply' , $forum_id )) ? $user -> lang [ 'RULES_REPLY_CAN' ] : $user -> lang [ 'RULES_REPLY_CANNOT' ],
( $auth -> acl_gets ( 'f_edit' , 'm_edit' , $forum_id )) ? $user -> lang [ 'RULES_EDIT_CAN' ] : $user -> lang [ 'RULES_EDIT_CANNOT' ],
( $auth -> acl_gets ( 'f_delete' , 'm_delete' , $forum_id )) ? $user -> lang [ 'RULES_DELETE_CAN' ] : $user -> lang [ 'RULES_DELETE_CANNOT' ],
( $auth -> acl_get ( 'f_attach' , $forum_id ) && $auth -> acl_get ( 'u_attach' , $forum_id )) ? $user -> lang [ 'RULES_ATTACH_CAN' ] : $user -> lang [ 'RULES_ATTACH_CANNOT' ]
);
2003-02-25 18:19:34 +00:00
foreach ( $rules as $rule )
{
2004-09-05 15:45:50 +00:00
$template -> assign_block_vars ( 'rules' , array ( 'RULE' => $rule ));
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 ;
}
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 ' ;
2003-09-07 13:46:51 +00:00
$result = $db -> sql_query ( $sql );
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
{
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
2002-11-19 23:12:11 +00:00
if ( $row [ 'left_id' ] < $right )
2002-10-10 00:35:35 +00:00
{
2004-03-20 17:06:21 +00:00
$padding ++ ;
2003-05-04 15:09:16 +00:00
$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' ];
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
}
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
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
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
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
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
2004-05-02 13:06:57 +00:00
$tz_select = '' ;
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
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
}
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 ;
2004-09-01 15:47:46 +00:00
2003-01-07 14:37:19 +00:00
if ( $user -> data [ 'user_id' ] == ANONYMOUS )
2002-11-26 00:15:45 +00:00
{
return ;
}
2004-05-02 13:06:57 +00:00
if ( ! is_array ( $forum_id ))
{
$forum_id = array ( $forum_id );
}
2003-04-26 01:17:40 +00:00
// Default tracking type
2005-01-24 13:14:31 +00:00
$type = TRACK_NORMAL ;
2003-05-02 15:50:11 +00:00
$current_time = ( $marktime ) ? $marktime : time ();
2004-05-02 13:06:57 +00:00
$topic_id = ( int ) $topic_id ;
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
{
2004-09-01 15:47:46 +00:00
$sql = ' SELECT forum_id
FROM ' . FORUMS_TRACK_TABLE . '
2004-05-02 13:06:57 +00:00
WHERE user_id = ' . $user->data[' user_id '] . '
AND forum_id IN ( ' . implode(' , ', array_map(' intval ', $forum_id)) . ' ) ' ;
2004-01-12 15:00:09 +00:00
$result = $db -> sql_query ( $sql );
2004-09-01 15:47:46 +00:00
2004-01-12 15:00:09 +00:00
$sql_update = array ();
2004-02-07 10:48:35 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2004-01-12 15:00:09 +00:00
{
$sql_update [] = $row [ 'forum_id' ];
}
$db -> sql_freeresult ( $result );
2003-04-26 01:17:40 +00:00
2004-01-12 15:00:09 +00:00
if ( sizeof ( $sql_update ))
{
$sql = 'UPDATE ' . FORUMS_TRACK_TABLE . "
2004-09-01 15:47:46 +00:00
SET mark_time = $current_time
2004-01-12 15:00:09 +00:00
WHERE user_id = " . $user->data ['user_id'] . '
AND forum_id IN ( ' . implode(' , ', $sql_update) . ' ) ' ;
$db -> sql_query ( $sql );
}
2003-01-07 14:37:19 +00:00
2004-01-12 15:00:09 +00:00
if ( $sql_insert = array_diff ( $forum_id , $sql_update ))
2002-11-26 00:15:45 +00:00
{
2004-01-12 15:00:09 +00:00
foreach ( $sql_insert as $forum_id )
2003-04-26 01:17:40 +00:00
{
$sql = '' ;
switch ( SQL_LAYER )
{
case 'mysql' :
2004-01-12 15:00:09 +00:00
$sql .= (( $sql != '' ) ? ', ' : '' ) . '(' . $user -> data [ 'user_id' ] . " , $forum_id , $current_time ) " ;
2003-07-04 17:19:00 +00:00
$sql = 'VALUES ' . $sql ;
2003-04-26 01:17:40 +00:00
break ;
2005-01-15 18:49:54 +00:00
case 'mysql4' :
2003-04-26 01:17:40 +00:00
case 'mssql' :
2003-07-04 17:19:00 +00:00
case 'sqlite' :
2004-01-12 15:00:09 +00:00
$sql .= (( $sql != '' ) ? ' UNION ALL ' : '' ) . ' SELECT ' . $user -> data [ 'user_id' ] . " , $forum_id , $current_time " ;
2003-04-26 01:17:40 +00:00
break ;
default :
$sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . ' ( user_id , forum_id , mark_time )
2004-01-12 15:00:09 +00:00
VALUES ( ' . $user->data[' user_id ' ] . " , $forum_id , $current_time ) " ;
2003-04-26 01:17:40 +00:00
$db -> sql_query ( $sql );
$sql = '' ;
}
2004-01-12 15:00:09 +00:00
if ( $sql )
2003-04-26 01:17:40 +00:00
{
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 );
}
}
2002-11-26 00:15:45 +00:00
}
2004-01-12 15:00:09 +00:00
unset ( $sql_update );
unset ( $sql_insert );
}
else
{
$tracking = ( isset ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) ? unserialize ( stripslashes ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ])) : array ();
2003-01-07 14:37:19 +00:00
2004-05-02 13:06:57 +00:00
foreach ( $forum_id as $f_id )
2003-04-26 01:17:40 +00:00
{
2004-05-02 13:06:57 +00:00
unset ( $tracking [ $f_id ]);
$tracking [ $f_id ][ 0 ] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
2003-04-26 01:17:40 +00:00
}
2004-01-12 15:00:09 +00:00
2004-05-31 18:00:10 +00:00
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
2004-01-12 15:00:09 +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 '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' :
2005-01-02 19:06:45 +00:00
if ( ! isset ( $type ))
{
$type = TRACK_NORMAL ;
}
2004-05-02 13:06:57 +00:00
$forum_id = ( int ) $forum_id [ 0 ];
2004-09-01 15:47:46 +00:00
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 . "
2004-11-06 14:22:04 +00:00
SET mark_time = $current_time
2003-04-26 01:17:40 +00:00
WHERE topic_id = $topic_id
2004-09-01 15:47:46 +00:00
AND user_id = " . $user->data ['user_id'] . "
2003-05-23 23:46:55 +00:00
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
{
2004-11-06 14:22:04 +00:00
$type = ( ! isset ( $type )) ? TRACK_NORMAL : $type ;
2003-09-17 21:51:21 +00:00
$db -> sql_return_on_error ( true );
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 );
2003-09-17 21:51:21 +00:00
$db -> sql_return_on_error ( false );
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' ]));
2004-05-02 13:06:57 +00:00
// If the cookie grows larger than 2000 characters we will remove
2003-06-19 16:19:59 +00:00
// the smallest value
2003-09-27 20:45:46 +00:00
if ( strlen ( $_COOKIE [ $config [ 'cookie_name' ] . '_track' ]) > 2000 )
2003-06-19 16:19:59 +00:00
{
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
2005-01-02 19:06:45 +00:00
if ( isset ( $tracking [ $forum_id ]) && base_convert ( $tracking [ $forum_id ][ 0 ], 36 , 10 ) < $current_time )
2003-06-19 16:19:59 +00:00
{
$tracking [ $forum_id ][ base_convert ( $topic_id , 10 , 36 )] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
2004-05-31 18:00:10 +00:00
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
2003-06-19 16:19:59 +00:00
}
2005-01-02 19:06:45 +00:00
else if ( ! isset ( $tracking [ $forum_id ]))
{
$tracking [ $forum_id ][ 0 ] = base_convert ( $current_time - $config [ 'board_startdate' ], 10 , 36 );
$user -> set_cookie ( 'track' , serialize ( $tracking ), time () + 31536000 );
}
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
2004-09-16 18:33:22 +00:00
// 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 = true , $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
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 ;
}
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
}
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 ;
2003-10-12 11:59:23 +00:00
if ( ! $user -> optionget ( 'viewcensors' ) && $config [ 'allow_nocensors' ])
2003-05-20 12:16:25 +00:00
{
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 ();
2003-09-17 21:51:21 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2003-01-21 15:58:32 +00:00
{
2003-09-17 21:51:21 +00:00
$censors [ 'match' ][] = '#\b(' . str_replace ( '\*' , '\w*?' , preg_quote ( $row [ 'word' ], '#' )) . ')\b#i' ;
$censors [ 'replace' ][] = $row [ 'replacement' ];
2003-01-21 15:58:32 +00:00
}
$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 *
2004-09-01 15:47:46 +00:00
FROM ' . ICONS_TABLE . '
2003-07-13 23:29:22 +00:00
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' ];
2003-09-17 21:51:21 +00:00
$icons [ $row [ 'icons_id' ]][ 'width' ] = ( int ) $row [ 'icons_width' ];
$icons [ $row [ 'icons_id' ]][ 'height' ] = ( int ) $row [ 'icons_height' ];
$icons [ $row [ 'icons_id' ]][ 'display' ] = ( bool ) $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
{
2003-08-28 17:32:18 +00:00
// The rule is to only allow those extensions defined. ;)
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' ]));
2004-02-22 10:22:51 +00:00
$extensions [ $extension ][ 'display_cat' ] = ( int ) $row [ 'cat_id' ];
$extensions [ $extension ][ 'download_mode' ] = ( int ) $row [ 'download_mode' ];
$extensions [ $extension ][ 'upload_icon' ] = trim ( $row [ 'upload_icon' ]);
$extensions [ $extension ][ 'max_filesize' ] = ( int ) $row [ 'max_filesize' ];
2004-09-01 15:47:46 +00:00
2004-05-02 13:06:57 +00:00
$allowed_forums = ( $row [ 'allowed_forums' ]) ? unserialize ( trim ( $row [ 'allowed_forums' ])) : array ();
2004-09-01 15:47:46 +00:00
2004-05-02 13:06:57 +00:00
if ( $row [ 'allow_in_pm' ])
{
$allowed_forums = array_merge ( $allowed_forums , array ( 0 ));
}
2004-09-01 15:47:46 +00:00
2004-03-10 20:30:26 +00:00
// Store allowed extensions forum wise
2004-05-02 13:06:57 +00:00
$extensions [ '_allowed_' ][ $extension ] = ( ! sizeof ( $allowed_forums )) ? 0 : $allowed_forums ;
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
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 ;
}
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 . '">' )
);
}
2004-05-26 20:46:12 +00:00
// Build Confirm box
2004-07-08 22:41:04 +00:00
function confirm_box ( $check , $title = '' , $hidden = '' , $html_body = 'confirm_body.html' )
2004-05-02 13:06:57 +00:00
{
2004-10-08 11:01:30 +00:00
global $user , $template , $db ;
global $SID , $phpEx ;
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
2004-08-04 19:10:15 +00:00
if ( $user_id != $user -> data [ 'user_id' ] || $session_id != $user -> session_id || $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
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
2004-05-26 20:46:12 +00:00
$s_hidden_fields = '<input type="hidden" name="user_id" value="' . $user -> data [ 'user_id' ] . '" /><input type="hidden" name="sess" value="' . $user -> session_id . '" /><input type="hidden" name="sid" value="' . $SID . '" />' ;
// 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
page_header ( $user -> lang [ $title ]);
$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
$u_action = ( strpos ( $user -> page , " . { $phpEx } ? " ) !== false ) ? str_replace ( " . { $phpEx } ? " , " . $phpEx $SID & " , $user -> page ) . '&' : $user -> page . '?' ;
$u_action .= 'confirm_key=' . $confirm_key ;
2004-05-02 13:06:57 +00:00
$template -> assign_vars ( array (
'MESSAGE_TITLE' => $user -> lang [ $title ],
'MESSAGE_TEXT' => $user -> lang [ $title . '_CONFIRM' ],
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 );
2004-05-02 13:06:57 +00:00
page_footer ();
}
2002-10-30 00:57:27 +00:00
2003-03-17 00:53:38 +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
{
2004-03-06 17:43:32 +00:00
global $SID , $db , $user , $template , $auth , $phpEx , $phpbb_root_path ;
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
{
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
}
// 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' ];
}
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 ] : '' ));
}
$s_hidden_fields = '<input type="hidden" name="redirect" value="' . $redirect . '" />' ;
2004-05-30 19:24:53 +00:00
$s_hidden_fields .= '<input type="hidden" name="sid" value="' . $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
2004-03-06 17:43:32 +00:00
'U_SEND_PASSWORD' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=sendpassword " ,
2004-09-01 15:47:46 +00:00
'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
}
2003-09-07 13:46:51 +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 ));
$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
2004-02-21 12:47:35 +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 ;
}
2004-02-21 12:47:35 +00:00
// Censoring
function censor_text ( $text )
{
global $censors , $user ;
if ( ! isset ( $censors ))
{
$censors = array ();
// For ANONYMOUS, this option should be enabled by default
if ( $user -> optionget ( 'viewcensors' ))
{
obtain_word_list ( $censors );
}
}
if ( sizeof ( $censors ) && $user -> optionget ( 'viewcensors' ))
{
return preg_replace ( $censors [ 'match' ], $censors [ 'replace' ], $text );
}
return $text ;
}
// Smilie processing
function smilie_text ( $text , $force_option = false )
{
global $config , $user , $phpbb_root_path ;
return ( $force_option || ! $config [ 'allow_smilies' ] || ! $user -> optionget ( 'viewsmilies' )) ? preg_replace ( '#<!\-\- s(.*?) \-\-><img src="\{SMILE_PATH\}\/.*? \/><!\-\- s\1 \-\->#' , '\1' , $text ) : str_replace ( '<img src="{SMILE_PATH}' , '<img src="' . $phpbb_root_path . $config [ 'smilies_path' ], $text );
}
2004-09-16 18:33:22 +00:00
// Inline Attachment processing
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 );
}
2004-05-02 13:06:57 +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
{
$extensions = array ();
obtain_attach_extensions ( $extensions );
}
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
}
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 ;
2004-05-30 19:24:53 +00:00
global $phpEx , $phpbb_root_path , $starttime , $display_header , $show_prev_info ;
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' ))
{
2004-09-16 18:33:22 +00:00
// Remove me
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 :
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
{
2004-09-01 15:47:46 +00:00
if ( defined ( 'IN_ADMIN' ) && ! empty ( $user -> data [ 'session_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 ;
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
2004-09-01 15:47:46 +00:00
if ( defined ( 'IN_ADMIN' ) && ! empty ( $user -> data [ 'session_admin' ]))
2002-10-08 20:06:55 +00:00
{
2005-01-21 19:20:26 +00:00
adm_page_message ( $msg_title , $msg_text , $display_header );
2003-05-03 23:58:45 +00:00
adm_page_footer ();
2002-10-08 20:06:55 +00:00
}
else
{
$template -> set_filenames ( array (
'body' => 'message_body.html' )
);
$template -> assign_vars ( array (
2004-05-02 13:06:57 +00:00
'MESSAGE_TITLE' => ( isset ( $msg_title )) ? $msg_title : $user -> lang [ 'INFORMATION' ],
2002-11-01 12:23:08 +00:00
'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 ;
2004-09-01 15:47:46 +00:00
2004-09-16 18:33:22 +00:00
/* remove me
2004-05-26 20:46:12 +00:00
default :
if ( defined ( 'DEBUG_EXTRA' ))
{
if ( ! strstr ( $errfile , '/cache/' ))
{
echo " <b>Another Error</b>: in file <b> $errfile </b> on line <b> $errline </b>: <b> $msg_text </b><br> " ;
}
}
2004-09-16 18:33:22 +00:00
break ; */
2002-10-08 20:06:55 +00:00
}
}
2003-05-03 23:58:45 +00:00
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
2003-05-02 15:50:11 +00:00
if ( ! empty ( $config [ 'load_online' ]) && ! empty ( $config [ 'load_online_time' ]))
{
$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 ;
2004-05-26 20:46:12 +00:00
$prev_user_ip = $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 );
$reading_sql = " AND s.session_page LIKE '%f= $f %' " ;
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
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 " ;
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 ))
{
// 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>' ;
}
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' ]);
}
2004-05-26 20:46:12 +00:00
$l_privmsgs_text = $l_privmsgs_text_unread = '' ;
$s_privmsg_new = false ;
2003-05-02 15:50:11 +00:00
// Obtain number of new private messages if user is logged in
if ( $user -> data [ 'user_id' ] != ANONYMOUS )
{
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' ]));
// 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-01-15 18:49:54 +00:00
'U_PRIVATEMSGS' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&mode= " . (( $user -> data [ 'user_new_privmsg' ] || $l_privmsgs_text_unread ) ? 'unread' : 'view_messages' ),
2004-05-02 13:06:57 +00:00
'U_RETURN_INBOX' => " { $phpbb_root_path } ucp. $phpEx $SID &i=pm&folder=inbox " ,
'U_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_VIEWONLINE' => " { $phpbb_root_path } viewonline. $phpEx $SID " ,
'U_MEMBERSLIST' => " { $phpbb_root_path } memberlist. $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 " ,
2004-05-31 18:00:10 +00:00
'U_DELETE_COOKIES' => " { $phpbb_root_path } ucp. $phpEx $SID &mode=delete_cookies " ,
2003-05-02 15:50:11 +00:00
'S_USER_LOGGED_IN' => ( $user -> data [ 'user_id' ] != ANONYMOUS ) ? true : false ,
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' ],
2004-09-01 15:47:46 +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' => ( ! empty ( $config [ 'load_online' ])) ? 1 : 0 ,
'S_DISPLAY_SEARCH' => ( ! empty ( $config [ 'load_search' ])) ? 1 : 0 ,
'S_DISPLAY_PM' => ( ! empty ( $config [ 'allow_privmsg' ])) ? 1 : 0 ,
'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' ],
2004-03-06 17:43:32 +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' ][ 'theme_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 ;
}
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
2004-07-08 22:41:04 +00:00
'U_ACP' => ( $auth -> acl_get ( 'a_' ) && $user -> data [ 'user_id' ] != ANONYMOUS ) ? " adm/index. $phpEx ?sid= " . $user -> data [ 'session_id' ] : '' )
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-01-11 20:58:48 +00:00
?>