0 ? " AND b.ID_BOARD != $modSettings[recycle_board]" : '') . " AND $user_info[query_see_board] ORDER BY b.lastUpdated DESC LIMIT 1", __FILE__, __LINE__); if (mysql_num_rows($request) == 0) return array(); $row = mysql_fetch_assoc($request); mysql_free_result($request); // Censor the subject and post... censorText($row['subject']); censorText($row['body']); $row['body'] = strip_tags(strtr(doUBBC($row['body'], $row['smileysEnabled']), array('
' => ' '))); if (strlen($row['body']) > 128) $row['body'] = substr($row['body'], 0, 128) . '...'; // Send the data. return array( 'topic' => $row['ID_TOPIC'], 'subject' => $row['subject'], 'short_subject' => strlen(un_htmlspecialchars($row['subject'])) > 24 ? strtr(substr(strtr($row['subject'], array('<' => '<', '>' => '>', '"' => '"')), 0, 24) . '...', array('<' => '<', '>' => '>', '"' => '"')) : $row['subject'], 'preview' => $row['body'], 'time' => timeformat($row['posterTime']), 'timestamp' => $row['posterTime'], 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.new;topicseen#new', 'link' => '' . $row['subject'] . '' ); } function getLastPosts($showlatestcount) { global $scripturl, $txt, $db_prefix, $user_info, $modSettings; // Find all the posts. Newer ones will have higher IDs. (assuming the last 4 * number are accessable...) $request = db_query(" SELECT m.posterTime, m.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, IFNULL(mem.realName, m.posterName) AS posterName, t.ID_BOARD, b.name AS bName, m.body, m.smileysEnabled FROM {$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER) WHERE m.ID_MSG >= " . ($modSettings['maxMsgID'] - 4 * $showlatestcount) . " AND t.ID_TOPIC = m.ID_TOPIC AND b.ID_BOARD = t.ID_BOARD" . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? " AND b.ID_BOARD != $modSettings[recycle_board]" : '') . " AND $user_info[query_see_board] ORDER BY m.ID_MSG DESC LIMIT $showlatestcount", __FILE__, __LINE__); $posts = array(); while ($row = mysql_fetch_assoc($request)) { // Censor the subject and post for the preview ;). censorText($row['subject']); censorText($row['body']); $row['body'] = strip_tags(strtr(doUBBC($row['body'], $row['smileysEnabled']), array('
' => ' '))); if (strlen($row['body']) > 128) $row['body'] = substr($row['body'], 0, 128) . '...'; // Build the array. $posts[] = array( 'board' => array( 'id' => $row['ID_BOARD'], 'name' => $row['bName'], 'href' => $scripturl . '?board=' . $row['ID_BOARD'] . '.0', 'link' => '' . $row['bName'] . '' ), 'topic' => $row['ID_TOPIC'], 'poster' => array( 'id' => $row['ID_MEMBER'], 'name' => $row['posterName'], 'href' => empty($row['ID_MEMBER']) ? '' : $scripturl . '?action=profile;u=' . $row['ID_MEMBER'], 'link' => empty($row['ID_MEMBER']) ? $row['posterName'] : '' . $row['posterName'] . '' ), 'subject' => $row['subject'], 'short_subject' => strlen(un_htmlspecialchars($row['subject'])) > 24 ? strtr(substr(strtr($row['subject'], array('<' => '<', '>' => '>', '"' => '"')), 0, 24) . '...', array('<' => '<', '>' => '>', '"' => '"')) : $row['subject'], 'preview' => $row['body'], 'time' => timeformat($row['posterTime']), 'timestamp' => $row['posterTime'], 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.new;topicseen#new', 'link' => '' . $row['subject'] . '' ); } mysql_free_result($request); return $posts; } // Find the ten most recent posts. function RecentPosts() { global $txt, $scripturl, $db_prefix, $user_info, $context, $ID_MEMBER, $modSettings, $sourcedir; // They're deleting something... just skip back to it. if (isset($_GET['delete'])) { // Luckily, removeMessage() checks permissions for us. require_once($sourcedir . '/RemoveTopic.php'); removeMessage((int) $_GET['delete']); redirectexit('action=recent'); } loadTemplate('Recent'); $context['page_title'] = $txt[214]; // Find the 10 most recent messages they can *view*. $request = db_query(" SELECT m.ID_MSG FROM {$db_prefix}messages AS m, {$db_prefix}boards AS b WHERE b.ID_BOARD = m.ID_BOARD" . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? " AND b.ID_BOARD != $modSettings[recycle_board]" : '') . " AND $user_info[query_see_board] ORDER BY m.ID_MSG DESC LIMIT 10", __FILE__, __LINE__); $messages = array(); while ($row = mysql_fetch_assoc($request)) $messages[] = $row['ID_MSG']; mysql_free_result($request); if (empty($messages)) { $context['posts'] = array(); return; } // Get all the most recent posts. $request = db_query(" SELECT m.ID_MSG, m.subject, m.smileysEnabled, m.posterTime, m.body, m.ID_TOPIC, t.ID_BOARD, b.ID_CAT, b.name AS bname, c.name AS cname, t.numReplies, m.ID_MEMBER, m2.ID_MEMBER AS ID_FIRST_MEMBER, IFNULL(mem2.realName, m2.posterName) AS firstPosterName, t.ID_FIRST_MSG, IFNULL(mem.realName, m.posterName) AS posterName, t.ID_LAST_MSG FROM {$db_prefix}messages AS m, {$db_prefix}messages AS m2, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}categories AS c LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER) LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = m2.ID_MEMBER) WHERE m2.ID_MSG = t.ID_FIRST_MSG AND t.ID_TOPIC = m.ID_TOPIC AND b.ID_BOARD = t.ID_BOARD AND c.ID_CAT = b.ID_CAT AND m.ID_MSG IN (" . implode(', ', $messages) . ") ORDER BY m.ID_MSG DESC LIMIT 0, 10", __FILE__, __LINE__); $counter = 1; $context['posts'] = array(); $board_ids = array('own' => array(), 'any' => array()); while ($row = mysql_fetch_assoc($request)) { // Censor everything. censorText($row['body']); censorText($row['subject']); // BBC-atize the message. $row['body'] = doUBBC($row['body'], $row['smileysEnabled']); // And build the array. $context['posts'][$row['ID_MSG']] = array( 'id' => $row['ID_MSG'], 'counter' => $counter++, 'category' => array( 'id' => $row['ID_CAT'], 'name' => $row['cname'], 'href' => $scripturl . '#' . $row['ID_CAT'], 'link' => '' . $row['cname'] . '' ), 'board' => array( 'id' => $row['ID_BOARD'], 'name' => $row['bname'], 'href' => $scripturl . '?board=' . $row['ID_BOARD'] . '.0', 'link' => '' . $row['bname'] . '' ), 'topic' => $row['ID_TOPIC'], 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'], 'link' => '' . $row['subject'] . '', 'start' => $row['numReplies'], 'subject' => $row['subject'], 'time' => timeformat($row['posterTime']), 'timestamp' => $row['posterTime'], 'first_poster' => array( 'id' => $row['ID_FIRST_MEMBER'], 'name' => $row['firstPosterName'], 'href' => empty($row['ID_FIRST_MEMBER']) ? '' : $scripturl . '?action=profile;u=' . $row['ID_FIRST_MEMBER'], 'link' => empty($row['ID_FIRST_MEMBER']) ? $row['firstPosterName'] : '' . $row['firstPosterName'] . '' ), 'poster' => array( 'id' => $row['ID_MEMBER'], 'name' => $row['posterName'], 'href' => empty($row['ID_MEMBER']) ? '' : $scripturl . '?action=profile;u=' . $row['ID_MEMBER'], 'link' => empty($row['ID_MEMBER']) ? $row['posterName'] : '' . $row['posterName'] . '' ), 'message' => $row['body'], 'can_reply' => false, 'can_mark_notify' => false, 'can_delete' => false, 'delete_possible' => $row['ID_FIRST_MSG'] != $row['ID_MSG'] || $row['ID_LAST_MSG'] == $row['ID_MSG'] ); if ($ID_MEMBER == $row['ID_FIRST_MEMBER']) $board_ids['own'][$row['ID_BOARD']][] = $row['ID_MSG']; $board_ids['any'][$row['ID_BOARD']][] = $row['ID_MSG']; } mysql_free_result($request); // There might be - and are - different permissions between any and own. $permissions = array( 'own' => array( 'post_reply_own' => 'can_reply', 'remove_own' => 'can_delete', ), 'any' => array( 'post_reply_any' => 'can_reply', 'mark_any_notify' => 'can_mark_notify', 'remove_any' => 'can_delete', ) ); // Now go through all the permissions, looking for boards they can do it on. foreach ($permissions as $type => $list) foreach ($list as $permission => $allowed) { // They can do it on these boards... $boards = boardsAllowedTo($permission); // If 0 is the only thing in the array, they can do it everywhere! if (!empty($boards) && $boards[0] == 0) $boards = array_keys($board_ids[$type]); // Go through the boards, and look for posts they can do this on. foreach ($boards as $board_id) { // Hmm, they have permission, but there are no topics from that board on this page. if (!isset($board_ids[$type][$board_id])) continue; // Okay, looks like they can do it for these posts. foreach ($board_ids[$type][$board_id] as $counter) $context['posts'][$counter][$allowed] = true; } } // Some posts - the first posts - can't just be deleted. foreach ($context['posts'] as $counter => $dummy) $context['posts'][$counter]['can_delete'] &= $context['posts'][$counter]['delete_possible']; } // Find unread topics and replies. function UnreadTopics() { global $board, $txt, $scripturl, $db_prefix, $sourcedir; global $ID_MEMBER, $user_info, $context, $modSettings; // Guests can't have unread things, we don't know anything about them. is_not_guest(); $context['sub_template'] = $_REQUEST['action'] == 'unread' ? 'unread' : 'replies'; $context['showing_all_topics'] = isset($_GET['all']); if ($_REQUEST['action'] == 'unread') $context['page_title'] = $context['showing_all_topics'] ? $txt['unread_topics_all'] : $txt['unread_topics_visit']; else $context['page_title'] = $txt['unread_replies']; $context['linktree'][] = array( 'url' => $scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . (empty($board) ? '' : ';board=' . $board . '.0'), 'name' => $context['page_title'] ); loadTemplate('Recent'); $is_topics = $_REQUEST['action'] == 'unread'; // Are we specifying any specific board? if (!empty($board)) $query_this_board = 'b.ID_BOARD = ' . $board; else { $query_this_board = $user_info['query_see_board']; // Don't bother to show deleted posts! if (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0) $query_this_board .= ' AND b.ID_BOARD != ' . $modSettings['recycle_board']; } // This part is the same for each query. $select_clause = ' ms.subject AS firstSubject, ms.posterTime AS firstPosterTime, ms.ID_TOPIC, t.ID_BOARD, b.name AS bname, t.numReplies, t.numViews, ms.ID_MEMBER AS ID_FIRST_MEMBER, ml.ID_MEMBER AS ID_LAST_MEMBER, ml.posterTime AS lastPosterTime, IFNULL(mems.realName, ms.posterName) AS firstPosterName, IFNULL(meml.realName, ml.posterName) AS lastPosterName, ml.subject AS lastSubject, ml.icon AS lastIcon, ms.icon AS firstIcon, t.ID_POLL, t.isSticky, t.locked, ml.modifiedTime AS lastModifiedTime, IFNULL(lt.logTime, IFNULL(lmr.logTime, 0)) AS isRead, LEFT(ml.body, 384) AS lastBody, LEFT(ms.body, 384) AS firstBody, ml.smileysEnabled AS lastSmileys, ms.smileysEnabled AS firstSmileys, t.ID_FIRST_MSG, t.ID_LAST_MSG'; if ($context['showing_all_topics'] || !$is_topics) { if (!empty($board)) { $request = db_query(" SELECT MIN(logTime) FROM {$db_prefix}log_mark_read WHERE ID_MEMBER = $ID_MEMBER AND ID_BOARD = $board", __FILE__, __LINE__); list ($earliest_time) = mysql_fetch_row($request); mysql_free_result($request); } else { $request = db_query(" SELECT MIN(lmr.logTime) FROM {$db_prefix}boards AS b LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_MEMBER = $ID_MEMBER AND lmr.ID_BOARD = b.ID_BOARD) WHERE $user_info[query_see_board]", __FILE__, __LINE__); list ($earliest_time) = mysql_fetch_row($request); mysql_free_result($request); } $request = db_query(" SELECT MIN(logTime) FROM {$db_prefix}log_topics WHERE ID_MEMBER = $ID_MEMBER", __FILE__, __LINE__); list ($earliest_time2) = mysql_fetch_row($request); mysql_free_result($request); if ($earliest_time2 < $earliest_time) $earliest_time = (int) $earliest_time2; else $earliest_time = (int) $earliest_time; } if ($is_topics) { $request = db_query(" SELECT COUNT(DISTINCT t.ID_TOPIC), MIN(t.ID_LAST_MSG) FROM {$db_prefix}messages AS ml, {$db_prefix}topics AS t, {$db_prefix}boards AS b LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = t.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER) WHERE b.ID_BOARD = t.ID_BOARD AND $query_this_board" . ($context['showing_all_topics'] ? " AND ml.posterTime >= $earliest_time" : " AND t.ID_LAST_MSG > $_SESSION[ID_MSG_LAST_VISIT]") . " AND ml.ID_MSG = t.ID_LAST_MSG AND IFNULL(lt.logTime, IFNULL(lmr.logTime, 0)) < ml.posterTime", __FILE__, __LINE__); list ($num_topics, $min_message) = mysql_fetch_row($request); mysql_free_result($request); // Make sure the starting place makes sense and construct the page index. if (empty($board)) $context['page_index'] = constructPageIndex($scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : ''), $_REQUEST['start'], $num_topics, $modSettings['defaultMaxTopics']); else $context['page_index'] = constructPageIndex($scripturl . '?action=' . $_REQUEST['action'] . ($context['showing_all_topics'] ? ';all' : '') . ';board=' . $board, $_REQUEST['start'], $num_topics, $modSettings['defaultMaxTopics'], true); $context['current_page'] = (int) $_REQUEST['start'] / $modSettings['defaultMaxTopics']; if ($num_topics == 0) { $context['topics'] = array(); return; } else $min_message = (int) $min_message; $request = db_query(" SELECT $select_clause FROM {$db_prefix}messages AS ms, {$db_prefix}messages AS ml, {$db_prefix}topics AS t, {$db_prefix}boards AS b 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) LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = t.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER) WHERE t.ID_TOPIC = ms.ID_TOPIC AND b.ID_BOARD = t.ID_BOARD AND $query_this_board AND ms.ID_MSG = t.ID_FIRST_MSG AND ml.ID_MSG = t.ID_LAST_MSG AND t.ID_LAST_MSG >= $min_message AND IFNULL(lt.logTime, IFNULL(lmr.logTime, 0)) < ml.posterTime ORDER BY ml.ID_MSG DESC LIMIT $_REQUEST[start], $modSettings[defaultMaxTopics]", __FILE__, __LINE__); } else { $request = db_query(" SELECT COUNT(DISTINCT t.ID_TOPIC), MIN(t.ID_LAST_MSG) FROM {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ml, {$db_prefix}messages AS m LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = t.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER) WHERE m.ID_TOPIC = t.ID_TOPIC AND m.ID_MEMBER = $ID_MEMBER AND ml.ID_MSG = t.ID_LAST_MSG AND b.ID_BOARD = t.ID_BOARD AND $query_this_board AND ml.posterTime >= $earliest_time AND IFNULL(lt.logTime, IFNULL(lmr.logTime, 0)) < ml.posterTime", __FILE__, __LINE__); list ($num_topics, $min_message) = mysql_fetch_row($request); mysql_free_result($request); // Make sure the starting place makes sense and construct the page index. if (empty($board)) $context['page_index'] = constructPageIndex($scripturl . '?action=' . $_REQUEST['action'], $_REQUEST['start'], $num_topics, $modSettings['defaultMaxTopics']); else $context['page_index'] = constructPageIndex($scripturl . '?action=' . $_REQUEST['action'] . ';board=' . $board, $_REQUEST['start'], $num_topics, $modSettings['defaultMaxTopics'], true); $context['current_page'] = (int) $_REQUEST['start'] / $modSettings['defaultMaxTopics']; if ($num_topics == 0) { $context['topics'] = array(); return; } else $min_message = (int) $min_message; $request = db_query(" SELECT DISTINCT t.ID_TOPIC FROM {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ml, {$db_prefix}messages AS m LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER) WHERE ml.ID_MEMBER != $ID_MEMBER AND m.ID_TOPIC = t.ID_TOPIC AND m.ID_MEMBER = $ID_MEMBER AND ml.ID_MSG = t.ID_LAST_MSG AND b.ID_BOARD = t.ID_BOARD AND $query_this_board AND t.ID_LAST_MSG >= $min_message AND IFNULL(lt.logTime, IFNULL(lmr.logTime, 0)) < ml.posterTime ORDER BY ml.ID_MSG DESC LIMIT $_REQUEST[start], $modSettings[defaultMaxTopics]", __FILE__, __LINE__); $topics = array(); while ($row = mysql_fetch_assoc($request)) $topics[] = $row['ID_TOPIC']; mysql_free_result($request); // Sanity... where have you gone? if (empty($topics)) { $context['topics'] = array(); return; } $request = db_query(" SELECT $select_clause FROM {$db_prefix}messages AS ms, {$db_prefix}messages AS ml, {$db_prefix}topics AS t, {$db_prefix}boards AS b 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) LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = t.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER) WHERE t.ID_TOPIC IN (" . implode(', ', $topics) . ") AND t.ID_TOPIC = ms.ID_TOPIC AND b.ID_BOARD = t.ID_BOARD AND ms.ID_MSG = t.ID_FIRST_MSG AND ml.ID_MSG = t.ID_LAST_MSG ORDER BY ml.ID_MSG DESC LIMIT " . count($topics), __FILE__, __LINE__); } $context['topics'] = array(); $topic_ids = array(); while ($row = mysql_fetch_assoc($request)) { if ($row['ID_POLL'] > 0 && $modSettings['pollMode'] == '0') continue; $topic_ids[] = $row['ID_TOPIC']; // Clip the strings first because censoring is slow :/. (for some reason?) $row['firstBody'] = strip_tags(strtr(doUBBC($row['firstBody'], $row['firstSmileys']), array('
' => ' '))); if (strlen($row['firstBody']) > 128) $row['firstBody'] = substr($row['firstBody'], 0, 128) . '...'; $row['lastBody'] = strip_tags(strtr(doUBBC($row['lastBody'], $row['lastSmileys']), array('
' => ' '))); if (strlen($row['lastBody']) > 128) $row['lastBody'] = substr($row['lastBody'], 0, 128) . '...'; // Do a bit of censoring... censorText($row['firstSubject']); censorText($row['firstBody']); // But don't do it twice, it can be a slow ordeal! if ($row['ID_FIRST_MSG'] == $row['ID_LAST_MSG']) { $row['lastSubject'] = $row['firstSubject']; $row['lastBody'] = $row['firstBody']; } else { censorText($row['lastSubject']); censorText($row['lastBody']); } // Decide how many pages the topic should have. $topic_length = $row['numReplies'] + 1; if ($topic_length > $modSettings['defaultMaxMessages']) { $tmppages = array(); $tmpa = 1; for ($tmpb = 0; $tmpb < $topic_length; $tmpb += $modSettings['defaultMaxMessages']) { $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[190] . ''; $pages .= ' »'; } else $pages = ''; // And build the array. $context['topics'][$row['ID_TOPIC']] = array( 'id' => $row['ID_TOPIC'], 'first_post' => array( 'member' => array( 'name' => $row['firstPosterName'], 'id' => $row['ID_FIRST_MEMBER'], 'href' => $scripturl . '?action=profile;u=' . $row['ID_FIRST_MEMBER'], 'link' => !empty($row['ID_FIRST_MEMBER']) ? '' . $row['firstPosterName'] . '' : $row['firstPosterName'] ), 'time' => timeformat($row['firstPosterTime']), 'timestamp' => $row['firstPosterTime'], 'subject' => $row['firstSubject'], 'preview' => $row['firstBody'], 'icon' => $row['firstIcon'], 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0;topicseen', 'link' => '' . $row['firstSubject'] . '' ), 'last_post' => array( 'member' => array( 'name' => $row['lastPosterName'], 'id' => $row['ID_LAST_MEMBER'], 'href' => $scripturl . '?action=profile;u=' . $row['ID_LAST_MEMBER'], 'link' => !empty($row['ID_LAST_MEMBER']) ? '' . $row['lastPosterName'] . '' : $row['lastPosterName'] ), 'time' => timeformat($row['lastPosterTime']), 'timestamp' => $row['lastPosterTime'], 'subject' => $row['lastSubject'], 'preview' => $row['lastBody'], 'icon' => $row['lastIcon'], 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['ID_LAST_MSG']) . ';topicseen#msg' . $row['ID_LAST_MSG'], 'link' => '' . $row['lastSubject'] . '' ), 'newtime' => $row['isRead'], 'new_href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.from' . $row['isRead'] . ';topicseen#new', 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.from' . $row['isRead']) . ';topicseen#new', 'link' => '' . $row['firstSubject'] . '', 'is_sticky' => !empty($modSettings['enableStickyTopics']) && !empty($row['isSticky']), 'is_locked' => !empty($row['locked']), 'is_poll' => $modSettings['pollMode'] == '1' && $row['ID_POLL'] > 0, 'is_hot' => $row['numReplies'] >= $modSettings['hotTopicPosts'], 'is_very_hot' => $row['numReplies'] >= $modSettings['hotTopicVeryPosts'], 'is_posted_in' => false, 'icon' => $row['firstIcon'], 'subject' => $row['firstSubject'], 'pages' => $pages, 'replies' => $row['numReplies'], 'views' => $row['numViews'], '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']]); } mysql_free_result($request); if ($is_topics && !empty($modSettings['enableParticipation']) && !empty($topic_ids)) { $result = db_query(" SELECT ID_TOPIC FROM {$db_prefix}messages WHERE ID_TOPIC IN (" . implode(', ', $topic_ids) . ") AND ID_MEMBER = $ID_MEMBER", __FILE__, __LINE__); while ($row = mysql_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']; } } mysql_free_result($result); } $context['topics_to_mark'] = implode('-', $topic_ids); } ?>