/**
 * Возвращает полную информацию о пользователе включая ранг, картинку ранга, статус онлайн, имя файла аватара для вывода. Вся информация кэшируется.
 * @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;
    }
}
 private function RenderPost($ObjectId, &$Posts, $BlockName, $Level)
 {
     if (count($Posts) == 0) {
         return false;
     }
     foreach ($Posts as $post) {
         $post_id = SafeDB($post['id'], 11, int);
         $user_id = SafeDB($post['user_id'], 11, int);
         $vars = array();
         $vars['level_padding'] = Posts::$LevelMargin * $Level;
         $vars['post_message'] = HtmlChars($post['post_message']);
         SmiliesReplace($vars['post_message']);
         $vars['post_message'] = nl2br($vars['post_message']);
         $vars['post_message'] = BbCodePrepare($vars['post_message']);
         if ($user_id != 0) {
             // Зарегистрированный пользователь
             $userinfo = GetUserInfo($user_id);
             $vars['user_link'] = Ufu("index.php?name=user&op=userinfo&user={$user_id}", 'user/{user}/info/');
             $vars['user_name'] = '<a href="' . $vars['user_link'] . '">' . $userinfo['name'] . '</a>';
             $vars['post_date'] = SafeDB($post['post_date'], 11, int);
             if ($userinfo['hideemail'] == '0') {
                 $vars['user_email'] = AntispamEmail($userinfo['email']);
             } else {
                 $vars['user_email'] = '';
             }
             $vars['user_homepage'] = SafeDB($userinfo['url'], 255, str);
             $vars['user_homepage_url'] = UrlRender(SafeDB($post['user_homepage'], 255, str));
             if ($userinfo['online']) {
                 $vars['user_status'] = 'Сейчас на сайте.';
             } else {
                 $vars['user_status'] = '';
             }
             $vars['user_rank_image'] = $userinfo['rank_image'];
             $vars['user_rank_name'] = $userinfo['rank_name'];
             $vars['user_avatar'] = $userinfo['avatar_file'];
             $vars['user_avatar_small'] = $userinfo['avatar_file_small'];
             $vars['user_avatar_smallest'] = $userinfo['avatar_file_smallest'];
             $vars['user_regdate'] = TimeRender($userinfo['regdate'], false, false);
         } else {
             $vars['user_name'] = SafeDB($post['user_name'], 255, str);
             $vars['post_date'] = SafeDB($post['post_date'], 11, int);
             if ($post['user_email'] != '' && $post['user_hideemail'] != 0) {
                 $vars['user_email'] = AntispamEmail(SafeDB($post['user_email'], 255, str));
             } else {
                 $vars['user_email'] = '';
             }
             if ($post['user_homepage'] != '') {
                 $vars['user_homepage'] = SafeDB($post['user_homepage'], 255, str);
                 $vars['user_homepage_url'] = UrlRender(SafeDB($post['user_homepage'], 255, str));
             } else {
                 $vars['user_homepage'] = '';
                 $vars['user_homepage_url'] = '';
             }
             $vars['user_status'] = '';
             $vars['user_rank_image'] = '';
             $vars['user_rank_name'] = '';
             $vars['user_avatar'] = GetPersonalAvatar(0);
             $vars['user_avatar_small'] = GetSmallUserAvatar(0, $vars['user_avatar']);
             $vars['user_avatar_smallest'] = GetSmallestUserAvatar(0, $vars['user_avatar']);
             $vars['user_regdate'] = '';
         }
         $vars['user_id'] = SafeDB($post['user_id'], 11, int);
         $vars['post_id'] = $post_id;
         $vars['user_ip'] = SafeDB($post['user_ip'], 19, str);
         $vars['object_id'] = $ObjectId;
         $vars['parent_id'] = SafeDB($post['post_parent_id'], 11, int);
         if ($vars['user_homepage'] != '') {
             $vars['user_homepage'] = '<a href="' . $vars['user_homepage_url'] . '" target="_blank">' . $vars['user_homepage'] . '</a>';
         } else {
             $vars['user_homepage'] = '';
         }
         $vars['post_date'] = TimeRender($vars['post_date']);
         if (System::user()->Auth) {
             $vars['editing'] = System::user()->Get('u_id') == $user_id || System::user()->isAdmin();
         } else {
             $vars['editing'] = $user_id == '0' && $vars['user_ip'] == getip();
         }
         $vars['answers'] = $this->Answers != '0' || System::user()->isAdmin();
         if (!System::user()->Auth && !$this->GuestPost) {
             $vars['answers'] = false;
         }
         if (!$this->AlloyComments) {
             $vars['answers'] = false;
         }
         $vars['no_answers'] = !$vars['answers'];
         $back = SaveRefererUrl();
         $vars['edit_url'] = $this->EditPageUrl . '&post_id=' . $post_id . '&back=' . $back;
         $vars['delete_url'] = $this->DeletePageUrl . '&post_id=' . $post_id . '&back=' . $back;
         $vars['parent_post_url'] = $_SERVER['REQUEST_URI'] . '#post_' . SafeDB($post['post_parent_id'], 11, int);
         $vars['post_url'] = $_SERVER['REQUEST_URI'] . '#post_' . $post_id;
         System::site()->AddSubBlock($BlockName, true, $vars, array(), $this->PostTemplate);
         if (isset($this->PostsTree[$post_id])) {
             if ($this->MaxTreeLevel > $Level) {
                 $newLevel = $Level + 1;
             } else {
                 $newLevel = $Level;
             }
             $this->RenderPost($ObjectId, $this->PostsTree[$post_id], $BlockName, $newLevel);
         }
     }
     return true;
 }
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);
    }
}
 public function UpdateAvatarData($user_id)
 {
     $avatar = GetUserAvatar($user_id);
     $this->Def('u_avatar', $avatar);
     $this->Def('u_avatar_small', GetSmallUserAvatar($user_id, $avatar));
     $this->Def('u_avatar_smallest', GetSmallestUserAvatar($user_id, $avatar));
 }