/** * Добавляет форму добавления сообщений. * @param bool $edit * @param int $forum * @param int $topic * @param int $id * @param string $value * @param string $text_title * @param bool $loadform * @global array $forum_lang */ function ForumRenderPostForm($edit = false, $forum = 0, $topic = 0, $id = 0, $value = '', $text_title = '', $loadform = true) { global $forum_lang; System::site()->AddBlock('forum_editpost_form', $loadform, false, 'form'); $vars = array(); $page = 1; if (isset($_GET['page'])) { $page = SafeEnv($_GET['page'], 11, int); } if ($edit) { $vars['pag'] = $page; $vars['post'] = $id; $vars['text_value'] = $value; $vars['text_title'] = $text_title; $vars['edit_title'] = $text_title != ''; $vars['topic'] = $topic; $vars['title'] = $forum_lang['edit_post']; $vars['url'] = "index.php?name=forum&op=savepost&topic={$topic}&post={$id}&page={$page}"; $vars['edit'] = true; $vars['lsubmit'] = $forum_lang['save']; $vars['lsubmit_title'] = $forum_lang['save_edit']; $vars['visibility'] = 'visible'; } else { $vars['post'] = 0; $vars['topic'] = $topic; $vars['forum'] = $forum; $vars['edit_title'] = $text_title != ''; $vars['text_value'] = ''; $vars['title'] = $forum_lang['add_post']; $vars['url'] = "index.php?name=forum&op=addpost&topic={$topic}&forum={$forum}"; $vars['edit'] = false; $vars['lsubmit'] = $forum_lang['add']; $vars['lsubmit_title'] = $forum_lang['add_post']; $vars['visibility'] = 'hidden'; } $vars['add'] = !$vars['edit']; System::site()->Blocks['forum_editpost_form']['vars'] = $vars; ForumSmiliesRender(); // Подключаем BBCode редактор IncludePluginsGroup('bbcode_editors'); System::site()->AddBlock('files', false, true, 'u_files'); if ($edit) { System::site()->AddTemplatedBox('', 'module/forum_edit_post.html'); } else { System::site()->AddBlock('post_form', true, false, 'post_form', 'module/forum_edit_post.html'); } }
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']); }