check_feature('feature_forums'); $auto_query_args = [ 'forumId', 'comment_threadId', 'comment_offset', 'comment_threshold', 'thread_sort_mode', 'time_control', 'show_archived', 'poster', 'filter_type', 'reply_state' ]; $commentslib = TikiLib::lib('comments'); if (! isset($_REQUEST['forumId']) || ! ($forum_info = $commentslib->get_forum($_REQUEST['forumId']))) { $smarty->assign('errortype', 'no_redirect_login'); $smarty->assign('msg', tra('No forum indicated')); $smarty->display('error.tpl'); die; } if (isset($_REQUEST['comments_postCancel'])) { unset($_REQUEST['comments_threadId']); unset($_REQUEST['comments_title']); unset($_REQUEST['openpost']); } if (isset($_REQUEST['openpost'])) { $smarty->assign('openpost', 'y'); } else { $smarty->assign('openpost', 'n'); } $smarty->assign('forumId', $_REQUEST['forumId']); $tikilib->get_perm_object($_REQUEST['forumId'], 'forum', $forum_info, true); if (! isset($_REQUEST["sort_mode"])) { $sort_mode = $prefs['forums_ordering']; } else { $sort_mode = $_REQUEST["sort_mode"]; } //get sub forums list $channels = $commentslib->list_forums(0, -1, $sort_mode, '', $_REQUEST['forumId']); //get parent forums $parents = $commentslib->get_forum_parents($forum_info); $smarty->assign('parents', $parents); $smarty->assign_by_ref('channels', $channels["data"]); // Now if the user is the moderator then give him forum admin privs -. SHOULD BE IN get_perm_object if ($tiki_p_admin_forum != 'y' && $user) { if ($commentslib->admin_forum($_REQUEST['forumId'])) { $tiki_p_admin_forum = 'y'; } if ($tiki_p_admin_forum == 'y') { $smarty->assign('tiki_p_admin_forum', 'y'); $tiki_p_forum_post = 'y'; $smarty->assign('tiki_p_forum_post', 'y'); $tiki_p_forum_read = 'y'; $smarty->assign('tiki_p_forum_read', 'y'); $tiki_p_forum_vote = 'y'; $smarty->assign('tiki_p_forum_vote', 'y'); $tiki_p_forum_post_topic = 'y'; $smarty->assign('tiki_p_forum_post_topic', 'y'); } } $access->check_permission(['tiki_p_forum_read'], '', 'forum', $_REQUEST['forumId']); //add tablesorter sorting and filtering $ts = Table_Check::setVars('viewforum' . $_REQUEST['forumId'] . '-', true); if (! $ts['enabled'] || ($ts['enabled'] && $ts['ajax'])) { $commentslib->forum_add_hit($_REQUEST["forumId"]); } if (isset($_REQUEST['report']) && $tiki_p_forums_report == 'y') { check_ticket('view-forum'); $commentslib->report_post($_REQUEST['forumId'], 0, $_REQUEST['report'], $user, ''); } if ($tiki_p_admin_forum == 'y') { //don't see where this is used on tiki-view_forum.tpl - it is used on tiki-view_forum_thread.tpl if (isset($_REQUEST['remove_attachment'])) { $access->checkCsrf(tra('Are you sure you want to remove that attachment?')); $commentslib->remove_thread_attachment($_REQUEST['remove_attachment']); } //locking the entire forum is not fully implemented - only threads can be locked currently if (isset($_REQUEST['lock']) && isset($_REQUEST['forumId'])) { check_ticket('view-forum'); if ($_REQUEST['lock'] == 'y') { $commentslib->lock_object_thread('forum:' . ((int)$_REQUEST['forumId'])); $forum_info['is_locked'] = 'y'; } elseif ($_REQUEST['lock'] == 'n') { $commentslib->unlock_object_thread('forum:' . ((int)$_REQUEST['forumId'])); $forum_info['is_locked'] = 'n'; } } } $smarty->assign_by_ref('forum_info', $forum_info); $comments_per_page = $forum_info['topicsPerPage']; $thread_sort_mode = $forum_info['topicOrdering']; $comments_vars = ['forumId']; $comments_prefix_var = 'forum:'; $comments_object_var = 'forumId'; if (isset($forum_info['inbound_pop_server']) && ! empty($forum_info['inbound_pop_server'])) { $commentslib->process_inbound_mail($_REQUEST['forumId']); } if (! isset($_REQUEST['comments_threshold'])) { $_REQUEST['comments_threshold'] = 0; } $smarty->assign('comments_threshold', $_REQUEST['comments_threshold']); if (! isset($_REQUEST['comments_threadId'])) { $_REQUEST['comments_threadId'] = 0; } $smarty->assign('comments_threadId', $_REQUEST['comments_threadId']); if (! isset($comments_prefix_var)) { $comments_prefix_var = ''; } if (! isset($comments_object_var) || (! $comments_object_var) || ! isset($_REQUEST[$comments_object_var])) { die('the comments_object_var variable is not set or cannot be found as a REQUEST variable'); } $comments_objectId = $comments_prefix_var . $_REQUEST["$comments_object_var"]; // Process a post form here $smarty->assign('warning', 'n'); if ( $tiki_p_forum_post_topic == 'n' && isset($_REQUEST['comments_postComment']) && isset($_REQUEST['comments_title']) && $_REQUEST['forumId'] == $prefs['wiki_forum_id'] && $tikilib->page_exists($_REQUEST['comments_title']) ) { $tiki_p_forum_post_topic = 'y'; } //Here we either post to a forum or create a new thread if (isset($_REQUEST['comments_postComment'])) { check_ticket('view-forum'); $errors = []; $feedbacks = []; $threadId = $commentslib->post_in_forum($forum_info, $_REQUEST, $feedbacks, $errors); if ($threadId && $prefs['feature_freetags'] == 'y') { $cat_type = 'forum post'; $cat_objid = $threadId; include_once('freetag_apply.php'); } if (! empty($errors)) { Feedback::error(['mes' => $errors]); } if (! empty($feedbacks)) { Feedback::success(['mes' => $feedbacks]); } } // Here we send the user to the right thread/topic if it already exists; this // is used for the 'discuss' tab. This is done down here because the thread // might have to be created, which happens above. if (isset($_REQUEST['comments_postComment'])) { // Check if the thread/topic already exists $threadId = $commentslib->check_for_topic($_REQUEST['comments_title'], $_REQUEST['forumId']); // If it does, send the user there with no delay. if ($threadId && count($errors) === 0) { // If the samely titled comment already // exists, go straight to it. $smarty->loadPlugin('smarty_modifier_sefurl'); $url = smarty_modifier_sefurl($threadId, 'forumthread'); header('location: ' . $url); exit; } } if ($tiki_p_admin_forum == 'y' || $tiki_p_forum_vote == 'y') { // Process a vote here if (isset($_REQUEST['comments_vote']) && isset($_REQUEST['comments_threadId'])) { check_ticket('view-forum'); $comments_show = 'y'; if ($tikilib->register_user_vote($user, 'comment' . $_REQUEST['comments_threadId'], $_REQUEST['comments_vote'], range(1, 5))) { $commentslib->vote_comment($_REQUEST['comments_threadId'], $user, $_REQUEST['comments_vote']); } $_REQUEST['comments_threadId'] = 0; $smarty->assign('comments_threadId', 0); } } if ($user) { $userinfo = $userlib->get_user_info($user); $smarty->assign_by_ref('userinfo', $userinfo); } if (isset($_REQUEST['comments_remove']) && isset($_REQUEST['comments_threadId'])) { if ( $tiki_p_admin_forum == 'y' || ($commentslib->user_can_edit_post($user, $_REQUEST['comments_threadId']) && $tiki_p_forum_post_topic == 'y') ) { $access->check_authenticity(tra('Are you sure you want to remove that topic?')); $comments_show = 'y'; $commentslib->remove_comment($_REQUEST['comments_threadId']); $commentslib->register_remove_post($_REQUEST['forumId'], 0); } else { // user can't edit this post $smarty->assign('msg', tra('You do not have permission to remove someone else\'s post!')); $smarty->assign('errortype', 'no_redirect_login'); $smarty->display('error.tpl'); die; } unset($_REQUEST['comments_threadId']); $smarty->assign('comments_threadId', 0); } if ($_REQUEST['comments_threadId'] > 0) { $comment_info = $commentslib->get_comment($_REQUEST['comments_threadId']); $smarty->assign('comment_title', isset($_REQUEST['comments_title']) ? $_REQUEST['comments_title'] : $comment_info['title']); $smarty->assign('comment_data', isset($_REQUEST['comments_data']) ? $_REQUEST['comments_data'] : $comment_info['data']); $smarty->assign( 'comment_topictype', isset($_REQUEST['comment_topictype']) ? $_REQUEST['comment_topictype'] : $comment_info['type'] ); $smarty->assign( 'comment_topicsummary', isset($_REQUEST['comment_topicsummary']) ? $_REQUEST['comment_topicsummary'] : $comment_info['summary'] ); $smarty->assign('comment_topicsmiley', $comment_info['smiley']); } else { $smarty->assign('comment_title', isset($_REQUEST['comments_title']) ? $_REQUEST['comments_title'] : ''); $smarty->assign('comment_data', isset($_REQUEST['comments_data']) ? $_REQUEST['comments_data'] : ''); $smarty->assign('comment_topictype', isset($_REQUEST['comment_topictype']) ? $_REQUEST['comment_topictype'] : ''); $smarty->assign('comment_topictype', 'n'); $smarty->assign('comment_topicsummary', ''); $smarty->assign('comment_topicsmiley', ''); } $smarty->assign('comment_preview', 'n'); if (isset($_REQUEST['comments_previewComment'])) { check_ticket('view-forum'); $smarty->assign('comments_preview_title', $_REQUEST['comments_title']); $smarty->assign('comments_preview_data', ($commentslib->parse_comment_data($_REQUEST['comments_data']))); $smarty->assign('comment_title', $_REQUEST['comments_title']); $smarty->assign('comment_data', $_REQUEST['comments_data']); $smarty->assign('comment_topictype', $_REQUEST['comment_topictype']); if ($forum_info['topic_summary'] == 'y') { $smarty->assign('comment_topicsummary', $_REQUEST['comment_topicsummary']); } if ($forum_info['topic_smileys'] == 'y') { $smarty->assign('comment_topicsmiley', $_REQUEST['comment_topicsmiley']); } $smarty->assign('openpost', 'y'); $smarty->assign('comment_preview', 'y'); } // Check for settings if (! isset($_REQUEST['comments_per_page'])) { $_REQUEST['comments_per_page'] = $comments_per_page; } if (! isset($_REQUEST['thread_sort_mode'])) { $_REQUEST['thread_sort_mode'] = $thread_sort_mode; } else { $comments_show = 'y'; } if (! isset($_REQUEST['comments_commentFind'])) { $_REQUEST['comments_commentFind'] = ''; } else { $comments_show = 'y'; } $smarty->assign('comments_per_page', $_REQUEST['comments_per_page']); $smarty->assign('thread_sort_mode', $_REQUEST['thread_sort_mode']); $smarty->assign('comments_commentFind', $_REQUEST['comments_commentFind']); // Offset setting for the list of comments if (! isset($_REQUEST['comments_offset'])) { $comments_offset = 0; } else { $comments_offset = $_REQUEST['comments_offset']; } $smarty->assign('comments_offset', $comments_offset); // Now check if we are displaying top-level comments or a specific comment if (! isset($_REQUEST['comments_parentId'])) { $_REQUEST['comments_parentId'] = 0; } $smarty->assign('comments_parentId', $_REQUEST['comments_parentId']); if (! isset($_REQUEST['time_control'])) { $_REQUEST['time_control'] = 0; } $commentslib->set_time_control($_REQUEST['time_control']); $show_archived = isset($_REQUEST['show_archived']); $smarty->assign('show_archived', $show_archived); $view_archived_topics = ($show_archived == 'y' && ($tiki_p_admin_forum == 'y' || $prefs['feature_forum_topics_archiving'] == 'n')); if (! isset($_REQUEST['poster']) || $_REQUEST['poster'] == '') { $user_param = ''; } elseif ($_REQUEST['poster'] == '_me') { $user_param = $user; } else { $user_param = $_REQUEST['poster']; } if (! isset($_REQUEST['filter_type'])) { $type_param = ''; } else { $type_param = $_REQUEST['filter_type']; } if (! isset($_REQUEST['reply_state'])) { $reply_state = ''; } else { $reply_state = $_REQUEST['reply_state']; } $comments_coms = $commentslib->get_forum_topics( $_REQUEST['forumId'], $comments_offset, $_REQUEST['comments_per_page'], $_REQUEST['thread_sort_mode'], $view_archived_topics, $user_param, $type_param, $reply_state, $forum_info ); $comments_cant = $commentslib->count_forum_topics( $_REQUEST['forumId'], $comments_offset, $_REQUEST['comments_per_page'], $_REQUEST['thread_sort_mode'], $view_archived_topics, $user_param, $type_param, $reply_state ); $last_comments = $commentslib->get_last_forum_posts($_REQUEST['forumId'], $forum_info['forum_last_n']); $smarty->assign_by_ref('last_comments', $last_comments); $smarty->assign('comments_cant', $comments_cant); $comments_maxRecords = $_REQUEST["comments_per_page"]; $smarty->assign_by_ref('comments_coms', $comments_coms); $cat_type = 'forum'; $cat_objid = $_REQUEST["forumId"]; include_once('tiki-section_options.php'); if ($prefs['feature_user_watches'] == 'y') { if ($user && isset($_REQUEST['watch_event'])) { check_ticket('view-forum'); if ($_REQUEST['watch_action'] == 'add') { $tikilib->add_user_watch( $user, $_REQUEST['watch_event'], $_REQUEST['watch_object'], 'forum', $forum_info['name'], 'tiki-view_forum.php?forumId=' . $_REQUEST['forumId'] ); } else { $tikilib->remove_user_watch($user, $_REQUEST['watch_event'], $_REQUEST['watch_object'], 'forum'); } } if ($user && $watch = $tikilib->get_user_event_watches($user, 'forum_post_topic', $_REQUEST['forumId'])) { $smarty->assign('user_watching_forum', 'y'); } else { $smarty->assign('user_watching_forum', 'n'); } if ($user && $watch = $tikilib->get_user_event_watches($user, 'forum_post_topic_and_thread', $_REQUEST['forumId'])) { $smarty->assign('user_watching_forum_topic_and_thread', 'y'); } else { $smarty->assign('user_watching_forum_topic_and_thread', 'n'); } // Check, if the user is watching this forum by a category. if ($prefs['feature_categories'] == 'y') { $watching_categories_temp = $categlib->get_watching_categories($_REQUEST['forumId'], 'forum', $user); $smarty->assign('category_watched', 'n'); if (count($watching_categories_temp) > 0) { $smarty->assign('category_watched', 'y'); $watching_categories = []; foreach ($watching_categories_temp as $wct) { $watching_categories[] = [ "categId" => $wct, "name" => $categlib->get_category_name($wct) ]; } $smarty->assign('watching_categories', $watching_categories); } } } if ($tiki_p_admin_forum == 'y' || $prefs['feature_forum_quickjump'] == 'y') { $all_forums = $commentslib->list_forums(0, -1, $sort_mode, ''); $temp_max = count($all_forums['data']); for ($i = 0; $i < $temp_max; $i++) { if ($userlib->object_has_one_permission($all_forums['data'][$i]['forumId'], 'forum')) { if ( $tiki_p_admin == 'y' || $userlib->object_has_permission($user, $all_forums['data'][$i]['forumId'], 'forum', 'tiki_p_admin_forum') || $userlib->object_has_permission($user, $all_forums['data'][$i]['forumId'], 'forum', 'tiki_p_forum_read') ) { $all_forums['data'][$i]['can_read'] = 'y'; } else { $all_forums['data'][$i]['can_read'] = 'n'; } } else { $all_forums['data'][$i]['can_read'] = 'y'; } } $smarty->assign('all_forums', $all_forums['data']); } $smarty->assign('unread', 0); if ($user && $prefs['feature_messages'] == 'y' && $tiki_p_messages == 'y') { $unread = $tikilib->user_unread_messages($user); $smarty->assign('unread', $unread); } if ($tiki_p_admin_forum == 'y') { $smarty->assign('queued', $commentslib->get_num_queued($comments_objectId)); $smarty->assign('reported', $commentslib->get_num_reported($_REQUEST['forumId'])); } if ($prefs['feature_freetags'] == 'y') { $cat_type = 'forum post'; $cat_objid = $_REQUEST['comments_threadId']; $cat_lang = $forum_info['forumLanguage']; include_once("freetag_list.php"); //If in preview mode get the tags from the form and not from database if (isset($_REQUEST['comments_previewComment'])) { $smarty->assign('taglist', $_REQUEST["freetag_string"]); } } $defaultRows = $prefs['default_rows_textarea_forum']; if ($prefs['feature_contribution'] == 'y') { $contributionItemId = $_REQUEST['comments_threadId']; include_once('contribution.php'); } if ($prefs['feature_forum_parse'] == 'y') { $wikilib = TikiLib::lib('wiki'); $plugins = $wikilib->list_plugins(true, 'editpost'); $smarty->assign_by_ref('plugins', $plugins); } //initialize tablesorter if ($ts['enabled'] && ! $ts['ajax']) { //set tablesorter code Table_Factory::build( 'TikiViewforum', [ 'id' => $ts['tableid'], 'total' => $comments_cant, 'pager' => [ 'max' => $_REQUEST['comments_per_page'], ], 'ajax' => [ 'requiredparams' => [ 'forumId' => $_REQUEST['forumId'], ], ], ] ); } ask_ticket('view-forum'); if ($ts['ajax']) { $smarty->display('tiki-view_forum.tpl'); } else { $smarty->assign('mid', 'tiki-view_forum.tpl'); $smarty->display('tiki.tpl'); }