function IndexForumUserTopics() { global $forum_lang; $forums_tree = ForumTree::Instance(); // Проверка данных if (isset($_GET['user'])) { $user_id = SafeEnv($_GET['user'], 11, int); $user = GetUserInfo($user_id); if ($user === false) { // Пользователь не найден System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_user']); return; } } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_data']); // Нет параметра return; } // Параметры постраничной навигации if (isset($_GET['page'])) { $page = SafeEnv($_GET['page'], 11, int); } else { $page = 1; } $topics_on_page = System::config('forum/topics_on_page'); // Устанавливаем заголовок страницы $function_title = $forum_lang['allusertopics'] . ' "' . $user['name'] . '"'; System::site()->SetTitle(SafeDB($function_title, 255, str) . ' - ' . ($page > 1 ? $forum_lang['page'] . $page . ' - ' : '') . $forum_lang['forum']); $forum_nav_url = Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}-{page}/', true); //$forum_url = Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}/'); // Объекты статистики и онлайн $statistics = ForumStatistics::Instance(); $online = ForumOnline::Instance('0', '0', true); // Обновляем статус онлайн // Инициализируем статистику $statistics->Initialize($forum_lang['statistics_cat']); // Хлебные крошки System::site()->BreadCrumbAdd($function_title); $auth = System::user()->Auth; $is_admin = System::user()->isAdmin(); $current_user_id = System::user()->Get('u_id'); // Загружаем данные корзины для видимых топиков $basket = ForumBasketGetData('forum_basket_topics'); // Загружаем информацию по топикам в $topics_data и считаем статистику (кэшировать статистику) $topics_data = ForumCacheGetTopics(); // Запрашиваем данные тем (агрегированы по форумам) $topics = array(); // Сюда будем добавлять топики для вывода $resolve_cats = $forums_tree->GetAllAccessForumId(0); // Считаем только в открытых для доступа форумах foreach ($resolve_cats as $resolve_cat) { if (!isset($topics_data[$resolve_cat])) { continue; } foreach ($topics_data[$resolve_cat] as $topic) { // Отсеиваем if ($topic['starter_id'] == $user_id) { // Добавляем данные из корзины, если топик удалён в корзину $topic['status'] = ''; $topic['show_delete'] = $is_admin; if ($topic['delete'] && isset($basket[$topic['id']]) && $auth && ($is_admin || $topic['starter_id'] == $current_user_id)) { // Добавляем сообщение - "Удалено в корзину" $topic['status'] = ForumBasketRender($topic['id'], $topic['title'], $basket, false); $topic['show_delete'] = false; } elseif ($topic['delete']) { continue; // Удалён топик и корзина не показывается для этого пользователя } $statistics->hits += $topic['hits']; $statistics->AddTopicAuthor($topic['starter_id'], $topic['starter_name']); $statistics->topics_count += 1; $statistics->reply_count += $topic['posts']; $topics[] = $topic; } } } unset($topics_data); // Заголовки (Темы, Ответов, Просмотры) System::site()->AddBlock('statistik', true, false, 'stat'); System::site()->SetVars('statistik', array('count_read' => '')); // Отключаем некоторые блоки System::site()->AddBlock('topic_form', false, false, 'form'); System::site()->AddBlock('topic_right', false, false, 'topic'); System::site()->AddBlock('forum', false); System::site()->AddBlock('forum_guest_message', false); // Блоки шаблона // Ссылки, Отметить все как прочитанные и показать все не прочитанные темы. $vars_is_forum_member = array(); $vars_is_forum_member['url'] = '<a href="' . Ufu('index.php?name=forum&op=markread', 'forum/markread/') . '">' . $forum_lang['mark_all_read'] . '</a>'; $vars_is_forum_member['viewnoreadurl'] = '<a href="' . Ufu('index.php?name=forum&op=viewnoread', 'forum/viewnoread/') . '">' . $forum_lang['viewnoread'] . '</a>'; $vars_is_forum_member['forum_id'] = '0'; if (!System::site()->HasBlock('is_forum_member')) { System::site()->AddBlock('is_forum_member', AccessIsResolved(2), false, 'mark'); } System::site()->SetVars('is_forum_member', $vars_is_forum_member); // Последние темы форума System::site()->AddBlock('old', true, false, 'mark'); $vars_old = array(); $vars_old['lasttopics'] = '<a href="' . Ufu('index.php?name=forum&op=lasttopics', 'forum/lasttopics/') . '">' . $forum_lang['lasttopics'] . '</a>'; System::site()->SetVars('old', $vars_old); // Блок списка топиков System::site()->AddBlock('topics', true, true, 'topic'); // Инициализируем постраничную навигацию $navigation = new Navigation($page); $navigation->FrendlyUrl = System::config('general/ufu'); // Выводим топики в шаблон if (count($topics) == 0) { // В этом форуме пока нет ни одной темы System::site()->AddBlock('no_topics', true); $navigation->DisableNavigation(); } else { // Вывод постраничной навигации $navigation->GenNavigationMenu($topics, $topics_on_page, $forum_nav_url); // Загружаем данные о прочтении тем $read_data = Forum_Marker_GetReadData(); $visable_topics = false; // Вывод тем из этой категории с постраничной навигацией foreach ($topics as $topic) { $forum_config = $forums_tree->GetForumConfigRecursive($topic['forum_id']); // Конфигурация просматриваемого форума // Статус прочитано $read = true; // прочитано if ($auth && (!isset($read_data[$topic['id']]) || $topic['last_post'] > $read_data[$topic['id']]['date'])) { $read = false; } $topic = ForumTopicFilterData($topic); // Фильтрация данных топика $topic['on'] = !$read; $topic['off'] = $read; if (!$topic['close']) { $topic['close'] = $forum_config['close']; $topic['begin'] = !$forum_config['close']; } $topic['page'] = $page; $visable_topics = true; System::site()->AddSubBlock('topics', true, $topic); } System::site()->AddBlock('no_topics', !$visable_topics); } // Блоки модерации ModerationForumTopicsBlocks(); // Подключаем шаблон System::site()->AddTemplatedBox('', 'module/forum_topics.html'); // Выводм блок онлайн $online->Render('0', '0', $forum_lang['all_online'], 'forum_topics_online'); // Выводим статистику $statistics->Render('forum_topics_statistics'); // Выбор периода и быстрый переход ForumQuickTransitionBox(0, $forum_lang['quick_transition']); }
/** * Вывод комментариев с постраничной навигацией. * @param int $ObjectId "object_id" комментария * @param string|string $PostsBlockName имя блока в шаблоне, куда выводить комментарии * @param string $NavigationBlockName * @param bool $LastPage Если истина, то функция покажет последнюю страницу комментариев * @param int $Page Номер страницы комментариев * @param string|string $ExWhere Свой Where запрос. Используйте, если вам необходим особый способ выбора комментариев. */ public function RenderPosts($ObjectId, $PostsBlockName = 'posts', $NavigationBlockName = 'navigation', $LastPage = false, &$Page = 0, $ExWhere = '') { if ($this->DisableComments) { System::site()->AddBlock($PostsBlockName, false, false, 'post'); System::site()->AddBlock($NavigationBlockName, true, false); return; } else { System::site()->AddBlock($PostsBlockName, true, true, 'post'); } if ($this->EditPageUrl == '') { ErrorHandler(USER_NOTICE, 'Posts::Posts(): Не инициализирован адрес страницы редактирования комментариев Posts::$EditPageUrl.', __FILE__); } if ($this->DeletePageUrl == '') { ErrorHandler(USER_NOTICE, 'Posts::Posts(): Не инициализирован адрес страницы удаления комментариев Posts::$DeletePageUrl.', __FILE__); } if ($this->NavigationUrl == '') { ErrorHandler(USER_NOTICE, 'Posts::Posts(): Не инициализирован адрес текущей страницы для постраничной навигации Posts::$NavigationUrl.', __FILE__); } // Выбираем сообщения из базы данных if ($ObjectId != 0) { $where = "`object_id`='" . $ObjectId . "'"; } elseif ($ExWhere != '') { $where = $ExWhere; } else { $where = ''; // Вся таблица } $posts = System::database()->Select($this->PostsTable, $where, null, 'post_date', !$this->DecreaseSort); $this->PostsTree = array(); foreach ($posts as $post) { $this->PostsTree[$post['post_parent_id']][] = $post; } if ($Page == 0) { // Страница по умолчанию if ($this->DecreaseSort) { $LastPage = true; } else { $Page = 1; } } // Инициализируем навигацию $nav = new Navigation($Page, $NavigationBlockName, $this->NavigationParam); $nav->FrendlyUrl = System::config('general/ufu'); $nav->Anchor = $this->NavigationAnchor; $nav->DefaultPageLink = $this->NavigationDefaultPageLink; if (!isset($this->PostsTree[0])) { $nav->DisableNavigation(); } else { if (!$this->EnNavigation) { $nav->DisableNavigation(); } else { $last_pn = ceil(count($this->PostsTree[0]) / $this->MessagesOnPage); if ($LastPage) { $Page = $last_pn; } if ($this->DecreaseSort) { $nav->DefaultPage = $last_pn; } $nav->GenNavigationMenu($this->PostsTree[0], $this->MessagesOnPage, $this->NavigationUrl, $Page); } $this->RenderPost($ObjectId, $this->PostsTree[0], $PostsBlockName, 0); } }
function IndexForumShowForum() { global $forum_lang; $forums_tree = ForumTree::Instance(); // Параметры просмотра из GET // $forum_id // $forum // $forum_config if (isset($_GET['forum'])) { $forum_id = SafeEnv($_GET['forum'], 11, int); if (isset($forums_tree->IdCats[$forum_id])) { // Проверяем идентификатор форума и загружаем его данные $forum = $forums_tree->IdCats[$forum_id]; // Форум $forum_config = $forums_tree->GetForumConfigRecursive($forum_id); // Конфигурация просматриваемого форума } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); // Форум не найден return; } } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); // Нет параметра return; } // Проверяем доступ if (!$forum_config['access']) { System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']); // Нет доступа в этот форум return; } // Параметры постраничной навигации if (isset($_GET['page'])) { $page = SafeEnv($_GET['page'], 11, int); } else { $page = 1; } $topics_on_page = System::config('forum/topics_on_page'); // Устанавливаем заголовок страницы System::site()->SetTitle(SafeDB($forum['title'], 255, str) . ' - ' . ($page > 1 ? $forum_lang['page'] . $page . ' - ' : '') . $forum_lang['forum']); // Объекты статистики и онлайн $statistics = ForumStatistics::Instance(); $online = ForumOnline::Instance($forum_id); // Инициализируем статистику $statistics->Initialize($forum_lang['statistics_cat']); // Загружаем информацию по топикам в $topics_data и считаем статистику (кэшировать статистику) $topics_data = ForumCacheGetTopics(); // Запрашиваем данные тем (агрегированы по форумам) $resolve_cats = $forums_tree->GetAllChildId($forum_id); // Считаем только в текущем форуме и всех подфорумах foreach ($resolve_cats as $resolve_cat) { if (!isset($topics_data[$resolve_cat])) { continue; } foreach ($topics_data[$resolve_cat] as $topic) { $statistics->hits += $topic['hits']; $statistics->AddTopicAuthor($topic['starter_id'], $topic['starter_name']); } } // Подсчитываем количество тем и постов $counters = $forums_tree->GetCountersRecursive($forum_id); $statistics->topics_count = $counters['files']; $statistics->reply_count = $counters['cats']; // Выводим подфорумы с помощью функции main (если есть) if (isset($forums_tree->Cats[$forum_id]) && count($forums_tree->Cats[$forum_id]) > 0) { ForumLoadFunction('main'); IndexForumMain($forum_id, $topics_data); // <-- IndexForumMain // Если просматриваем категорию, то топики не выводим if ($forum['parent_id'] == 0) { return; } } // Выводим хлебные крошки (нужно после IndexForumMain чтобы не выводились два раза при просмотре категории) $forums_tree->BreadCrumbsF($forum_id); // Блоки шаблона // Ссылки, Отметить все как прочитанные и показать все не прочитанные темы. $vars_is_forum_member = array(); $vars_is_forum_member['url'] = '<a href="' . Ufu('index.php?name=forum&op=markread' . ($forum_id > 0 ? '&forum=' . $forum_id : ''), 'forum/markread/' . ($forum_id > 0 ? '{forum}/' : '')) . '">' . $forum_lang['mark_all_read'] . '</a>'; $vars_is_forum_member['viewnoreadurl'] = '<a href="' . Ufu('index.php?name=forum&op=viewnoread' . ($forum_id > 0 ? '&forum=' . $forum_id : ''), 'forum/viewnoread/' . ($forum_id > 0 ? '{forum}/' : '')) . '">' . $forum_lang['viewnoread'] . '</a>'; $vars_is_forum_member['forum_id'] = $forum_id; if (!System::site()->HasBlock('is_forum_member')) { System::site()->AddBlock('is_forum_member', AccessIsResolved(2), false, 'mark'); } System::site()->SetVars('is_forum_member', $vars_is_forum_member); // Последние темы форума System::site()->AddBlock('old', true, false, 'mark'); $vars_old = array(); $vars_old['lasttopics'] = '<a href="' . Ufu('index.php?name=forum&op=lasttopics&forum=' . $forum_id, 'forum/lasttopics/{forum}/') . '">' . $forum_lang['lasttopics'] . '</a>'; System::site()->SetVars('old', $vars_old); // Заголовки (Темы, Ответов, Просмотры) System::site()->AddBlock('statistik', true, false, 'stat'); $vars_stat = array(); $vars_stat['count_read'] = ''; $cat_users_count = $online->GetCatOnlineCount($forum_id); if ($cat_users_count > 0) { $vars_stat['count_read'] = $cat_users_count > 0 ? '<small> (' . $forum_lang['online'] . ': ' . $cat_users_count . ')</small>' : ''; } System::site()->SetVars('statistik', $vars_stat); // Блок с информацией о форуме System::site()->AddBlock('forum', true, false); System::site()->SetVars('forum', IndexForumDataFilter($forum, $forum_config)); System::site()->AddBlock('forum_guest_message', true); // Блок списка топиков System::site()->AddBlock('topics', true, true, 'topic'); // Инициализируем постраничную навигацию $navigation = new Navigation($page); $navigation->FrendlyUrl = System::config('general/ufu'); // Есть ли видимые для пользователя топики $visable_topics = false; $auth = System::user()->Auth; $user_id = System::user()->Get('u_id'); $is_admin = System::user()->isAdmin(); if (!isset($topics_data[$forum_id]) || count($topics_data[$forum_id]) == 0) { // В этом форуме пока нет ни одной темы System::site()->AddBlock('no_topics', true); $navigation->DisableNavigation(); } else { // Загружаем данные корзины для видимых топиков $basket = ForumBasketGetData('forum_basket_topics'); // Загружаем данные о прочтении тем $read_data = Forum_Marker_GetReadData(); // Фильтруем топики $topics_data = $topics_data[$forum_id]; // Топики в этом форуме $topics = array(); foreach ($topics_data as $topic) { // Добавляем данные из корзины, если топик удалён в корзину (корзину тем видят только админы и пользователи-стартеры удалённых тем) $topic['status'] = ''; $topic['show_delete'] = $is_admin; if ($topic['delete'] && isset($basket[$topic['id']]) && $auth && ($is_admin || $topic['starter_id'] == $user_id)) { // Добавляем сообщение - "Удалено в корзину" $topic['status'] = ForumBasketRender($topic['id'], $topic['title'], $basket, false); $topic['show_delete'] = false; } elseif ($topic['delete']) { continue; // Удалён топик и корзина не показывается для этого пользователя } $topics[] = $topic; } unset($topics_data); // Вывод постраничной навигации $navigation->GenNavigationMenu($topics, $topics_on_page, Ufu('index.php?name=forum&op=showforum&forum=' . $forum_id, 'forum/{forum}-{page}/', true)); // Вывод тем из этой категории с постраничной навигацией foreach ($topics as $topic) { $close = false; if ($forum_config['close']) { $close = true; } // Статус прочитано $read = true; // прочитано if ($auth && (!isset($read_data[$topic['id']]) || $topic['last_post'] > $read_data[$topic['id']]['date'])) { $read = false; } $topic = ForumTopicFilterData($topic); // Фильтрация данных топика $topic['on'] = !$read; $topic['off'] = $read; // Закрытие топиков в форуме if (!$topic['close']) { $topic['close'] = $forum_config['close']; $topic['begin'] = !$forum_config['close']; } $topic['page'] = $page; $visable_topics = true; System::site()->AddSubBlock('topics', true, $topic); } System::site()->AddBlock('no_topics', !$visable_topics); } // Форма добавления топиков $show_form = $forum_config['add_topic'] && $auth; System::site()->AddBlock('topic_form', $show_form, false, 'form'); if ($show_form) { System::site()->SetVar('topic_form', 'url', Ufu('index.php?name=forum&op=addtopic&forum=' . $forum_id, 'forum/addtopic/{forum}/')); ForumSmiliesRender(); // Подключаем BBCode редактор IncludePluginsGroup('bbcode_editors'); } // Блок "Права на форуме" System::site()->AddBlock('topic_right', true, false, 'topic', 'module/forum_right.html'); $right_text = ''; if ($forum_config['add_topic']) { $right_text .= $forum_lang['create_new_topics'] . '<br />'; } else { $right_text .= $forum_lang['no_create_new_topics'] . '<br />'; $right_text .= '(' . $forum_config['add_topic_reason'] . ')<br />'; } if ($forum_config['add_post']) { $right_text .= $forum_lang['create_new_message_in_topics'] . '<br />'; } else { $right_text .= $forum_lang['no_create_new_message_in_topics'] . '<br />'; $right_text .= '(' . $forum_config['add_post_reason'] . ')<br />'; } System::site()->SetVars('topic_right', array('right' => $right_text)); // Блоки модерации ModerationForumTopicsBlocks(); // Подключаем шаблон System::site()->AddTemplatedBox('', 'module/forum_topics.html'); // Выводм блок онлайн $online->Render($forum_id, '0', $forum_lang['current_category'], 'forum_topics_online'); // Выводим статистику $statistics->Render('forum_topics_statistics'); // Быстрый переход по форумам ForumQuickTransitionBox($forum_id, $forum_lang['quick_transition']); }
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'] = ' '; } if ($user_info['url'] != '') { $vars['homepage'] = '<a href="http://' . $user_info['url'] . '" target="_blank">' . $user_info['url'] . '</a>'; } else { $vars['homepage'] = ' '; } $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 IndexGalleryShow($Cat, $Images = null, $OnlyBlock = false, $Parent = null, $Active = -1) { if (!$OnlyBlock) { if ($Cat != 0) { System::site()->SetTitle('Изображения в категории ' . SafeDB(IndexGalleryGetTree()->IdCats[$Cat]['title'], 255, str)); } $images_on_page = System::config('gallery/images_on_page'); $thumbs_on_row = System::config('gallery/thumbs_onrow'); if (isset($_GET['page'])) { $page = SafeEnv($_GET['page'], 11, int); } else { $page = 1; } } if (!isset($Images)) { $Images = System::database()->Select('gallery', GetWhereByAccess('view', "`cat_id`='{$Cat}' and `show`='1'"), null, 'order'); } $count = count($Images); /* * Постраничная навигация. */ if (!$OnlyBlock) { $navigation = new Navigation($page); if (System::config('gallery/page_navigation')) { $nav_link = Ufu('index.php?name=gallery' . ($Cat != 0 ? '&cat=' . $Cat : ''), 'gallery/' . ($Cat != 0 ? '{cat}/' : '') . 'page{page}/', true); $navigation->FrendlyUrl = System::config('general/ufu'); $navigation->GenNavigationMenu($Images, $images_on_page, $nav_link); } else { $navigation->DisableNavigation(); } } if ($count > 0 || $OnlyBlock) { /* * Выводим изображения в шаблонизатор. */ if (isset($Parent)) { $block_images = $Parent->NewBlock('gallery_images', true, true, 'img'); } else { $block_images = System::site()->NewBlock('gallery_images_block', true, true, 'img'); } if (!$OnlyBlock) { System::site()->AddTable('gallery_images', true, 'img', $thumbs_on_row); } foreach ($Images as $index => $img) { if (!$OnlyBlock) { $index = strval($index + 1 + ($page - 1) * $images_on_page); } $vars = IndexGalleryFilterImageData($img, $index, $count); if ($vars['title'] == '') { $vars['title'] = 'Изображение ' . $index; } $vars['active'] = $index == $Active; $block_images->NewSubBlock(true, $vars); if (!$OnlyBlock) { System::site()->AddTableCell('gallery_images', true, $vars); } } if (!$OnlyBlock) { System::site()->AddTemplatedBox('', 'module/gallery_image.html'); } } else { System::site()->AddTextBox('', '<p align="center">В этой категории пока нет изображений.</p>'); } }