'Guest', 'symbol' => '', ), array( 'name' => '', 'symbol' => '', ), array( 'name' => 'Administrator', 'symbol' => '~', ), array( 'name' => 'Voice', 'symbol' => '+', ), array( 'name' => 'Driver', 'symbol' => '%', ), array( 'name' => 'Moderator', 'symbol' => '@', ), array( 'name' => 'Leader', 'symbol' => '&', ), ); $STANDINGS = $psconfig['standings']; include '../lib/ntbb-session.lib.php'; include '../lib/ntbb-ladder.lib.php'; include 'lib/panels.lib.php'; $authLevel = 0; $auth2FA = substr($curuser['email'] ?? '', -1) === '@'; if ($curuser['group'] == 4) $authLevel = 2; // driver if ($curuser['group'] == 5) $authLevel = 3; // mod if ($curuser['group'] == 6) $authLevel = 4; // leader if ($curuser['group'] == 6 && $auth2FA) $authLevel = 5; // leader with 2FA if ($curuser['group'] == 2 && $auth2FA) $authLevel = 6; // admin $userid = false; $user = false; $formats = array( 'gen8randombattle' => 'Random Battle', 'gen8ou' => 'OverUsed', 'gen8ubers' => 'Ubers', 'gen8uu' => 'UnderUsed', 'gen8ru' => 'RarelyUsed', 'gen8nu' => 'NeverUsed', 'gen8pu' => 'PU', 'gen8lc' => 'Little Cup', 'gen8monotype' => 'Monotype', 'gen8battlestadiumsingles' => 'Battle Stadium Singles', 'gen8cap' => 'CAP', 'gen8randomdoublesbattle' => 'Random Doubles Battle', 'gen8doublesou' => 'Doubles OU', 'gen8vgc2020' => 'VGC 2020', 'gen8balancedhackmons' => 'Balanced Hackmons', 'gen8mixandmega' => 'Mix and Mega', 'gen8almostanyability' => 'Almost Any Ability', 'gen8stabmons' => 'STABmons', 'gen8nfe' => 'NFE', 'gen7randombattle' => '[Gen 7] Random Battle', 'gen7ou' => '[Gen 7] OU', 'gen6randombattle' => '[Gen 6] Random Battle', 'gen6ou' => '[Gen 6] OU', 'gen5randombattle' => '[Gen 5] Random Battle', 'gen5ou' => '[Gen 5] OU', 'gen4ou' => '[Gen 4] OU', 'gen3ou' => '[Gen 3] OU', 'gen2ou' => '[Gen 2] OU', 'gen1ou' => '[Gen 1] OU', ); if (isset($_REQUEST['user']) && strlen($_REQUEST['user'])) { $userid = $users->userid($_REQUEST['user']); // 0 is falsy // I'm hardcoding here to fix a crash, but the rest of the system // should continue to reject 0 as a valid userid if ($_REQUEST['user'] === '0') $userid = '0'; if (!strlen($userid)) { header('HTTP/1.1 404 Not Found'); die("Invalid userid"); } $user = $users->getUser($userid); if (substr($_SERVER['REQUEST_URI'], 0, 13) === '/users/?user=') { // really wish this could be done with mod_rewrite header('Location: https://' . $psconfig['routes']['users'] . '/'.$userid); die(); } if (!$user || $user['banstate'] == 100) { if ($panels->output !== 'html') header('HTTP/1.1 404 Not Found'); if (!$user) { $user = [ 'username' => $userid, 'userid' => $userid, 'group' => 0, ]; } } } if ($authLevel >= 3) { //file_put_contents(__DIR__ . '/../config/altaccesslog.txt', "{$curuser['username']} - $userid\n", FILE_APPEND); } if (isset($_REQUEST['json'])) { header('Content-Type: application/json'); header('Access-Control-Allow-Origin: *'); if (!$user) die('null'); $ladder = new NTBBLadder(''); $ladder->getAllRatings($user); $ratings = []; foreach ($user['ratings'] as $rating) { $ratings[$rating['formatid']] = [ 'elo' => $rating['elo'], 'gxe' => $rating['gxe'], 'rpr' => $rating['rpr'], 'rprd' => $rating['rprd'], ]; } echo json_encode([ 'username' => $user['username'], 'userid' => $user['userid'], 'registertime' => intval(@$user['registertime']/(60*60*24))*60*60*24, 'group' => intval($user['group'] ?? 0), 'ratings' => $ratings, ], JSON_FORCE_OBJECT); die(); } if (!$user) { $panels->setPageTitle('Users'); $panels->setPageDescription('Pokémon Showdown users'); } else { $panels->setPageTitle(''.$user['username'].' - Users'); $panels->setPageDescription(''.$user['username'].'\'s user profile'); } $panels->setTab('ladder'); $panels->start(); if (!$user) { ?>

Find a user

Ladder

= 4 && substr($user['email'] ?? '', -1) === '@') echo '[2FA]'; if ($user['group'] && $user['group'] != 2 && $authLevel >= 3) { $csrfOk = (!!$users->csrfCheck() && $authLevel >= 4); if ($csrfOk && isset($_POST['group'])) { $group = intval($_POST['group']); if ($group != 3 && $group != 4 && $group != 5 && $group != 6) $group = 1; $psdb->query("UPDATE ntbb_users SET `group` = ".intval($group)." WHERE userid = '".$psdb->escape($user['userid'])."' LIMIT 1"); $user['group'] = $group; $modlogentry = "Group changed to $group ({$ntbb_groups[$group]['name']})"; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$user['userid'], $curuser['userid'], time(), $users->getIp(), $modlogentry] ); ?>

Group updated

