/**
 * Возвращает полную информацию о пользователе включая ранг, картинку ранга, статус онлайн, имя файла аватара для вывода. Вся информация кэшируется.
 * @param $user_id
 * @return array|bool
 */
function GetUserInfo($user_id)
{
    $system_users_cache = GetUsers();
    if (isset($system_users_cache[$user_id])) {
        $usr = $system_users_cache[$user_id];
        // Аватар
        $usr['avatar_file'] = GetUserAvatar($user_id);
        $usr['avatar_file_small'] = GetSmallUserAvatar($user_id, $usr['avatar_file']);
        $usr['avatar_file_smallest'] = GetSmallestUserAvatar($user_id, $usr['avatar_file']);
        // Ранг
        $rank = GetUserRank($usr['points'], $usr['type'], $usr['access']);
        $usr['rank_name'] = $rank[0];
        $usr['rank_image'] = $rank[1];
        // Статус онлайн
        $online = System::user()->Online();
        $usr['online'] = isset($online[$user_id]);
        // Индивидуальные настройки
        if (!is_array($usr['data'])) {
            if ($usr['data'] == '') {
                $usr['data'] = array();
            } else {
                $system_users_cache[$user_id]['data'] = unserialize($usr['data']);
                $usr['data'] = $system_users_cache[$user_id]['data'];
            }
        }
        return $usr;
    } else {
        return false;
    }
}
function AdminUserRanks()
{
    global $rankedit;
    TAddSubTitle('Ранги пользователей');
    $users = System::database()->Select('users', "`type`='2'");
    foreach ($users as $u) {
        $r = GetUserRank($u['points'], $u['type'], $u['access']);
        if (!isset($rcounts[$r[2]])) {
            $rcounts[$r[2]] = 0;
        }
        $rcounts[$r[2]]++;
    }
    $ranks = System::database()->Select('userranks', '');
    SortArray($ranks, 'min');
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Ранг</th><th>Мин. пунктов</th><th>Участников</th><th>Изображение</th><th>Функции</th></tr>';
    foreach ($ranks as $rank) {
        if (file_exists(System::config('general/ranks_dir') . $rank['image']) && is_file(System::config('general/ranks_dir') . $rank['image'])) {
            $image = '<img src="' . RealPath2(SafeDB(System::config('general/ranks_dir') . $rank['image'], 255, str)) . '" border="0" />';
        } else {
            $image = '';
        }
        $funcs = '';
        if ($rankedit) {
            $funcs .= System::admin()->SpeedButton('Редактировать', ADMIN_FILE . '?exe=user&a=editrank&id=' . SafeDB($rank['id'], 11, int), 'images/admin/edit.png');
            $funcs .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=user&a=delrank&id=' . SafeDB($rank['id'], 11, int), 'images/admin/delete.png', 'Удалить ранг?');
        } else {
            $funcs .= '&nbsp;';
        }
        $text .= '<tr>
			<td>' . SafeDB($rank['title'], 250, str) . '</td>
			<td>' . SafeDB($rank['min'], 11, int) . '</td>
			<td>' . (isset($rcounts[$rank['id']]) ? $rcounts[$rank['id']] : '0') . '</td>
			<td>' . $image . '</td>
			<td>' . $funcs . '</td>
			</tr>';
    }
    $text .= '</table>';
    AddCenterBox('Ранги пользователей');
    AddText($text);
    if ($rankedit) {
        System::admin()->FormTitleRow('Добавить ранг');
        FormRow('Название ранга', System::site()->Edit('rankname', '', false, 'style="width:180px;"'));
        FormRow('Изображение', System::site()->Edit('rankimage', '', false, 'style="width:180px;"'));
        FormRow('Минимальное количество пунктов для вступления', System::site()->Edit('minpoints', '0', false, 'style="width:60px;"'));
        AddForm('<form name="addrang" method="post" action="' . ADMIN_FILE . '?exe=user&a=addrank">', System::site()->Submit('Добавить'));
    }
}
function IndexUserlist()
{
    System::site()->SetTitle('Список пользователей');
    System::site()->BreadCrumbAdd('Список пользователей');
    $page = 0;
    if (isset($_GET['page'])) {
        $page = SafeEnv($_GET['page'], 11, int);
    } else {
        $page = 1;
    }
    $users = System::database()->Select('users', "`active`='1'");
    SortArray($users, 'points', true);
    // regdate
    SortArray($users, 'type', false);
    // type
    $num = System::config('user/users_on_page');
    $navigation = new Navigation($page);
    $navigation->FrendlyUrl = System::site()->Ufu;
    $navigation->GenNavigationMenu($users, $num, Ufu('index.php?name=user&op=userslist', 'user/users/page{page}/', true));
    System::site()->AddTemplatedBox('Список пользователей', 'module/user_list.html');
    System::site()->AddBlock('userlist_th', true, false, 'title');
    System::site()->Blocks['userlist_th']['vars'] = array('name' => 'Имя', 'email' => 'E-mail', 'date' => 'Дата регистрации', 'last_visit' => 'Посл. посещение', 'last' => 'Посл. посещение', 'rank' => 'Ранг/статус');
    System::site()->AddBlock('userlist', true, true, 'user');
    foreach ($users as $usr) {
        $vars = array();
        $rank_stat = GetUserRank($usr['points'], $usr['type'], $usr['access']);
        $rank_stat = $rank_stat[0];
        $vars['avatar'] = GetUserAvatar($usr['id']);
        $vars['avatar_small'] = GetSmallUserAvatar($usr['id'], $vars['avatar']);
        $vars['avatar_smallest'] = GetSmallestUserAvatar($usr['id'], $vars['avatar']);
        $vars['user_id'] = SafeDB($usr['id'], 11, int);
        $vars['url'] = Ufu('index.php?name=user&op=userinfo&user='******'id'], 11, int), 'user/{user}/info/');
        $vars['name'] = SafeDB($usr['name'], 50, str);
        if ($usr['hideemail'] == '1') {
            $vars['email'] = 'Скрывается';
        } else {
            $vars['email'] = SafeDB($usr['email'], 50, str);
        }
        $vars['date'] = TimeRender($usr['regdate'], true);
        $vars['lastdate'] = TimeRender($usr['lastvisit'], true);
        $vars['rank'] = $rank_stat;
        System::site()->AddSubBlock('userlist', true, $vars);
    }
}