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;
 }
/**
 * Генерирует форму редактирования пользователя в админ-панели.
 *
 * @param  $save_link Ссылка на обработчик формы (имя модуля и параметр action)
 * @param string $a Добавление или редавтирование пользователя (edit or add)
 * @param int $id Идентификатор пользователя
 * @param bool $isadmin Редактирование администратора (влияет на выборку и отключает активацию по email)
 * @param bool $EditProfile Редактирование своего профиля администратором (не может изменить свой статус если не системный администратор)
 * @return
 */
function AdminUserEditor($save_link, $a = 'add', $id = '0', $isadmin = false)
{
    $active = array(false, false, false);
    $SystemAdmin = System::user()->isSuperUser();
    $edit = $a == 'edit';
    $editProfile = $edit && !$SystemAdmin && $id == System::user()->Get('u_id');
    // Администратор редактирует свой профиль
    $editStatus = false;
    // Разрешено редактирование статуса
    $editType = false;
    // Разрешено редавтировать тип пользователя
    // Загружаем данные пользователя из БД
    if ($edit) {
        $user = System::database()->SelectOne('users', "`id`='{$id}'" . ($isadmin ? " and `type`='1'" : " and `type`='2'"));
        if (!$user) {
            AddTextBox('Ошибка', '<p align="center">Пользователь не найден, либо у вас не достаточно прав для редактирования администраторов.</p>');
            return;
        }
    }
    // Устатанавливаем ограничения доступа
    if ($isadmin) {
        // Редатируем администратора
        if ($SystemAdmin) {
            // Только системные администаторы могут редактировать статус и тип администраторов
            if (!(groupIsSystem(SafeEnv($user['access'], 11, int)) && GetSystemAdminsCount() <= 1)) {
                // Если он не системный или системных больше 1
                $editStatus = true;
            }
            $editType = $editStatus;
        }
    } else {
        // Если пользователь
        $editStatus = true;
        // Все администраторы с доступом могут редактировать статус пользователя
        $editType = $SystemAdmin;
        // Только системные администраторы могут создавать администраторов
    }
    if ($editType) {
        $user_types_db = System::database()->Select('usertypes');
        $types = array('member' => array('member', 'Пользователь', false));
        foreach ($user_types_db as $type) {
            $types[$type['id']] = array(SafeDB($type['id'], 11, int), SafeDB($type['name'], 255, str), false);
        }
    }
    if ($edit) {
        $login = SafeDB($user['login'], 30, str);
        $mail = SafeDB($user['email'], 50, str);
        $hideemail = $user['hideemail'] == 1 ? true : false;
        $snews = $user['servernews'] == 1 ? true : false;
        $name = SafeDB($user['name'], 50, str);
        $tname = SafeDB($user['truename'], 250, str);
        $age = SafeDB($user['age'], 11, str);
        $city = SafeDB($user['city'], 100, str);
        $url = SafeDB($user['url'], 250, str);
        $icq = SafeDB($user['icq'], 15, str);
        $gmt = SafeDB($user['timezone'], 255, str);
        $about = SafeDB($user['about'], 0, str);
        $avatar = SafeDB($user['avatar'], 250, str);
        $apersonal = SafeDB($user['a_personal'], 1, int);
        if ($editStatus) {
            if ($user['active'] == '1') {
                $active[0] = true;
            } elseif ($user['active'] == '0' && $user['activate'] == '') {
                $active[1] = true;
            } elseif ($user['active'] == '0' && $user['activate'] != '') {
                $active[2] = true;
            }
        }
        if ($editType) {
            if ($user['type'] == '1') {
                $types[$user['access']][2] = true;
            } else {
                $types['member'][2] = true;
                //пользователь
            }
        }
        $caption = 'Сохранить';
        if ($isadmin) {
            if ($editProfile) {
                $title = 'Редактирование профиля';
            } else {
                $title = 'Редактирование администратора';
            }
        } else {
            $title = 'Редактирование пользователя';
        }
    } else {
        $login = '';
        $mail = '';
        $snews = false;
        $hideemail = false;
        $name = '';
        $tname = '';
        $age = '';
        $city = '';
        $url = '';
        $icq = '';
        $gmt = System::config('general/default_timezone');
        $about = '';
        $avatar = '';
        $apersonal = '0';
        if ($editStatus) {
            $active[0] = true;
        }
        if ($editType) {
            $types['member'][2] = true;
        }
        $caption = 'Добавить';
        $title = 'Добавить пользователя';
    }
    FormRow('Логин', System::site()->Edit('login', $login, false, 'style="width:400px;" class="autofocus"'));
    FormRow('Пароль', System::site()->Edit('pass', '', true, 'style="width:400px;"'));
    FormRow('Повторите пароль<br /><small>(для проверки)</small>', System::site()->Edit('rpass', '', true, 'style="width:400px;"'));
    FormRow('E-mail', System::site()->Edit('email', $mail, false, 'style="width:300px;"') . ' <label for="hideemail">Скрыть</label>&nbsp;' . System::site()->Check('hideemail', '1', $hideemail, 'id="hideemail"'));
    FormRow('<label for="snews">Рассылка</label>', System::site()->Check('snews', '1', $snews, 'id="snews"'));
    FormRow('Ник', System::site()->Edit('nikname', $name, false, 'style="width:400px;"'));
    FormRow('Настоящее имя', System::site()->Edit('realname', $tname, false, 'style="width:400px;"'));
    FormRow('Возраст', System::site()->Edit('age', $age, false, 'style="width:400px;"'));
    FormRow('Город', System::site()->Edit('city', $city, false, 'style="width:400px;"'));
    FormRow('Сайт', System::site()->Edit('homepage', $url, false, 'style="width:400px;"'));
    FormRow('ICQ', System::site()->Edit('icq', $icq, false, 'style="width:400px;"'));
    $gmt = GetGmtData($gmt);
    FormRow('Часовой пояс', System::site()->Select('gmt', $gmt, false, 'style="width:400px;"'));
    FormRow('О себе', System::site()->TextArea('about', $about, 'style="width:400px; height:200px;"'));
    $avatars = GetGalleryAvatarsData($avatar, $apersonal);
    if ($apersonal == '1') {
        $selected = GetPersonalAvatar($id);
    } else {
        $selected = GetGalleryAvatar($avatars[1]);
    }
    System::site()->AddJS('
	ShowAvatar = function(){
		if(document.userform.avatar.value==\'\'){
			document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&user='******'general/personal_avatars_dir') . $avatar) . '\';
		}else{
			document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&aname=' : System::config('general/avatars_dir')) . '\'+document.userform.avatar.value;
		}
	}');
    FormRow('Аватар', System::site()->Select('avatar', $avatars[0], false, 'onchange="ShowAvatar();"'));
    FormRow('', '<img id="avatarview" src="' . $selected . '" border="0">');
    FormRow('Загрузить аватар', System::site()->FFile('upavatar'));
    if ($editStatus) {
        FormRow('Активация', System::site()->Radio('activate', 'auto', $active[0]) . 'Активировать' . System::site()->Radio('activate', 'manual', $active[1]) . 'Не активировать' . (!$isadmin ? System::site()->Radio('activate', 'mail', $active[2]) . 'По E-mail' : ''));
    }
    if ($editType) {
        $user_types = array();
        foreach ($types as $type) {
            System::site()->DataAdd($user_types, $type[0], $type[1], $type[2]);
        }
        FormRow('Статус', System::site()->Select('status', $user_types));
    }
    TAddSubTitle($title);
    AddCenterBox($title);
    AddForm('<form name="userform" action="' . ADMIN_FILE . '?exe=' . $save_link . '&id=' . $id . '" method="post"  enctype="multipart/form-data">', System::site()->Button('Отмена', 'onclick="history.go(-1);"') . System::site()->Submit($caption));
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$user_id = null;
$avatar = '';
if (isset($_GET['user'])) {
    // Аватар из профиля пользователя
    $user_id = SafeEnv($_GET['user'], 11, int);
    $avatar = GetPersonalAvatar($user_id, true);
} elseif (isset($_GET['aname'])) {
    // Передано имя файла аватара в папке с аватарами
    $avatar = GetGalleryAvatar($_GET['aname']);
} else {
    System::log('Plugin::render_avatar Скрипт вызван без параметров.');
}
if ($avatar == '' || !is_file($avatar)) {
    $avatar = GetGalleryAvatar('noavatar.gif');
}
// Создаём уменьшенную копию аватара, если нужно и отправляем пользователю
if (isset($_GET['size'])) {
    switch ($_GET['size']) {
        case 'small':
            $avatar_64 = System::config('general/personal_avatars_dir') . GetFileName($avatar, true) . '_64x64' . GetFileExt($avatar);
            if (is_file($avatar_64)) {
function IndexForumShowTopic($one_post = false)
{
    global $forum_lang;
    $forums_tree = ForumTree::Instance();
    // Вспомогательные переменные
    $user_auth = System::user()->Auth;
    $user_id = System::user()->Get('u_id');
    $user_admin = System::user()->isAdmin();
    $time = time();
    $max_word_length = System::config('forum/max_word_length');
    if (isset($_GET['topic'])) {
        $topic_id = SafeEnv($_GET['topic'], 11, int);
    } else {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']);
        return;
    }
    // Берём тему и проверяем на доступ
    System::database()->Select('forum_topics', "`id`='" . $topic_id . "'");
    if (System::database()->NumRows() == 0) {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']);
        return;
    }
    $topic = System::database()->FetchRow();
    if (!$user_admin && $topic['starter_id'] == $user_id && $topic['delete'] == '1') {
        // Тема удалена в корзину (только админы видят корзину и автор темы)
        System::site()->AddTextBox($forum_lang['topic_basket_current_post'], '<p align="center">' . $forum_lang['topic_basket_post'] . '.<br><input type="button" value="' . $forum_lang['back'] . '"onclick="history.back();"></p>');
        return;
    }
    // Проверяем доступ к форуму
    $forum_id = SafeEnv($topic['forum_id'], 11, int);
    $forum_config = $forums_tree->GetForumConfigRecursive($forum_id);
    // Параметры доступа на форум
    if (!$forum_config['access']) {
        System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']);
        // Нет доступа в этот форум
        return;
    }
    // $forum_config['add_post'] - право добавлять сообщения
    // $forum_config['add_post_reason'] - причина запрета добавления сообщений
    // $forum_config['no_link_guest'] - скрывать ссылки от гостей
    // $forum_config['new_message_email'] - разрешить подписку на новые сообщения
    // Определяем следующую и предыдущую темы
    $topics_data = ForumCacheGetTopics();
    $topics_data = $topics_data[$forum_id];
    $prev_topic = null;
    $next_topic = null;
    $find = false;
    foreach ($topics_data as $topic_row) {
        if ($topic_row['id'] == $topic_id) {
            $find = true;
            continue;
        }
        if ($find) {
            $next_topic = $topic_row;
            break;
        }
        $prev_topic = $topic_row;
    }
    // Параметры постраничной навигации
    if (isset($_GET['page'])) {
        $page = SafeEnv($_GET['page'], 11, int);
    } else {
        $page = 1;
    }
    if (isset($_GET['view']) && $_GET['view'] == 'lastpost') {
        $lastpost = true;
    } else {
        $lastpost = false;
    }
    $posts_on_page = System::config('forum/posts_on_page');
    // Обновляем метку о прочтении темы, если пользователь авторизован
    if ($user_auth) {
        System::database()->Delete('forum_topics_read', "`tid`='{$topic_id}' and `mid`='{$user_id}'");
        System::database()->Insert('forum_topics_read', "'{$user_id}','{$topic_id}','{$time}'");
    }
    // Объект онлайн
    $online = ForumOnline::Instance($forum_id, $topic_id);
    // Устанавливаем заголовок страницы
    $topic_title = SafeDB($topic['title'], 255, str);
    System::site()->SetTitle($topic_title . ($page > 1 ? ' - Страница ' . $page : ''));
    // Хлебные крошки
    $forums_tree->BreadCrumbsF($forum_id);
    System::site()->BreadCrumbAdd(SafeDB($topic['title'], 255, str));
    // Добавляем корзину (если тема удалена в корзину)
    if ($topic['delete'] == '1') {
        $basket_topics = ForumBasketGetData('forum_basket_topics');
        if (isset($basket_topics[$topic['id']])) {
            System::site()->AddTextBox($forum_lang['topic_basket_red'], ForumBasketRender($topic['id'], $topic['title'], $basket_topics, true));
        }
    }
    // Увеличиваем счётчик просмотров
    System::database()->Update('forum_topics', "`hits`='" . (SafeDB($topic['hits'], 11, int) + 1) . "'", "`id`='" . $topic_id . "'");
    // Инициализируем постраничную навигацию
    $navigation = new Navigation($page);
    $navigation->FrendlyUrl = System::config('general/ufu');
    // Загружаем сообщения из базы данных
    $basket_where = '';
    // Администратор (подготавливаем запрос выборки т.к. нужно знать сколько всего сообщений для постр. навигации)
    if ($user_auth) {
        if (!$user_admin) {
            $basket_where = " and (`delete`='0' or `user_id`='{$user_id}')";
            // Пользователь
        }
    } else {
        $basket_where = " and `delete`='0'";
        // Гость
    }
    $posts = System::database()->Select('forum_posts', ($one_post !== false ? "`id`='{$one_post}'" : "`object`='{$topic_id}'") . $basket_where);
    SortArray($posts, 'public', false);
    //Сортируем по дате
    // Вывод постраничной навигации
    if (count($posts) > $posts_on_page) {
        if ($lastpost) {
            $page = ceil(count($posts) / $posts_on_page);
        }
        $navigation->GenNavigationMenu($posts, $posts_on_page, Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id, 'forum/topic' . $topic_id . '-{page}.html', true), $page);
    } else {
        $navigation->DisableNavigation();
    }
    // Загружаем корзину для сообщений
    $basket = ForumBasketGetData('forum_basket_post');
    // Блок с информацией о теме
    System::site()->AddBlock('topic', true, false);
    System::site()->SetVars('topic', ForumTopicFilterData($topic));
    // Блок шаблонизатора для вывода сообщений
    System::site()->AddBlock('forum_posts', true, true, 'post');
    $is_forum_member = AccessIsResolved(2);
    // Для определения первого и последнего сообщения
    $i = 1;
    // Выводим сообщения в шаблонизатор
    foreach ($posts as $post) {
        $post_user_id = SafeDB($post['user_id'], 11, int);
        if ($post_user_id == 0) {
            continue;
        }
        $vars = array();
        // Обрабатываем текст сообщения
        if ($post['delete'] == '1') {
            // Сообщение удалено в корзину
            $vars['text'] = ForumBasketRender($post['id'], $post['message'], $basket);
        } else {
            $vars['text'] = HtmlChars($post['message']);
            if ($forum_config['no_link_guest']) {
                // Скрываем ссылки от гостей
                $replace = '<p class="notice">' . $forum_lang['hide_links_for_guests'] . '</p>';
                $vars['text'] = preg_replace('/\\<a[^\\>]*?(http|https|ftp|www)(.*?)\\<\\/a\\>/is', $replace, $vars['text']);
                $vars['text'] = preg_replace('/(http:\\/\\/|https:\\/\\/|ftp:\\/\\/|www\\.)?([a-zA-Z0-9]+)\\.(ru|su|com|org|net|info|name|ws|cc|tv|tel|kz|biz|mobi|asia|me|tw|ua)+([а-яА-Яa-zA-Z0-9\'~;,@#%&_\\!\\$\\^\\*\\(\\)\\-\\=\\+\\?\\.\\:\\/\\\\]*)?/is', $replace, $vars['text']);
            }
            SmiliesReplace($vars['text']);
            $vars['text'] = nl2br($vars['text']);
            $vars['text'] = BbCodePrepare($vars['text']);
            if ($max_word_length > 0) {
                $vars['text'] = word_wrapped_string($vars['text'], $max_word_length);
            }
        }
        // Обрабатываем данные сообщения
        // Пользователь
        $user_info = GetUserInfo($post_user_id);
        $vars['usertopics'] = '<a href="' . Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}/') . '">' . $forum_lang['allusertopics'] . '</a>';
        if ($user_info['rank_name'] != '') {
            $vars['author'] = '<a href="' . Ufu('index.php?name=user&op=userinfo&user='******'user/{user}/info/') . '">' . $user_info['name'] . '</a>';
            $vars['author_name'] = $user_info['name'];
        } else {
            $vars['author'] = $post['name'];
            $vars['author_name'] = $post['name'];
        }
        if ($user_info['hideemail'] == '0') {
            $vars['email'] = AntispamEmail($user_info['email']);
        } else {
            $vars['email'] = '&nbsp;';
        }
        if ($user_info['url'] != '') {
            $vars['homepage'] = '<a href="http://' . $user_info['url'] . '" target="_blank">' . $user_info['url'] . '</a>';
        } else {
            $vars['homepage'] = '&nbsp;';
        }
        $vars['icq'] = $user_info['icq'];
        if ($user_info['online']) {
            $vars['status'] = $forum_lang['user_online'];
        } else {
            $vars['status'] = '';
        }
        $vars['rank_image'] = $user_info['rank_image'] != '' ? $user_info['rank_image'] : '';
        $vars['rank_name'] = $user_info['rank_name'] != '' ? $user_info['rank_name'] : '';
        $vars['avatar'] = $user_info['avatar_file'] != '' ? $user_info['avatar_file'] : GetPersonalAvatar(0);
        $vars['regdate'] = TimeRender($user_info['regdate'], false, true);
        if (isset($user_info['data']['forum_counters'])) {
            $vars['user_posts_count'] = $user_info['data']['forum_counters']['posts'];
            $vars['user_topics_count'] = $user_info['data']['forum_counters']['topics'];
        } else {
            $vars['user_posts_count'] = '0';
            $vars['user_topics_count'] = '0';
        }
        // Сообщение
        $vars['public'] = $forum_lang['added'] . TimeRender($post['public']);
        $vars['public_date'] = TimeRender($post['public']);
        $vars['ip'] = SafeDB($post['user_ip'], 19, str);
        $vars['topic_id'] = $topic_id;
        $vars['id'] = SafeDB($post['id'], 11, int);
        $vars['nodelete'] = SafeDB($post['delete'], 1, int) == 1 ? false : true;
        $vars['is_admin_and_nodelete'] = $vars['nodelete'] && $user_admin;
        $vars['page'] = $page;
        // is_current_user Пользователь является владельцем сообщения (кнопки редактировать и удалить)
        if ($post['delete'] == '0') {
            $vars['is_current_user'] = $user_id == $post['user_id'] && $topic['close_topics'] == '0' || $user_admin;
        } else {
            $vars['is_current_user'] = false;
        }
        if ($one_post === false) {
            $vars['num'] = $page > 1 ? $page * $posts_on_page - $posts_on_page + $i : $i;
            $vars['url'] = "javascript:link_post('" . GetSiteUrl() . Ufu("index.php?name=forum&op=post&topic=" . $topic_id . "&post=" . $post['id'], 'forum/t{topic}/post{post}.html') . "')";
        } else {
            $vars['num'] = '';
            $vars['url'] = 'javascript:history.go(-1)';
        }
        $vars['is_forum_member'] = $is_forum_member;
        System::site()->AddSubBlock('forum_posts', true, $vars, array(), 'module/forum_post.html');
        $i++;
    }
    // Форма добавления сообщений
    System::site()->AddBlock('post_form', $forum_config['add_post'], false);
    ForumRenderPostForm(false, $forum_id, $topic_id, 0, '', '', $is_forum_member);
    // Подписка на тему
    System::site()->AddBlock('subscription', $forum_config['new_message_email'], false, 'subs');
    $vars_subs = array();
    $vars_subs['topic'] = $topic_id;
    $vars_subs['sub_status'] = Forum_Subscription_Status($topic_id);
    $vars_subs['status'] = $vars_subs['sub_status'] ? 'Отписаться от этой темы' : 'Подписаться на эту тему';
    System::site()->SetVars('subscription', $vars_subs);
    System::site()->AddBlock('is_forum_member', $is_forum_member, false, 'marker');
    System::site()->SetVars('is_forum_member', array('id' => $topic_id));
    // Подключаем шаблон
    System::site()->AddTemplatedBox('', 'module/forum_showtopic.html');
    // Выводим блок онлайн
    $online->Render($forum_id, $topic_id, $forum_lang['current_online'], 'forum_online');
    // Предыдущая и следующая тема
    System::site()->AddBlock('forum_prev_topic', isset($prev_topic), false, 'topic');
    if (isset($prev_topic)) {
        System::site()->SetVars('forum_prev_topic', array('url' => Ufu('index.php?name=forum&op=showtopic&topic=' . SafeDB($prev_topic['id'], 11, int), 'forum/topic{topic}.html'), 'title' => SafeDB($prev_topic['title'], 255, str), 'lang_prev_topic' => $forum_lang['prev_topic']));
    }
    System::site()->AddBlock('forum_next_topic', isset($next_topic), false, 'topic');
    if (isset($next_topic)) {
        System::site()->SetVars('forum_next_topic', array('url' => Ufu('index.php?name=forum&op=showtopic&topic=' . SafeDB($next_topic['id'], 11, int), 'forum/topic{topic}.html'), 'title' => SafeDB($next_topic['title'], 255, str), 'lang_next_topic' => $forum_lang['next_topic']));
    }
    // Быстрый переход по форумам
    ForumQuickTransitionBox($forum_id, $forum_lang['quick_transition']);
}
function AdminCommentsMain()
{
    System::admin()->AddCenterBox('Глобальная модерация комментариев');
    if (isset($_GET['page'])) {
        $page = SafeEnv($_GET['page'], 10, int);
    } else {
        $page = 1;
    }
    System::admin()->AddJS('
		UpdateSelectComment = function(){
			$(".comment_check").each(function(){
				$("#comment"+$(this).val()).removeClass("commtable_selected");
			});
			$(".comment_check:checked").each(function(){
				$("#comment"+$(this).val()).addClass("commtable_selected");
			});
		};
		SelectAllComments = function(){
			$(".comment_check").each(function(){
				$(this).attr("checked", true);
			});
			UpdateSelectComment();
		};
		DeleteComments = function(){
			var del = "";
			$(".comment_check:checked").each(function(){
				del += "#"+$(this).val();
			});
			Admin.LoadPagePost("' . ADMIN_FILE . '?exe=comments&a=delete&page=' . $page . '", {delcomments: del}, "Удаление...");
		};
	');
    $commentsOnPage = 50;
    // Выбираем комментарии из всех таблиц
    $where = '';
    $posts = array();
    $comments_tables = System::database()->Select('comments');
    foreach ($comments_tables as $table) {
        $temp_posts = System::database()->Select($table['table'], $where);
        AdminConfigMarkPosts($temp_posts, $table);
        $posts = array_merge($posts, $temp_posts);
    }
    // Сортируем комментарии по дате(Новые сверху)
    SortArray($posts, 'post_date', true);
    // Добавляем постраничную навигацию
    if (count($posts) > $commentsOnPage) {
        $navigator = new Navigation($page);
        $navigator->GenNavigationMenu($posts, $commentsOnPage, ADMIN_FILE . '?exe=comments');
        $nav = true;
    } else {
        $nav = false;
        AddText('<br />');
    }
    // Шапка
    if (count($posts) == 0) {
        System::admin()->Highlight('На сайте нет комментариев.');
        return;
    } else {
        $text = '';
    }
    $text .= '<table cellspacing="0" cellpadding="0" width="90%" align="center" class="commtable_header">
	<tr>
	<th style="width: 160px;">Пользователь</th>
	<th style="width: 260px;">E-mail</th>
	<th style="width: 260px;">Сайт</th>
	<th style="width: 260px;">Дата и время</th>
	<th style="width: 70px;">IP</th>
	<th>Функции</th>
	</tr></table>';
    // Выводим комментарии
    foreach ($posts as $post) {
        $post_id = SafeDB($post['id'], 11, int);
        $object_id = SafeDB($post['object_id'], 11, int);
        $user_id = SafeDB($post['user_id'], 11, int);
        $user_name = SafeDB($post['user_name'], 255, str);
        $user_homepage = SafeDB($post['user_homepage'], 255, str);
        $user_email = SafeDB($post['user_email'], 255, str);
        $user_ip = SafeDB($post['user_ip'], 19, str);
        $post_date = TimeRender($post['post_date']);
        $post_message = SafeDB($post['post_message'], 0, str, false);
        $post_message = nl2br($post_message);
        $edit = ADMIN_FILE . '?exe=comments&a=edit&id=' . $post_id . '&table=' . $post['_table'] . '&page=' . $page;
        if ($user_id != 0) {
            $userinfo = GetUserInfo($user_id);
            $user_name = $userinfo['name'];
            $user_homepage = $userinfo['url'];
            $user_email = PrintEmail($userinfo['email']);
            if ($userinfo['online']) {
                $online = '<b>Сейчас на сайте.</b>';
            } else {
                $online = '';
            }
            $avatar = '<img src="' . $userinfo['avatar_file'] . '" />';
            $rank_image = '<img src="' . $userinfo['rank_image'] . '" />';
            $rank_name = $userinfo['rank_name'];
            $regdate = 'Зарегистрирован: ' . TimeRender($userinfo['regdate'], false);
            $ruser = true;
        } else {
            $user_email = PrintEmail($user_email);
            $online = '';
            $avatar = '<img src="' . GetPersonalAvatar(0) . '" />';
            $rank_image = '';
            $rank_name = '';
            $regdate = '';
            $ruser = false;
        }
        if ($user_homepage != '') {
            $user_homepage = '<a href="http://' . $user_homepage . '" target="_blank">' . $user_homepage . '</a>';
        } else {
            $user_homepage = '&nbsp;';
        }
        if ($ruser) {
            $user_name = '<a href="' . Ufu("index.php?name=user&op=userinfo&user={$user_id}", 'user/{user}/info/') . '" target="_blank">' . $user_name . '</a>';
        }
        $link_go = ADMIN_FILE . '?exe=comments&a=find&table=' . SafeDB($post['_id'], 11, int) . '&post_id=' . $post_id;
        $func = '';
        if ($post['_url'] != '') {
            $func .= System::admin()->SpeedButton('Найти комментарий', $link_go, 'images/search.png', false, false, 'target="_blank"');
        }
        $func .= SpeedButton('Редактировать', $edit, 'images/admin/edit.png');
        $text .= Indent('
			<table cellspacing="0" cellpadding="0" width="90%" align="center" class="commtable" id="comment' . $post_id . '--' . $post['_table'] . '--' . $object_id . '">
				<tr>
					<th style="width: 160px;"><b>' . $user_name . '</b></th>
					<th style="width: 260px;">' . $user_email . '</th>
					<th style="width: 260px;">' . $user_homepage . '</th>
					<th style="width: 260px;">' . $post_date . '</th>
					<th style="width: 70px;">' . $user_ip . '</th>
					<th>' . $func . '</th>
					<th>' . System::admin()->Check('delcomments[]', $post_id . '--' . $post['_table'] . '--' . $object_id, false, 'class="comment_check" onchange="UpdateSelectComment();"') . '</th>
				</tr>
				<tr>
					<td valign="top" width="140">' . $avatar . '<br>' . $rank_image . '<br>' . $rank_name . '</td>
					<td colspan="6" class="commtable_text">' . $post_message . '</td>
				</tr>
			</table>
		');
    }
    // Подвал
    AddText($text);
    if ($nav) {
        AddNavigation();
    }
    $text = '';
    if (count($posts) > 0) {
        $text .= '<div style="text-align: right;">' . System::admin()->SpeedConfirmJs('Выделить все', 'SelectAllComments();', '', '', true) . '&nbsp;' . System::admin()->SpeedConfirmJs('Удалить выделенные', 'DeleteComments();', 'images/admin/delete.png', 'Удалить выделенные комментарии?', true) . '</div>';
    }
    AddText($text);
}
function IndexUserRegistration($acceptPost = false, $edit = false)
{
    if (!$edit) {
        System::user()->UnLogin(false);
    } else {
        if (!System::user()->Auth) {
            System::site()->Login();
            return;
        }
    }
    System::site()->AddJS(Indent('
		function checkData(f){
			if(f.login.value = \'\'){
				alert("Логин должен быть не менее ' . System::config('user/login_min_length') . ' и не более 15 символов.");
				f.login.focus();
				return false;
			}
		}
	'));
    if (!$edit && System::config('user/registration') == 'off') {
        System::site()->AddTextBox('Ошибка', '<p align="center">Извините, регистрация приостановлена.</p>');
        return;
    }
    if ($acceptPost) {
        AcceptPost($login, $pass, $rpass, $email, $hideemail, $nikname, $realname, $age, $homepage, $icq, $city, $avatar, $apersonal, $gmt, $about, $snews);
    } elseif ($edit) {
        GetEditUserData($login, $email, $hideemail, $nikname, $realname, $age, $homepage, $icq, $city, $avatar, $apersonal, $gmt, $about, $snews);
        $pass = '';
        $rpass = '';
    } else {
        $login = '';
        $pass = '';
        $rpass = '';
        $email = '';
        $hideemail = false;
        $nikname = '';
        $realname = '';
        $age = '';
        $homepage = '';
        $icq = '';
        $city = '';
        $avatar = 'noavatar.gif';
        $apersonal = '0';
        $gmt = System::config('general/default_timezone');
        $about = '';
        $snews = false;
    }
    //Генерируем текст формы
    System::site()->AddBlock('user_form', true, false, 'form');
    $vars = array();
    if ($edit) {
        $vars['action'] = 'update';
        $vars['laction'] = 'Сохранить';
        $topcaption = 'Данные пользователя';
    } else {
        $vars['action'] = 'create';
        $vars['laction'] = 'Зарегистрироваться';
        $topcaption = 'Регистрация';
    }
    $fields = explode(',', System::config('user/register_call_data'));
    //email,snews,realname,age,city,icq,gmt,about
    $activate = System::config('user/activate_type');
    //auto, mail, manual
    $vars['form_name'] = 'userform';
    $vars['url'] = Ufu('index.php?name=user&op=registration', 'user/{op}/');
    $vars['enctype'] = 'multipart/form-data';
    $vars['llogin'] = '******';
    $vars['login'] = $login;
    $vars['lpass'] = '******';
    $vars['pass'] = $pass;
    $vars['lrpass'] = '******';
    $vars['rpass'] = $rpass;
    $vars['lnikname'] = 'Ваше имя на сайте <font color="#FF0000">*</font>';
    $vars['nikname'] = $nikname;
    $vars['lrealname'] = 'Настоящее имя(Ф.И.О.)';
    $vars['realname'] = $realname;
    $vars['use_realname'] = in_array('realname', $fields) || $edit;
    $vars['lemail'] = 'E-mail <font color="#FF0000">*</font>';
    $vars['email'] = $email;
    $vars['lhideemail'] = 'Скрыть e-mail';
    $vars['hideemail'] = $hideemail ? ' checked="checked"' : '';
    $vars['use_email'] = in_array('email', $fields) || $activate == 'mail' || $edit;
    $vars['lage'] = 'Возраст';
    $vars['age'] = $age;
    $vars['use_age'] = in_array('age', $fields) || $edit;
    $vars['lhomepage'] = 'Сайт';
    $vars['homepage'] = $homepage;
    $vars['use_homepage'] = in_array('homepage', $fields) || $edit;
    $vars['licq'] = 'Номер ICQ';
    $vars['icq'] = $icq;
    $vars['use_icq'] = in_array('icq', $fields) || $edit;
    $vars['lcity'] = 'Город';
    $vars['city'] = $city;
    $vars['use_city'] = in_array('city', $fields) || $edit;
    $vars['lavatar'] = 'Аватар';
    $vars['lload_avatar'] = 'Загрузить аватар<br>(Размеры картинки могут быть автоматически уменьшены. Допустимые форматы: gif, jpeg, png.)';
    $vars['avatar_onchange_func'] = 'ShowAvatar()';
    $vars['avatar_filename'] = $avatar;
    $vars['use_avatar'] = in_array('avatar', $fields) || $edit;
    if ($vars['use_avatar']) {
        System::site()->AddBlock('avatars', true, true, 'avatar');
        $avatars = GetFiles(System::config('general/avatars_dir'), false, true, '.gif.jpg.jpeg.png');
        if ($apersonal == '1') {
            $selected = GetPersonalAvatar(System::user()->Get('u_id'));
        } elseif ($edit) {
            $selected = GetGalleryAvatar($avatar);
        } else {
            $selected = GetGalleryAvatar($avatars[1]);
        }
        if ($apersonal == '1') {
            System::site()->AddSubBlock('avatars', true, array('name' => '', 'caption' => 'Персональный', 'selected' => true));
        }
        for ($i = 0, $c = count($avatars); $i < $c; $i++) {
            $avars = array();
            $sel = $avatar == $avatars[$i];
            $avars['name'] = $avatars[$i];
            $avars['selected'] = $sel;
            $avars['caption'] = $avatars[$i];
            System::site()->AddSubBlock('avatars', true, $avars);
        }
        $vars['av_selected'] = $selected;
        System::site()->AddJS('
			function ShowAvatar(){
				if(document.userform.avatar.value==\'\'){
					document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&user='******'u_id') : System::config('general/personal_avatars_dir') . $avatar) . '\';
				}else{
					document.userform.avatarview.src = \'' . (System::config('user/secure_avatar_upload') ? 'index.php?name=plugins&p=avatars_render&aname=' : System::config('general/avatars_dir')) . '\'+document.userform.avatar.value;
				}
			}');
    }
    $vars['lgmt'] = 'Часовой пояс';
    $vars['use_gmt'] = in_array('gmt', $fields) || $edit;
    if ($vars['use_gmt']) {
        $gmtd = GetGmtArray();
        System::site()->AddBlock('gmt_data', true, true, 'gmt');
        for ($i = 0, $c = count($gmtd); $i < $c; $i++) {
            $gvars['name'] = $gmtd[$i][1];
            $gvars['caption'] = $gmtd[$i][0];
            $gvars['selected'] = $gmt == $gmtd[$i][1];
            System::site()->AddSubBlock('gmt_data', true, $gvars);
        }
    }
    $vars['labout'] = 'Немного о себе';
    $vars['about'] = $about;
    $vars['use_about'] = in_array('about', $fields) || $edit;
    $vars['kaptcha_url'] = 'index.php?name=plugins&p=antibot';
    $vars['kaptcha_width'] = '120';
    $vars['kaptcha_height'] = '40';
    $vars['lsnews'] = 'Разрешить администраторам сайта присылать Вам уведомления по электронной почте';
    $vars['snews'] = $snews ? ' checked="checked"' : '';
    $vars['use_snews'] = in_array('snews', $fields) || $edit;
    System::site()->AddTemplatedBox($topcaption, 'module/user_form.html');
    System::site()->SetTitle($topcaption);
    System::site()->Blocks['user_form']['vars'] = $vars;
}