model = new \FeatherBB\Model\Admin\Users();
Lang::load('admin/users');
}
public function display($req, $res, $args)
{
Hooks::fire('controller.admin.users.display');
// Move multiple users to other user groups
if (Input::post('move_users') || Input::post('move_users_comply')) {
AdminUtils::generateAdminMenu('users');
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Move users')],
'active_page' => 'moderate',
'admin_console' => true,
'move' => $this->model->moveUsers(),
]
)->addTemplate('@forum/admin/users/move_users')->display();
}
// Delete multiple users
if (Input::post('delete_users') || Input::post('delete_users_comply')) {
AdminUtils::generateAdminMenu('users');
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Delete users')],
'active_page' => 'moderate',
'admin_console' => true,
'user_ids' => $this->model->deleteUsers(),
]
)->addTemplate('@forum/admin/users/delete_users')->display();
}
// Ban multiple users
if (Input::post('ban_users') || Input::post('ban_users_comply')) {
if (!User::can('mod.bans')) {
throw new Error(__('No permission'), '403');
}
AdminUtils::generateAdminMenu('users');
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Bans')],
'active_page' => 'moderate',
'admin_console' => true,
'user_ids' => $this->model->banUsers(),
]
)->addTemplate('@forum/admin/users/ban_users')->display();
}
// Display bans
if (Input::query('find_user')) {
// Return conditions and query string for the URL
$search = $this->model->getUserSearch();
// Fetch user count
$numUsers = $this->model->getNumUsersSearch($search['conditions']);
// Determine the user offset (based on $_gET['p'])
$numPages = ceil($numUsers / 50);
$p = (!Input::query('p') || Input::query('p') <= 1 || Input::query('p') > $numPages) ? 1 : intval(Input::query('p'));
$startFrom = 50 * ($p - 1);
// Generate paging links
$pagingLinks = '' . __('Pages') . ' ' . Url::paginateOld($numPages, $p, '?find_user=&'.implode('&', $search['query_str']));
// Some helper variables for permissions
$canDelete = $canMove = User::isAdmin();
$canBan = User::isAdmin() || (User::isAdminMod() && User::can('mod.ban_users'));
$canAction = ($canDelete || $canBan || $canMove) && $numUsers > 0;
View::addAsset('js', 'style/imports/common.js', ['type' => 'text/javascript']);
View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Results head')],
'active_page' => 'admin',
'admin_console' => true,
'paging_links' => $pagingLinks,
'search' => $search,
'start_from' => $startFrom,
'can_delete' => $canDelete,
'can_ban' => $canBan,
'can_action' => $canAction,
'can_move' => $canMove,
'user_data' => $this->model->printUsers($search['conditions'], $search['order_by'], $search['direction'], $startFrom),
]
)->addTemplate('@forum/admin/users/find_users')->display();
} else {
AdminUtils::generateAdminMenu('users');
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users')],
'active_page' => 'admin',
'admin_console' => true,
'group_list' => $this->model->getGroupList(),
]
)->addTemplate('@forum/admin/users/admin_users')->display();
}
}
// Show IP statistics for a certain user ID
public function ipstats($req, $res, $args)
{
Hooks::fire('controller.admin.users.ipstats');
// Fetch ip count
$numIps = $this->model->getNumIp($args['id']);
// Determine the ip offset (based on $_gET['p'])
$numPages = ceil($numIps / 50);
$p = (!Input::query('p') || Input::query('p') <= 1 || Input::query('p') > $numPages) ? 1 : intval(Input::query('p'));
$startFrom = 50 * ($p - 1);
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Results head')],
'active_page' => 'admin',
'admin_console' => true,
'page' => $p,
'paging_links' => ''.__('Pages').' '.Url::paginateOld($numPages, $p, '?ip_stats='.$args['id']),
'start_from' => $startFrom,
'ip_data' => $this->model->getIpStats($args['id'], $startFrom),
]
)->addTemplate('@forum/admin/users/search_ip')->display();
}
// Show IP statistics for a certain user IP
public function showusers($req, $res, $args)
{
Hooks::fire('controller.admin.users.showusers');
$searchIp = Input::query('ip');
if (!@preg_match('%^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$%', $searchIp) && !@preg_match('%^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$%', $searchIp)) {
throw new Error(__('Bad IP message'), 400);
}
// Fetch user count
$numUsers = $this->model->getNumUsersIp($searchIp);
// Determine the user offset (based on $_gET['p'])
$numPages = ceil($numUsers / 50);
$p = (!Input::query('p') || Input::query('p') <= 1 || Input::query('p') > $numPages) ? 1 : intval(Input::query('p'));
$startFrom = 50 * ($p - 1);
return View::setPageInfo([
'title' => [Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Results head')],
'active_page' => 'admin',
'admin_console' => true,
'paging_links' => ''.__('Pages').' '.Url::paginateOld($numPages, $p, '?ip_stats='.$searchIp),
'page' => $p,
'start_from' => $startFrom,
'info' => $this->model->getInfoPoster($searchIp, $startFrom),
]
)->addTemplate('@forum/admin/users/show_users')->display();
}
}