" . ANONYMOUS . "
ORDER BY user_id DESC
LIMIT 1";
break;
case 'postcount':
case 'topiccount':
$sql = "SELECT SUM(forum_topics) AS topic_total, SUM(forum_posts) AS post_total
FROM " . FORUMS_TABLE;
break;
}
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
switch ( $mode )
{
case 'usercount':
return $row['total'];
break;
case 'newestuser':
return $row;
break;
case 'postcount':
return $row['post_total'];
break;
case 'topiccount':
return $row['topic_total'];
break;
}
return false;
}
function get_userdata($user)
{
global $db;
$sql = "SELECT *
FROM " . USERS_TABLE . "
WHERE ";
$sql .= ( ( is_integer($user) ) ? "user_id = $user" : "username = '" . str_replace("\'", "''", $user) . "'" ) . " AND user_id <> " . ANONYMOUS;
$result = $db->sql_query($sql);
return ( $row = $db->sql_fetchrow($result) ) ? $row : false;
}
//
// Obtain list of moderators of each forum
// First users, then groups ... broken into two queries
//
function get_moderators(&$forum_moderators, $forum_id = false)
{
global $SID, $db, $phpEx;
$forum_sql = ( $forum_id ) ? 'AND au.forum_id = ' . $forum_id : '';
$sql = "SELECT au.forum_id, u.user_id, u.username
FROM " . ACL_USERS_TABLE . " au, " . ACL_OPTIONS_TABLE . " ao, " . USERS_TABLE . " u
WHERE ao.auth_value LIKE 'mod_%'
$forum_sql
AND au.auth_option_id = ao.auth_option_id
AND u.user_id = au.user_id
GROUP BY au.forum_id, u.user_id, u.username
ORDER BY au.forum_id, u.user_id";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '' . $row['username'] . '';
}
$sql = "SELECT au.forum_id, g.group_id, g.group_name
FROM " . ACL_GROUPS_TABLE . " au, " . ACL_OPTIONS_TABLE . " ao, " . GROUPS_TABLE . " g
WHERE ao.auth_value LIKE 'mod_%'
$forum_sql
AND au.auth_option_id = ao.auth_option_id
AND g.group_id = au.group_id
GROUP BY au.forum_id, g.group_id, g.group_name
ORDER BY au.forum_id, g.group_id";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '' . $row['group_name'] . '';
}
return;
}
//
// User authorisation levels output
//
function get_forum_rules($mode, &$rules, &$forum_id)
{
global $SID, $acl, $lang, $phpEx;
$rules .= ( ( $acl->get_acl($forum_id, 'forum', 'post') ) ? $lang['Rules_post_can'] : $lang['Rules_post_cannot'] ) . '
';
$rules .= ( ( $acl->get_acl($forum_id, 'forum', 'reply') ) ? $lang['Rules_reply_can'] : $lang['Rules_reply_cannot'] ) . '
';
$rules .= ( ( $acl->get_acl($forum_id, 'forum', 'edit') ) ? $lang['Rules_edit_can'] : $lang['Rules_edit_cannot'] ) . '
';
$rules .= ( ( $acl->get_acl($forum_id, 'forum', 'delete') || $acl->get_acl($forum_id, 'mod', 'delete') ) ? $lang['Rules_delete_can'] : $lang['Rules_delete_cannot'] ) . '
';
$rules .= ( ( $acl->get_acl($forum_id, 'forum', 'attach') ) ? $lang['Rules_attach_can'] : $lang['Rules_attach_cannot'] ) . '
';
if ( $acl->get_acl($forum_id, 'mod') )
{
$rules .= sprintf($lang['Rules_moderate'], '', '');
}
return;
}
function make_jumpbox($action, $match_forum_id = 0)
{
global $SID, $acl, $template, $lang, $db, $nav_links, $phpEx;
// $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
// FROM (( " . FORUMS_TABLE . " f
// LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
// LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
// ORDER BY f.forum_id";
// $result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
{
$boxstring = '';
}
else
{
$boxstring .= '';
}
$boxstring .= '';
$template->assign_vars(array(
'L_GO' => $lang['Go'],
'L_JUMP_TO' => $lang['Jump_to'],
'L_SELECT_FORUM' => $lang['Select_forum'],
'S_JUMPBOX_SELECT' => $boxstring,
'S_JUMPBOX_ACTION' => $action)
);
return;
}
//
// Pick a language, any language ...
//
function language_select($default, $select_name = "language", $dirname="language")
{
global $phpEx;
$dir = opendir($dirname);
$lang = array();
while ( $file = readdir($dir) )
{
if ( preg_match('#^lang_#', $file) && !is_file($dirname . '/' . $file) && !is_link($dirname . '/' . $file) )
{
$filename = trim(str_replace('lang_', '', $file));
$displayname = preg_replace('/^(.*?)_(.*)$/', '\\1 [ \\2 ]', $filename);
$displayname = preg_replace('/\[(.*?)_(.*)\]/', '[ \\1 - \\2 ]', $displayname);
$lang[$displayname] = $filename;
}
}
closedir($dir);
@asort($lang);
@reset($lang);
$lang_select = '';
return $lang_select;
}
//
// Pick a template/theme combo,
//
function style_select($default_style, $select_name = "style", $dirname = "templates")
{
global $db;
$sql = "SELECT style_id, style_name
FROM " . STYLES_TABLE . "
ORDER BY style_name, style_id";
$result = $db->sql_query($sql);
$style_select = '";
return $style_select;
}
//
// Pick a timezone
//
function tz_select($default, $select_name = 'timezone')
{
global $sys_timezone, $lang;
$tz_select = '';
return $tz_select;
}
//
// Topic and forum watching common code
//
function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $match_id)
{
global $template, $db, $lang, $HTTP_GET_VARS, $phpEx, $SID, $start;
$table_sql = ( $mode == 'forum' ) ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE;
$where_sql = ( $mode == 'forum' ) ? 'forum_id' : 'topic_id';
$u_url = ( $mode == 'forum' ) ? 'f' : 't';
//
// Is user watching this thread?
//
if ( $user_id )
{
$can_watch = TRUE;
$sql = "SELECT notify_status
FROM " . $table_sql . "
WHERE $where_sql = $match_id
AND user_id = $user_id";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
{
if ( isset($HTTP_GET_VARS['unwatch']) )
{
if ( $HTTP_GET_VARS['unwatch'] == $mode )
{
$is_watching = 0;
$sql = "DELETE FROM " . $table_sql . "
WHERE $where_sql = $match_id
AND user_id = $user_id";
$db->sql_query($sql);
}
$template->assign_vars(array(
'META' => '')
);
$message = $lang['No_longer_watching_' . $mode] . '
' . sprintf($lang['Click_return_' . $mode], '', '');
message_die(MESSAGE, $message);
}
else
{
$is_watching = TRUE;
if ( $row['notify_status'] )
{
$sql = "UPDATE " . $table_sql . "
SET notify_status = 0
WHERE $where_sql = $match_id
AND user_id = $user_id";
$db->sql_query($sql);
}
}
}
else
{
if ( isset($HTTP_GET_VARS['watch']) )
{
if ( $HTTP_GET_VARS['watch'] == $mode )
{
$is_watching = TRUE;
$sql = "INSERT INTO " . $table_sql . " (user_id, $where_sql, notify_status)
VALUES ($user_id, $match_id, 0)";
$db->sql_query($sql);
}
$template->assign_vars(array(
'META' => '')
);
$message = $lang['You_are_watching_' . $mode] . '
' . sprintf($lang['Click_return_' . $mode], '', '');
message_die(MESSAGE, $message);
}
else
{
$is_watching = 0;
}
}
}
else
{
if ( isset($HTTP_GET_VARS['unwatch']) )
{
if ( $HTTP_GET_VARS['unwatch'] == $mode )
{
$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
header($header_location . "login.$phpEx$SID&redirect=view$mode.$phpEx&" . $u_url . "=$match_id&unwatch=forum");
exit;
}
}
else
{
$can_watch = 0;
$is_watching = 0;
}
}
if ( $can_watch )
{
if ( $is_watching )
{
$watch_url = "view$mode." . $phpEx . $SID . '&' . $u_url . "=$match_id&unwatch=$mode&start=$start";
$img = ( $mode == 'forum' ) ? $images['Forum_un_watch'] : $images['Topic_un_watch'];
$s_watching = '' . $lang['Stop_watching_' . $mode] . '';
$s_watching_img = ( isset($img) ) ? '
' : '';
}
else
{
$watch_url = "view$mode." . $phpEx . $SID . '&' . $u_url . "=$match_id&watch=$mode&start=$start";
$img = ( $mode == 'forum' ) ? $images['Forum_watch'] : $images['Topic_watch'];
$s_watching = '' . $lang['Start_watching_' . $mode] . '';
$s_watching_img = ( isset($img) ) ? '
' : '';
}
}
return;
}
//
// Create date/time from format and timezone
//
function create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
foreach ( $lang['datetime'] as $match => $replace )
{
$translate[$match] = $replace;
}
}
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}
function create_img($img, $alt = '')
{
return '
';
}
//
// Pagination routine, generates
// page number sequence
//
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
{
global $lang;
$total_pages = ceil($num_items/$per_page);
if ( $total_pages == 1 || !$num_items )
{
return '';
}
$on_page = floor($start_item / $per_page) + 1;
$page_string = '';
if ( $total_pages > 10 )
{
$init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
for($i = 1; $i < $init_page_max + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '' . $i . '' : '' . $i . '';
if ( $i < $init_page_max )
{
$page_string .= ", ";
}
}
if ( $total_pages > 3 )
{
if ( $on_page > 1 && $on_page < $total_pages )
{
$page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
$init_page_min = ( $on_page > 4 ) ? $on_page : 5;
$init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
{
$page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . '';
if ( $i < $init_page_max + 1 )
{
$page_string .= ', ';
}
}
$page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
}
else
{
$page_string .= ' ... ';
}
for($i = $total_pages - 2; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '' . $i . '' : '' . $i . '';
if( $i < $total_pages )
{
$page_string .= ", ";
}
}
}
}
else
{
for($i = 1; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '' . $i . '' : '' . $i . '';
if ( $i < $total_pages )
{
$page_string .= ', ';
}
}
}
if ( $add_prevnext_text )
{
if ( $on_page > 1 )
{
$page_string = ' ' . $lang['Previous'] . ' ' . $page_string;
}
if ( $on_page < $total_pages )
{
$page_string .= ' ' . $lang['Next'] . '';
}
}
$page_string = $lang['Goto_page'] . ' ' . $page_string;
return $page_string;
}
function on_page($num_items, $per_page, $start)
{
global $lang;
return sprintf($lang['Page_of'], floor( $start / $per_page ) + 1, max(ceil( $num_items / $per_page ), 1) );
}
//
// 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
//
function obtain_word_list(&$orig_word, &$replacement_word)
{
global $db;
$sql = "SELECT word, replacement
FROM " . WORDS_TABLE;
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
{
do
{
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i';
$replacement_word[] = $row['replacement'];
}
while ( $row = $db->sql_fetchrow($result) );
}
return true;
}
//
// This is general replacement for die(), allows templated output in users (or default)
// language, etc. $msg_code can be one of these constants:
//
// -> MESSAGE : Use for any simple text message, eg. results of an operation, authorisation
// failures, etc.
// -> ERROR : Use for any error, a simple page will be output
//
function message_die($msg_code, $msg_text = '', $msg_title = '')
{
global $db, $session, $acl, $template, $board_config, $theme, $lang, $userdata, $user_ip;
global $phpEx, $phpbb_root_path, $nav_links, $starttime;
switch ( $msg_code )
{
case MESSAGE:
if ( empty($lang) && !empty($board_config['default_lang']) )
{
if ( !file_exists($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.' . $phpEx) )
{
$board_config['default_lang'] = 'english';
}
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.' . $phpEx);
}
$msg_title = ( $msg_title == '' ) ? $lang['Information'] : $msg_title;
$msg_text = ( !empty($lang[$msg_text]) ) ? $lang[$msg_text] : $msg_text;
if ( !defined('HEADER_INC') )
{
if ( empty($userdata) )
{
echo '
' . $msg_title . '' . "\n";
echo '' . $msg_title . ' |
---|
' . $msg_text . ' |
|