diff --git a/phpBB/adm/admin_users.php b/phpBB/adm/admin_users.php
index 1237c262e3..48e14eee09 100644
--- a/phpBB/adm/admin_users.php
+++ b/phpBB/adm/admin_users.php
@@ -28,22 +28,28 @@ define('IN_PHPBB', 1);
$phpbb_root_path = '../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require('pagestart.' . $phpEx);
+include($phpbb_root_path.'includes/functions_user.'.$phpEx);
-
-// Set mode
+//
+// Get and set basic vars
+//
$mode = request_var('mode', '');
$action = request_var('action', 'overview');
$username = request_var('username', '');
$user_id = request_var('u', 0);
$ip = request_var('ip', '');
$start = request_var('start', 0);
-
$delete = request_var('delete', '');
+$quicktools = request_var('quicktools', '');
+$submit = (isset($_POST['update'])) ? true : false;
+$confirm = (isset($_POST['confirm'])) ? true : false;
+$cancel = (isset($_POST['cancel'])) ? true : false;
-// Set some vars
$error = array();
-// Whois?
+//
+// Whois output
+//
if ($action == 'whois')
{
// Output relevant page
@@ -79,87 +85,465 @@ if ($action == 'whois')
adm_page_footer();
}
+//
+// Obtain user information if appropriate
+//
+if ($username || $user_id)
+{
+ $session_time = 0;
+ $sql_where = ($user_id) ? "user_id = $user_id" : "username = '" . $db->sql_escape($username) . "'";
+ $sql = ($action == 'overview') ? 'SELECT u.*, s.session_time, s.session_page, s.session_ip FROM (' . USERS_TABLE . ' u LEFT JOIN ' . SESSIONS_TABLE . " s ON s.session_user_id = u.user_id) WHERE u.$sql_where ORDER BY s.session_time DESC LIMIT 1" : 'SELECT * FROM ' . USERS_TABLE . " WHERE $sql_where";
+ $result = $db->sql_query($sql);
+
+ if (!extract($db->sql_fetchrow($result)))
+ {
+ trigger_error($user->lang['NO_USER']);
+ }
+ $db->sql_freeresult($result);
+
+ if ($session_time > $user_lastvisit)
+ {
+ $user_lastvisit = $session_time;
+ $user_lastpage = $session_page;
+ }
+
+ $user_password = '';
+}
+
+// Output page
+adm_page_header($user->lang['MANAGE']);
+
+//
+// User has submitted a form, process it
+//
+if ($submit)
+{
+ switch ($action)
+ {
+ case 'overview':
+
+ if ($delete && $user_type != USER_FOUNDER)
+ {
+ if (!$auth->acl_get('a_userdel'))
+ {
+ trigger_error($user->lang['NO_ADMIN']);
+ }
+
+ if (!$cancel && !$confirm)
+ {
+ adm_page_confirm($user->lang['CONFIRM'], $user->lang['CONFIRM_OPERATION']);
+ }
+ else if (!$cancel)
+ {
+ $db->sql_transaction();
+
+ switch ($deletetype)
+ {
+ case 'retain':
+ $sql = 'UPDATE ' . FORUMS_TABLE . '
+ SET forum_last_poster_id = ' . ANONYMOUS . "
+ WHERE forum_last_poster_id = $user_id";
+ // $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . POSTS_TABLE . '
+ SET poster_id = ' . ANONYMOUS . "
+ WHERE poster_id = $user_id";
+ // $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . '
+ SET topic_poster = ' . ANONYMOUS . "
+ WHERE topic_poster = $user_id";
+ // $db->sql_query($sql);
+ break;
+
+ case 'remove':
+ break;
+ }
+
+ $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, FORUMS_TRACK_TABLE);
+
+ foreach ($table_ary as $table)
+ {
+ $sql = "DELETE FROM $table
+ WHERE user_id = $user_id";
+ // $db->sql_query($sql);
+ }
+
+ // Reset newest user info if appropriate
+ if ($config['newest_user_id'] == $user_id)
+ {
+ $sql = 'SELECT user_id, username
+ FROM ' . USERS_TABLE . '
+ ORDER BY user_id DESC
+ LIMIT 1';
+ $result = $db->sql_query($sql);
+
+ if ($row = $db->sql_fetchrow($result))
+ {
+ set_config('newest_user_id', $row['user_id']);
+ set_config('newest_username', $row['username']);
+ }
+ $db->freeresult($result);
+ }
+
+ set_config('num_users', $config['num_users'] - 1, TRUE);
+
+ $db->sql_transaction('commit');
+
+ trigger_error($user->lang['USER_DELETED']);
+ }
+ }
+
+ // Handle quicktool actions
+ if ($quicktools && $user_type != USER_FOUNDER)
+ {
+ switch ($quicktools)
+ {
+ case 'banuser':
+ case 'banemail':
+ case 'banip':
+ $ban = array();
+
+ switch ($quicktools)
+ {
+ case 'banuser':
+ $ban[] = $username;
+ $reason = 'USER_ADMIN_BAN_NAME_REASON';
+ break;
+
+ case 'banemail':
+ $ban[] = $user_email;
+ $reason = 'USER_ADMIN_BAN_EMAIL_REASON';
+ break;
+
+ case 'banip':
+ $ban[] = $user_ip;
+
+ $sql = 'SELECT DISTINCT poster_ip
+ FROM ' . POSTS_TABLE . "
+ WHERE poster_id = $user_id";
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $ban[] = $row['poster_ip'];
+ }
+ $db->sql_freeresult($result);
+
+ $reason = 'USER_ADMIN_BAN_IP_REASON';
+ break;
+ }
+
+ user_ban(substr($quicktools, 3), $ban, 0, 0, 0, $user->lang[$reason]);
+
+ trigger_error($user->lang['BAN_UPDATE_SUCESSFUL']);
+
+ break;
+
+ case 'reactivate':
+
+ if ($config['email_enable'])
+ {
+ include_once($phpbb_root_path . 'includes/functions_messenger.'.$phpEx);
+
+ $user_actkey = gen_rand_string(10);
+ $key_len = 54 - (strlen($server_url));
+ $key_len = ($key_len > 6) ? $key_len : 6;
+ $user_actkey = substr($user_actkey, 0, $key_len);
+
+ user_active_flip($user_id, $user_type, $user_actkey, $username);
+
+ $messenger = new messenger();
+
+ $messenger->template('user_welcome_inactive', $user_lang);
+ $messenger->subject();
+
+ $messenger->replyto($config['board_contact']);
+ $messenger->to($user_email, $username);
+
+ $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
+ $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
+ $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
+ $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
+
+ $messenger->assign_vars(array(
+ 'SITENAME' => $config['sitename'],
+ 'WELCOME_MSG' => sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename']),
+ 'USERNAME' => $username,
+ 'PASSWORD' => $password_confirm,
+ 'EMAIL_SIG' => str_replace('
', "\n", "-- \n" . $config['board_email_sig']),
+
+ 'U_ACTIVATE' => generate_board_url() . "/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
+ );
+
+ $messenger->send(NOTIFY_EMAIL);
+ $messenger->queue->save();
+ }
+
+ break;
+
+ case 'active':
+
+ user_active_type($user_id, $user_type, false, $username);
+
+ $message = ($user_type == USER_NORMAL) ? 'USER_ADMIN_INACTIVE' : 'USER_ADMIN_ACTIVE';
+ trigger_error($user->lang[$message]);
+ break;
+
+ case 'moveposts':
+
+ if (!($new_forum_id = request_var('new_f', 0)))
+ {
+
+?>
+
+
lang['USER_ADMIN_EXPLAIN']; ?>
+ +