cooliojazz:RecentPosts 0.1 = $modSettings['loadavg_allunread']) // fatal_lang_error('loadavg_allunread_disabled', false); // elseif ($_REQUEST['action'] != 'unread' && !empty($context['load_average']) && !empty($modSettings['loadavg_unreadreplies']) && $context['load_average'] >= $modSettings['loadavg_unreadreplies']) // fatal_lang_error('loadavg_unreadreplies_disabled', false); // elseif (!$context['showing_all_topics'] && $_REQUEST['action'] == 'unread' && !empty($context['load_average']) && !empty($modSettings['loadavg_unread']) && $context['load_average'] >= $modSettings['loadavg_unread']) // fatal_lang_error('loadavg_unread_disabled', false); // Parameters for the main query. $query_parameters = array(); // Are we specifying any specific board? if (isset($_REQUEST['children']) && (!empty($board) || !empty($_REQUEST['boards']))) { $boards = array(); if (!empty($_REQUEST['boards'])) { $_REQUEST['boards'] = explode(',', $_REQUEST['boards']); foreach ($_REQUEST['boards'] as $b) $boards[] = (int)$b; } if (!empty($board)) $boards[] = (int)$board; // The easiest thing is to just get all the boards they can see, but since we've specified the top of tree we ignore some of them $request = $smcFunc['db_query']('', ' SELECT b.id_board, b.id_parent FROM {db_prefix}boards AS b WHERE {query_wanna_see_board} AND b.child_level > {int:no_child} AND b.id_board NOT IN ({array_int:boards}) ORDER BY child_level ASC ', array( 'no_child' => 0, 'boards' => $boards, ) ); while ($row = $smcFunc['db_fetch_assoc']($request)) { if (in_array($row['id_parent'], $boards)) $boards[] = $row['id_board']; } $smcFunc['db_free_result']($request); if (empty($boards)) fatal_lang_error('error_no_boards_selected'); $query_this_board = 'id_board IN ({array_int:boards})'; $query_parameters['boards'] = $boards; $context['querystring_board_limits'] = ';boards=' . implode(',', $boards) . ';start=%d'; } elseif (!empty($board)) { $query_this_board = 'id_board = {int:board}'; $query_parameters['board'] = $board; $context['querystring_board_limits'] = ';board=' . $board . '.%1$d'; } elseif (!empty($_REQUEST['boards'])) { $_REQUEST['boards'] = explode(',', $_REQUEST['boards']); foreach ($_REQUEST['boards'] as $i => $b) $_REQUEST['boards'][$i] = (int) $b; $request = $smcFunc['db_query']('', ' SELECT b.id_board FROM {db_prefix}boards AS b WHERE {query_see_board} AND b.id_board IN ({array_int:board_list})', array( 'board_list' => $_REQUEST['boards'], ) ); $boards = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) $boards[] = $row['id_board']; $smcFunc['db_free_result']($request); if (empty($boards)) fatal_lang_error('error_no_boards_selected'); $query_this_board = 'id_board IN ({array_int:boards})'; $query_parameters['boards'] = $boards; $context['querystring_board_limits'] = ';boards=' . implode(',', $boards) . ';start=%1$d'; } elseif (!empty($_REQUEST['c'])) { $_REQUEST['c'] = explode(',', $_REQUEST['c']); foreach ($_REQUEST['c'] as $i => $c) $_REQUEST['c'][$i] = (int) $c; $see_board = isset($_REQUEST['action']) && $_REQUEST['action'] == 'unreadreplies' ? 'query_see_board' : 'query_wanna_see_board'; $request = $smcFunc['db_query']('', ' SELECT b.id_board FROM {db_prefix}boards AS b WHERE ' . $user_info[$see_board] . ' AND b.id_cat IN ({array_int:id_cat})', array( 'id_cat' => $_REQUEST['c'], ) ); $boards = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) $boards[] = $row['id_board']; $smcFunc['db_free_result']($request); if (empty($boards)) fatal_lang_error('error_no_boards_selected'); $query_this_board = 'id_board IN ({array_int:boards})'; $query_parameters['boards'] = $boards; $context['querystring_board_limits'] = ';c=' . implode(',', $_REQUEST['c']) . ';start=%1$d'; } else { $see_board = isset($_REQUEST['action']) && $_REQUEST['action'] == 'unreadreplies' ? 'query_see_board' : 'query_wanna_see_board'; // Don't bother to show deleted posts! $request = $smcFunc['db_query']('', ' SELECT b.id_board FROM {db_prefix}boards AS b WHERE ' . $user_info[$see_board] . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? ' AND b.id_board != {int:recycle_board}' : ''), array( 'recycle_board' => (int) $modSettings['recycle_board'], ) ); $boards = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) $boards[] = $row['id_board']; $smcFunc['db_free_result']($request); if (empty($boards)) fatal_lang_error('error_no_boards_selected'); $query_this_board = 'id_board IN ({array_int:boards})'; $query_parameters['boards'] = $boards; $context['querystring_board_limits'] = ';start=%1$d'; $context['no_board_limits'] = true; } $sort_methods = array( 'subject' => 'ms.subject', 'starter' => 'IFNULL(mems.real_name, ms.poster_name)', 'replies' => 't.num_replies', 'views' => 't.num_views', 'first_post' => 't.id_topic', 'last_post' => 't.id_last_msg' ); // The default is the most logical: newest first. if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']])) { $context['sort_by'] = 'last_post'; $_REQUEST['sort'] = 't.id_last_msg'; $ascending = isset($_REQUEST['asc']); $context['querystring_sort_limits'] = $ascending ? ';asc' : ''; } else { // But, for other methods the default sort is ascending. $context['sort_by'] = $_REQUEST['sort']; $_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']]; $ascending = !isset($_REQUEST['desc']); $context['querystring_sort_limits'] = ';sort=' . $context['sort_by'] . ($ascending ? '' : ';desc'); } $context['sort_direction'] = $ascending ? 'up' : 'down'; if (!empty($_REQUEST['c']) && is_array($_REQUEST['c']) && count($_REQUEST['c']) == 1) { $request = $smcFunc['db_query']('', ' SELECT name FROM {db_prefix}categories WHERE id_cat = {int:id_cat} LIMIT 1', array( 'id_cat' => (int) $_REQUEST['c'][0], ) ); list ($name) = $smcFunc['db_fetch_row']($request); $smcFunc['db_free_result']($request); $context['linktree'][] = array( 'url' => $scripturl . '#c' . (int) $_REQUEST['c'][0], 'name' => $name ); } $context['linktree'][] = array( 'url' => $scripturl . '?action=' . $_REQUEST['action'] . sprintf($context['querystring_board_limits'], 0) . $context['querystring_sort_limits'], 'name' => $_REQUEST['action'] == 'recent' ? $txt['unread_topics_visit'] : $txt['unread_replies'] ); // if ($context['showing_all_topics']) // $context['linktree'][] = array( // 'url' => $scripturl . '?action=' . $_REQUEST['action'] . ';all' . sprintf($context['querystring_board_limits'], 0) . $context['querystring_sort_limits'], // 'name' => $txt['unread_topics_all'] // ); // else $txt['unread_topics_visit_none'] = strtr($txt['unread_topics_visit_none'], array('?action=unread;all' => '?action=unread;all' . sprintf($context['querystring_board_limits'], 0) . $context['querystring_sort_limits'])); if (WIRELESS) $context['sub_template'] = WIRELESS_PROTOCOL . '_recent'; else { loadTemplate('Recent'); $context['sub_template'] = 'recent'; } // Setup the default topic icons... for checking they exist and the like ;) $stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless', 'clip'); $context['icon_sources'] = array(); foreach ($stable_icons as $icon) $context['icon_sources'][$icon] = 'images_url'; // This part is the same for each query. $select_clause = ' ms.subject AS first_subject, ms.poster_time AS first_poster_time, ms.id_topic, t.id_board, b.name AS bname, t.num_replies, t.num_views, ms.id_member AS id_first_member, ml.id_member AS id_last_member, ml.poster_time AS last_poster_time, IFNULL(mems.real_name, ms.poster_name) AS first_poster_name, IFNULL(meml.real_name, ml.poster_name) AS last_poster_name, ml.subject AS last_subject, ml.icon AS last_icon, ms.icon AS first_icon, t.id_poll, t.is_sticky, t.locked, ml.modified_time AS last_modified_time, IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from, SUBSTRING(ml.body, 1, 385) AS last_body, SUBSTRING(ms.body, 1, ' . (!empty($modSettings['NiceTooltips_lenght']) ? $modSettings['NiceTooltips_lenght'] : 385) . ') AS first_body, ml.smileys_enabled AS last_smileys, ms.smileys_enabled AS first_smileys, t.id_first_msg, t.id_last_msg'; // !!! Add modified_time in for log_time check? if ($modSettings['totalMessages'] > 100000) { $smcFunc['db_query']('', ' DROP TABLE IF EXISTS {db_prefix}log_topics_unread', array( ) ); // Let's copy things out of the log_topics table, to reduce searching. $have_temp_table = $smcFunc['db_query']('', ' CREATE TEMPORARY TABLE {db_prefix}log_topics_unread (PRIMARY KEY (id_topic)) SELECT lt.id_topic, lt.id_msg FROM {db_prefix}topics AS t INNER JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic) WHERE lt.id_member = {int:current_member} AND t.' . $query_this_board . ($modSettings['postmod_active'] ? ' AND t.approved = {int:is_approved}' : ''), array_merge($query_parameters, array( 'current_member' => $user_info['id'], 'is_approved' => 1, 'db_error_skip' => true, )) ) !== false; } else { $have_temp_table = false; } $request = $smcFunc['db_query']('', ' SELECT COUNT(*), MIN(t.id_last_msg) FROM {db_prefix}topics AS t' . (!empty($have_temp_table) ? ' LEFT JOIN {db_prefix}log_topics_unread AS lt ON (lt.id_topic = t.id_topic)' : ' LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})') . ' LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.id_board AND lmr.id_member = {int:current_member}) WHERE t.' . $query_this_board . ($modSettings['postmod_active'] ? ' AND t.approved = {int:is_approved}' : ''), array_merge($query_parameters, array( 'current_member' => $user_info['id'], 'is_approved' => 1, )) ); list($num_topics, $min_message) = $smcFunc['db_fetch_row']($request); $smcFunc['db_free_result']($request); // Make sure the starting place makes sense and construct the page index. $context['page_index'] = constructPageIndex($scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . $context['querystring_board_limits'] . $context['querystring_sort_limits'], $_REQUEST['start'], $num_topics, $context['topics_per_page'], true); $context['current_page'] = (int) $_REQUEST['start'] / $context['topics_per_page']; $context['links'] = array( 'first' => $_REQUEST['start'] >= $context['topics_per_page'] ? $scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . sprintf($context['querystring_board_limits'], 0) . $context['querystring_sort_limits'] : '', 'prev' => $_REQUEST['start'] >= $context['topics_per_page'] ? $scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . sprintf($context['querystring_board_limits'], $_REQUEST['start'] - $context['topics_per_page']) . $context['querystring_sort_limits'] : '', 'next' => $_REQUEST['start'] + $context['topics_per_page'] < $num_topics ? $scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . sprintf($context['querystring_board_limits'], $_REQUEST['start'] + $context['topics_per_page']) . $context['querystring_sort_limits'] : '', 'last' => $_REQUEST['start'] + $context['topics_per_page'] < $num_topics ? $scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . sprintf($context['querystring_board_limits'], floor(($num_topics - 1) / $context['topics_per_page']) * $context['topics_per_page']) . $context['querystring_sort_limits'] : '', 'up' => $scripturl, ); $context['page_info'] = array( 'current_page' => $_REQUEST['start'] / $context['topics_per_page'] + 1, 'num_pages' => floor(($num_topics - 1) / $context['topics_per_page']) + 1 ); $request = $smcFunc['db_query']('substring', ' SELECT ' . $select_clause . ' FROM {db_prefix}messages AS ms INNER JOIN {db_prefix}topics AS t ON (t.id_topic = ms.id_topic AND t.id_first_msg = ms.id_msg) INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg) LEFT JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board) LEFT JOIN {db_prefix}members AS mems ON (mems.id_member = ms.id_member) LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)' . (!empty($have_temp_table) ? ' LEFT JOIN {db_prefix}log_topics_unread AS lt ON (lt.id_topic = t.id_topic)' : ' LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})') . ' LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.id_board AND lmr.id_member = {int:current_member}) WHERE t.' . $query_this_board . ($modSettings['postmod_active'] ? ' AND ms.approved = {int:is_approved}' : '') . ' ORDER BY {raw:order} LIMIT {int:offset}, {int:limit}', array_merge($query_parameters, array( 'current_member' => $user_info['id'], 'is_approved' => 1, 'order' => $_REQUEST['sort'] . ($ascending ? '' : ' DESC'), 'offset' => $_REQUEST['start'], 'limit' => $context['topics_per_page'], )) ); $context['topics'] = array(); $topic_ids = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) { if ($row['id_poll'] > 0 && $modSettings['pollMode'] == '0') continue; $topic_ids[] = $row['id_topic']; if (!empty($settings['message_index_preview'])) { // Limit them to 128 characters - do this FIRST because it's a lot of wasted censoring otherwise. $row['first_body'] = strip_tags(strtr(parse_bbc($row['first_body'], $row['first_smileys'], $row['id_first_msg']), array('
' => ' '))); if ($smcFunc['strlen']($row['first_body']) > 128) $row['first_body'] = $smcFunc['substr']($row['first_body'], 0, 128) . '...'; $row['last_body'] = strip_tags(strtr(parse_bbc($row['last_body'], $row['last_smileys'], $row['id_last_msg']), array('
' => ' '))); if ($smcFunc['strlen']($row['last_body']) > 128) $row['last_body'] = $smcFunc['substr']($row['last_body'], 0, 128) . '...'; // Censor the subject and message preview. censorText($row['first_subject']); censorText($row['first_body']); // Don't censor them twice! if ($row['id_first_msg'] == $row['id_last_msg']) { $row['last_subject'] = $row['first_subject']; $row['last_body'] = $row['first_body']; } else { censorText($row['last_subject']); censorText($row['last_body']); } } else { $row['first_body'] = ''; $row['last_body'] = ''; censorText($row['first_subject']); if ($row['id_first_msg'] == $row['id_last_msg']) $row['last_subject'] = $row['first_subject']; else censorText($row['last_subject']); } // Decide how many pages the topic should have. $topic_length = $row['num_replies'] + 1; $messages_per_page = empty($modSettings['disableCustomPerPage']) && !empty($options['messages_per_page']) && !WIRELESS ? $options['messages_per_page'] : $modSettings['defaultMaxMessages']; if ($topic_length > $messages_per_page) { $tmppages = array(); $tmpa = 1; for ($tmpb = 0; $tmpb < $topic_length; $tmpb += $messages_per_page) { $tmppages[] = '' . $tmpa . ''; $tmpa++; } // Show links to all the pages? if (count($tmppages) <= 5) $pages = '« ' . implode(' ', $tmppages); // Or skip a few? else $pages = '« ' . $tmppages[0] . ' ' . $tmppages[1] . ' ... ' . $tmppages[count($tmppages) - 2] . ' ' . $tmppages[count($tmppages) - 1]; if (!empty($modSettings['enableAllMessages']) && $topic_length < $modSettings['enableAllMessages']) $pages .= '  ' . $txt['all'] . ''; $pages .= ' »'; } else { $pages = ''; } // We need to check the topic icons exist... you can never be too sure! if (empty($modSettings['messageIconChecks_disable'])) { // First icon first... as you'd expect. if (!isset($context['icon_sources'][$row['first_icon']])) $context['icon_sources'][$row['first_icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['first_icon'] . '.gif') ? 'images_url' : 'default_images_url'; // Last icon... last... duh. if (!isset($context['icon_sources'][$row['last_icon']])) $context['icon_sources'][$row['last_icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['last_icon'] . '.gif') ? 'images_url' : 'default_images_url'; } // * NiceTooltips mod $row['nice_tooltip_first_msg'] = NiceTooltip($row['first_body'], $row['first_subject'], $row['first_smileys'], $row['id_first_msg']); // And build the array. $context['topics'][$row['id_topic']] = array( 'id' => $row['id_topic'], 'first_post' => array( 'id' => $row['id_first_msg'], 'member' => array( 'name' => $row['first_poster_name'], 'id' => $row['id_first_member'], 'href' => $scripturl . '?action=profile;u=' . $row['id_first_member'], 'link' => !empty($row['id_first_member']) ? '' . $row['first_poster_name'] . '' : $row['first_poster_name'] ), 'time' => timeformat($row['first_poster_time']), 'timestamp' => forum_time(true, $row['first_poster_time']), 'subject' => $row['first_subject'], 'preview' => $row['first_body'], 'icon' => $row['first_icon'], 'icon_url' => $settings[$context['icon_sources'][$row['first_icon']]] . '/post/' . $row['first_icon'] . '.gif', 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0;topicseen', // * NiceTooltips mod 'link' => '' . $row['first_subject'] . '' ), 'last_post' => array( 'id' => $row['id_last_msg'], 'member' => array( 'name' => $row['last_poster_name'], 'id' => $row['id_last_member'], 'href' => $scripturl . '?action=profile;u=' . $row['id_last_member'], 'link' => !empty($row['id_last_member']) ? '' . $row['last_poster_name'] . '' : $row['last_poster_name'] ), 'time' => timeformat($row['last_poster_time']), 'timestamp' => forum_time(true, $row['last_poster_time']), 'subject' => $row['last_subject'], 'preview' => $row['last_body'], 'icon' => $row['last_icon'], 'icon_url' => $settings[$context['icon_sources'][$row['last_icon']]] . '/post/' . $row['last_icon'] . '.gif', 'href' => $scripturl . '?topic=' . $row['id_topic'] . ($row['num_replies'] == 0 ? '.0' : '.msg' . $row['id_last_msg']) . ';topicseen#msg' . $row['id_last_msg'], 'link' => '' . $row['last_subject'] . '' ), 'new_from' => $row['new_from'], 'new_href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['new_from'] . ';topicseen#new', 'href' => $scripturl . '?topic=' . $row['id_topic'] . ($row['num_replies'] == 0 ? '.0' : '.msg' . $row['new_from']) . ';topicseen' . ($row['num_replies'] == 0 ? '' : 'new'), 'link' => '' . $row['first_subject'] . '', 'is_sticky' => !empty($modSettings['enableStickyTopics']) && !empty($row['is_sticky']), 'is_locked' => !empty($row['locked']), 'is_poll' => $modSettings['pollMode'] == '1' && $row['id_poll'] > 0, 'is_hot' => $row['num_replies'] >= $modSettings['hotTopicPosts'], 'is_very_hot' => $row['num_replies'] >= $modSettings['hotTopicVeryPosts'], 'is_posted_in' => false, 'icon' => $row['first_icon'], 'icon_url' => $settings[$context['icon_sources'][$row['first_icon']]] . '/post/' . $row['first_icon'] . '.gif', 'subject' => $row['first_subject'], 'pages' => $pages, 'replies' => comma_format($row['num_replies']), 'views' => comma_format($row['num_views']), 'board' => array( 'id' => $row['id_board'], 'name' => $row['bname'], 'href' => $scripturl . '?board=' . $row['id_board'] . '.0', 'link' => '' . $row['bname'] . '' ) ); determineTopicClass($context['topics'][$row['id_topic']]); } $smcFunc['db_free_result']($request); $is_topics = false; if ($is_topics && !empty($modSettings['enableParticipation']) && !empty($topic_ids)) { $result = $smcFunc['db_query']('', ' SELECT id_topic FROM {db_prefix}messages WHERE id_topic IN ({array_int:topic_list}) AND id_member = {int:current_member} GROUP BY id_topic LIMIT {int:limit}', array( 'current_member' => $user_info['id'], 'topic_list' => $topic_ids, 'limit' => count($topic_ids), ) ); while ($row = $smcFunc['db_fetch_assoc']($result)) { if (empty($context['topics'][$row['id_topic']]['is_posted_in'])) { $context['topics'][$row['id_topic']]['is_posted_in'] = true; $context['topics'][$row['id_topic']]['class'] = 'my_' . $context['topics'][$row['id_topic']]['class']; } } $smcFunc['db_free_result']($result); } $context['querystring_board_limits'] = sprintf($context['querystring_board_limits'], $_REQUEST['start']); $context['topics_to_mark'] = implode('-', $topic_ids); } ]]>
'; $showCheckboxes = !empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1 && $settings['show_mark_read']; if ($showCheckboxes) echo '
'; if ($settings['show_mark_read']) { // Generate the button strip. $mark_read = array( 'markread' => array('text' => !empty($context['no_board_limits']) ? 'mark_as_read' : 'mark_read_short', 'image' => 'markread.gif', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=' . (!empty($context['no_board_limits']) ? 'all' : 'board' . $context['querystring_board_limits']) . ';' . $context['session_var'] . '=' . $context['session_id']), ); if ($showCheckboxes) $mark_read['markselectread'] = array( 'text' => 'quick_mod_markread', 'image' => 'markselectedread.gif', 'lang' => true, 'url' => 'javascript:document.quickModForm.submit();', ); } if (!empty($context['topics'])) { echo '
'; if (!empty($mark_read) && !empty($settings['use_tabs'])) template_button_strip($mark_read, 'right'); echo ' ', $txt['pages'], ': ', $context['page_index'], '
'; echo '
'; // Show a "select all" box for quick moderation? if ($showCheckboxes) echo ' '; else echo ' '; echo ' '; foreach ($context['topics'] as $topic) { // Calculate the color class of the topic. $color_class = ''; if (strpos($topic['class'], 'sticky') !== false) $color_class = 'stickybg'; if (strpos($topic['class'], 'locked') !== false) $color_class .= 'lockedbg'; $color_class2 = !empty($color_class) ? $color_class . '2' : ''; echo ' '; if ($showCheckboxes) echo ' '; echo ' '; } if (!empty($context['topics']) && !$context['showing_all_topics']) $mark_read['readall'] = array('text' => 'unread_topics_all', 'image' => 'markreadall.gif', 'lang' => true, 'url' => $scripturl . '?action=unread;all' . $context['querystring_board_limits'], 'active' => true); if (empty($settings['use_tabs']) && !empty($mark_read)) echo ' '; if (empty($context['topics'])) echo ' '; echo '
  ', $txt['subject'], $context['sort_by'] == 'subject' ? ' ' : '', ' ', $txt['replies'], $context['sort_by'] == 'replies' ? ' ' : '', ' ', $txt['last_post'], $context['sort_by'] == 'last_post' ? ' ' : '', ' ', $txt['last_post'], $context['sort_by'] == 'last_post' ? ' ' : '', '
', $topic['is_sticky'] ? '' : '', '', $topic['first_post']['link'], '', $topic['is_sticky'] ? '' : '', ' ', ($topic['new_from'] <= $topic['last_post']['id'] ? ' ' . $txt['new'] . ' ' : ''), '

', $txt['started_by'], ' ', $topic['first_post']['member']['link'], ' ', $txt['in'], ' ', $topic['board']['link'], ' ', $topic['pages'], '

', $topic['replies'], ' ', $txt['replies'], '
', $topic['views'], ' ', $txt['views'], '
', $txt['last_post'], ' ', $topic['last_post']['time'], '
', $txt['by'], ' ', $topic['last_post']['member']['link'], '
', template_button_strip($mark_read, 'top'), '
'; if (!empty($settings['use_tabs']) && !empty($mark_read)) template_button_strip($mark_read, 'right'); echo ' ', $txt['pages'], ': ', $context['page_index'], '
'; } else { echo '

', $context['showing_all_topics'] ? $txt['msg_alert_none'] : $txt['unread_topics_visit_none'], '

'; } if ($showCheckboxes) echo '
'; echo '

', !empty($modSettings['enableParticipation']) ? ' ' . $txt['participation_caption'] . '
' : '', ' ', $txt['normal_topic'], '
', sprintf($txt['hot_topics'], $modSettings['hotTopicPosts']), '
', sprintf($txt['very_hot_topics'], $modSettings['hotTopicVeryPosts']), '

', $txt['locked_topic'], '
', ($modSettings['enableStickyTopics'] == '1' ? ' ' . $txt['sticky_topic'] . '
' : ''), ($modSettings['pollMode'] == '1' ? ' ' . $txt['poll'] : ''), '

'; } ]]>