'; ## ## } ## ## ## ############################################################################### function phpbb_fetch_posts($forum_id = null, $fetch_mode = POSTS_FETCH_FIRST) { global $CFG, $userdata; // // sanity check for dates // if ($CFG['posts_date_offset_start'] >= $CFG['posts_date_offset_end']) { phpbb_raise_error('\'posts_date_offset_start\' has to be smaller ' . 'than \'posts_date_offset_end\''); } // // create a list of forums with read permission // (only takes action when auth_check is enabled) // phpbb_get_auth_list(); // // determine the forum list based on the user input // and/or permissions (depends on auth check) // $forum_list = phpbb_get_forum_list($forum_id); // // if read permissions do not allow us to fetch anything // we return nicely // if (!$forum_list and $CFG['auth_check']) { return; } $sql = 'SELECT f.*, p.*, pt.*, t.*, u.*'; if (!$CFG['posts_hide_ranks']) { $sql .= ', r.*'; } $sql .= ' FROM ' . TOPICS_TABLE . ' AS t, ' . USERS_TABLE . ' AS u, ' . POSTS_TEXT_TABLE . ' AS pt, ' . POSTS_TABLE . ' AS p, ' . FORUMS_TABLE . ' AS f'; if (!$CFG['posts_hide_ranks']) { $sql .= ', ' . RANKS_TABLE . ' AS r'; } $sql .= ' WHERE'; if ($forum_list) { $sql .= ' t.forum_id IN (' . $forum_list . ') AND'; } if ($fetch_mode == POSTS_FETCH_FIRST) { $sql .= ' t.topic_first_post_id = pt.post_id AND t.topic_first_post_id = p.post_id AND'; } else { $sql .= ' t.topic_last_post_id = pt.post_id AND t.topic_last_post_id = p.post_id AND'; } if ($CFG['posts_date_offset_start']) { $sql .= ' p.post_time >= ' . $CFG['posts_date_offset_start'] . ' AND'; } if ($CFG['posts_date_offset_end']) { $sql .= ' p.post_time <= ' . $CFG['posts_date_offset_end'] . ' AND'; } if ($CFG['posts_hide_normal']) { $sql .= ' t.topic_type <> 0 AND'; } if ($CFG['posts_hide_sticky']) { $sql .= ' t.topic_type <> 1 AND'; } if ($CFG['posts_hide_announcements']) { $sql .= ' t.topic_type <> 2 AND'; } if ($CFG['posts_hide_locked']) { $sql .= ' t.topic_status <> 1 AND'; } if ($CFG['posts_hide_moved']) { $sql .= ' t.topic_status <> 2 AND'; } if ($CFG['posts_hide_polls']) { $sql .= ' t.topic_vote <> 1 AND'; } if ($CFG['posts_search_string']) { $sql .= ' (' . $CFG['posts_search_string'] . ') AND'; } $sql .= ' t.forum_id = f.forum_id AND'; if (!$CFG['posts_hide_ranks']) { $sql .= ' r.rank_id = u.user_rank AND'; } $sql .= ' u.user_id = p.poster_id'; $sql .= ' ORDER BY ' . $CFG['posts_order']; if ($CFG['posts_span_pages']) { $CFG['posts_span_pages_numrows'] = phpbb_numrows(phpbb_query($sql)); if ($CFG['posts_span_pages_offset'] > $CFG['posts_span_pages_numrows']) { $CFG['posts_span_pages_offset'] = $CFG['posts_span_pages_numrows'] - 1; } $CFG['posts_offset'] = $CFG['posts_span_pages_offset']; } else { $CFG['posts_offset'] = 0; } if ($CFG['posts_limit'] != 0) { $sql .= ' LIMIT ' . $CFG['posts_offset'] . ',' . $CFG['posts_limit']; } $result = phpbb_fetch_rows($sql); if ($result) { $orig_word = array(); $replacement_word = array(); obtain_word_list($orig_word, $replacement_word); for ($i = 0; $i < count($result); $i++) { $result[$i]['post_time'] = $result[$i]['post_time'] + $CFG['time_zone']; $result[$i]['topic_time'] = $result[$i]['topic_time'] + $CFG['time_zone']; $result[$i]['date'] = date($CFG['date_format'], $result[$i]['post_time']); $result[$i]['time'] = date($CFG['time_format'], $result[$i]['post_time']); if (isset($result[$i]['post_edit_time'])) { $result[$i]['edit_date'] = date($CFG['date_format'], $result[$i]['post_edit_time']); $result[$i]['edit_time'] = date($CFG['time_format'], $result[$i]['post_edit_time']); } else { $result[$i]['edit_date'] = ''; $result[$i]['edit_time'] = ''; } $result[$i]['post_text'] = phpbb_parse_text( $result[$i]['post_text'], $result[$i]['bbcode_uid'], $result[$i]['enable_smilies'], $CFG['posts_enable_bbcode'], $CFG['posts_hide_images'], $CFG['posts_replace_images']); if (count($orig_word)) { $result[$i]['topic_title'] = preg_replace($orig_word, $replacement_word, $result[$i]['topic_title']); $result[$i]['post_text'] = preg_replace($orig_word, $replacement_word, $result[$i]['post_text']); } $result[$i]['trimmed'] = false; phpbb_trim_text($result[$i]['post_text'], $result[$i]['trimmed'], $CFG['posts_trim_text_character'], $CFG['posts_trim_text_number'], $CFG['posts_trim_text_words']); $result[$i]['topic_trimmed'] = false; phpbb_trim_text($result[$i]['topic_title'], $result[$i]['topic_trimmed'], '', $CFG['posts_trim_topic_number'], ''); } } return $result; } // end func phpbb_fetch_posts ############################################################################### ## ## ## phpbb_fetch_topics() ## ## ------------------------------------------------------------------------- ## ## This function will fetch the first or the last posting from one or more ## ## topics specified by topic id. The only difference to phpbb_fetch_posts() ## ## is that this function will fetch by topic id instead of forum id. ## ## ## ## PARAMETER ## ## ## ## topic_id ## ## ## ## Can be left blank to fetch from all topicsor set to a single ## ## topic id to fetch that specific topic To fetch from multiple ## ## topics you can parse an array to it. ## ## ## ## fetch_mode ## ## ## ## Set it to POSTS_FETCH_FIRST to fetch the first postings of a ## ## topic (i.e. the posts which started the topic) or set it to ## ## POSTS_FETCH_LAST to fetch the last postings of a topic. ## ## ## ## EXAMPLE ## ## ## ## $news = phpbb_fetch_topics(); ## ## ## ## for ($i = 0; $i < count($news); $i++) ## ## { ## ## echo $news[$i]['topic_title'] . '
'; ## ## } ## ## ## ############################################################################### function phpbb_fetch_topics($topic_id = null, $fetch_mode = POSTS_FETCH_FIRST) { global $CFG, $userdata; $topic_list = ''; if (!is_array($topic_id)) { $topic_list = $topic_id; } else { for ($i = 0; $i < count($topic_id); $i++) { $topic_list .= $topic_id[$i] . ','; } if ($topic_list) { $topic_list = substr($topic_list, 0, strlen($topic_list) -1); } } $sql = 'SELECT f.*, p.*, pt.*, t.*, u.*'; if (!$CFG['posts_hide_ranks']) { $sql .= ', r.*'; } $sql .= ' FROM ' . TOPICS_TABLE . ' AS t, ' . USERS_TABLE . ' AS u, ' . POSTS_TEXT_TABLE . ' AS pt, ' . POSTS_TABLE . ' AS p, ' . FORUMS_TABLE . ' AS f'; if (!$CFG['posts_hide_ranks']) { $sql .= ', ' . RANKS_TABLE . ' AS r'; } $sql .= ' WHERE u.user_id = p.poster_id AND'; if ($topic_list) { $sql .= ' t.topic_id IN (' . $topic_list . ') AND'; } if ($fetch_mode == POSTS_FETCH_FIRST) { $sql .= ' t.topic_first_post_id = pt.post_id AND t.topic_first_post_id = p.post_id AND'; } else { $sql .= ' t.topic_last_post_id = pt.post_id AND t.topic_last_post_id = p.post_id AND'; } $sql .= ' t.forum_id = f.forum_id'; if (!$CFG['posts_hide_ranks']) { $sql .= ' AND r.rank_id = u.user_rank'; } $result = phpbb_fetch_rows($sql); if ($result) { if ($CFG['auth_check']) { phpbb_get_auth_list(); $authed = array(); for ($i = 0; $i < count($result); $i++) { if (in_array($result[$i]['forum_id'], $CFG['auth_list'])) { $authed[] = $result[$i]; } } $result = $authed; } $orig_word = array(); $replacement_word = array(); obtain_word_list($orig_word, $replacement_word); for ($i = 0; $i < count($result); $i++) { $result[$i]['post_time'] = $result[$i]['post_time'] + $CFG['time_zone']; $result[$i]['topic_time'] = $result[$i]['topic_time'] + $CFG['time_zone']; $result[$i]['post_edit_time'] = $result[$i]['post_edit_time'] + $CFG['time_zone']; $result[$i]['date'] = date($CFG['date_format'], $result[$i]['post_time']); $result[$i]['time'] = date($CFG['time_format'], $result[$i]['post_time']); $result[$i]['edit_date'] = date($CFG['date_format'], $result[$i]['post_edit_time']); $result[$i]['edit_time'] = date($CFG['time_format'], $result[$i]['post_edit_time']); $result[$i]['post_text'] = phpbb_parse_text( $result[$i]['post_text'], $result[$i]['bbcode_uid'], $result[$i]['enable_smilies'], $CFG['posts_enable_bbcode'], $CFG['posts_hide_images'], $CFG['posts_replace_images']); if (count($orig_word)) { $result[$i]['topic_title'] = preg_replace($orig_word, $replacement_word, $result[$i]['topic_title']); $result[$i]['post_text'] = preg_replace($orig_word, $replacement_word, $result[$i]['post_text']); } $result[$i]['trimmed'] = false; phpbb_trim_text($result[$i]['post_text'], $result[$i]['trimmed'], $CFG['posts_trim_text_character'], $CFG['posts_trim_text_number'], $CFG['posts_trim_text_words']); $result[$i]['topic_trimmed'] = false; phpbb_trim_text($result[$i]['topic_title'], $result[$i]['topic_trimmed'], '', $CFG['posts_trim_topic_number'], ''); } if (is_array($topic_id)) { $sorted = array(); for ($i = 0; $i < count($topic_id); $i++) { for ($j = 0; $j < count($result); $j++) { if ($topic_id[$i] == $result[$j]['topic_id']) { $sorted[] = $result[$j]; } } } $result = $sorted; } } return $result; } // end func phpbb_fetch_topics ############################################################################### ## ## ## phpbb_fetch_new_posts() ## ## ------------------------------------------------------------------------- ## ## Fetches the number of new posts since the last visit. ## ## ## ## EXAMPLE ## ## ## ## $new_posts = phpbb_fetch_new_posts(); ## ## ## ## echo 'There are ' . $new_posts . ' new posts for you.'; ## ## ## ############################################################################### function phpbb_fetch_new_posts() { global $userdata; $result['total'] = 0; if ($userdata['session_logged_in']) { $sql = 'SELECT COUNT(post_id) AS total FROM ' . POSTS_TABLE . ' WHERE post_time >= ' . $userdata['user_lastvisit']; $result = phpbb_fetch_row($sql); } return $result; } ############################################################################### ## ## ## phpbb_fetch_thread() ## ## ------------------------------------------------------------------------- ## ## This function will fetch an entire thread by topic id. ## ## ## ## PARAMETER ## ## ## ## topic_id ## ## ## ## Must be set to a single topic id. ## ## ## ## EXAMPLE ## ## ## ## $topic = phpbb_fetch_thread(1); ## ## ## ## for ($i = 0; $i < count($topic); $i++) ## ## { ## ## echo $topic[$i]['post_text'] . '
'; ## ## } ## ## ## ############################################################################### function phpbb_fetch_thread($topic_id = null) { global $CFG, $userdata; if (!$topic_id) { phpbb_raise_error('no topic id specified', __FILE__, __LINE__); } $sql = 'SELECT p.*, pt.*, u.*'; if (!$CFG['posts_hide_ranks']) { $sql .= ', r.*'; } $sql .= ' FROM ' . USERS_TABLE . ' AS u, ' . POSTS_TEXT_TABLE . ' AS pt, ' . POSTS_TABLE . ' AS p'; if (!$CFG['posts_hide_ranks']) { $sql .= ', ' . RANKS_TABLE . ' AS r'; } $sql .= ' WHERE p.topic_id = ' . $topic_id . ' AND u.user_id = p.poster_id AND pt.post_id = p.post_id AND u.user_id = p.poster_id'; if (!$CFG['posts_hide_ranks']) { $sql .= ' AND r.rank_id = u.user_rank'; } if ($CFG['posts_search_string']) { $sql .= ' AND (' . $CFG['posts_search_string'] . ')'; } $sql .= ' ORDER BY ' . $CFG['posts_order']; if ($CFG['posts_span_pages']) { $CFG['posts_span_pages_numrows'] = phpbb_numrows(phpbb_query($sql)); if ($CFG['posts_span_pages_offset'] > $CFG['posts_span_pages_numrows']) { $CFG['posts_span_pages_offset'] = $CFG['posts_span_pages_numrows'] - 1; } $CFG['posts_offset'] = $CFG['posts_span_pages_offset']; } else { $CFG['posts_offset'] = 0; } if ($CFG['posts_limit'] != 0) { $sql .= ' LIMIT ' . $CFG['posts_offset'] . ',' . $CFG['posts_limit']; } $result = phpbb_fetch_rows($sql); if ($result) { if ($CFG['auth_check']) { phpbb_get_auth_list(); $authed = array(); for ($i = 0; $i < count($result); $i++) { if (in_array($result[$i]['forum_id'], $CFG['auth_list'])) { $authed[] = $result[$i]; } } $result = $authed; } $orig_word = array(); $replacement_word = array(); obtain_word_list($orig_word, $replacement_word); for ($i = 0; $i < count($result); $i++) { $result[$i]['post_time'] = $result[$i]['post_time'] + $CFG['time_zone']; $result[$i]['topic_time'] = $result[$i]['topic_time'] + $CFG['time_zone']; $result[$i]['post_edit_time'] = $result[$i]['post_edit_time'] + $CFG['time_zone']; $result[$i]['date'] = date($CFG['date_format'], $result[$i]['post_time']); $result[$i]['time'] = date($CFG['time_format'], $result[$i]['post_time']); $result[$i]['edit_date'] = date($CFG['date_format'], $result[$i]['post_edit_time']); $result[$i]['edit_time'] = date($CFG['time_format'], $result[$i]['post_edit_time']); $result[$i]['post_text'] = phpbb_parse_text( $result[$i]['post_text'], $result[$i]['bbcode_uid'], $result[$i]['enable_smilies'], $CFG['posts_enable_bbcode'], $CFG['posts_hide_images'], $CFG['posts_replace_images']); if (count($orig_word)) { $result[$i]['topic_title'] = preg_replace($orig_word, $replacement_word, $result[$i]['topic_title']); $result[$i]['post_text'] = preg_replace($orig_word, $replacement_word, $result[$i]['post_text']); } $result[$i]['trimmed'] = false; phpbb_trim_text($result[$i]['post_text'], $result[$i]['trimmed'], $CFG['posts_trim_text_character'], $CFG['posts_trim_text_number'], $CFG['posts_trim_text_words']); $result[$i]['topic_trimmed'] = false; phpbb_trim_text($result[$i]['topic_title'], $result[$i]['topic_trimmed'], '', $CFG['posts_trim_topic_number'], ''); } if (is_array($topic_id)) { $sorted = array(); for ($i = 0; $i < count($topic_id); $i++) { for ($j = 0; $j < count($result); $j++) { if ($topic_id[$i] == $result[$j]['topic_id']) { $sorted[] = $result[$j]; } } } $result = $sorted; } } return $result; } // end func phpbb_fetch_thread ############################################################################### ## ## ## phpbb_fetch_newposts() ## ## ------------------------------------------------------------------------- ## ## This function will fetch new postings based on the user session. It's has ## ## the same results as the search.php?search_id=newposts script. ## ## ## ## EXAMPLE ## ## ## ## $newposts = phpbb_fetch_newposts(); ## ## ## ## for ($i = 0; $i < count($newposts); $i++) ## ## { ## ## echo $newposts[$i]['post_text'] . '
'; ## ## } ## ## ## ############################################################################### function phpbb_fetch_newposts() { global $CFG, $userdata; if (!$userdata['session_logged_in']) { return; } $sql = 'SELECT post_id FROM ' . POSTS_TABLE . ' WHERE post_time >= ' . $userdata['user_lastvisit']; $result = phpbb_fetch_rows($sql); if (!$result) { return; } $search_ids = array(); for ($i = 0; $i < count($result); $i++) { $search_ids[] = $result[$i]['post_id']; } $sql = 'SELECT topic_id FROM ' . POSTS_TABLE . ' WHERE post_id IN (' . implode(', ', $search_ids) . ') GROUP BY topic_id ORDER BY post_time DESC'; $result = phpbb_fetch_rows($sql); if (!$result) { return; } $topic_ids = array(); for ($i = 0; $i < count($result); $i++) { $topic_ids[] = $result[$i]['topic_id']; } $result = phpbb_fetch_topics($topic_ids, POSTS_FETCH_LAST); return $result; } // end func phpbb_fetch_newposts ?>