1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-11 03:04:09 +02:00

Mostly changes to turn userdata into user->data, lang into user->lang + bitstring 2nd format + inheritance for permission admin and various other updates/fixes/changes ... note that user->lang & user->theme isn't final

git-svn-id: file:///svn/phpbb/trunk@2958 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Paul S. Owen
2002-10-20 19:19:07 +00:00
parent 4887cf1e49
commit 0e9f0ac4ec
52 changed files with 2146 additions and 2127 deletions

View File

@@ -2,7 +2,7 @@
//
// Authentication plug-ins is largely down to
// Sergey Kanareykin, our thanks to him.
// Sergey Kanareykin, our thanks to him.
//
function login_apache(&$username, &$password)
{
@@ -13,7 +13,7 @@ function login_apache(&$username, &$password)
if ( $php_auth_user && $php_auth_pw )
{
$sql = "SELECT user_id, username, user_password, user_email, user_active
$sql = "SELECT user_id, username, user_password, user_email, user_active
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\'", "''", $username) . "'";
$result = $db->sql_query($sql);

View File

@@ -2,13 +2,13 @@
//
// Authentication plug-ins is largely down to
// Sergey Kanareykin, our thanks to him.
// Sergey Kanareykin, our thanks to him.
//
function login_db(&$username, &$password)
{
global $db, $board_config;
$sql = "SELECT user_id, username, user_password, user_email, user_active
$sql = "SELECT user_id, username, user_password, user_email, user_active
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\'", "''", $username) . "'";
$result = $db->sql_query($sql);

View File

@@ -47,19 +47,19 @@ function login_ldap(&$username, &$password)
//
function admin_ldap(&$new)
{
global $lang;
global $user;
?>
<tr>
<td class="row1"><?php echo $lang['LDAP_server']; ?>:<br /><span class="gensmall"><?php echo $lang['LDAP_server_explain']; ?></span></td>
<td class="row1"><?php echo $user->lang['LDAP_server']; ?>:<br /><span class="gensmall"><?php echo $user->lang['LDAP_server_explain']; ?></span></td>
<td class="row2"><input type="text" size="40" name="ldap_server" value="<?php echo $new['ldap_server']; ?>" /></td>
</tr>
<tr>
<td class="row1"><?php echo $lang['LDAP_dn']; ?>:<br /><span class="gensmall"><?php echo $lang['LDAP_dn_explain']; ?></span></td>
<td class="row1"><?php echo $user->lang['LDAP_dn']; ?>:<br /><span class="gensmall"><?php echo $user->lang['LDAP_dn_explain']; ?></span></td>
<td class="row2"><input type="text" size="40" name="ldap_base_dn" value="<?php echo $new['ldap_base_dn']; ?>" /></td>
</tr>
<tr>
<td class="row1"><?php echo $lang['LDAP_uid']; ?>:<br /><span class="gensmall"><?php echo $lang['LDAP_uid_explain']; ?></span></td>
<td class="row1"><?php echo $user->lang['LDAP_uid']; ?>:<br /><span class="gensmall"><?php echo $user->lang['LDAP_uid_explain']; ?></span></td>
<td class="row2"><input type="text" size="40" name="ldap_uid" value="<?php echo $new['ldap_uid']; ?>" /></td>
</tr>
<?php

View File

@@ -53,57 +53,42 @@ foreach ($forum_rows as $row)
switch ($forum_status)
{
case ITEM_CATEGORY:
$folder_image = $theme['sub_forum'];
$folder_alt = $lang['Category'];
$folder_image = 'sub_forum';
$folder_alt = 'Category';
break;
case ITEM_LOCKED:
$folder_image = $theme['forum_locked'];
$folder_alt = $lang['Forum_locked'];
$folder_image = 'forum_locked';
$folder_alt = 'Forum_locked';
break;
default:
$unread_topics = false;
if ($userdata['user_id'] && $forum_last_post_time > $userdata['user_lastvisit'])
if ($user->data['user_id'] && $forum_last_post_time > $user->data['user_lastvisit'])
{
$unread_topics = true;
if (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']))
{
if ($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'] > $forum_last_post_time)
{
$unread_topics = false;
}
}
if (isset($mark_topics[$forum_id]) || isset($mark_forums[$forum_id]))
{
if ($mark_forums[$forum_id] > $userdata['user_lastvisit'] || !max($mark_topics[$forum_id]))
{
$unread_topics = false;
}
}
}
$folder_image = ($unread_topics) ? $theme['forum_new'] : $theme['forum'];
$folder_alt = ($unread_topics) ? $lang['New_posts'] : $lang['No_new_posts'];
$folder_image = ($unread_topics) ? 'forum_new' : 'forum';
$folder_alt = ($unread_topics) ? 'New_posts' : 'No_new_posts';
}
if ($forum_last_post_id)
{
$last_post = create_date($board_config['default_dateformat'], $forum_last_post_time, $board_config['board_timezone']) . '<br />';
$last_post = $user->format_date($forum_last_post_time) . '<br />';
$last_post .= ($forum_last_poster_id == ANONYMOUS) ? (($forum_last_poster_name != '') ? $forum_last_poster_name . ' ' : $lang['Guest'] . ' ') : '<a href="profile.' . $phpEx . $SID . '&amp;mode=viewprofile&amp;u=' . $forum_last_poster_id . '">' . $username . '</a> ';
$last_post .= ($forum_last_poster_id == ANONYMOUS) ? (($forum_last_poster_name != '') ? $forum_last_poster_name . ' ' : $user->lang['Guest'] . ' ') : '<a href="profile.' . $phpEx . $SID . '&amp;mode=viewprofile&amp;u=' . $forum_last_poster_id . '">' . $username . '</a> ';
$last_post .= '<a href="viewtopic.' . $phpEx . '$SID&amp;f=' . $forum_id . '&amp;p=' . $forum_last_post_id . '#' . $forum_last_post_id . '">' . create_img($theme['goto_post_latest'], $lang['View_latest_post']) . '</a>';
$last_post .= '<a href="viewtopic.' . $phpEx . $SID . '&amp;f=' . $forum_id . '&amp;p=' . $forum_last_post_id . '#' . $forum_last_post_id . '">' . $user->img('goto_post_latest', 'View_latest_post') . '</a>';
}
else
{
$last_post = $lang['No_Posts'];
$last_post = $user->lang['No_Posts'];
}
if (!empty($forum_moderators[$forum_id]))
{
$l_moderator = (count($forum_moderators[$forum_id]) == 1) ? $lang['Moderator'] . ': ' : $lang['Moderators'] . ': ' ;
$l_moderator = (count($forum_moderators[$forum_id]) == 1) ? $user->lang['Moderator'] . ': ' : $user->lang['Moderators'] . ': ' ;
$moderators_list = implode(', ', $forum_moderators[$forum_id]);
}
else
@@ -127,7 +112,7 @@ foreach ($forum_rows as $row)
}
$subforums_list = implode(', ', $links);
$l_subforums = (count($subforums[$forum_id]) == 1) ? $lang['Subforum'] . ': ' : $lang['Subforums'] . ': ';
$l_subforums = (count($subforums[$forum_id]) == 1) ? $user->lang['Subforum'] . ': ' : $user->lang['Subforums'] . ': ';
}
else
{
@@ -157,7 +142,7 @@ foreach ($forum_rows as $row)
$template->assign_block_vars('forumrow', array(
$forum_type_switch => TRUE,
'FORUM_FOLDER_IMG' => create_img($folder_image, $folder_alt),
'FORUM_FOLDER_IMG' => $user->img($folder_image, $folder_alt),
'FORUM_NAME' => $forum_name,
'FORUM_DESC' => $forum_desc,

View File

@@ -103,14 +103,16 @@ function get_forum_branch($forum_id, $type='all', $order='descending', $include_
default:
$condition = 'f2.left_id BETWEEN f1.left_id AND f1.right_id OR f1.left_id BETWEEN f2.left_id AND f2.right_id';
}
$sql = 'SELECT f2.*
FROM ' . FORUMS_TABLE . ' f1
LEFT JOIN ' . FORUMS_TABLE . " f2 ON $condition
WHERE f1.forum_id = $forum_id
ORDER BY f2.left_id " . (($order == 'descending') ? 'ASC' : 'DESC');
$rows = array();
$sql = 'SELECT f2.*
FROM ( ' . FORUMS_TABLE . ' f1
LEFT JOIN ' . FORUMS_TABLE . " f2 ON $condition )
WHERE f1.forum_id = $forum_id
ORDER BY f2.left_id " . ( ($order == 'descending') ? 'ASC' : 'DESC' );
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if (!$include_forum && $row['forum_id'] == $forum_id)
@@ -122,10 +124,8 @@ function get_forum_branch($forum_id, $type='all', $order='descending', $include_
return $rows;
}
//
// 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;
@@ -166,17 +166,17 @@ function get_moderators(&$forum_moderators, $forum_id = false)
//
function get_forum_rules($mode, &$rules, &$forum_id)
{
global $SID, $auth, $lang, $phpEx;
global $SID, $auth, $user, $phpEx;
$rules .= ( ( $auth->acl_get('f_post', $forum_id) ) ? $lang['Rules_post_can'] : $lang['Rules_post_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_reply', $forum_id) ) ? $lang['Rules_reply_can'] : $lang['Rules_reply_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_edit', $forum_id) ) ? $lang['Rules_edit_can'] : $lang['Rules_edit_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_delete', $forum_id) || $auth->acl_get('m_delete', $forum_id) ) ? $lang['Rules_delete_can'] : $lang['Rules_delete_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_attach', $forum_id) ) ? $lang['Rules_attach_can'] : $lang['Rules_attach_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_post', $forum_id) ) ? $user->lang['Rules_post_can'] : $user->lang['Rules_post_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_reply', $forum_id) ) ? $user->lang['Rules_reply_can'] : $user->lang['Rules_reply_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_edit', $forum_id) ) ? $user->lang['Rules_edit_can'] : $user->lang['Rules_edit_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_delete', $forum_id) || $auth->acl_get('m_delete', $forum_id) ) ? $user->lang['Rules_delete_can'] : $user->lang['Rules_delete_cannot'] ) . '<br />';
$rules .= ( ( $auth->acl_get('f_attach', $forum_id) ) ? $user->lang['Rules_attach_can'] : $user->lang['Rules_attach_cannot'] ) . '<br />';
if ( $auth->acl_get('a_') || $auth->acl_get('m_', $forum_id) )
{
$rules .= sprintf($lang['Rules_moderate'], '<a href="modcp.' . $phpEx . $SID . '&amp;f=' . $forum_id . '">', '</a>');
$rules .= sprintf($user->lang['Rules_moderate'], '<a href="modcp.' . $phpEx . $SID . '&amp;f=' . $forum_id . '">', '</a>');
}
return;
@@ -184,9 +184,9 @@ function get_forum_rules($mode, &$rules, &$forum_id)
function make_jumpbox($action, $forum_id = false)
{
global $auth, $template, $lang, $db, $nav_links, $phpEx;
global $auth, $template, $user, $db, $nav_links, $phpEx;
$boxstring = '<select name="f" onChange="if(this.options[this.selectedIndex].value != -1){ forms[\'jumpbox\'].submit() }"><option value="-1">' . $lang['Select_forum'] . '</option><option value="-1">&nbsp;</option>';
$boxstring = '<select name="f" onChange="if(this.options[this.selectedIndex].value != -1){ forms[\'jumpbox\'].submit() }"><option value="-1">' . $user->lang['Select_forum'] . '</option><option value="-1">&nbsp;</option>';
$sql = 'SELECT forum_id, forum_name, forum_status, left_id, right_id
FROM ' . FORUMS_TABLE . '
@@ -249,9 +249,7 @@ function make_jumpbox($action, $forum_id = false)
$holding = '';
}
//
// TODO: do not add empty categories to nav links
//
$nav_links['chapter forum'][$row['forum_id']] = array (
'url' => ($row['forum_status'] == ITEM_CATEGORY) ? "index.$phpEx$SIDc=" : "viewforum.$phpEx$SID&f=" . $row['forum_id'],
'title' => $row['forum_name']
@@ -263,13 +261,13 @@ function make_jumpbox($action, $forum_id = false)
if (!$right)
{
$boxstring .= '<option value="-1">' . $lang['No_forums'] . '</option>';
$boxstring .= '<option value="-1">' . $user->lang['No_forums'] . '</option>';
}
$boxstring .= '</select>';
$template->assign_vars(array(
'L_GO' => $lang['Go'],
'L_JUMP_TO' => $lang['Jump_to'],
'L_GO' => $user->lang['Go'],
'L_JUMP_TO' => $user->lang['Jump_to'],
'S_JUMPBOX_SELECT' => $boxstring,
'S_JUMPBOX_ACTION' => $action)
@@ -278,16 +276,14 @@ function make_jumpbox($action, $forum_id = false)
return;
}
//
// Pick a language, any language ...
//
function language_select($default, $select_name = "language", $dirname="language")
{
global $phpEx;
$dir = opendir($dirname);
$lang = array();
$user = array();
while ( $file = readdir($dir) )
{
if ( preg_match('#^lang_#', $file) && !is_file($dirname . '/' . $file) && !is_link($dirname . '/' . $file) )
@@ -295,30 +291,28 @@ function language_select($default, $select_name = "language", $dirname="language
$filename = trim(str_replace('lang_', '', $file));
$displayname = preg_replace('/^(.*?)_(.*)$/', '\\1 [ \\2 ]', $filename);
$displayname = preg_replace('/\[(.*?)_(.*)\]/', '[ \\1 - \\2 ]', $displayname);
$lang[$displayname] = $filename;
$user->lang[$displayname] = $filename;
}
}
closedir($dir);
@asort($lang);
@reset($lang);
@asort($user);
@reset($user);
$lang_select = '<select name="' . $select_name . '">';
foreach ( $lang as $displayname => $filename )
$user_select = '<select name="' . $select_name . '">';
foreach ( $user as $displayname => $filename )
{
$selected = ( strtolower($default) == strtolower($filename) ) ? ' selected="selected"' : '';
$lang_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>';
$user_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>';
}
$lang_select .= '</select>';
$user_select .= '</select>';
return $lang_select;
return $user_select;
}
//
// Pick a template/theme combo,
//
function style_select($default_style, $select_name = "style", $dirname = "templates")
function style_select($default_style, $select_name = 'style', $dirname = 'templates')
{
global $db;
@@ -339,15 +333,13 @@ function style_select($default_style, $select_name = "style", $dirname = "templa
return $style_select;
}
//
// Pick a timezone
//
function tz_select($default, $select_name = 'timezone')
{
global $sys_timezone, $lang;
global $sys_timezone, $user;
$tz_select = '<select name="' . $select_name . '">';
while( list($offset, $zone) = @each($lang['tz']) )
foreach ( $user->lang['tz'] as $offset => $zone )
{
$selected = ( $offset == $default ) ? ' selected="selected"' : '';
$tz_select .= '<option value="' . $offset . '"' . $selected . '>' . $zone . '</option>';
@@ -357,20 +349,16 @@ function tz_select($default, $select_name = 'timezone')
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, $phpEx, $SID, $start;
global $template, $db, $user, $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;
@@ -399,7 +387,7 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $mat
'META' => '<meta http-equiv="refresh" content="3;url=' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">')
);
$message = $lang['No_longer_watching_' . $mode] . '<br /><br />' . sprintf($lang['Click_return_' . $mode], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>');
$message = $user->lang['No_longer_watching_' . $mode] . '<br /><br />' . sprintf($user->lang['Click_return_' . $mode], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>');
message_die(MESSAGE, $message);
}
else
@@ -433,7 +421,7 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $mat
'META' => '<meta http-equiv="refresh" content="3;url=' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">')
);
$message = $lang['You_are_watching_' . $mode] . '<br /><br />' . sprintf($lang['Click_return_' . $mode], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>');
$message = $user->lang['You_are_watching_' . $mode] . '<br /><br />' . sprintf($user->lang['Click_return_' . $mode], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>');
message_die(MESSAGE, $message);
}
else
@@ -460,58 +448,16 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $mat
if ( $can_watch )
{
if ( $is_watching )
{
$watch_url = "view$mode." . $phpEx . $SID . '&amp;' . $u_url . "=$match_id&amp;unwatch=$mode&amp;start=$start";
$img = ( $mode == 'forum' ) ? $images['Forum_un_watch'] : $images['Topic_un_watch'];
$s_watching = '<a href="' . $watch_url . '">' . $lang['Stop_watching_' . $mode] . '</a>';
$s_watching_img = ( isset($img) ) ? '<a href="' . $watch_url . '"><img src="' . $img . '" alt="' . $lang['Stop_watching_' . $mode] . '" title="' . $lang['Stop_watching_' . $mode] . '" border="0"></a>' : '';
}
else
{
$watch_url = "view$mode." . $phpEx . $SID . '&amp;' . $u_url . "=$match_id&amp;watch=$mode&amp;start=$start";
$img = ( $mode == 'forum' ) ? $images['Forum_watch'] : $images['Topic_watch'];
$s_watching = '<a href="' . $watch_url . '">' . $lang['Start_watching_' . $mode] . '</a>';
$s_watching_img = ( isset($img) ) ? '<a href="' . $watch_url . '"><img src="' . $img . '" alt="' . $lang['Stop_watching_' . $mode] . '" title="' . $lang['Start_watching_' . $mode] . '" border="0"></a>' : '';
}
$s_watching = ( $is_watching ) ? '<a href="' . "view$mode." . $phpEx . $SID . '&amp;' . $u_url . "=$match_id&amp;unwatch=$mode&amp;start=$start" . '">' . $user->lang['Stop_watching_' . $mode] . '</a>' : '<a href="' . "view$mode." . $phpEx . $SID . '&amp;' . $u_url . "=$match_id&amp;watch=$mode&amp;start=$start" . '">' . $user->lang['Start_watching_' . $mode] . '</a>';
}
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 '<img src=' . $img . ' alt="' . $alt . '" title="' . $alt . '" />';
}
//
// Pagination routine, generates
// page number sequence
//
// Pagination routine, generates page number sequence
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
{
global $lang;
global $user;
$total_pages = ceil($num_items/$per_page);
@@ -522,7 +468,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
$on_page = floor($start_item / $per_page) + 1;
$page_string = ( $on_page == 1 ) ? '<b>1</b>' : '<a href="' . $base_url . "&amp;start=" . ( ( $on_page - 2 ) * $per_page ) . '">' . $lang['Previous'] . '</a>&nbsp;&nbsp;<a href="' . $base_url . '">1</a>';
$page_string = ( $on_page == 1 ) ? '<b>1</b>' : '<a href="' . $base_url . "&amp;start=" . ( ( $on_page - 2 ) * $per_page ) . '">' . $user->lang['Previous'] . '</a>&nbsp;&nbsp;<a href="' . $base_url . '">1</a>';
if ( $total_pages > 5 )
{
@@ -556,18 +502,18 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
}
}
$page_string .= ( $on_page == $total_pages ) ? '<b>' . $total_pages . '</b>' : '<a href="' . $base_url . '&amp;start=' . ( ( $total_pages - 1 ) * $per_page ) . '">' . $total_pages . '</a>&nbsp;&nbsp;<a href="' . $base_url . "&amp;start=" . ( $on_page * $per_page ) . '">' . $lang['Next'] . '</a>';
$page_string .= ( $on_page == $total_pages ) ? '<b>' . $total_pages . '</b>' : '<a href="' . $base_url . '&amp;start=' . ( ( $total_pages - 1 ) * $per_page ) . '">' . $total_pages . '</a>&nbsp;&nbsp;<a href="' . $base_url . "&amp;start=" . ( $on_page * $per_page ) . '">' . $user->lang['Next'] . '</a>';
$page_string = $lang['Goto_page'] . ' ' . $page_string;
$page_string = $user->lang['Goto_page'] . ' ' . $page_string;
return $page_string;
}
function on_page($num_items, $per_page, $start)
{
global $lang;
global $user;
return sprintf($lang['Page_of'], floor( $start / $per_page ) + 1, max(ceil( $num_items / $per_page ), 1) );
return sprintf($user->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
@@ -581,25 +527,20 @@ function obtain_word_list(&$orig_word, &$replacement_word)
FROM " . WORDS_TABLE;
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
while ( $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) );
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i';
$replacement_word[] = $row['replacement'];
}
return true;
}
//
// Redirects the user to another page then exits the script nicely
//
function redirect($location)
{
global $db;
if (isset($db))
{
$db->sql_close();
@@ -610,39 +551,26 @@ function redirect($location)
exit;
}
//
// 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
//
// $errno, $errstr, $errfile, $errline
function message_die($msg_code, $msg_text = '', $msg_title = '')
{
global $db, $session, $auth, $template, $board_config, $theme, $lang, $user;
global $userdata, $user_ip, $phpEx, $phpbb_root_path, $nav_links, $starttime;
global $db, $auth, $template, $board_config, $user, $nav_links;
global $phpEx, $phpbb_root_path, $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;
$msg_title = ( $msg_title == '' ) ? $user->lang['Information'] : $msg_title;
$msg_text = ( !empty($user->lang[$msg_text]) ) ? $user->lang[$msg_text] : $msg_text;
if ( !defined('HEADER_INC') )
{
if ( empty($userdata) )
if ( empty($user->lang) )
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="Content-Style-Type" content="text/css"><link rel="stylesheet" href="admin/subSilver.css" type="text/css"><style type="text/css">th { background-image: url(\'admin/images/cellpic3.gif\') } td.cat { background-image: url(\'admin/images/cellpic1.gif\') }</style><title>' . $msg_title . '</title></html>' . "\n";
echo '<body><table width="100%" height="100%" border="0"><tr><td align="center" valign="middle"><table class="bg" width="80%" cellspacing="1" cellpadding="4" border="0"><tr><th>' . $msg_title . '</th></tr><tr><td class="row1" align="center">' . $msg_text . '</td></tr></table></td></tr></table></body></html>';
@@ -694,8 +622,8 @@ function message_die($msg_code, $msg_text = '', $msg_title = '')
// Error and message handler, call with trigger_error if reqd
function msg_handler($errno, $msg_text, $errfile, $errline)
{
global $db, $session, $auth, $template, $board_config, $theme, $lang, $userdata, $user_ip;
global $phpEx, $phpbb_root_path, $nav_links, $starttime;
global $db, $auth, $template, $board_config, $user, $nav_links;
global $phpEx, $phpbb_root_path, $starttime;
switch ( $errno )
{
@@ -705,33 +633,26 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
case E_NOTICE:
break;
case E_ERROR:
case E_USER_ERROR:
$db->sql_close();
if ( isset($db) )
{
$db->sql_close();
}
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>phpBB 2 :: General Error</title></html>' . "\n";
echo '<body><h1 style="font-family:Verdana,serif;font-size:18pt;font-weight:bold">phpBB2 :: General Error</h1><hr style="height:2px;border-style:dashed;color:black" /><p style="font-family:Verdana,serif;font-size:10pt">' . $msg_text . '</p><hr style="height:2px;border-style:dashed;color:black" /><p style="font-family:Verdana,serif;font-size:10pt">Contact the site administrator to report this failure</p></body></html>';
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="Content-Style-Type" content="text/css"><link rel="stylesheet" href="admin/subSilver.css" type="text/css"><style type="text/css">th { background-image: url(\'admin/images/cellpic3.gif\') } td.cat { background-image: url(\'admin/images/cellpic1.gif\') }</style><title>' . $msg_title . '</title></html>' . "\n";
echo '<body><table width="100%" height="100%" border="0"><tr><td align="center" valign="middle"><table class="bg" width="80%" cellspacing="1" cellpadding="4" border="0"><tr><th>' . $msg_title . '</th></tr><tr><td class="row1" align="center">' . $msg_text . '</td></tr></table></td></tr></table></body></html>';
exit;
break;
case E_USER_NOTICE:
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_text = ( !empty($lang[$msg_text]) ) ? $lang[$msg_text] : $msg_text;
$msg_text = ( !empty($user->lang[$msg_text]) ) ? $user->lang[$msg_text] : $msg_text;
if ( !defined('HEADER_INC') )
{
if ( empty($userdata) )
if ( empty($user->data) )
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="Content-Style-Type" content="text/css"><link rel="stylesheet" href="admin/subSilver.css" type="text/css"><style type="text/css">th { background-image: url(\'admin/images/cellpic3.gif\') } td.cat { background-image: url(\'admin/images/cellpic1.gif\') }</style><title>' . $lang['Information'] . '</title></html>' . "\n";
echo '<body><table width="100%" height="100%" border="0"><tr><td align="center" valign="middle"><table class="bg" width="80%" cellspacing="1" cellpadding="4" border="0"><tr><th>' . $lang['Information'] . '</th></tr><tr><td class="row1" align="center">' . $msg_text . '</td></tr></table></td></tr></table></body></html>';
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="Content-Style-Type" content="text/css"><link rel="stylesheet" href="admin/subSilver.css" type="text/css"><style type="text/css">th { background-image: url(\'admin/images/cellpic3.gif\') } td.cat { background-image: url(\'admin/images/cellpic1.gif\') }</style><title>' . $user->lang['Information'] . '</title></html>' . "\n";
echo '<body><table width="100%" height="100%" border="0"><tr><td align="center" valign="middle"><table class="bg" width="80%" cellspacing="1" cellpadding="4" border="0"><tr><th>' . $user->lang['Information'] . '</th></tr><tr><td class="row1" align="center">' . $msg_text . '</td></tr></table></td></tr></table></body></html>';
$db->sql_close();
exit;
}

View File

@@ -387,7 +387,6 @@ function split_sql_file($sql, $delimiter)
// save memory.
$tokens[$j] = '';
}
} // for..
} // else
}
@@ -399,107 +398,63 @@ function split_sql_file($sql, $delimiter)
// Extension of auth class for changing permissions
class auth_admin extends auth
{
function acl_set_user(&$forum_id, &$user_id, &$auth)
// Note that the set/delete methods are basically the same
// so if possible they should be merged
function acl_set($mode, &$forum_id, &$ug_id, &$auth)
{
global $db;
$forum_sql = ( $forum_id ) ? "AND a.forum_id IN ($forum_id, 0)" : '';
if ( !is_array($forum_id) )
{
$forum_id = array($forum_id);
}
// NOTE THIS USED TO BE IN ($forum_id, 0) ...
$forum_sql = 'AND a.forum_id IN (' . implode(', ', $forum_id) . ')';
$sql = "SELECT o.auth_option_id, o.auth_value, a.auth_allow_deny
FROM " . ACL_USERS_TABLE . " a, " . ACL_OPTIONS_TABLE . " o
WHERE a.auth_option_id = o.auth_option_id
$forum_sql
AND a.user_id = $user_id";
$sql = ( $mode == 'user' ) ? "SELECT o.auth_option_id, o.auth_value, a.forum_id, a.auth_allow_deny FROM " . ACL_USERS_TABLE . " a, " . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $forum_sql AND a.user_id = $ug_id" :"SELECT o.auth_option_id, o.auth_value, a.forum_id, a.auth_allow_deny FROM " . ACL_GROUPS_TABLE . " a, " . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $forum_sql AND a.group_id = $ug_id";
$result = $db->sql_query($sql);
$user_auth = array();
if ( $row = $db->sql_fetchrow($result) )
$cur_auth = array();
while ( $row = $db->sql_fetchrow($result) )
{
do
{
$user_auth[$user_id][$row['auth_option_id']] = $row['auth_allow_deny'];
}
while ( $row = $db->sql_fetchrow($result) );
$cur_auth[$row['forum_id']][$row['auth_option_id']] = $row['auth_allow_deny'];
}
$db->sql_freeresult($result);
foreach ( $auth as $auth_option_id => $allow )
$table = ( $mode == 'user' ) ? ACL_USERS_TABLE : ACL_GROUPS_TABLE;
$id_field = $mode . '_id';
foreach ( $forum_id as $forum)
{
if ( !empty($user_auth) )
foreach ( $auth as $auth_option_id => $allow )
{
foreach ( $user_auth as $user => $user_auth_ary )
if ( !empty($cur_auth[$forum]) )
{
$sql_ary[] = ( !isset($user_auth_ary[$auth_option_id]) ) ? "INSERT INTO " . ACL_USERS_TABLE . " (user_id, forum_id, auth_option_id, auth_allow_deny) VALUES ($user_id, $forum_id, $auth_option_id, $allow)" : ( ( $user_auth_ary[$auth_option_id] != $allow ) ? "UPDATE " . ACL_USERS_TABLE . " SET auth_allow_deny = $allow WHERE user_id = $user_id AND forum_id = $forum_id AND auth_option_id = $auth_option_id" : '' );
$sql_ary[] = ( !isset($cur_auth[$forum][$auth_option_id]) ) ? "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_allow_deny) VALUES ($ug_id, $forum, $auth_option_id, $allow)" : ( ( $cur_auth[$forum][$auth_option_id] != $allow ) ? "UPDATE " . $table . " SET auth_allow_deny = $allow WHERE $id_field = $ug_id AND forum_id = $forum AND auth_option_id = $auth_option_id" : '' );
}
else
{
$sql_ary[] = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_allow_deny) VALUES ($ug_id, $forum, $auth_option_id, $allow)";
}
}
else
{
$sql_ary[] = "INSERT INTO " . ACL_USERS_TABLE . " (user_id, forum_id, auth_option_id, auth_allow_deny) VALUES ($user_id, $forum_id, $auth_option_id, $allow)";
}
}
foreach ( $sql_ary as $sql )
{
$db->sql_query($sql);
}
unset($forum_id);
unset($user_auth);
unset($sql_ary);
$this->acl_clear_prefetch();
}
function acl_set_group(&$forum_id, &$group_id, &$auth)
{
global $db;
$forum_sql = "AND a.forum_id IN ($forum_id, 0)";
$sql = "SELECT o.auth_option_id, o.auth_value, a.auth_allow_deny
FROM " . ACL_GROUPS_TABLE . " a, " . ACL_OPTIONS_TABLE . " o
WHERE a.auth_option_id = o.auth_option_id
$forum_sql
AND a.group_id = $group_id";
$result = $db->sql_query($sql);
$group_auth = array();
if ( $row = $db->sql_fetchrow($result) )
{
do
{
$group_auth[$group_id][$row['auth_option_id']] = $row['auth_allow_deny'];
}
while ( $row = $db->sql_fetchrow($result) );
}
$db->sql_freeresult($result);
foreach ( $auth as $auth_option_id => $allow )
{
if ( !empty($group_auth) )
{
foreach ( $group_auth as $group => $group_auth_ary )
{
$sql_ary[] = ( !isset($group_auth_ary[$auth_option_id]) ) ? "INSERT INTO " . ACL_GROUPS_TABLE . " (group_id, forum_id, auth_option_id, auth_allow_deny) VALUES ($group_id, $forum_id, $auth_option_id, $allow)" : ( ( $group_auth_ary[$auth_option_id] != $allow ) ? "UPDATE " . ACL_GROUPS_TABLE . " SET auth_allow_deny = $allow WHERE group_id = $group_id AND forum_id = $forum_id and auth_option_id = $auth_option_id" : '' );
}
}
else
{
$sql_ary[] = "INSERT INTO " . ACL_GROUPS_TABLE . " (group_id, forum_id, auth_option_id, auth_allow_deny) VALUES ($group_id, $forum_id, $auth_option_id, $allow)";
}
}
foreach ( $sql_ary as $sql )
{
$db->sql_query($sql);
if ( $sql != '' )
{
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
}
}
unset($group_auth);
unset($sql_ary);
$this->acl_clear_prefetch();
}
function acl_delete_user($forum_id, $user_id, $auth_ids = false)
function acl_delete($mode, &$forum_id, &$ug_id, $auth_ids = false)
{
global $db;
@@ -513,31 +468,11 @@ class auth_admin extends auth
$auth_sql = " AND auth_option_id IN ($auth_sql)";
}
$sql = "DELETE FROM " . ACL_USERS_TABLE . "
WHERE user_id = $user_id
AND forum_id = $forum_id
$auth_sql";
$db->sql_query($sql);
$table = ( $mode == 'user' ) ? ACL_USERS_TABLE : ACL_GROUPS_TABLE;
$id_field = $mode . '_id';
$this->acl_clear_prefetch();
}
function acl_delete_group($forum_id, $group_id, $auth_type = false)
{
global $db;
$auth_sql = '';
if ( $auth_ids )
{
for($i = 0; $i < count($auth_ids); $i++)
{
$auth_sql .= ( ( $auth_sql != '' ) ? ', ' : '' ) . $auth_ids[$i];
}
$auth_sql = " AND auth_option_id IN ($auth_sql)";
}
$sql = "DELETE FROM " . ACL_GROUPS_TABLE . "
WHERE group_id = $group_id
$sql = "DELETE FROM $table
WHERE $id_field = $ug_id
AND forum_id = $forum_id
$auth_sql";
$db->sql_query($sql);
@@ -555,6 +490,25 @@ class auth_admin extends auth
return;
}
function acl_add_option($options)
{
global $db;
if ( !is_array($options) )
{
message_die(ERROR, 'Incorrect parameter for acl_add_option');
}
// If we go with the | GLOBAL | FORUM | setup the array
// needs to be a hash setup appropriately. We then need
// to insert each new option with an appropriate global
// or local id
//
// If we stay with the current | FORUM | setup the array
// need not be a hash. Each entry would simply be inserted
}
}
?>

View File

@@ -36,22 +36,19 @@ if ( $board_config['gzip_compress'] )
}
// Generate logged in/logged out status
if ( $userdata['user_id'] )
if ( $user->data['user_id'] )
{
$u_login_logout = 'login.'.$phpEx. $SID . '&amp;logout=true';
$l_login_logout = $lang['Logout'] . ' [ ' . $userdata['username'] . ' ]';
$l_login_logout = $user->lang['Logout'] . ' [ ' . $user->data['username'] . ' ]';
}
else
{
$u_login_logout = 'login.'.$phpEx . $SID;
$l_login_logout = $lang['Login'];
$l_login_logout = $user->lang['Login'];
}
// Last visit date/time
$s_last_visit = ( $userdata['user_id'] ) ? $user->format_date($userdata['session_last_visit']) : '';
// Timezone : $user->dst
$s_timezone = ( $userdata['user_dst'] ) ? sprintf($lang['All_times'], $lang[floatval($board_config['board_timezone'])], $lang['tz']['dst']) : sprintf($lang['All_times'], $lang[floatval($board_config['board_timezone'])], '');
$s_last_visit = ( $user->data['user_id'] ) ? $user->format_date($user->data['session_last_visit']) : '';
// Get users online list
$userlist_ary = array();
@@ -64,12 +61,17 @@ $online_userlist = '';
$prev_user_id = 0;
$prev_user_ip = '';
// && $auth->acl_get('forum', 'read', $_GET['f'])
$user_forum_sql = ( empty($_GET['f'])) ? '' : "AND s.session_page LIKE '%f=" . intval($_GET['f']) . "%'";
$reading_sql = '';
if ( !empty($_GET['f']) || !empty($_GET['t']) )
{
$reading_sql = "AND s.session_page LIKE '%" . ( ( !empty($_GET['t']) ) ? 't=' . intval($_GET['t']) : 'f=' . intval($_GET['f']) ) . "%'";
}
$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_colour, s.session_ip
FROM " . USERS_TABLE . " u, " . SESSIONS_TABLE ." s
WHERE s.session_time >= ".( time() - 300 ) . "
$user_forum_sql
$reading_sql
AND u.user_id = s.session_user_id
ORDER BY u.username ASC, s.session_ip ASC";
$result = $db->sql_query($sql, false);
@@ -77,7 +79,7 @@ $result = $db->sql_query($sql, false);
while( $row = $db->sql_fetchrow($result) )
{
// User is logged in and therefor not a guest
if ( $row['user_id'] )
if ($row['user_id'] != ANONYMOUS)
{
// Skip multiple sessions for one user
if ( $row['user_id'] != $prev_user_id )
@@ -120,16 +122,16 @@ while( $row = $db->sql_fetchrow($result) )
if ( empty($online_userlist) )
{
$online_userlist = $lang['None'];
$online_userlist = $user->lang['None'];
}
if ( empty($_GET['f']) )
{
$online_userlist = $lang['Registered_users'] . ' ' . $online_userlist;
$online_userlist = $user->lang['Registered_users'] . ' ' . $online_userlist;
}
else
{
$l_online = ( $guests_online == 1 ) ? $lang['Browsing_forum_guest'] : $lang['Browsing_forum_guests'];
$l_online = ( $guests_online == 1 ) ? $user->lang['Browsing_forum_guest'] : $user->lang['Browsing_forum_guests'];
$online_userlist = sprintf($l_online, $online_userlist, $guests_online);
}
@@ -153,54 +155,54 @@ if ( $total_online_users > $board_config['record_online_users'])
if ( $total_online_users == 0 )
{
$l_t_user_s = $lang['Online_users_zero_total'];
$l_t_user_s = $user->lang['Online_users_zero_total'];
}
else if ( $total_online_users == 1 )
{
$l_t_user_s = $lang['Online_user_total'];
$l_t_user_s = $user->lang['Online_user_total'];
}
else
{
$l_t_user_s = $lang['Online_users_total'];
$l_t_user_s = $user->lang['Online_users_total'];
}
if ( $logged_visible_online == 0 )
{
$l_r_user_s = $lang['Reg_users_zero_total'];
$l_r_user_s = $user->lang['Reg_users_zero_total'];
}
else if ( $logged_visible_online == 1 )
{
$l_r_user_s = $lang['Reg_user_total'];
$l_r_user_s = $user->lang['Reg_user_total'];
}
else
{
$l_r_user_s = $lang['Reg_users_total'];
$l_r_user_s = $user->lang['Reg_users_total'];
}
if ( $logged_hidden_online == 0 )
{
$l_h_user_s = $lang['Hidden_users_zero_total'];
$l_h_user_s = $user->lang['Hidden_users_zero_total'];
}
else if ( $logged_hidden_online == 1 )
{
$l_h_user_s = $lang['Hidden_user_total'];
$l_h_user_s = $user->lang['Hidden_user_total'];
}
else
{
$l_h_user_s = $lang['Hidden_users_total'];
$l_h_user_s = $user->lang['Hidden_users_total'];
}
if ( $guests_online == 0 )
{
$l_g_user_s = $lang['Guest_users_zero_total'];
$l_g_user_s = $user->lang['Guest_users_zero_total'];
}
else if ( $guests_online == 1 )
{
$l_g_user_s = $lang['Guest_user_total'];
$l_g_user_s = $user->lang['Guest_user_total'];
}
else
{
$l_g_user_s = $lang['Guest_users_total'];
$l_g_user_s = $user->lang['Guest_users_total'];
}
$l_online_users = sprintf($l_t_user_s, $total_online_users);
@@ -208,62 +210,52 @@ $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);
//
// Obtain number of new private messages
// if user is logged in
//
if ( $userdata['user_id'] )
// Obtain number of new private messages if user is logged in
if ($user->data['user_id'] != ANONYMOUS)
{
if ( $userdata['user_new_privmsg'] )
if ($user->data['user_new_privmsg'])
{
$l_message_new = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['New_pm'] : $lang['New_pms'];
$l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']);
$l_message_new = ( $user->data['user_new_privmsg'] == 1 ) ? $user->lang['New_pm'] : $user->lang['New_pms'];
$l_privmsgs_text = sprintf($l_message_new, $user->data['user_new_privmsg']);
if ( $userdata['user_last_privmsg'] > $userdata['session_last_visit'] )
if ( $user->data['user_last_privmsg'] > $user->data['session_last_visit'] )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_last_privmsg = " . $userdata['session_last_visit'] . "
WHERE user_id = " . $userdata['user_id'];
SET user_last_privmsg = " . $user->data['session_last_visit'] . "
WHERE user_id = " . $user->data['user_id'];
$db->sql_query($sql);
$s_privmsg_new = 1;
$icon_pm = $images['pm_new_msg'];
}
else
{
$s_privmsg_new = 0;
$icon_pm = $images['pm_no_new_msg'];
}
}
else
{
$l_privmsgs_text = $lang['No_new_pm'];
$l_privmsgs_text = $user->lang['No_new_pm'];
$s_privmsg_new = 0;
$icon_pm = $images['pm_no_new_msg'];
}
if ( $userdata['user_unread_privmsg'] )
if ( $user->data['user_unread_privmsg'] )
{
$l_message_unread = ( $userdata['user_unread_privmsg'] == 1 ) ? $lang['Unread_pm'] : $lang['Unread_pms'];
$l_privmsgs_text_unread = sprintf($l_message_unread, $userdata['user_unread_privmsg']);
$l_message_unread = ( $user->data['user_unread_privmsg'] == 1 ) ? $user->lang['Unread_pm'] : $user->lang['Unread_pms'];
$l_privmsgs_text_unread = sprintf($l_message_unread, $user->data['user_unread_privmsg']);
}
else
{
$l_privmsgs_text_unread = $lang['No_unread_pm'];
$l_privmsgs_text_unread = $user->lang['No_unread_pm'];
}
}
else
{
$icon_pm = $images['pm_no_new_msg'];
$l_privmsgs_text = $lang['Login_check_pm'];
$l_privmsgs_text = $user->lang['Login_check_pm'];
$l_privmsgs_text_unread = '';
$s_privmsg_new = 0;
}
//
// Generate HTML required for Mozilla Navigation bar
//
$nav_links_html = '';
/*
$nav_link_proto = '<link rel="%s" href="%s" title="%s" />' . "\n";
@@ -283,77 +275,78 @@ foreach ( $nav_links as $nav_item => $nav_array )
}
}
*/
//
// The following assigns all _common_ variables that may be used at any point
// in a template.
//
$template->assign_vars(array(
'SITENAME' => $board_config['sitename'],
'SITE_DESCRIPTION' => $board_config['site_desc'],
'PAGE_TITLE' => $page_title,
'LAST_VISIT_DATE' => sprintf($lang['You_last_visit'], $s_last_visit),
'CURRENT_TIME' => sprintf($lang['Current_time'], $user->format_date(time())),
'TOTAL_USERS_ONLINE' => $l_online_users,
'LOGGED_IN_USER_LIST' => $online_userlist,
'RECORD_USERS' => sprintf($lang['Record_online_users'], $board_config['record_online_users'], $user->format_date($board_config['record_online_date'])),
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
'PRIVATE_MESSAGE_NEW_FLAG' => $s_privmsg_new,
'SITENAME' => $board_config['sitename'],
'SITE_DESCRIPTION' => $board_config['site_desc'],
'PAGE_TITLE' => $page_title,
'LAST_VISIT_DATE' => sprintf($user->lang['You_last_visit'], $s_last_visit),
'CURRENT_TIME' => sprintf($user->lang['Current_time'], $user->format_date(time())),
'TOTAL_USERS_ONLINE' => $l_online_users,
'LOGGED_IN_USER_LIST' => $online_userlist,
'RECORD_USERS' => sprintf($user->lang['Record_online_users'], $board_config['record_online_users'], $user->format_date($board_config['record_online_date'])),
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
'PRIVATE_MESSAGE_NEW_FLAG' => $s_privmsg_new,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
'PRIVMSG_IMG' => $icon_pm,
'L_USERNAME' => $user->lang['Username'],
'L_PASSWORD' => $user->lang['Password'],
'L_LOGIN_LOGOUT' => $l_login_logout,
'L_LOGIN' => $user->lang['Login'],
'L_LOG_ME_IN' => $user->lang['Log_me_in'],
'L_AUTO_LOGIN' => $user->lang['Log_me_in'],
'L_INDEX' => sprintf($user->lang['Forum_Index'], $board_config['sitename']),
'L_FAQ' => $user->lang['FAQ'],
'L_REGISTER' => $user->lang['Register'],
'L_PROFILE' => $user->lang['Profile'],
'L_SEARCH' => $user->lang['Search'],
'L_PRIVATEMSGS' => $user->lang['Private_Messages'],
'L_MEMBERLIST' => $user->lang['Memberlist'],
'L_USERGROUPS' => $user->lang['Usergroups'],
'L_SEARCH_NEW' => $user->lang['Search_new'],
'L_SEARCH_SELF' => $user->lang['Search_your_posts'],
'L_WHO_IS_ONLINE' => $user->lang['Who_is_Online'],
'L_SEARCH_UNANSWERED' => $user->lang['Search_unanswered'],
'L_USERNAME' => $lang['Username'],
'L_PASSWORD' => $lang['Password'],
'L_LOGIN_LOGOUT' => $l_login_logout,
'L_LOGIN' => $lang['Login'],
'L_LOG_ME_IN' => $lang['Log_me_in'],
'L_AUTO_LOGIN' => $lang['Log_me_in'],
'L_INDEX' => sprintf($lang['Forum_Index'], $board_config['sitename']),
'L_REGISTER' => $lang['Register'],
'L_PROFILE' => $lang['Profile'],
'L_SEARCH' => $lang['Search'],
'L_PRIVATEMSGS' => $lang['Private_Messages'],
'L_WHO_IS_ONLINE' => $lang['Who_is_Online'],
'L_MEMBERLIST' => $lang['Memberlist'],
'L_FAQ' => $lang['FAQ'],
'L_USERGROUPS' => $lang['Usergroups'],
'L_SEARCH_NEW' => $lang['Search_new'],
'L_SEARCH_UNANSWERED' => $lang['Search_unanswered'],
'L_SEARCH_SELF' => $lang['Search_your_posts'],
'U_SEARCH_UNANSWERED' => 'search.'.$phpEx.$SID.'&amp;search_id=unanswered',
'U_SEARCH_SELF' => 'search.'.$phpEx.$SID.'&amp;search_id=egosearch',
'U_SEARCH_NEW' => 'search.'.$phpEx.$SID.'&amp;search_id=newposts',
'U_INDEX' => 'index.'.$phpEx.$SID,
'U_REGISTER' => 'profile.'.$phpEx.$SID.'&amp;mode=register',
'U_PROFILE' => 'profile.'.$phpEx.$SID.'&amp;mode=editprofile',
'U_PRIVATEMSGS' => 'privmsg.'.$phpEx.$SID.'&amp;folder=inbox',
'U_PRIVATEMSGS_POPUP' => 'privmsg.'.$phpEx.$SID.'&amp;mode=newpm',
'U_SEARCH' => 'search.'.$phpEx.$SID,
'U_MEMBERLIST' => 'memberlist.'.$phpEx.$SID,
'U_MODCP' => 'modcp.'.$phpEx.$SID,
'U_FAQ' => 'faq.'.$phpEx.$SID,
'U_VIEWONLINE' => 'viewonline.'.$phpEx.$SID,
'U_LOGIN_LOGOUT' => $u_login_logout,
'U_PRIVATEMSGS' => 'privmsg.'.$phpEx.$SID.'&amp;folder=inbox',
'U_MEMBERLIST' => 'memberlist.'.$phpEx.$SID,
'U_VIEWONLINE' => 'viewonline.'.$phpEx.$SID,
'U_MEMBERSLIST' => 'memberlist.'.$phpEx.$SID,
'U_GROUP_CP' => 'groupcp.'.$phpEx.$SID,
'U_GROUP_CP' => 'groupcp.'.$phpEx.$SID,
'U_LOGIN_LOGOUT'=> $u_login_logout,
'U_INDEX' => 'index.'.$phpEx.$SID,
'U_SEARCH' => 'search.'.$phpEx.$SID,
'U_REGISTER' => 'profile.'.$phpEx.$SID.'&amp;mode=register',
'U_PROFILE' => 'profile.'.$phpEx.$SID.'&amp;mode=editprofile',
'U_MODCP' => 'modcp.'.$phpEx.$SID,
'U_FAQ' => 'faq.'.$phpEx.$SID,
'U_SEARCH_SELF' => 'search.'.$phpEx.$SID.'&amp;search_id=egosearch',
'U_SEARCH_NEW' => 'search.'.$phpEx.$SID.'&amp;search_id=newposts',
'U_PRIVATEMSGS_POPUP' => 'privmsg.'.$phpEx.$SID.'&amp;mode=newpm',
'U_SEARCH_UNANSWERED' => 'search.'.$phpEx.$SID.'&amp;search_id=unanswered',
'S_USER_LOGGED_IN' => ( $userdata['user_id'] ) ? true : false,
'S_USER_PM_POPUP' => ( !empty($userdata['user_popup_pm']) ) ? true : false,
'S_USER_BROWSER' => $userdata['session_browser'],
'S_CONTENT_DIRECTION' => $lang['DIRECTION'],
'S_CONTENT_ENCODING' => $lang['ENCODING'],
'S_CONTENT_DIR_LEFT' => $lang['LEFT'],
'S_CONTENT_DIR_RIGHT' => $lang['RIGHT'],
'S_TIMEZONE' => $s_timezone,
'S_LOGIN_ACTION' => 'login.'.$phpEx.$SID,
'S_USER_LOGGED_IN' => ( $user->data['user_id'] ) ? true : false,
'S_USER_PM_POPUP' => ( !empty($user->data['user_popup_pm']) ) ? true : false,
'S_USER_BROWSER' => $user->data['session_browser'],
'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
'S_CONTENT_ENCODING' => $user->lang['ENCODING'],
'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'],
'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'],
'S_LOGIN_ACTION' => 'login.'.$phpEx.$SID,
'S_TIMEZONE' => ( $user->data['user_dst'] ) ? sprintf($user->lang['All_times'], $user->lang[floatval($board_config['board_timezone'])], $user->lang['tz']['dst']) : sprintf($user->lang['All_times'], $user->lang[floatval($board_config['board_timezone'])], ''),
'T_STYLESHEET_DATA' => $theme['css_data'],
'T_STYLESHEET_LINK' => 'templates/' . $theme['css_external'],
'T_STYLESHEET_DATA' => $user->theme['css_data'],
'T_STYLESHEET_LINK' => 'templates/' . $user->theme['css_external'],
'NAV_LINKS' => $nav_links_html)
);
/*if ( $board_config['send_encoding'] )
{
header ('Content-type: text/html; charset: ' . $user->lang['ENCODING']);
}*/
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
header ('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
header ('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');

View File

@@ -19,14 +19,10 @@
*
***************************************************************************/
//
// Close our DB connection.
//
$db->sql_close();
//
// Output page creation time
//
if (defined('DEBUG'))
{
$mtime = explode(' ', microtime());
@@ -44,15 +40,15 @@ if (defined('DEBUG'))
if ($auth->acl_get('a_'))
{
$debug_output .= ' | <a href="' . $_SERVER['REQUEST_URI'] . '&amp;explain=1">Explain</a>';
$debug_output .= ' | <a href="' . $_SERVER['REQUEST_URI'] . '&amp;explain=1">Explain</a>';
}
$debug_output .= ' ]';
}
$template->assign_vars(array(
'PHPBB_VERSION' => $board_config['version'],
'ADMIN_LINK' => ( $auth->acl_get('a_') ) ? '<a href="' . "admin/index.$phpEx?sid=" . $userdata['session_id'] . '">' . $lang['Admin_panel'] . '</a><br /><br />' : '',
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : ''
'PHPBB_VERSION' => $board_config['version'],
'ADMIN_LINK' => ( $auth->acl_get('a_') ) ? '<a href="' . "admin/index.$phpEx?sid=" . $user->data['session_id'] . '">' . $user->lang['Admin_panel'] . '</a><br /><br />' : '',
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : ''
));
$template->display('body');

View File

@@ -19,17 +19,19 @@
*
***************************************************************************/
class session {
class session
{
var $session_id = '';
var $data = array();
var $browser = '';
var $user_ip = '';
var $page = '';
var $load;
// Called at each page start ... checks for, updates and/or creates a session
function start($update = true)
{
global $SID, $db, $board_config, $user_ip;
global $SID, $db, $board_config;
$current_time = time();
$this->browser = ( !empty($_SERVER['HTTP_USER_AGENT']) ) ? $_SERVER['HTTP_USER_AGENT'] : $_ENV['HTTP_USER_AGENT'];
@@ -49,16 +51,28 @@ class session {
$SID = '?sid=' . $this->session_id;
}
// Obtain users IP
$this->ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ? $_SERVER['REMOTE_ADDR'] : $REMOTE_ADDR;
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
if ( preg_match('/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip_list) )
{
$private_ip = array('/^0\./', '/^127\.0\.0\.1/', '/^192\.168\..*/', '/^172\.16\..*/', '/^10\..*/', '/^224\..*/', '/^240\..*/');
$this->ip = preg_replace($private_ip, $this->ip, $ip_list[1]);
}
}
// Load limit check (if applicable)
if ( $board_config['limit_load'] && file_exists('/proc/loadavg') )
if ( intval($board_config['limit_load']) && file_exists('/proc/loadavg') )
{
if ( $load = @file('/proc/loadavg') )
{
list($this->load) = explode(' ', $load[0]);
if ( $this->load > $board_config['limit_load'] )
if ( $this->load > intval($board_config['limit_load']) )
{
message_die(MESSAGE, 'Board_unavailable');
trigger_error('Board_unavailable');
}
}
}
@@ -72,20 +86,20 @@ class session {
AND u.user_id = s.session_user_id";
$result = $db->sql_query($sql);
$userdata = $db->sql_fetchrow($result);
$this->data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// Did the session exist in the DB?
if ( isset($userdata['user_id']) )
if ( isset($this->data['user_id']) )
{
// Validate IP length according to admin ... has no effect on IPv6
$s_ip = implode('.', array_slice(explode('.', $userdata['session_ip']), 0, $board_config['ip_check']));
$u_ip = implode('.', array_slice(explode('.', $user_ip), 0, $board_config['ip_check']));
$s_ip = implode('.', array_slice(explode('.', $this->data['session_ip']), 0, $board_config['ip_check']));
$u_ip = implode('.', array_slice(explode('.', $this->ip), 0, $board_config['ip_check']));
if ( $u_ip == $s_ip )
{
// Only update session DB a minute or so after last update or if page changes
if ( ( $current_time - $userdata['session_time'] > 60 || $userdata['session_page'] != $user_page ) && $update )
if ( ( $current_time - $this->data['session_time'] > 60 || $this->data['session_page'] != $user_page ) && $update )
{
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_time = $current_time, session_page = '$this->page'
@@ -93,7 +107,7 @@ class session {
$db->sql_query($sql);
}
return $userdata;
return true;
}
}
}
@@ -109,7 +123,7 @@ class session {
// Create a new session
function create(&$user_id, &$autologin)
{
global $SID, $db, $board_config, $user_ip;
global $SID, $db, $board_config;
$sessiondata = array();
$current_time = time();
@@ -127,7 +141,7 @@ class session {
if ( intval($row['sessions']) > intval($board_config['active_sessions']) )
{
message_die(MESSAGE, 'Board_unavailable');
trigger_error('Board_unavailable');
}
}
@@ -146,14 +160,14 @@ class session {
ORDER BY s.session_time DESC";
$result = $db->sql_query($sql);
$userdata = $db->sql_fetchrow($result);
$this->data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// Check autologin request, is it valid?
if ( $userdata['user_password'] != $autologin || !$userdata['user_active'] || !$user_id )
if ( $this->data['user_password'] != $autologin || !$this->data['user_active'] || !$user_id )
{
$autologin = '';
$userdata['user_id'] = $user_id = ANONYMOUS;
$this->data['user_id'] = $user_id = ANONYMOUS;
}
$sql = "SELECT ban_ip, ban_userid, ban_email
@@ -162,30 +176,26 @@ class session {
OR ban_end = 0";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
while ( $row = $db->sql_fetchrow($result) )
{
do
if ( ( $row['user_id'] == $this->data['user_id'] ||
( $row['ban_ip'] && preg_match('#^' . str_replace('*', '.*?', $row['ban_ip']) . '$#i', $this->ip) ) ||
( $row['ban_email'] && preg_match('#^' . str_replace('*', '.*?', $row['ban_email']) . '$#i', $this->data['user_email']) ) )
&& !$this->data['user_founder'] )
{
if ( ( $row['user_id'] == $userdata['user_id'] ||
( $row['ban_ip'] && preg_match('#^' . str_replace('*', '.*?', $row['ban_ip']) . '$#i', $user_ip) ) ||
( $row['ban_email'] && preg_match('#^' . str_replace('*', '.*?', $row['ban_email']) . '$#i', $userdata['user_email']) ) )
&& !$userdata['user_founder'] )
{
message_die(MESSAGE, 'You_been_banned');
}
trigger_error('You_been_banned');
}
while ( $row = $db->sql_fetchrow($result) );
}
$db->sql_freeresult($result);
// Is there an existing session? If so, grab last visit time from that
$userdata['session_last_visit'] = ( $userdata['session_time'] ) ? $userdata['session_time'] : ( ( $userdata['user_lastvisit'] ) ? $userdata['user_lastvisit'] : time() );
$this->data['session_last_visit'] = ( $this->data['session_time'] ) ? $this->data['session_time'] : ( ( $this->data['user_lastvisit'] ) ? $this->data['user_lastvisit'] : time() );
// Create or update the session
$db->sql_return_on_error(true);
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_last_visit = " . $userdata['session_last_visit'] . ", session_start = $current_time, session_time = $current_time, session_browser = '$this->browser', session_page = '$this->page'
SET session_user_id = $user_id, session_last_visit = " . $this->data['session_last_visit'] . ", session_start = $current_time, session_time = $current_time, session_browser = '$this->browser', session_page = '$this->page'
WHERE session_id = '" . $this->session_id . "'";
if ( !$db->sql_query($sql) || !$db->sql_affectedrows() )
{
@@ -194,12 +204,12 @@ class session {
$sql = "INSERT INTO " . SESSIONS_TABLE . "
(session_id, session_user_id, session_last_visit, session_start, session_time, session_ip, session_browser, session_page)
VALUES ('" . $this->session_id . "', $user_id, " . $userdata['session_last_visit'] . ", $current_time, $current_time, '$user_ip', '$this->browser', '$this->page')";
VALUES ('" . $this->session_id . "', $user_id, " . $this->data['session_last_visit'] . ", $current_time, $current_time, '$this->ip', '$this->browser', '$this->page')";
$db->sql_query($sql);
}
$db->sql_return_on_error(false);
$userdata['session_id'] = $this->session_id;
$this->data['session_id'] = $this->session_id;
$sessiondata['autologinid'] = ( $autologin && $user_id ) ? $autologin : '';
$sessiondata['userid'] = $user_id;
@@ -208,17 +218,23 @@ class session {
$this->set_cookie('sid', $this->session_id, 0);
$SID = '?sid=' . $this->session_id;
// Events ... ?
if ( $userdata['user_id'] )
if ( $this->data['user_id'] )
{
// Events ... ?
// do_events('days');
// First page ... ?
// if (!empty($this->data['user_firstpage']))
// {
// redirect($userdata['user_firstpage']);
// }
}
return $userdata;
return true;
}
// Destroy a session
function destroy(&$userdata)
function destroy()
{
global $SID, $db, $board_config;
@@ -230,13 +246,13 @@ class session {
// Delete existing session, update last visit info first!
$sql = "UPDATE " . USERS_TABLE . "
SET user_lastvisit = " . intval($userdata['session_time']) . "
WHERE user_id = " . $userdata['user_id'];
SET user_lastvisit = " . intval($this->data['session_time']) . "
WHERE user_id = " . $this->data['user_id'];
$db->sql_query($sql);
$sql = "DELETE FROM " . SESSIONS_TABLE . "
WHERE session_id = '" . $this->session_id . "'
AND session_user_id = " . $userdata['user_id'];
AND session_user_id = " . $this->data['user_id'];
$db->sql_query($sql);
$this->session_id = '';
@@ -247,14 +263,14 @@ class session {
// Garbage collection
function gc(&$current_time)
{
global $db, $board_config, $user_ip;
global $db, $board_config;
// Get expired sessions, only most recent for each user
$sql = "SELECT session_user_id, MAX(session_time) AS recent_time
FROM " . SESSIONS_TABLE . "
WHERE session_time < " . ( $current_time - $board_config['session_length'] ) . "
GROUP BY session_user_id
LIMIT 10";
LIMIT 5";
$result = $db->sql_query($sql);
$del_user_id = '';
@@ -282,9 +298,9 @@ class session {
$db->sql_query($sql);
}
if ( $del_sessions < 10 )
if ( $del_sessions < 5 )
{
// Less than 10 sessions, update gc timer ... else we want gc
// Less than 5 sessions, update gc timer ... else we want gc
// called again to delete other sessions
$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = '$current_time'
@@ -306,60 +322,65 @@ class session {
// Contains (at present) basic user methods such as configuration
// creating date/time ... keep this?
class user
class user extends session
{
var $lang_name;
var $lang_path;
var $lang = array();
var $theme = array();
var $date_format;
var $timezone;
var $dst;
function user(&$userdata, $lang_set = false, $style = false)
{
global $db, $template, $lang, $board_config, $theme, $images;
global $phpEx, $phpbb_root_path;
var $lang_name;
var $lang_path;
var $img_lang;
if ( $userdata['user_id'] )
function setup($lang_set = false, $style = false)
{
global $db, $template, $board_config, $phpEx, $phpbb_root_path;
if ( $this->data['user_id'] != ANONYMOUS )
{
$this->lang_name = ( file_exists($phpbb_root_path . 'language/' . $userdata['user_lang']) ) ? $userdata['user_lang'] : $board_config['default_lang'];
$this->lang_name = ( file_exists($phpbb_root_path . 'language/' . $this->data['user_lang']) ) ? $this->data['user_lang'] : $board_config['default_lang'];
$this->lang_path = $phpbb_root_path . 'language/' . $this->lang_name . '/';
$this->date_format = $userdata['user_dateformat'];
$this->timezone = $userdata['user_timezone'] * 3600;
$this->dst = $userdata['user_dst'] * 3600;
$this->date_format = $this->data['user_dateformat'];
$this->timezone = $this->data['user_timezone'] * 3600;
$this->dst = $this->data['user_dst'] * 3600;
}
else if ( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) )
else
{
$this->lang_name = $board_config['default_lang'];
$this->lang_path = $phpbb_root_path . 'language/' . $this->lang_name . '/';
$this->date_format = $board_config['default_dateformat'];
$this->timezone = $board_config['board_timezone'] * 3600;
$this->dst = 0;
$accept_lang_ary = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ( $accept_lang_ary as $accept_lang )
if ( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) )
{
// Set correct format ... guess full xx_YY form
$accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2));
if ( file_exists($phpbb_root_path . 'language/' . $accept_lang) )
$accept_lang_ary = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ( $accept_lang_ary as $accept_lang )
{
$this->lang_name = $accept_lang;
$this->lang_path = $phpbb_root_path . 'language/' . $accept_lang . '/';
break;
}
else
{
// No match on xx_YY so try xx
$accept_lang = substr($accept_lang, 0, 2);
// Set correct format ... guess full xx_YY form
$accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2));
if ( file_exists($phpbb_root_path . 'language/' . $accept_lang) )
{
$this->lang_name = $accept_lang;
$this->lang_path = $phpbb_root_path . 'language/' . $accept_lang . '/';
break;
}
else
{
// No match on xx_YY so try xx
$accept_lang = substr($accept_lang, 0, 2);
if ( file_exists($phpbb_root_path . 'language/' . $accept_lang) )
{
$this->lang_name = $accept_lang;
$this->lang_path = $phpbb_root_path . 'language/' . $accept_lang . '/';
break;
}
}
}
}
$this->date_format = $board_config['default_dateformat'];
$this->timezone = $board_config['board_timezone'] * 3600;
$this->dst = 0;
}
include($this->lang_path . 'lang_main.' . $phpEx);
@@ -367,6 +388,7 @@ class user
{
include($this->lang_path . 'lang_admin.' . $phpEx);
}
/*
if ( is_array($lang_set) )
{
@@ -375,18 +397,18 @@ class user
$lang_set = explode(',', $lang_set);
foreach ( $lang_set as $lang_file )
{
include($this->lang_path . '/' . trim($lang_file) . '.' . $phpEx);
include($this->lang_path . '/' . $lang_file . '.' . $phpEx);
}
unset($lang_set);
}
else
{
include($this->lang_path . '/common.' . $phpEx);
include($this->lang_path . '/' . trim($lang_set) . '.' . $phpEx);
include($this->lang_path . '/' . $lang_set . '.' . $phpEx);
}
*/
// Set up style
$style = ( $style ) ? $style : ( ( !$board_config['override_user_style'] && $userdata['user_id'] ) ? $userdata['user_style'] : $board_config['default_style'] );
$style = ( $style ) ? $style : ( ( !$board_config['override_user_style'] && $this->data['user_id'] ) ? $this->data['user_style'] : $board_config['default_style'] );
$sql = "SELECT t.template_path, t.poll_length, t.pm_box_length, c.css_data, c.css_external, i.*
FROM " . STYLES_TABLE . " s, " . STYLES_TPL_TABLE . " t, " . STYLES_CSS_TABLE . " c, " . STYLES_IMAGE_TABLE . " i
@@ -396,33 +418,25 @@ class user
AND i.imageset_id = s.imageset_id";
$result = $db->sql_query($sql);
if ( !($theme = $db->sql_fetchrow($result)) )
if ( !($this->theme = $db->sql_fetchrow($result)) )
{
message_die(ERROR, 'Could not get style data');
}
$template->set_template($theme['template_path']);
$template->set_template($this->theme['template_path']);
$img_lang = ( file_exists('imagesets/' . $theme['imageset_path'] . '/' . $this->lang_name) ) ? $this->lang_name : $board_config['default_lang'];
$i10n = array('post_new', 'post_locked', 'post_pm', 'reply_new', 'reply_pm', 'reply_locked', 'icon_quote', 'icon_edit', 'icon_search', 'icon_profile', 'icon_pm', 'icon_email', 'icon_www', 'icon_icq', 'icon_aim', 'icon_yim', 'icon_msnm', 'icon_delete', 'icon_ip', 'icon_no_email', 'icon_no_www', 'icon_no_icq', 'icon_no_aim', 'icon_no_yim', 'icon_no_msnm');
foreach ( $i10n as $icon )
{
$theme[$icon] = str_replace('{LANG}', $img_lang, $theme[$icon]);
}
$this->img_lang = ( file_exists($phpbb_root_path . 'imagesets/' . $this->theme['imageset_path'] . '/' . $this->lang_name) ) ? $this->lang_name : $board_config['default_lang'];
return;
}
function format_date($gmepoch, $format = false)
{
global $lang;
static $lang_dates;
if ( empty($lang_dates) )
{
foreach ( $lang['datetime'] as $match => $replace )
foreach ( $this->lang['datetime'] as $match => $replace )
{
$lang_dates[$match] = $replace;
}
@@ -431,6 +445,18 @@ class user
$format = ( !$format ) ? $this->date_format : $format;
return strtr(@gmdate($format, $gmepoch + $this->timezone + $this->dst), $lang_dates);
}
function img($img, $alt = '', $tag = false)
{
static $imgs;
if (empty($imgs[$img]))
{
$imgs[$img] = '<img src=' . str_replace('{LANG}', $this->img_lang, $this->theme[$img]) . '" alt="' . $this->lang[$alt] . '" title="' . $this->lang[$alt] . '" />';
}
return $imgs[$img];
}
}
// Will be keeping my eye of 'other products' to ensure these things don't
@@ -438,29 +464,36 @@ class user
class auth
{
var $founder = false;
var $acl = false;
var $options = array();
var $acl = array();
var $acl_options = array();
function acl(&$userdata, $forum_id = false, $options = false)
function acl(&$userdata, $forum_id = false, $options_in = false, $options_or = false)
{
global $db;
global $db, $acl_options;
$this->acl_options = &$acl_options;
if (!$this->founder = $userdata['user_founder'])
{
// $mtime = explode(' ', microtime());
// $starttime = $mtime[1] + $mtime[0];
/*
$in_sql = "'a_', 'f_list'";
$or_sql = '';
if ( $options )
if ( is_array($options_in) )
{
if ( is_array($options) )
foreach ( $options_in as $option )
{
foreach ( $options as $option )
{
$in_sql .= ", '$option'";
}
$in_sql .= ", '$option'";
}
else
}
if ( is_array($options_or) )
{
foreach ( $options_or as $option )
{
$or_sql = " OR auth_value LIKE '$option%'";
$or_sql .= " OR auth_value LIKE '$option%'";
}
}
@@ -480,6 +513,9 @@ class auth
}
$db->sql_freeresult($result);
// $mtime = explode(' ', microtime());
// echo $mtime[1] + $mtime[0] - $starttime . " :: ";
// This is preliminary and can no doubt be improved. The 12 in
// the chunk_split relates to the current 96bits (12 bytes) per forum
if ( !empty($userdata['user_permissions']) )
@@ -503,18 +539,84 @@ class auth
$this->acl_cache($userdata);
}
// $mtime = explode(' ', microtime());
// echo $mtime[1] + $mtime[0] - $starttime . " :: ";
/*
$sql = "SELECT auth_value, global_id, local_id
FROM " . ACL_OPTIONS_TABLE . "
WHERE auth_value IN ($in_sql) $or_sql";
$result = $db->sql_query($sql);
while ( $row = $db->sql_fetchrow($result) )
{
if ( isset($row['global_id']) )
{
$this->options['global'][$row['auth_value']] = $row['global_id'];
}
if ( isset($row['local_id']) )
{
$this->options['local'][$row['auth_value']] = $row['local_id'];
}
}
$db->sql_freeresult($result);
*/
if ( empty($userdata['user_permissions']) )
{
$this->acl_cache($userdata);
}
// This is preliminary and can no doubt be improved
$global_chars = ceil(sizeof($this->acl_options['global']) / 8);
$local_chars = ceil(sizeof($this->acl_options['local']) / 8) + 2;
$globals = substr($userdata['user_permissions'], 0, $global_chars);
$locals = substr($userdata['user_permissions'], $global_chars);
for($i = 0; $i < $global_chars; $i++)
{
$this->acl['global'] .= str_pad(decbin(ord(substr($globals, $i, 1))), 8, 0, STR_LEFT_PAD);
}
$forums = explode("\r\n", chunk_split($locals, $local_chars));
array_pop($forums);
foreach ( $forums as $forum )
{
$forum_id = bindec(str_pad(decbin(ord(substr($forum, 0, 1))), 8, 0, STR_PAD_LEFT) . str_pad(decbin(ord(substr($forum, 1, 1))), 8, 0, STR_PAD_LEFT));
for($i = 2; $i < $local_chars; $i++)
{
$this->acl['local'][$forum_id] .= str_pad(decbin(ord(substr($forum, $i, 1))), 8, 0, STR_PAD_LEFT);
}
}
unset($forums);
}
// $mtime = explode(' ', microtime());
// echo $mtime[1] + $mtime[0] - $starttime . " :: ";
return;
}
// Look up an option
function acl_get($option, $forum_id = 0)
{
return ( $this->founder ) ? true : substr($this->acl[$forum_id], $this->options[$option], 1);
// return ( $this->founder ) ? true : $this->acl[$forum_id][$option];
static $acl_cache;
/*
if ( !isset($acl_cache[$forum_id][$option]) && !$this->founder )
{
$acl_cache[$forum_id][$option] = substr($this->acl[$forum_id], $this->options[$option], 1);
}
*/
if ( !isset($acl_cache[$forum_id][$option]) && !$this->founder )
{
if ( isset($this->acl_options['global'][$option]) )
{
$acl_cache[$forum_id][$option] = substr($this->acl['global'], $this->acl_options['global'][$option], 1);
}
if ( isset($this->acl_options['local'][$option]) )
{
$acl_cache[$forum_id][$option] |= substr($this->acl['local'][$forum_id], $this->acl_options['local'][$option], 1);
}
}
return ( $this->founder ) ? true : $acl_cache[$forum_id][$option];
}
// Cache data
@@ -522,28 +624,18 @@ class auth
{
global $db;
$sql = "SELECT a.forum_id, a.auth_allow_deny, ao.auth_option_id, ao.auth_value
$acl_db = array();
$sql = "SELECT a.forum_id, a.auth_allow_deny, ao.auth_value
FROM " . ACL_GROUPS_TABLE . " a, " . ACL_OPTIONS_TABLE . " ao, " . USER_GROUP_TABLE . " ug
WHERE ug.user_id = " . $userdata['user_id'] . "
AND a.group_id = ug.group_id
AND ao.auth_option_id = a.auth_option_id";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
while ( $row = $db->sql_fetchrow($result) )
{
do
{
switch ( $this->acl[$row['forum_id']][$row['auth_option_id']] )
{
case ACL_PERMIT:
case ACL_DENY:
case ACL_PREVENT:
break;
default:
$this->acl[$row['forum_id']][$row['auth_option_id']] = $row['auth_allow_deny'];
}
}
while ( $row = $db->sql_fetchrow($result) );
$acl_db[] = $row;
}
$db->sql_freeresult($result);
@@ -553,33 +645,30 @@ class auth
AND ao.auth_option_id = a.auth_option_id";
$result = $db->sql_query($sql);
if ( $row = $db->sql_fetchrow($result) )
while ( $row = $db->sql_fetchrow($result) )
{
do
{
switch ( $this->acl[$row['forum_id']][$row['auth_option_id']] )
{
case ACL_PERMIT:
case ACL_PREVENT:
break;
default:
$this->acl[$row['forum_id']][$row['auth_option_id']] = $row['auth_allow_deny'];
break;
}
}
while ( $row = $db->sql_fetchrow($result) );
$acl_db[] = $row;
}
$db->sql_freeresult($result);
if ( is_array($this->acl) )
if ( is_array($acl_db) )
{
sort($acl_db);
/* foreach ( $acl_db as $row )
{
if ( $row['auth_allow_deny'] != ACL_INHERIT && $this->acl[$row['forum_id']][$row['auth_value']] !== ACL_DENY )
{
$this->acl[$row['forum_id']][$row['auth_option_id']] = intval($row['auth_allow_deny']);
}
}
unset($acl_db);
foreach ( $this->acl as $forum_id => $auth_ary )
{
$holding = array();
for($i = 0; $i < 80; $i++)
{
$allow = ( isset($this->acl[$forum_id][$i]) ) ? $this->acl[$forum_id][$i] : 0;
$holding[] = ( $allow == ACL_ALLOW || $allow == ACL_PERMIT ) ? 1 : 0;
$holding[] = ( isset($this->acl[$forum_id][$i]) ) ? $this->acl[$forum_id][$i] : 0;
}
$bitstring = explode("\r\n", chunk_split(str_pad(decbin($forum_id), 16, 0, STR_PAD_LEFT) . implode('', $holding), 8));
@@ -589,8 +678,75 @@ class auth
$userdata['user_permissions'] .= chr(bindec($byte));
}
}
unset($holding);*/
foreach ( $acl_db as $row )
{
if ( $row['auth_allow_deny'] != ACL_INHERIT && $this->acl[$row['forum_id']][$row['auth_value']] !== ACL_DENY )
{
$this->acl[$row['forum_id']][$row['auth_value']] = intval($row['auth_allow_deny']);
}
}
unset($acl_db);
$global_bits = 8 * ceil(sizeof($this->acl_options['global']) / 8);
$local_bits = 8 * ceil(sizeof($this->acl_options['local']) / 8 );
$local_hold = '';
$global_hold = '';
foreach ( $this->acl as $forum_id => $auth_ary )
{
$holding = array();
if ( !$forum_id )
{
$fill = $global_bits;
$ary_key = 'global';
$hold_str = 'global_hold';
}
else
{
$fill = $local_bits;
$ary_key = 'local';
$hold_str = 'local_hold';
}
for($i = 0; $i < $fill; $i++)
{
$holding[$i] = 0;
}
foreach ( $auth_ary as $option => $allow )
{
if ( $allow )
{
$holding[$this->acl_options[$ary_key][$option]] = 1;
}
}
$forum_id = ( $forum_id ) ? str_pad(decbin($forum_id), 16, 0, STR_PAD_LEFT) : '';
$bitstring = explode("\r\n", chunk_split($forum_id . implode('', $holding), 8));
array_pop($bitstring);
foreach ( $bitstring as $byte )
{
$$hold_str .= chr(bindec($byte));
}
}
unset($holding);
if ( $global_hold == '' )
{
for($i = 0; $i < $global_bits; $i++)
{
$global_hold .= '0';
}
}
$userdata['user_permissions'] .= $global_hold . $local_hold;
unset($global_hold);
unset($local_hold);
$sql = "UPDATE " . USERS_TABLE . "
SET user_permissions = '" . addslashes($userdata['user_permissions']) . "'
WHERE user_id = " . $userdata['user_id'];
@@ -625,7 +781,7 @@ class auth
}
}
message_die(ERROR, 'Authentication method not found');
trigger_error('Authentication method not found', E_USER_ERROR);
}
}

View File

@@ -27,11 +27,11 @@ if ( !defined('IN_PHPBB') )
exit;
}
if ( empty($HTTP_GET_VARS['u']) || $HTTP_GET_VARS['u'] == ANONYMOUS )
if ( empty($_GET['u']) || $_GET['u'] == ANONYMOUS )
{
message_die(MESSAGE, $lang['No_user_id_specified']);
message_die(MESSAGE, $user->lang['No_user_id_specified']);
}
$profiledata = get_userdata(intval($HTTP_GET_VARS['u']));
$profiledata = get_userdata(intval($_GET['u']));
$sql = "SELECT *
FROM " . RANKS_TABLE . "
@@ -117,8 +117,8 @@ if ( $profiledata['user_viewemail'] || $auth->acl_get('a_') )
{
$email_uri = ( $board_config['board_email_form'] ) ? "profile.$phpEx$SID&amp;mode=email&amp;u=" . $profiledata['user_id'] : 'mailto:' . $profiledata['user_email'];
$email_img = '<a href="' . $email_uri . '">' . create_img($theme['icon_email'], $lang['Send_email']) . '</a>';
$email = '<a href="' . $email_uri . '">' . $lang['Send_email'] . '</a>';
$email_img = '<a href="' . $email_uri . '">' . $user->img('icon_email', $user->lang['Send_email']) . '</a>';
$email = '<a href="' . $email_uri . '">' . $user->lang['Send_email'] . '</a>';
}
else
{
@@ -127,21 +127,21 @@ else
}
$temp_url = "profile.$phpEx$SID&amp;mode=viewprofile&amp;u=$user_id";
$profile_img = '<a href="' . $temp_url . '">' . create_img($theme['icon_profile'], $lang['Read_profile']) . '</a>';
$profile = '<a href="' . $temp_url . '">' . $lang['Read_profile'] . '</a>';
$profile_img = '<a href="' . $temp_url . '">' . $user->img('icon_profile', $user->lang['Read_profile']) . '</a>';
$profile = '<a href="' . $temp_url . '">' . $user->lang['Read_profile'] . '</a>';
$temp_url = "privmsg.$phpEx$SID&amp;mode=post&amp;u=$user_id";
$pm_img = '<a href="' . $temp_url . '">' . create_img($theme['icon_pm'], $lang['Send_private_message']) . '</a>';
$pm = '<a href="' . $temp_url . '">' . $lang['Send_private_message'] . '</a>';
$pm_img = '<a href="' . $temp_url . '">' . $user->img('icon_pm', $user->lang['Send_private_message']) . '</a>';
$pm = '<a href="' . $temp_url . '">' . $user->lang['Send_private_message'] . '</a>';
$www_img = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww">' . create_img($theme['icon_www'], $lang['Visit_website']) . '</a>' : '';
$www = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww">' . $lang['Visit_website'] . '</a>' : '';
$www_img = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww">' . $user->img('icon_www', $user->lang['Visit_website']) . '</a>' : '';
$www = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww">' . $user->lang['Visit_website'] . '</a>' : '';
if ( !empty($profiledata['user_icq']) )
{
$icq_status_img = '<a href="http://wwp.icq.com/' . $profiledata['user_icq'] . '#pager"><img src="http://web.icq.com/whitepages/online?icq=' . $profiledata['user_icq'] . '&img=5" width="18" height="18" border="0" /></a>';
$icq_img = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '">' . create_img($theme['icon_icq'], $lang['ICQ']) . '</a>';
$icq = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '">' . $lang['ICQ'] . '</a>';
$icq_img = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '">' . $user->img('icon_icq', $user->lang['ICQ']) . '</a>';
$icq = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '">' . $user->lang['ICQ'] . '</a>';
}
else
{
@@ -150,36 +150,36 @@ else
$icq = '';
}
$aim_img = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&amp;message=Hello+Are+you+there?">' . create_img($theme['icon_aim'], $lang['AIM']) . '</a>' : '';
$aim = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&amp;message=Hello+Are+you+there?">' . $lang['AIM'] . '</a>' : '';
$aim_img = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&amp;message=Hello+Are+you+there?">' . $user->img('icon_aim', $user->lang['AIM']) . '</a>' : '';
$aim = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&amp;message=Hello+Are+you+there?">' . $user->lang['AIM'] . '</a>' : '';
$temp_url = "profile.$phpEx$SID&amp;mode=viewprofile&amp;u=$user_id";
$msn_img = ( $profiledata['user_msnm'] ) ? '<a href="' . $temp_url . '">' . create_img($theme['icon_msnm'], $lang['MSNM']) . '</a>' : '';
$msn = ( $profiledata['user_msnm'] ) ? '<a href="' . $temp_url . '">' . $lang['MSNM'] . '</a>' : '';
$msn_img = ( $profiledata['user_msnm'] ) ? '<a href="' . $temp_url . '">' . $user->img('icon_msnm', $user->lang['MSNM']) . '</a>' : '';
$msn = ( $profiledata['user_msnm'] ) ? '<a href="' . $temp_url . '">' . $user->lang['MSNM'] . '</a>' : '';
$yim_img = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&amp;.src=pg">' . create_img($theme['icon_yim'], $lang['YIM']) . '</a>' : '';
$yim = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&amp;.src=pg">' . $lang['YIM'] . '</a>' : '';
$yim_img = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&amp;.src=pg">' . $user->img('icon_yim', $user->lang['YIM']) . '</a>' : '';
$yim = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&amp;.src=pg">' . $user->lang['YIM'] . '</a>' : '';
$temp_url = "search.$phpEx$SID&amp;search_author=" . urlencode($profiledata['username']) . "&amp;showresults=posts";
$search_img = '<a href="' . $temp_url . '">' . create_img($theme['icon_search'], $lang['Search_user_posts']) . '</a>';
$search = '<a href="' . $temp_url . '">' . $lang['Search_user_posts'] . '</a>';
$search_img = '<a href="' . $temp_url . '">' . $user->img('icon_search', $user->lang['Search_user_posts']) . '</a>';
$search = '<a href="' . $temp_url . '">' . $user->lang['Search_user_posts'] . '</a>';
//
// Generate page
//
$page_title = $lang['Viewing_profile'];
$page_title = $user->lang['Viewing_profile'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
$template->assign_vars(array(
'USERNAME' => $profiledata['username'],
'JOINED' => $user->format_date($profiledata['user_regdate'], $lang['DATE_FORMAT']),
'JOINED' => $user->format_date($profiledata['user_regdate'], $user->lang['DATE_FORMAT']),
'POSTER_RANK' => $poster_rank,
'RANK_IMAGE' => $rank_image,
'POSTS_PER_DAY' => $posts_per_day,
'POSTS' => $profiledata['user_posts'],
'PERCENTAGE' => $percentage . '%',
'POST_DAY_STATS' => sprintf($lang['User_post_day_stats'], $posts_per_day),
'POST_PERCENT_STATS' => sprintf($lang['User_post_pct_stats'], $percentage),
'POST_DAY_STATS' => sprintf($user->lang['User_post_day_stats'], $posts_per_day),
'POST_PERCENT_STATS' => sprintf($user->lang['User_post_pct_stats'], $percentage),
'SEARCH_IMG' => $search_img,
'SEARCH' => $search,
@@ -204,25 +204,25 @@ $template->assign_vars(array(
'INTERESTS' => ( $profiledata['user_interests'] ) ? $profiledata['user_interests'] : '&nbsp;',
'AVATAR_IMG' => $avatar_img,
'L_VIEWING_PROFILE' => sprintf($lang['Viewing_user_profile'], $profiledata['username']),
'L_ABOUT_USER' => sprintf($lang['About_user'], $profiledata['username']),
'L_AVATAR' => $lang['Avatar'],
'L_POSTER_RANK' => $lang['Poster_rank'],
'L_JOINED' => $lang['Joined'],
'L_TOTAL_POSTS' => $lang['Total_posts'],
'L_SEARCH_USER_POSTS' => sprintf($lang['Search_user_posts'], $profiledata['username']),
'L_CONTACT' => $lang['Contact'],
'L_EMAIL_ADDRESS' => $lang['Email_address'],
'L_EMAIL' => $lang['Email'],
'L_PM' => $lang['Private_Message'],
'L_ICQ_NUMBER' => $lang['ICQ'],
'L_YAHOO' => $lang['YIM'],
'L_AIM' => $lang['AIM'],
'L_MESSENGER' => $lang['MSNM'],
'L_WEBSITE' => $lang['Website'],
'L_LOCATION' => $lang['Location'],
'L_OCCUPATION' => $lang['Occupation'],
'L_INTERESTS' => $lang['Interests'],
'L_VIEWING_PROFILE' => sprintf($user->lang['Viewing_user_profile'], $profiledata['username']),
'L_ABOUT_USER' => sprintf($user->lang['About_user'], $profiledata['username']),
'L_AVATAR' => $user->lang['Avatar'],
'L_POSTER_RANK' => $user->lang['Poster_rank'],
'L_JOINED' => $user->lang['Joined'],
'L_TOTAL_POSTS' => $user->lang['Total_posts'],
'L_SEARCH_USER_POSTS' => sprintf($user->lang['Search_user_posts'], $profiledata['username']),
'L_CONTACT' => $user->lang['Contact'],
'L_EMAIL_ADDRESS' => $user->lang['Email_address'],
'L_EMAIL' => $user->lang['Email'],
'L_PM' => $user->lang['Private_Message'],
'L_ICQ_NUMBER' => $user->lang['ICQ'],
'L_YAHOO' => $user->lang['YIM'],
'L_AIM' => $user->lang['AIM'],
'L_MESSENGER' => $user->lang['MSNM'],
'L_WEBSITE' => $user->lang['Website'],
'L_LOCATION' => $user->lang['Location'],
'L_OCCUPATION' => $user->lang['Occupation'],
'L_INTERESTS' => $user->lang['Interests'],
'U_SEARCH_USER' => "search.$phpEx$SID&amp;search_author=" . urlencode($profiledata['username']),