query( "UPDATE {$psdb->prefix}users SET banstate = ? WHERE userid = ? LIMIT 1", [$newStanding, $user['userid']] ); if ($newStanding === 30 || $newStanding === 100) { $psdb->query( "UPDATE ntbb_ladder SET elo = -abs(elo) WHERE userid = ?;", [$user['userid']] ); } else { $psdb->query( "UPDATE ntbb_ladder SET elo = abs(elo) WHERE userid = ?;", [$user['userid']] ); } $modlogentry = "Standing changed to $newStanding ({$STANDINGS[$newStanding]}): {$_POST['reason']}"; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$user['userid'], $curuser['userid'], time(), $users->getIp(), $modlogentry] ); $user['banstate'] = @$_POST['standing']; $count = $psdb->query("SELECT COUNT(*) FROM ntbb_users WHERE ip = '".$psdb->escape($user['ip'])."' LIMIT 1"); $count = $psdb->fetch_assoc($count); $count = $count['COUNT(*)']; ?>

Standing updated

1) echo '

(Consider updating standing for '.$count.' alts)

' ?>
userid($newName); if (!$newUserid || $newUserid === $user['userid']) die("invalid username"); $psdb->query( "UPDATE {$psdb->prefix}ladder SET userid = ? WHERE userid = ?", ['_'.$user['userid'], $newUserid] ); $psdb->query( "UPDATE {$psdb->prefix}ladder SET userid = ?, username = ?, elo = abs(elo) WHERE userid = ?", [$newUserid, $newName, $user['userid']] ); $psdb->query( "UPDATE {$psdb->prefix}ladder SET userid = ?, username = ?, elo = abs(elo) WHERE userid = ?", [$user['userid'], $user['username'], '_'.$user['userid']] ); $modlogentry = "Ladder swapped with " . $user['userid']; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$newUserid, $curuser['userid'], time(), $users->getIp(), $modlogentry] ); $modlogentry = "Ladder swapped with " . $newUserid; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$user['userid'], $curuser['userid'], time(), $users->getIp(), $modlogentry] ); ?>

Ladder record swapped

query( "UPDATE {$psdb->prefix}users SET email = ? WHERE userid = ?", [$remove ? '' : $email . '@', $user['userid']] ); $modlogentry = $remove ? "Login method set to password" : "Login method set to Google " . $email; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$user['userid'], $curuser['userid'], time(), $users->getIp(), $modlogentry] ); ?>

Login method updated

= 5 && @$_POST['passreset']) { $token = $users->createPasswordResetToken($user['userid']); ?>

Use this link:

https:///resetpassword/

csrfCheck()) { $csrfOk = true; } if ($csrfOk && $_POST['standing'] ?? null) { $ctime = time(); $newStanding = $_POST['standing']; $psdb->query( "INSERT INTO ntbb_users (`userid`,`username`,`passwordhash`,`email`,`registertime`,`ip`,`banstate`) VALUES (?,?,'','',?,'',?)", [$user['userid'], $user['userid'], $ctime, $newStanding] ); $modlogentry = "Created dummy user with standing $newStanding ({$STANDINGS[$newStanding]})"; $psdb->query( "INSERT INTO `{$psdb->prefix}usermodlog` (`userid`,`actorid`,`date`,`ip`,`entry`) VALUES (?, ?, ?, ?, ?)", [$user['userid'], $curuser['userid'], time(), $users->getIp(), $modlogentry] ); $user['banstate'] = $_POST['standing']; ?>

Dummy user created; Standing updated

(Account disabled)= 2) echo ' (Usermodlog)'; ?>

(Banned indefinitely)

Joined: = 2) echo ' (Usermodlog)'; ?>

getGroupName($user); $groupSymbol = $users->getGroupSymbol($user); if ($groupSymbol === '~' || $groupSymbol === '&') { ?>

Joined: = 2) echo ' (Usermodlog)'; ?>

(Unregistered)

;_;7

'; } // Ladder if ($user['userid'] === $curuser['userid']) { if ($users->csrfCheck() && @$_POST['resetLadder']) { $formatLadder = new NTBBLadder(@$_POST['resetLadder']); if (substr($formatLadder->formatid, -7) !== 'current' && substr($formatLadder->formatid, -11) !== 'suspecttest') { $formatLadder->clearWL($curuser); } } } if ((@$user['banstate'] != 100 && @$user['banstate'] != 30) || $authLevel >= 4) { $ladder = new NTBBLadder(''); $ladder->getAllRatings($user); } $bufs = ['official' => '', 'unofficial' => '']; if (@$user['ratings']) foreach (@$user['ratings'] as $row) { if ($row['w'] + $row['l'] + $row['t'] == 0 && $row['elo'] < 1050) continue; $buftype = isset($formats[$row['formatid']])?'official':'unofficial'; $bufs[$buftype] .= ''.htmlspecialchars($row['formatid']).''.round($row['elo']).''; if ($row['rprd'] < 100) { $bufs[$buftype] .= ''.number_format($row['gxe'],1).'%'.''.round($row['rpr']).' ± '.round($row['rprd']).''; } else { $bufs[$buftype] .= '(more games needed)'; } if ($user['userid'] === $curuser['userid']) { $bufs[$buftype] .= '' . $row['w'] . '' . $row['l'] . ''; if (substr($row['formatid'], -7) !== 'current' && substr($row['formatid'], -11) !== 'suspecttest') { $bufs[$buftype] .= ''; } } $bufs[$buftype] .= ''; } if ($bufs['official'] || $bufs['unofficial']) { ?>

Ratings

Official ladder Elo GXE Glicko-1 W L
Unofficial ladder Elo GXE Glicko-1 W L
end(); ?>