diff options
| -rw-r--r-- | phpBB/adm/admin_users.php | 813 | ||||
| -rw-r--r-- | phpBB/install/schemas/mysql_schema.sql | 10 |
2 files changed, 625 insertions, 198 deletions
diff --git a/phpBB/adm/admin_users.php b/phpBB/adm/admin_users.php index 759f3efeeb..1237c262e3 100644 --- a/phpBB/adm/admin_users.php +++ b/phpBB/adm/admin_users.php @@ -1,23 +1,15 @@ <?php -/*************************************************************************** - * admin_users.php - * ------------------- - * begin : Saturday, Feb 13, 2001 - * copyright : (C) 2001 The phpBB Group - * email : support@phpbb.com - * - * $Id$ - * - ***************************************************************************/ - -/*************************************************************************** - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - ***************************************************************************/ +// ------------------------------------------------------------- +// +// $Id$ +// +// FILENAME : admin_users.php +// STARTED : Sat Feb 13, 2001 +// COPYRIGHT : © 2001,2003 phpBB Group +// WWW : http://www.phpbb.com/ +// LICENCE : GPL vs2.0 [ see /docs/COPYING ] +// +// ------------------------------------------------------------- if (!empty($setmodules)) { @@ -26,7 +18,7 @@ if (!empty($setmodules)) return; } - $module['USER']['MANAGE'] = basename(__FILE__) . $SID; + $module['USER']['MANAGE_USERS'] = basename(__FILE__) . $SID; return; } @@ -39,239 +31,703 @@ require('pagestart.' . $phpEx); // Set mode -$mode = (isset($_REQUEST['mode'])) ? htmlspecialchars($_REQUEST['mode']) : ''; -$action = (isset($_REQUEST['action'])) ? htmlspecialchars($_REQUEST['action']) : 'main'; +$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', ''); -// Begin program -if (isset($_POST['username']) || isset($_REQUEST['u'])) +// Set some vars +$error = array(); + +// Whois? +if ($action == 'whois') { - // Grab relevant userdata - if (isset($_REQUEST['u'])) - { - $user_id = intval($_REQUEST['u']); + // Output relevant page + adm_page_header($user->lang['WHOIS']); - if(!($userdata = get_userdata($user_id))) - { - trigger_error($user->lang['NO_USER']); - } - } - else + if ($ip && $domain = gethostbyaddr($ip)) { - if(!$userdata = get_userdata($_POST['username'])) +?> + +<table class="bg" width="90%" cellspacing="1" cellpadding="4" border="0" align="center"> + <tr> + <th>IP whois for <?php echo $domain; ?></th> + </tr> + <tr> + <td class="row1"><?php + + if ($ipwhois = ipwhois($ip)) { - trigger_error($user->lang['NO_USER']); + $ipwhois = preg_replace('#(\s+?)([\w\-\._\+]+?@[\w\-\.]+?)(\s+?)#s', '\1<a href="mailto:\2">\2</a>\3', $ipwhois); + echo '<br /><pre align="left">' . trim($ipwhois) . '</pre>'; } + +?></td> + </tr> +</table> + +<br clear="all" /> + +<?php + } - // Update entry in DB - if ($_POST['deleteuser'] && !$userdata['user_founder']) + adm_page_footer(); +} + + +// Begin program +if ($username || $user_id) +{ + if ($submit) { - if (!$auth->acl_get('a_userdel')) + // Update entry in DB + if ($delete && $user_type != USER_FOUNDER) { - trigger_error($user->lang['NO_ADMIN']); - } + if (!$auth->acl_get('a_userdel')) + { + trigger_error($user->lang['NO_ADMIN']); + } + + $db->sql_transaction(); + + if ($deletetype == 'retain') + { + $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); + } + else + { + } - $db->sql_transaction(); + $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE); - $sql = 'UPDATE ' . POSTS_TABLE . ' - SET poster_id = ' . ANONYMOUS . " - WHERE poster_id = $user_id"; - $db->sql_query($sql); + foreach ($table_ary as $table) + { + $sql = "DELETE FROM $table + WHERE user_id = $user_id"; +// $db->sql_query($sql); + } - $sql = 'UPDATE ' . TOPICS_TABLE . ' - SET topic_poster = ' . ANONYMOUS . " - WHERE topic_poster = $user_id"; - $db->sql_query($sql); + $db->sql_transaction('commit'); - $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE); + trigger_error($user->lang['USER_DELETED']); + } + } + else + { + $session_time = 0; + $sql_where = ($username) ? "username = '" . $db->sql_escape($username) . "'" : "user_id = $user_id"; + $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); - foreach ($table_ary as $table) + if (!extract($db->sql_fetchrow($result))) { - $sql = "DELETE FROM $table - WHERE user_id = $user_id"; - $db->sql_query($sql); + trigger_error($user->lang['NO_USER']); } + $db->sql_freeresult($result); + + if ($session_time > $user_lastvisit) + { + $user_lastvisit = $session_time; + $user_lastpage = $session_page; + } + } - $db->sql_transaction('commit'); - trigger_error($user->lang['User_deleted']); + // Generate overall "header" for user admin + $view_options = ''; + foreach (array('overview' => 'MAIN', 'feedback' => 'FEEDBACK', 'profile' => 'PROFILE', 'prefs' => 'PREFS', 'avatar' => 'AVATAR', 'sig' => 'SIG', 'groups' => 'GROUP', 'perm' => 'PERM') as $value => $lang) + { + $selected = ($action == $value) ? ' selected="selected"' : ''; + $view_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang['USER_ADMIN_' . $lang] . '</option>'; } + $pagination = ''; - // Output relevant page + + // Output page adm_page_header($user->lang['MANAGE']); ?> -<form method="post" action="admin_users.<?php echo $phpEx . $SID; ?>&mode=<?php echo $mode; ?>&u=<?php echo $userdata['user_id']; ?>"><table width="90%" cellspacing="3" cellpadding="0" border="0" align="center"> +<h1><?php echo $user->lang['USER_ADMIN']; ?></h1> + +<p><?php echo $user->lang['USER_ADMIN_EXPLAIN']; ?></p> + +<form method="post" action="<?php echo "admin_users.$phpEx$SID&mode=$mode&action=$action&u=$user_id"; ?>"<?php echo ($can_upload) ? ' enctype="multipart/form-data"' : ''; ?>><table width="100%" cellspacing="2" cellpadding="0" border="0" align="center"> <tr> - <td align="right"><b>Main</b> | <a href="admin_users.<?php echo $phpEx . $SID; ?>&u=<?php echo $userdata['user_id']; ?>&action=profile">Profile</a> | <a href="admin_users.<?php echo $phpEx . $SID; ?>&u=<?php echo $userdata['user_id']; ?>&action=pref">Preferences</a> | <a href="admin_users.<?php echo $phpEx . $SID; ?>&u=<?php echo $userdata['user_id']; ?>&action=avatar">Avatar</a> | <a href="admin_users.<?php echo $phpEx . $SID; ?>&u=<?php echo $userdata['user_id']; ?>&action=permissions">Permissions</a></td> + <td align="right">Select view: <select name="action" onchange="if (this.options[this.selectedIndex].value != '') this.form.submit();"><?php echo $view_options; ?></select></td> </tr> + <tr> + <td><table class="bg" width="100%" cellspacing="1" cellpadding="4" border="0"> + <tr> + <th colspan="2"><?php echo $user->lang['USER_ADMIN_' . $action]; ?></th> + </tr> <?php switch ($action) { - case 'main': + case 'overview': + + $options = '<option class="sep" value="">' . 'Select option' . '</option>'; + foreach (array('banuser' => 'BAN_USER', 'banemail' => 'BAN_EMAIL', 'banip' => 'BAN_IP', 'force' => 'FORCE', 'active' => (($user_type == USER_INACTIVE) ? 'ACTIVATE' : 'DEACTIVATE'), 'moveposts' => 'MOVE_POSTS') as $value => $lang) + { + $options .= '<option value="' . $value . '">' . $user->lang['USER_ADMIN_' . $lang] . '</option>'; + } + + $user_founder_yes = ($user_type == USER_FOUNDER) ? ' checked="checked"' : ''; + $user_founder_no = ($user_type != USER_FOUNDER) ? ' checked="checked"' : (($user->data['user_type'] != USER_FOUNDER) ? ' disabled="disabled"' : ''); ?> - <tr> - <td><table class="bg" width="100%" cellspacing="1" cellpadding="4" border="0"> <tr> - <td class="row1">Username: <br /><span class="gensmall">Click profile to edit</span></td> - <td class="row2"><?php echo $userdata['username']; ?> [ <a href="admin_ban.<?php echo $phpEx . $SID; ?>&mode=user&ban=<?php echo $userdata['username']; ?>&bansubmit=true">Ban</a> ]</td> + <td class="row1" width="40%"><b>Username: </b></td> + <td class="row2"><input class="post" type="text" name="username" value="<?php echo $username; ?>" maxlength="60" /></td> </tr> <tr> - <td class="row1">Registered: </td> - <td class="row2"><?php echo $user->format_date($userdata['user_regdate']); ?></td> + <td class="row1"><b>Founder: </b><br /><span class="gensmall">Founders can never be banned, deleted or altered by non-founder members</span></td> + <td class="row2"><input type="radio" name="user_founder" value="0"<?php echo $user_founder_yes; ?> /><?php echo $user->lang['YES']; ?> <input type="radio" name="user_founder" value="1"<?php echo $user_founder_no; ?> /><?php echo $user->lang['NO']; ?></td> </tr> <tr> - <td class="row1">Registered from IP: </td> - <td class="row2"><?php if ($userdata['user_ip']) { echo $userdata['user_ip']; ?> [ <a href="admin_users.<?php echo $phpEx . $SID; ?>&u=<?php echo $userdata['user_id']; ?>&mode=main&do=iplookup">Lookup</a> | <a href="admin_ban.<?php echo $phpEx . $SID; ?>&mode=ip&ban=<?php echo $userdata['user_ip']; ?>&bansubmit=true">Ban</a> ] <?php } else { echo 'Unknown'; } ?></td> + <td class="row1"><b>Email: </b></td> + <td class="row2"><input class="post" type="text" name="user_email" value="<?php echo $user_email; ?>" maxlength="60" /></td> + </tr> + <tr> + <td class="row1"><b>Confirm Email: </b><br /><span class="gensmall">Only required if changing the email address</span></td> + <td class="row2"><input class="post" type="text" name="user_email_confirm" value="<?php echo $user_email_confirm; ?>" maxlength="60" /></td> + </tr> + <tr> + <td class="row1"><b>New password: </b></td> + <td class="row2"><input class="post" type="password" name="user_password" value="<?php echo ($submit) ? $user_password : ''; ?>" maxlength="60" /></td> + </tr> + <tr> + <td class="row1"><b>Confirm password: </b><br /><span class="gensmall">Only required if changing the email address</span></td> + <td class="row2"><input class="post" type="password" name="user_password_confirm" value="<?php echo ($submit) ? $user_password_confirm : ''; ?>" maxlength="60" /></td> </tr> <?php - if (isset($_GET['do']) && $_GET['do'] == 'iplookup') + if ($user_type != USER_FOUNDER) { - if ($userdata['user_ip'] != '' && $domain = gethostbyaddr($userdata['user_ip'])) - { + ?> <tr> - <th colspan="2">IP whois for <?php echo $domain; ?></th> + <td class="row1"><b>Quick tools: </b></td> + <td class="row2"><select name="options"><?php echo $options; ?></select></td> </tr> <tr> - <td class="row1" colspan="2"><?php - - if ($ipwhois = ipwhois($userdata['user_ip'])) - { - echo '<br /><pre align="left">' . trim($ipwhois) . '</pre>'; - } -?></td> + <td class="row1"><b>Delete user: </b><br /><span class="gensmall">Please note that deleting a user is final, it cannot be recovered</span></td> + <td class="row2"><input type="checkbox" name="delete" value="1" /> <select name="deletetype"><option value="retain">Retain posts</option><option value="posts">Delete posts</option></select></td> </tr> <?php - } } ?> <tr> - <td class="row1">Total/Average posts by this user: </td> - <td class="row2"></td> + <th colspan="2">Background</th> </tr> <tr> - <td class="row1"></td> - <td class="row2"></td> - </tr> - </table></td> - </tr> -</table></form> + <td class="row1" colspan="2"><table width="60%" cellspacing="1" cellpadding="4" border="0" align="center"> + <tr> + <td width="40%"><b>Registered: </b></td> + <td><?php echo $user->format_date($user_regdate); ?></td> + </tr> + <tr> + <td><b>Registration IP: </b></td> + <td><?php + + echo ($user_ip) ? "<a href=\"admin_users.$phpEx$SID&action=whois&ip=$user_ip\" onclick=\"window.open('admin_users.$phpEx$SID&action=whois&ip=$user_ip', '', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=600');return false;\">$user_ip</a>" : 'Unknown'; +?></td> + </tr> + <tr> + <td width="40%"><b>Last active: </b></td> + <td><?php echo $user->format_date($user_lastvisit); ?></td> + </tr> + <tr> + <td><b>Karma level: </b></td> + <td><?php + + echo ($config['enable_karma']) ? '<img src="../images/karma' . $user_karma . '.gif" alt="' . $user->lang['KARMA_LEVEL'] . ': ' . $user->lang['KARMA'][$user_karma] . '" title="' . $user->lang['KARMA_LEVEL'] . ': ' . $user->lang['KARMA'][$user_karma] . '" /> [ ' . $user->lang['KARMA'][$user_karma] . ' ]' : ''; + +?></td> + </tr> + <tr> + <td><b>Warnings: </b></td> + <td><?php + + echo ($user_warnings) ? $user_warnings : 'None'; + +?></td> + </tr> + </table></td> + </tr> <?php break; - case 'permissions': - $userauth = new auth(); - $userauth->acl($userdata); + case 'feedback': - foreach ($acl_options['global'] as $option_name => $option_id) + if ($submit) { - $type = substr($option_name, 0, strpos('_', $option_name) +1); - $global[$type][$option_name] = $userauth->acl_get($option_name); + } - $sql = "SELECT forum_id, forum_name - FROM " . FORUMS_TABLE . " - ORDER BY left_id"; +?> + + + +<?php + + $sql = 'SELECT COUNT(user_id) AS total_reports + FROM ' . USERS_NOTES_TABLE . " + WHERE user_id = $user_id"; $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $total_reports = $row['total_reports']; - $permissions = array(); - while($row = $db->sql_fetchrow($result)) + if ($total_reports) { - $forum_data[$row['forum_id']] = $row['forum_name']; + $pagination = generate_pagination("admin_users.$phpEx$SID&action=$action&u=$user_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total_reports, $config['posts_per_page'], $start); - foreach ($acl_options['local'] as $option_name => $option_id) + $sql = 'SELECT u.username, n.* + FROM ' . USERS_NOTES_TABLE . ' n, ' . USERS_TABLE . " u + WHERE n.user_id = $user_id + AND u.user_id = n.reporter_id + ORDER BY n.report_log DESC, n.report_date DESC"; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) { - $local[$row['forum_id']][$option_name] = $userauth->acl_get($option_name, $row['forum_id']); + $row_class = ($row_class == 'row1') ? 'row2' : 'row1'; + +?> + <tr> + <td class="<?php echo $row_class; ?>"><span class="gensmall">Report by: <b><?php echo $row['username']; ?></b> on <?php echo $user->format_date($row['report_date']); ?></span><hr /><?php echo $row['report_text']; ?></td> + </tr> +<?php + } + $db->sql_freeresult($result); } + else + { ?> - <tr> - <td colspan="2"><table class="bg" width="100%" cellspacing="1" cellpadding="4" border="0" align="center"> - <tr> - <td class="cat" colspan="3" align="right">Select permission set: <select name="acl_type"><?php + <tr> + <td class="row1" align="center">No reports exist for this user</td> + </tr> +<?php - $acl_types = '<option>Global Settings</option><option>---------------</option>'; - $acl_types .= '<option value="a">' . $user->lang['ADMINISTRATOR'] . '</option><option value="u">' . $user->lang['USER'] . '</option>'; - $acl_types .= '<option>Forum Settings</option><option>---------------</option>'; - $acl_types .= make_forum_select(false, false, false); + } + break; - echo $acl_types; -?></select> </td> - </tr> - <tr> - <th> <?php echo $user->lang['Option']; ?> </th> - <th> <?php echo $user->lang['Allow']; ?> </th> - <th> <?php echo $user->lang['Deny']; ?> </th> - </tr> -<?php + case 'profile': - foreach ($global as $type => $auth_ary) + if (!isset($bday_day)) { - foreach ($auth_ary as $option => $allow) - { - if ($option != $type .'_') - { - $row_class = ($row_class == 'row1') ? 'row2' : 'row1'; + list($bday_day, $bday_month, $bday_year) = explode('-', $user_birthday); + } - $l_can_cell = (!empty($user->lang['acl_' . $option])) ? $user->lang['acl_' . $option] : ucfirst(preg_replace('#.*?_#', '', $option)); + $s_birthday_day_options = '<option value="0"' . ((!$bday_day) ? ' selected="selected"' : '') . '>--</option>'; + for ($i = 1; $i < 32; $i++) + { + $selected = ($i == $bday_day) ? ' selected="selected"' : ''; + $s_birthday_day_options .= "<option value=\"$i\"$selected>$i</option>"; + } + + $s_birthday_month_options = '<option value="0"' . ((!$bday_month) ? ' selected="selected"' : '') . '>--</option>'; + for ($i = 1; $i < 13; $i++) + { + $selected = ($i == $bday_month) ? ' selected="selected"' : ''; + $s_birthday_month_options .= "<option value=\"$i\"$selected>$i</option>"; + } + $s_birthday_year_options = ''; + + $now = getdate(); + $s_birthday_year_options = '<option value="0"' . ((!$bday_year) ? ' selected="selected"' : '') . '>--</option>'; + for ($i = $now['year'] - 100; $i < $now['year']; $i++) + { + $selected = ($i == $bday_year) ? ' selected="selected"' : ''; + $s_birthday_year_options .= "<option value=\"$i\"$selected>$i</option>"; + } + unset($now); - $allow_type = ($allow == ACL_ALLOW) ? ' checked="checked"' : ''; - $deny_type = ($allow == ACL_DENY) ? ' checked="checked"' : ''; ?> - <tr> - <td class="<?php echo $row_class; ?>"><?php echo $l_can_cell; ?></td> - <td class="<?php echo $row_class; ?>" align="center"><input type="radio"<?php echo $allow_type; ?> /></td> - <td class="<?php echo $row_class; ?>" align="center"><input type="radio"<?php echo $deny_type; ?> /></td> - </tr> + <tr> + <td class="row1" width="40%"><b><?php echo $user->lang['UCP_ICQ']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="icq" size="30" maxlength="15" value="<?php echo $user_icq; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['UCP_AIM']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="aim" size="30" maxlength="255" value="<?php echo $user_aim; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['UCP_MSNM']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="msn" size="30" maxlength="255" value="<?php echo $user_msnm; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['UCP_YIM']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="yim" size="30" maxlength="255" value="<?php echo $user_yim; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['UCP_JABBER']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="jabber" size="30" maxlength="255" value="<?php echo $user_jabber; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['WEBSITE']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="website" size="30" maxlength="255" value="<?php echo $user_website; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['LOCATION']; ?>: </b></td> + <td class="row2"><input class="post" type="text" name="location" size="30" maxlength="100" value="<?php echo $user_location; ?>" /></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['OCCUPATION']; ?>: </b></td> + <td class="row2"><textarea class="post" name="occ" rows="3" cols="30"><?php echo $user_occ; ?></textarea></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['INTERESTS']; ?>: </b></td> + <td class="row2"><textarea class="post" name="interests" rows="3" cols="30"><?php echo $user_interests; ?></textarea></td> + </tr> + <tr> + <td class="row1"><b><?php echo $user->lang['BIRTHDAY']; ?>: </b><br /><span class="gensmall"><?php echo $user->lang['BIRTHDAY_EXPLAIN']; ?></span></td> + <td class="row2"><span class="genmed"><?php echo $user->lang['DAY']; ?>:</span> <select name="bday_day"><?php echo $s_birthday_day_options; ?></select> <span class="genmed"><?php echo $user->lang['MONTH']; ?>:</span> <select name="bday_month"><?php echo $s_birthday_month_options; ?></select> <span class="genmed"><?php echo $user->lang['YEAR']; ?>:</span> <select name="bday_year"><?php echo $s_birthday_year_options; ?></select></td> + </tr> <?php - } + + break; + + + case 'prefs': + +?> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_IMAGES']; ?>:</b></td> + <td class="row2"><input type="radio" name="images" value="1"{VIEW_IMAGES_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="images" value="0"{VIEW_IMAGES_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_FLASH']; ?>:</b></td> + <td class="row2"><input type="radio" name="flash" value="1"{VIEW_FLASH_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="flash" value="0"{VIEW_FLASH_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_SMILIES']; ?>:</b></td> + <td class="row2"><input type="radio" name="smilies" value="1"{VIEW_SMILIES_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="smilies" value="0"{VIEW_SMILIES_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_SIGS']; ?>:</b></td> + <td class="row2"><input type="radio" name="sigs" value="1"{VIEW_SIGS_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="sigs" value="0"{VIEW_SIGS_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_AVATARS']; ?>:</b></td> + <td class="row2"><input type="radio" name="avatars" value="1"{VIEW_AVATARS_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="avatars" value="0"{VIEW_AVATARS_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <!-- IF S_CHANGE_CENSORS --> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DISABLE_CENSORS']; ?>:</b></td> + <td class="row2"><input type="radio" name="wordcensor" value="1"{DISABLE_CENSORS_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="wordcensor" value="0"{DISABLE_CENSORS_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <!-- ENDIF --> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['MINIMUM_KARMA']; ?>:</b><br /><span class="gensmall"><?php echo $user->lang['MINIMUM_KARMA_EXPLAIN']; ?></span></td> + <td class="row2"><select name="minkarma">{S_MIN_KARMA_OPTIONS}</select></td> + + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_TOPICS_DAYS']; ?>:</b></td> + <td class="row2">{S_SELECT_SORT_DAYS}</td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_TOPICS_KEY']; ?>:</b></td> + <td class="row2">{S_SELECT_SORT_KEY}</td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['VIEW_TOPICS_DIR']; ?>:</b></td> + <td class="row2">{S_SELECT_SORT_DIR}</td> + </tr> + <tr> + <th colspan="2">Posting preferences</th> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DEFAULT_BBCODE']; ?>:</b></td> + <td class="row2"><input type="radio" name="bbcode" value="1"{DEFAULT_BBCODE_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="bbcode" value="0"{DEFAULT_BBCODE_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DEFAULT_HTML']; ?>:</b></td> + <td class="row2"><input type="radio" name="html" value="1"{DEFAULT_HTML_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="html" value="0"{DEFAULT_HTML_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DEFAULT_SMILE']; ?>:</b></td> + <td class="row2"><input type="radio" name="smilies" value="1"{DEFAULT_SMILIES_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="smilies" value="0"{DEFAULT_SMILIES_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DEFAULT_ADD_SIG']; ?>:</b></td> + <td class="row2"><input type="radio" name="sig" value="1"{DEFAULT_SIG_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="sig" value="0"{DEFAULT_SIG_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['DEFAULT_NOTIFY']; ?>:</b></td> + <td class="row2"><input type="radio" name="notify" value="1"{DEFAULT_NOTIFY_YES} /><span class="gen"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="notify" value="0"{DEFAULT_NOTIFY_NO} /><span class="gen"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <th colspan="2"></th> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['SHOW_EMAIL']; ?>:</b></td> + <td class="row2"><input type="radio" name="viewemail" value="1"{VIEW_EMAIL_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="viewemail" value="0"{VIEW_EMAIL_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['ADMIN_EMAIL']; ?>:</b></td> + <td class="row2"><input type="radio" name="massemail" value="1"{ADMIN_EMAIL_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="massemail" value="0"{ADMIN_EMAIL_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['ALLOW_PM']; ?>:</b><br /><span class="gensmall"><?php echo $user->lang['ALLOW_PM_EXPLAIN']; ?></span></td> + <td class="row2"><input type="radio" name="allowpm" value="1"{ALLOW_PM_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="allowpm" value="0"{ALLOW_PM_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <!-- IF S_CAN_HIDE_ONLINE --> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['HIDE_ONLINE']; ?>:</b></td> + <td class="row2"><input type="radio" name="hideonline" value="1"{HIDE_ONLINE_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="hideonline" value="0"{HIDE_ONLINE_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <!-- ENDIF --> + <!-- IF S_SELECT_NOTIFY --> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['NOTIFY_METHOD']; ?>:</b><br /><span class="gensmall"><?php echo $user->lang['NOTIFY_METHOD_EXPLAIN']; ?></span></td> + <td class="row2"><input type="radio" name="notifymethod" value="0"{NOTIFY_EMAIL} /><span class="genmed"><?php echo $user->lang['NOTIFY_METHOD_EMAIL']; ?></span> <input type="radio" name="notifymethod" value="1"{NOTIFY_IM} /><span class="genmed"><?php echo $user->lang['NOTIFY_METHOD_IM']; ?></span> <input type="radio" name="notifymethod" value="2"{NOTIFY_BOTH} /><span class="genmed"><?php echo $user->lang['NOTIFY_METHOD_BOTH']; ?></span></td> + </tr> + <!-- ENDIF --> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['NOTIFY_ON_PM']; ?>:</b></td> + <td class="row2"><input type="radio" name="notifypm" value="1"{NOTIFY_PM_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="notifypm" value="0"{NOTIFY_PM_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['POPUP_ON_PM']; ?>:</b></td> + <td class="row2"><input type="radio" name="popuppm" value="1"{POPUP_PM_YES} /><span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="popuppm" value="0"{POPUP_PM_NO} /><span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['BOARD_LANGUAGE']; ?>:</b></td> + <td class="row2"><select name="lang">{S_LANG_OPTIONS}</select></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['BOARD_STYLE']; ?>:</b></td> + <td class="row2"><select name="style">{S_STYLE_OPTIONS}</select></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['BOARD_TIMEZONE']; ?>:</b></td> + <td class="row2"><select name="tz">{S_TZ_OPTIONS}</select></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['BOARD_DST']; ?>:</b></td> + <td class="row2"><input type="radio" name="dst" value="1"{DST_YES} /> <span class="genmed"><?php echo $user->lang['YES']; ?></span> <input type="radio" name="dst" value="0"{DST_NO} /> <span class="genmed"><?php echo $user->lang['NO']; ?></span></td> + </tr> + <tr> + <td class="row1" width="50%"><b class="genmed"><?php echo $user->lang['BOARD_DATE_FORMAT']; ?>:</b><br /><span class="gensmall"><?php echo $user->lang['BOARD_DATE_FORMAT_EXPLAIN']; ?></span></td> + <td class="row2"><input type="text" name="dateformat" value="{DATE_FORMAT}" maxlength="14" class="post" /></td> + </tr> +<?php + + break; + + + case 'avatar': + $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && is_writeable($phpbb_root_path . $config['avatar_path']) && (@ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on')) ? true : false; + + if ($user_avatar) + { + switch ($user_avatar_type) + { + case AVATAR_UPLOAD: + $avatar_img = $phpbb_root_path . $config['avatar_path'] . '/'; + break; + case AVATAR_GALLERY: + $avatar_img = $phpbb_root_path . $config['avatar_gallery_path'] . '/'; + break; } + $avatar_img .= $user_avatar; + + $avatar_img = '<img src="' . $avatar_img . '" width="' . $user_avatar_width . '" height="' . $user_avatar_height . '" border="0" alt="" />'; + } + else + { + $avatar_img = '<img src="images/no_avatar.gif" alt="" />'; } ?> - </table></td> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['CURRENT_IMAGE']; ?>: </b><br /><span class="gensmall"><?php echo sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)); ?></span></td> + <td class="row1" align="center"><br /><?php echo $avatar_img; ?><br /><br /><input type="checkbox" name="delete" /> <span class="gensmall"><?php echo $user->lang['DELETE_AVATAR']; ?></span></td> </tr> - <tr> <?php - foreach ($local as $forum_id => $auth_ary) + // Can we upload? + if ($can_upload) { ?> - <td class="row1"><?php echo $forum_data[$forum_id]; ?></td> - <td><table cellspacing="1" cellpadding="0" border="0"> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['UPLOAD_AVATAR_FILE']; ?>: </b></td> + <td class="row1"><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $config['avatar_max_filesize']; ?>" /><input class="post" type="file" name="uploadfile" /></td> + </tr> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['UPLOAD_AVATAR_URL']; ?>: </b><br /><span class="gensmall"><?php echo $user->lang['UPLOAD_AVATAR_URL_EXPLAIN']; ?></span></td> + <td class="row1"><input class="post" type="text" name="uploadurl" size="40" value="<?php echo $avatar_url; ?>" /></td> + </tr> <?php - foreach ($auth_ary as $option => $allow) - { - echo '<tr><td>' . $user->lang['acl_' . $option] . ' => ' . (($allow) ? 'Allowed' : 'Denied') . '</td></tr>'; - } + } ?> - </table></td> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['LINK_REMOTE_AVATAR']; ?>: </b><br /><span class="gensmall"><?php echo $user->lang['LINK_REMOTE_AVATAR_EXPLAIN']; ?></span></td> + <td class="row1"><input class="post" type="text" name="remotelink" size="40" value="<?php echo $avatar_url; ?>" /></td> + </tr> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['LINK_REMOTE_SIZE']; ?>: </b><br /><span class="gensmall"><?php echo $user->lang['LINK_REMOTE_SIZE_EXPLAIN']; ?></span></td> + <td class="row1"><input class="post" type="text" name="width" size="3" value="<?php echo $user_avatar_width; ?>" /> <span class="gen">px X </span> <input class="post" type="text" name="height" size="3" value="<?php echo $user_avatar_height; ?>" /> <span class="gen">px</span></td> + </tr> +<?php + + // Do we have a gallery? + if ($config['null'] && !$display_gallery) + { + +?> + <tr> + <td class="row2" width="35%"><b><?php echo $user->lang['AVATAR_GALLERY']; ?>: </b></td> + <td class="row1"><input class="btnlite" type="submit" name="displaygallery" value="<?php echo $user->lang['DISPLAY_GALLERY']; ?>" /></td> + </tr> +<?php + } + + // Do we want to display it? + if ($config['null'] && $display_gallery) + { + +?> + <tr> + <th colspan="2"><?php echo $user->lang['AVATAR_GALLERY']; ?></th> + </tr> + <tr> + <td class="cat" colspan="2" align="center" valign="middle"><span class="genmed"><?php echo $user->lang['AVATAR_CATEGORY']; ?>: </span><select name="avatarcat">{S_CAT_OPTIONS}</select> <span class="genmed"><?php echo $user->lang['AVATAR_PAGE']; ?>: </span><select name="avatarpage">{S_PAGE_OPTIONS}</select> <input class="btnlite" type="submit" value="<?php echo $user->lang['GO']; ?>" name="avatargallery" /></td> + </tr> + <tr> + <td class="row1" colspan="2" align="center"><table cellspacing="1" cellpadding="4" border="0"> + + <!-- BEGIN avatar_row --> + <tr> + <!-- BEGIN avatar_column --> + <td class="row1" align="center"><img src="{avatar_row.avatar_column.AVATAR_IMAGE}" alt="{avatar_row.avatar_column.AVATAR_NAME}" title="{avatar_row.avatar_column.AVATAR_NAME}" /></td> + <!-- END avatar_column --> + </tr> + <tr> + <!-- BEGIN avatar_option_column --> + <td class="row2" align="center"><input type="radio" name="avatarselect" value="{avatar_row.avatar_option_column.S_OPTIONS_AVATAR}" /></td> + <!-- END avatar_option_column --> </tr> + <!-- END avatar_row --> + + </table></td> + </tr> <?php } break; + + case 'sig': + include($phpbb_root_path . 'includes/functions_posting.'.$phpEx); + + decode_text($user_sig, $user_sig_bbcode_uid); + + +?> + <tr> + <td class="row2"><table cellspacing="0" cellpadding="2" border="0"> + <tr align="center" valign="middle"> + <td><input class="btnlite" type="button" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" onmouseover="helpline('b')" /></td> + <td><input class="btnlite" type="button" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onclick="bbstyle(2)" onmouseover="helpline('i')" /></td> + <td><input class="btnlite" type="button" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onclick="bbstyle(4)" onmouseover="helpline('u')" /></td> + <td><input class="btnlite" type="button" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" onmouseover="helpline('q')" /></td> + <td><input class="btnlite" type="button" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" onmouseover="helpline('c')" /></td> + <td><input class="btnlite" type="button" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" onmouseover="helpline('l')" /></td> + <td><input class="btnlite" type="button" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" onmouseover="helpline('o')" /></td> + <td><input class="btnlite" type="button" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" onmouseover="helpline('p')" /></td> + <td><input class="btnlite" type="button" accesskey="w" name="addbbcode18" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(18)" onmouseover="helpline('w')" /></td> + </tr> + <tr> + <td colspan="9"><table width="100%" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td><span class="genmed"> {L_FONT_SIZE}:</span> <select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" onmouseover="helpline('f')"> + <option value="7">{L_FONT_TINY}</option> + <option value="9">{L_FONT_SMALL}</option> + <option value="12" selected="selected">{L_FONT_NORMAL}</option> + <option value="18">{L_FONT_LARGE}</option> + <option value="24">{L_FONT_HUGE}</option> + </select></td> + <td class="gensmall" nowrap="nowrap" align="right"><a href="javascript:bbstyle(-1)" onmouseover="helpline('a')">{L_CLOSE_TAGS}</a></td> + </tr> + </table></td> + </tr> + <tr> + <td colspan="9"><input class="helpline" type="text" name="helpbox" size="45" maxlength="100" value="{L_STYLES_TIP}" /></td> + </tr> + <tr> + <td colspan="9"><textarea class="post" name="signature" rows="6" cols="60" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);"><?php echo $user_sig; ?></textarea></td> + </tr> + </table></td> + </tr> +<?php + + break; + + + case 'groups': + break; + + + case 'perm': + break; + + } + +?> + <tr> + <td class="cat" colspan="2" align="center"><input class="btnmain" type="submit" name="update" value="<?php echo $user->lang['SUBMIT']; ?>" /> <input class="btnlite" type="reset" value="<?php echo $user->lang['RESET']; ?>" /></td> + </tr> + </table></td> + </tr> +<?php + + if ($pagination) + { + +?> + <tr> + <td align="right"><?php echo $pagination; ?></td> + </tr> +<?php + } +?> +</table></form> + +<?php + adm_page_footer(); } @@ -282,72 +738,33 @@ if (!$auth->acl_get('a_user')) trigger_error($user->lang['No_admin']); } -adm_page_header($user->lang['Manage']); +adm_page_header($user->lang['MANAGE']); ?> -<h1><?php echo $user->lang['User_admin']; ?></h1> +<h1><?php echo $user->lang['USER_ADMIN']; ?></h1> -<p><?php echo $user->lang['User_admin_explain']; ?></p> +<p><?php echo $user->lang['USER_ADMIN_EXPLAIN']; ?></p> -<form method="post" name="post" action="admin_users.<?php echo $phpEx.$SID; ?>"><table class="bg" cellspacing="1" cellpadding="4" border="0" align="center"> +<form method="post" name="post" action="<?php echo "admin_users.$phpEx$SID"; ?>"><table class="bg" width="75%" cellspacing="1" cellpadding="4" border="0" align="center"> <tr> - <th align="center"><?php echo $user->lang['Select_a_User']; ?></th> + <th colspan="2"align="center"><?php echo $user->lang['SELECT_USER']; ?></th> </tr> + <tr> + <td class="row1" width="40%"><b>Lookup existing user: </b><br /><span class="gensmall">[ <a href="<?php echo "../memberlist.$phpEx$SID&mode=searchuser&field=username"; ?>" onclick="window.open('<?php echo "../memberlist.$phpEx$SID&mode=searchuser&field=username"?>', '_phpbbsearch', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=740');return false;"><?php echo $user->lang['FIND_USERNAME']; ?></a> ]</span></td> + <td class="row2"><input type="text" class="post" name="username" maxlength="50" size="20" /></td> + </tr> + <!-- tr> + <td class="row1" width="40%"><b>Create new user: </b></td> + <td class="row2"><input type="text" class="post" name="newuser" maxlength="50" size="20" /></td> + </tr --> <tr> - <td class="row1" align="center"><input type="text" class="post" name="username" maxlength="50" size="20" /> <input type="submit" name="submituser" value="<?php echo $user->lang['Look_up_user']; ?>" class="btnmain" /> <input type="submit" name="usersubmit" value="<?php echo $user->lang['Find_username']; ?>" class="btnlite" onclick="window.open('<?php echo "../memberlist.$phpEx$SID&mode=searchuser&field=username"; ?>', '_phpbbsearch', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=740');return false;" /></td> + <td class="cat" colspan="2" align="center"><input type="submit" name="submituser" value="<?php echo $user->lang['SUBMIT']; ?>" class="btnmain" /></td> </tr> </table></form> <?php - adm_page_footer(); -// --------- -// FUNCTIONS -function ipwhois($ip) -{ - $ipwhois = ''; - - $match = array( - '#RIPE\.NET#is' => 'whois.ripe.net', - '#whois\.apnic\.net#is' => 'whois.apnic.net', - '#nic\.ad\.jp#is' => 'whois.nic.ad.jp', - '#whois\.registro\.br#is' => 'whois.registro.br' - ); - - if (($fsk = fsockopen('whois.arin.net', 43))) - { - @fputs($fsk, "$ip\n"); - while (!feof($fsk)) - { - $ipwhois .= fgets($fsk, 1024); - } - fclose($fsk); - } - - foreach (array_keys($match) as $server) - { - if (preg_match($server, $ipwhois)) - { - $ipwhois = ''; - if (($fsk = fsockopen($match[$server], 43))) - { - @fputs($fsk, "$ip\n"); - while (!feof($fsk)) - { - $ipwhois .= fgets($fsk, 1024); - } - fclose($fsk); - } - break; - } - } - - return $ipwhois; -} -// FUNCTIONS -// --------- - ?>
\ No newline at end of file diff --git a/phpBB/install/schemas/mysql_schema.sql b/phpBB/install/schemas/mysql_schema.sql index 77b50d3b75..288e2ab5ab 100644 --- a/phpBB/install/schemas/mysql_schema.sql +++ b/phpBB/install/schemas/mysql_schema.sql @@ -757,6 +757,16 @@ CREATE TABLE phpbb_users ( KEY user_birthday (user_birthday(6)) ); +# Table: 'phpbb_users_notes' +CREATE TABLE phpbb_users_notes ( + user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, + reporter_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, + report_date int(11) DEFAULT '0' NOT NULL, + report_log varchar(255) DEFAULT '' NOT NULL, + report_text text DEFAULT '' NOT NULL, + KEY user_id (user_id,reporter_id) +); + # Table: 'phpbb_words' CREATE TABLE phpbb_words ( word_id mediumint(8) UNSIGNED NOT NULL auto_increment, |
