phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / search.php

History | View | Annotate | Download (43.3 kB)

1 1350 psotfx
<?php
2 8146 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package phpBB3
5 5114 acydburn
* @version $Id$
6 8146 acydburn
* @copyright (c) 2005 phpBB Group
7 8146 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5114 acydburn
*
9 5114 acydburn
*/
10 368 psotfx
11 5114 acydburn
/**
12 5883 acydburn
* @ignore
13 5114 acydburn
*/
14 2305 psotfx
define('IN_PHPBB', true);
15 7954 acydburn
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
16 4500 psotfx
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17 6015 acydburn
include($phpbb_root_path . 'common.' . $phpEx);
18 368 psotfx
19 4970 psotfx
// Start session management
20 5236 acydburn
$user->session_begin();
21 4970 psotfx
$auth->acl($user->data);
22 4970 psotfx
$user->setup('search');
23 4970 psotfx
24 4500 psotfx
// Define initial vars
25 5441 naderman
$mode                        = request_var('mode', '');
26 5441 naderman
$search_id                = request_var('search_id', '');
27 5441 naderman
$start                        = max(request_var('start', 0), 0);
28 5441 naderman
$post_id                = request_var('p', 0);
29 5441 naderman
$topic_id                = request_var('t', 0);
30 5441 naderman
$view                        = request_var('view', '');
31 4500 psotfx
32 5727 naderman
$submit                        = request_var('submit', false);
33 7920 acydburn
$keywords                = utf8_normalize_nfc(request_var('keywords', '', true));
34 7920 acydburn
$add_keywords        = utf8_normalize_nfc(request_var('add_keywords', '', true));
35 7780 naderman
$author                        = request_var('author', '', true);
36 5981 naderman
$author_id                = request_var('author_id', 0);
37 5552 naderman
$show_results        = ($topic_id) ? 'posts' : request_var('sr', 'posts');
38 5727 naderman
$show_results        = ($show_results == 'posts') ? 'posts' : 'topics';
39 5441 naderman
$search_terms        = request_var('terms', 'all');
40 5441 naderman
$search_fields        = request_var('sf', 'all');
41 5441 naderman
$search_child        = request_var('sc', true);
42 4500 psotfx
43 5441 naderman
$sort_days                = request_var('st', 0);
44 5441 naderman
$sort_key                = request_var('sk', 't');
45 5441 naderman
$sort_dir                = request_var('sd', 'd');
46 4500 psotfx
47 7890 naderman
$return_chars        = request_var('ch', ($topic_id) ? -1 : 300);
48 5441 naderman
$search_forum        = request_var('fid', array(0));
49 4500 psotfx
50 10884 git-gate
// We put login boxes for the case if search_id is newposts, egosearch or unreadposts
51 10426 rxu
// because a guest should be able to log in even if guests search is not permitted
52 10426 rxu
53 10884 git-gate
switch ($search_id)
54 10426 rxu
{
55 10884 git-gate
        // Egosearch is an author search
56 10884 git-gate
        case 'egosearch':
57 10884 git-gate
                $author_id = $user->data['user_id'];
58 10884 git-gate
                if ($user->data['user_id'] == ANONYMOUS)
59 10884 git-gate
                {
60 10884 git-gate
                        login_box('', $user->lang['LOGIN_EXPLAIN_EGOSEARCH']);
61 10884 git-gate
                }
62 10884 git-gate
        break;
63 10426 rxu
64 10884 git-gate
        // Search for unread posts needs to be allowed and user to be logged in if topics tracking for guests is disabled
65 10884 git-gate
        case 'unreadposts':
66 10884 git-gate
                if (!$config['load_unreads_search'])
67 10884 git-gate
                {
68 10884 git-gate
                        $template->assign_var('S_NO_SEARCH', true);
69 10884 git-gate
                        trigger_error('NO_SEARCH_UNREADS');
70 10884 git-gate
                }
71 10884 git-gate
                else if (!$config['load_anon_lastread'] && !$user->data['is_registered'])
72 10884 git-gate
                {
73 10884 git-gate
                        login_box('', $user->lang['LOGIN_EXPLAIN_UNREADSEARCH']);
74 10884 git-gate
                }
75 10884 git-gate
        break;
76 10884 git-gate
77 10884 git-gate
        // The "new posts" search uses user_lastvisit which is user based, so it should require user to log in.
78 10884 git-gate
        case 'newposts':
79 10884 git-gate
                if ($user->data['user_id'] == ANONYMOUS)
80 10884 git-gate
                {
81 10884 git-gate
                        login_box('', $user->lang['LOGIN_EXPLAIN_NEWPOSTS']);
82 10884 git-gate
                }
83 10884 git-gate
        break;
84 10884 git-gate
85 10884 git-gate
        default:
86 10884 git-gate
                // There's nothing to do here for now ;)
87 10884 git-gate
        break;
88 10426 rxu
}
89 10426 rxu
90 3845 psotfx
// Is user able to search? Has search been disabled?
91 5552 naderman
if (!$auth->acl_get('u_search') || !$auth->acl_getf_global('f_search') || !$config['load_search'])
92 3845 psotfx
{
93 7889 acydburn
        $template->assign_var('S_NO_SEARCH', true);
94 7919 kellanved
        trigger_error('NO_SEARCH');
95 3845 psotfx
}
96 3845 psotfx
97 5441 naderman
// Check search load limit
98 5441 naderman
if ($user->load && $config['limit_search_load'] && ($user->load > doubleval($config['limit_search_load'])))
99 5441 naderman
{
100 7889 acydburn
        $template->assign_var('S_NO_SEARCH', true);
101 7919 kellanved
        trigger_error('NO_SEARCH_TIME');
102 5441 naderman
}
103 368 psotfx
104 10767 git-gate
// It is applicable if the configuration setting is non-zero, and the user cannot
105 10767 git-gate
// ignore the flood setting, and the search is a keyword search.
106 5981 naderman
$interval = ($user->data['user_id'] == ANONYMOUS) ? $config['search_anonymous_interval'] : $config['search_interval'];
107 10767 git-gate
if ($interval && !in_array($search_id, array('unreadposts', 'unanswered', 'active_topics', 'egosearch')) && !$auth->acl_get('u_ignoreflood'))
108 4530 psotfx
{
109 5981 naderman
        if ($user->data['user_last_search'] > time() - $interval)
110 4530 psotfx
        {
111 7889 acydburn
                $template->assign_var('S_NO_SEARCH', true);
112 7919 kellanved
                trigger_error('NO_SEARCH_TIME');
113 4530 psotfx
        }
114 4530 psotfx
}
115 4530 psotfx
116 5441 naderman
// Define some vars
117 5705 naderman
$limit_days                = array(0 => $user->lang['ALL_RESULTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
118 5441 naderman
$sort_by_text        = array('a' => $user->lang['SORT_AUTHOR'], 't' => $user->lang['SORT_TIME'], 'f' => $user->lang['SORT_FORUM'], 'i' => $user->lang['SORT_TOPIC_TITLE'], 's' => $user->lang['SORT_POST_SUBJECT']);
119 5441 naderman
120 5441 naderman
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
121 5441 naderman
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
122 5441 naderman
123 5981 naderman
if ($keywords || $author || $author_id || $search_id || $submit)
124 368 psotfx
{
125 5236 acydburn
        // clear arrays
126 5441 naderman
        $id_ary = array();
127 2205 psotfx
128 6655 naderman
        // If we are looking for authors get their ids
129 6655 naderman
        $author_id_ary = array();
130 9713 nickvergessen
        $sql_author_match = '';
131 6655 naderman
        if ($author_id)
132 6655 naderman
        {
133 6655 naderman
                $author_id_ary[] = $author_id;
134 6655 naderman
        }
135 6655 naderman
        else if ($author)
136 6655 naderman
        {
137 6944 naderman
                if ((strpos($author, '*') !== false) && (utf8_strlen(str_replace(array('*', '%'), '', $author)) < $config['min_search_author_chars']))
138 6655 naderman
                {
139 6655 naderman
                        trigger_error(sprintf($user->lang['TOO_FEW_AUTHOR_CHARS'], $config['min_search_author_chars']));
140 6655 naderman
                }
141 6655 naderman
142 7789 acydburn
                $sql_where = (strpos($author, '*') !== false) ? ' username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($author))) : " username_clean = '" . $db->sql_escape(utf8_clean_string($author)) . "'";
143 7788 acydburn
144 6655 naderman
                $sql = 'SELECT user_id
145 6655 naderman
                        FROM ' . USERS_TABLE . "
146 7788 acydburn
                        WHERE $sql_where
147 9732 nickvergessen
                                AND user_type <> " . USER_IGNORE;
148 6655 naderman
                $result = $db->sql_query_limit($sql, 100);
149 6655 naderman
150 6655 naderman
                while ($row = $db->sql_fetchrow($result))
151 6655 naderman
                {
152 6655 naderman
                        $author_id_ary[] = (int) $row['user_id'];
153 6655 naderman
                }
154 6655 naderman
                $db->sql_freeresult($result);
155 6655 naderman
156 9713 nickvergessen
                $sql_where = (strpos($author, '*') !== false) ? ' post_username ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($author))) : " post_username = '" . $db->sql_escape(utf8_clean_string($author)) . "'";
157 9713 nickvergessen
158 9713 nickvergessen
                $sql = 'SELECT 1 as guest_post
159 9713 nickvergessen
                        FROM ' . POSTS_TABLE . "
160 9713 nickvergessen
                        WHERE $sql_where
161 9713 nickvergessen
                                AND poster_id = " . ANONYMOUS;
162 9713 nickvergessen
                $result = $db->sql_query_limit($sql, 1);
163 9713 nickvergessen
                $found_guest_post = $db->sql_fetchfield('guest_post');
164 9713 nickvergessen
                $db->sql_freeresult($result);
165 9713 nickvergessen
166 9713 nickvergessen
                if ($found_guest_post)
167 9713 nickvergessen
                {
168 9713 nickvergessen
                        $author_id_ary[] = ANONYMOUS;
169 9713 nickvergessen
                        $sql_author_match = (strpos($author, '*') !== false) ? ' ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($author))) : " = '" . $db->sql_escape(utf8_clean_string($author)) . "'";
170 9713 nickvergessen
                }
171 9713 nickvergessen
172 6655 naderman
                if (!sizeof($author_id_ary))
173 6655 naderman
                {
174 7919 kellanved
                        trigger_error('NO_SEARCH_RESULTS');
175 6655 naderman
                }
176 6655 naderman
        }
177 6655 naderman
178 6655 naderman
        // if we search in an existing search result just add the additional keywords. But we need to use "all search terms"-mode
179 6655 naderman
        // so we can keep the old keywords in their old mode, but add the new ones as required words
180 6655 naderman
        if ($add_keywords)
181 6655 naderman
        {
182 6655 naderman
                if ($search_terms == 'all')
183 6655 naderman
                {
184 6655 naderman
                        $keywords .= ' ' . $add_keywords;
185 6655 naderman
                }
186 6655 naderman
                else
187 6655 naderman
                {
188 6655 naderman
                        $search_terms = 'all';
189 6674 acydburn
                        $keywords = implode(' |', explode(' ', preg_replace('#\s+#u', ' ', $keywords))) . ' ' .$add_keywords;
190 6655 naderman
                }
191 6655 naderman
        }
192 6655 naderman
193 6655 naderman
        // Which forums should not be searched? Author searches are also carried out in unindexed forums
194 7559 naderman
        if (empty($keywords) && sizeof($author_id_ary))
195 6655 naderman
        {
196 6655 naderman
                $ex_fid_ary = array_keys($auth->acl_getf('!f_read', true));
197 6655 naderman
        }
198 6655 naderman
        else
199 6655 naderman
        {
200 6655 naderman
                $ex_fid_ary = array_unique(array_merge(array_keys($auth->acl_getf('!f_read', true)), array_keys($auth->acl_getf('!f_search', true))));
201 6655 naderman
        }
202 6655 naderman
203 6271 acydburn
        $not_in_fid = (sizeof($ex_fid_ary)) ? 'WHERE ' . $db->sql_in_set('f.forum_id', $ex_fid_ary, true) . " OR (f.forum_password <> '' AND fa.user_id <> " . (int) $user->data['user_id'] . ')' : "";
204 6015 acydburn
205 9601 nickvergessen
        $sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.right_id, f.forum_password, f.forum_flags, fa.user_id
206 5313 acydburn
                FROM ' . FORUMS_TABLE . ' f
207 6930 acydburn
                LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
208 5981 naderman
                        AND fa.session_id = '" . $db->sql_escape($user->session_id) . "')
209 6175 naderman
                $not_in_fid
210 6175 naderman
                ORDER BY f.left_id";
211 4500 psotfx
        $result = $db->sql_query($sql);
212 4500 psotfx
213 4500 psotfx
        $right_id = 0;
214 5441 naderman
        $reset_search_forum = true;
215 4500 psotfx
        while ($row = $db->sql_fetchrow($result))
216 1051 psotfx
        {
217 6367 acydburn
                if ($row['forum_password'] && $row['user_id'] != $user->data['user_id'])
218 1051 psotfx
                {
219 5488 naderman
                        $ex_fid_ary[] = (int) $row['forum_id'];
220 5441 naderman
                        continue;
221 5441 naderman
                }
222 5441 naderman
223 9601 nickvergessen
                // Exclude forums from active topics
224 9601 nickvergessen
                if (!($row['forum_flags'] & FORUM_FLAG_ACTIVE_TOPICS) && ($search_id == 'active_topics'))
225 9601 nickvergessen
                {
226 9601 nickvergessen
                        $ex_fid_ary[] = (int) $row['forum_id'];
227 9601 nickvergessen
                        continue;
228 9601 nickvergessen
                }
229 9601 nickvergessen
230 5441 naderman
                if (sizeof($search_forum))
231 5441 naderman
                {
232 5441 naderman
                        if ($search_child)
233 1566 psotfx
                        {
234 5441 naderman
                                if (in_array($row['forum_id'], $search_forum) && $row['right_id'] > $right_id)
235 5441 naderman
                                {
236 5488 naderman
                                        $right_id = (int) $row['right_id'];
237 5441 naderman
                                }
238 5441 naderman
                                else if ($row['right_id'] < $right_id)
239 5441 naderman
                                {
240 5441 naderman
                                        continue;
241 5441 naderman
                                }
242 1566 psotfx
                        }
243 5441 naderman
244 5441 naderman
                        if (!in_array($row['forum_id'], $search_forum))
245 1566 psotfx
                        {
246 5488 naderman
                                $ex_fid_ary[] = (int) $row['forum_id'];
247 5441 naderman
                                $reset_search_forum = false;
248 1566 psotfx
                        }
249 1511 psotfx
                }
250 4500 psotfx
        }
251 4500 psotfx
        $db->sql_freeresult($result);
252 2849 psotfx
253 5607 naderman
        // find out in which forums the user is allowed to view approved posts
254 5607 naderman
        if ($auth->acl_get('m_approve'))
255 5607 naderman
        {
256 5607 naderman
                $m_approve_fid_ary = array(-1);
257 5607 naderman
                $m_approve_fid_sql = '';
258 5607 naderman
        }
259 5607 naderman
        else if ($auth->acl_getf_global('m_approve'))
260 5607 naderman
        {
261 5607 naderman
                $m_approve_fid_ary = array_diff(array_keys($auth->acl_getf('!m_approve', true)), $ex_fid_ary);
262 6271 acydburn
                $m_approve_fid_sql = ' AND (p.post_approved = 1' . ((sizeof($m_approve_fid_ary)) ? ' OR ' . $db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) : '') . ')';
263 5607 naderman
        }
264 5607 naderman
        else
265 5607 naderman
        {
266 5607 naderman
                $m_approve_fid_ary = array();
267 5607 naderman
                $m_approve_fid_sql = ' AND p.post_approved = 1';
268 5607 naderman
        }
269 5607 naderman
270 5441 naderman
        if ($reset_search_forum)
271 4626 psotfx
        {
272 5441 naderman
                $search_forum = array();
273 4626 psotfx
        }
274 4626 psotfx
275 5441 naderman
        // Select which method we'll use to obtain the post_id or topic_id information
276 6015 acydburn
        $search_type = basename($config['search_type']);
277 5441 naderman
278 5441 naderman
        if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
279 5441 naderman
        {
280 5441 naderman
                trigger_error('NO_SUCH_SEARCH_MODULE');
281 5441 naderman
        }
282 5441 naderman
283 5441 naderman
        require("{$phpbb_root_path}includes/search/$search_type.$phpEx");
284 5441 naderman
285 5441 naderman
        // We do some additional checks in the module to ensure it can actually be utilised
286 5441 naderman
        $error = false;
287 5441 naderman
        $search = new $search_type($error);
288 5441 naderman
289 5441 naderman
        if ($error)
290 5441 naderman
        {
291 5441 naderman
                trigger_error($error);
292 5441 naderman
        }
293 5441 naderman
294 5441 naderman
        // let the search module split up the keywords
295 5441 naderman
        if ($keywords)
296 5441 naderman
        {
297 6675 naderman
                $correct_query = $search->split_keywords($keywords, $search_terms);
298 6675 naderman
                if (!$correct_query || (empty($search->search_query) && !sizeof($author_id_ary) && !$search_id))
299 5441 naderman
                {
300 7076 naderman
                        $ignored = (sizeof($search->common_words)) ? sprintf($user->lang['IGNORED_TERMS_EXPLAIN'], implode(' ', $search->common_words)) . '<br />' : '';
301 5981 naderman
                        trigger_error($ignored . sprintf($user->lang['NO_KEYWORDS'], $search->word_length['min'], $search->word_length['max']));
302 5441 naderman
                }
303 5441 naderman
        }
304 5441 naderman
305 5488 naderman
        if (!$keywords && sizeof($author_id_ary))
306 5488 naderman
        {
307 5981 naderman
                // if it is an author search we want to show topics by default
308 5552 naderman
                $show_results = ($topic_id) ? 'posts' : request_var('sr', ($search_id == 'egosearch') ? 'topics' : 'posts');
309 5727 naderman
                $show_results = ($show_results == 'posts') ? 'posts' : 'topics';
310 5488 naderman
        }
311 5488 naderman
312 5441 naderman
        // define some variables needed for retrieving post_id/topic_id information
313 6650 acydburn
        $sort_by_sql = array('a' => 'u.username_clean', 't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'), 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title'));
314 5441 naderman
315 5441 naderman
        // pre-made searches
316 6814 naderman
        $sql = $field = $l_search_title = '';
317 4500 psotfx
        if ($search_id)
318 4500 psotfx
        {
319 4500 psotfx
                switch ($search_id)
320 1511 psotfx
                {
321 5161 acydburn
                        // Oh holy Bob, bring us some activity...
322 5161 acydburn
                        case 'active_topics':
323 6814 naderman
                                $l_search_title = $user->lang['SEARCH_ACTIVE_TOPICS'];
324 5161 acydburn
                                $show_results = 'topics';
325 5441 naderman
                                $sort_key = 't';
326 5441 naderman
                                $sort_dir = 'd';
327 6643 acydburn
                                $sort_days = request_var('st', 7);
328 5441 naderman
                                $sort_by_sql['t'] = 't.topic_last_post_time';
329 5161 acydburn
330 5441 naderman
                                gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
331 6380 naderman
                                $s_sort_key = $s_sort_dir = '';
332 5161 acydburn
333 6643 acydburn
                                $last_post_time_sql = ($sort_days) ? ' AND t.topic_last_post_time > ' . (time() - ($sort_days * 24 * 3600)) : '';
334 5161 acydburn
335 6380 naderman
                                $sql = 'SELECT t.topic_last_post_time, t.topic_id
336 6380 naderman
                                        FROM ' . TOPICS_TABLE . " t
337 6643 acydburn
                                        WHERE t.topic_moved_id = 0
338 6643 acydburn
                                                $last_post_time_sql
339 6380 naderman
                                                " . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . '
340 6380 naderman
                                                ' . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . '
341 5236 acydburn
                                        ORDER BY t.topic_last_post_time DESC';
342 5441 naderman
                                $field = 'topic_id';
343 5488 naderman
                        break;
344 5161 acydburn
345 4500 psotfx
                        case 'unanswered':
346 6814 naderman
                                $l_search_title = $user->lang['SEARCH_UNANSWERED'];
347 5552 naderman
                                $show_results = request_var('sr', 'topics');
348 5727 naderman
                                $show_results = ($show_results == 'posts') ? 'posts' : 'topics';
349 5552 naderman
                                $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
350 5552 naderman
                                $sort_by_sql['s'] = ($show_results == 'posts') ? 'p.post_subject' : 't.topic_title';
351 5727 naderman
                                $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
352 5552 naderman
353 5441 naderman
                                $sort_join = ($sort_key == 'f') ? FORUMS_TABLE . ' f, ' : '';
354 5441 naderman
                                $sql_sort = ($sort_key == 'f') ? ' AND f.forum_id = p.forum_id ' . $sql_sort : $sql_sort;
355 6015 acydburn
356 6380 naderman
                                if ($sort_days)
357 6380 naderman
                                {
358 6380 naderman
                                        $last_post_time = 'AND p.post_time > ' . (time() - ($sort_days * 24 * 3600));
359 6380 naderman
                                }
360 6380 naderman
                                else
361 6380 naderman
                                {
362 6380 naderman
                                        $last_post_time = '';
363 6380 naderman
                                }
364 6380 naderman
365 7779 kellanved
                                if ($sort_key == 'a')
366 7779 kellanved
                                {
367 7779 kellanved
                                        $sort_join = USERS_TABLE . ' u, ';
368 7779 kellanved
                                        $sql_sort = ' AND u.user_id = p.poster_id ' . $sql_sort;
369 7779 kellanved
                                }
370 4500 psotfx
                                if ($show_results == 'posts')
371 1089 psotfx
                                {
372 5441 naderman
                                        $sql = "SELECT p.post_id
373 5441 naderman
                                                FROM $sort_join" . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
374 4500 psotfx
                                                WHERE t.topic_replies = 0
375 4626 psotfx
                                                        AND p.topic_id = t.topic_id
376 6380 naderman
                                                        $last_post_time
377 5607 naderman
                                                        $m_approve_fid_sql
378 6271 acydburn
                                                        " . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
379 5441 naderman
                                                        $sql_sort";
380 4500 psotfx
                                        $field = 'post_id';
381 1089 psotfx
                                }
382 2205 psotfx
                                else
383 2205 psotfx
                                {
384 5727 naderman
                                        $sql = 'SELECT DISTINCT ' . $sort_by_sql[$sort_key] . ", p.topic_id
385 5441 naderman
                                                FROM $sort_join" . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
386 5236 acydburn
                                                WHERE t.topic_replies = 0
387 6284 naderman
                                                        AND t.topic_moved_id = 0
388 4626 psotfx
                                                        AND p.topic_id = t.topic_id
389 6380 naderman
                                                        $last_post_time
390 5607 naderman
                                                        $m_approve_fid_sql
391 6271 acydburn
                                                        " . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
392 5441 naderman
                                                $sql_sort";
393 4500 psotfx
                                        $field = 'topic_id';
394 2205 psotfx
                                }
395 5488 naderman
                        break;
396 2205 psotfx
397 9755 rxu
                        case 'unreadposts':
398 10117 acydburn
                                $l_search_title = $user->lang['SEARCH_UNREAD'];
399 10117 acydburn
                                // force sorting
400 10117 acydburn
                                $show_results = 'topics';
401 10117 acydburn
                                $sort_key = 't';
402 10117 acydburn
                                $sort_by_sql['t'] = 't.topic_last_post_time';
403 10117 acydburn
                                $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
404 9755 rxu
405 10117 acydburn
                                $sql_where = 'AND t.topic_moved_id = 0
406 10117 acydburn
                                        ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . '
407 10117 acydburn
                                        ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '');
408 9755 rxu
409 10117 acydburn
                                gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
410 10117 acydburn
                                $s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
411 10005 rxu
                        break;
412 9755 rxu
413 4500 psotfx
                        case 'newposts':
414 6814 naderman
                                $l_search_title = $user->lang['SEARCH_NEW'];
415 6116 naderman
                                // force sorting
416 6116 naderman
                                $show_results = (request_var('sr', 'topics') == 'posts') ? 'posts' : 'topics';
417 6116 naderman
                                $sort_key = 't';
418 6116 naderman
                                $sort_dir = 'd';
419 5552 naderman
                                $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
420 5727 naderman
                                $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
421 5552 naderman
422 6116 naderman
                                gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
423 6116 naderman
                                $s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
424 6015 acydburn
425 4500 psotfx
                                if ($show_results == 'posts')
426 1938 psotfx
                                {
427 6116 naderman
                                        $sql = 'SELECT p.post_id
428 6116 naderman
                                                FROM ' . POSTS_TABLE . ' p
429 4626 psotfx
                                                WHERE p.post_time > ' . $user->data['user_lastvisit'] . "
430 5607 naderman
                                                        $m_approve_fid_sql
431 6271 acydburn
                                                        " . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
432 5441 naderman
                                                $sql_sort";
433 4500 psotfx
                                        $field = 'post_id';
434 1938 psotfx
                                }
435 4500 psotfx
                                else
436 1938 psotfx
                                {
437 9486 acydburn
                                        $sql = 'SELECT t.topic_id
438 9486 acydburn
                                                FROM ' . TOPICS_TABLE . ' t
439 9486 acydburn
                                                WHERE t.topic_last_post_time > ' . $user->data['user_lastvisit'] . '
440 9486 acydburn
                                                        AND t.topic_moved_id = 0
441 9486 acydburn
                                                        ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . '
442 9486 acydburn
                                                        ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
443 9486 acydburn
                                                $sql_sort";
444 9486 acydburn
/*
445 9488 acydburn
                [Fix] queued replies missing from "view new posts" (Bug #42705 - Patch by Paul)
446 9488 acydburn
                - Creates temporary table, query is far from optimized
447 9488 acydburn
448 9486 acydburn
                                        $sql = 'SELECT t.topic_id
449 9482 terrafrost
                                                FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
450 9482 terrafrost
                                                WHERE p.post_time > ' . $user->data['user_lastvisit'] . '
451 9482 terrafrost
                                                        AND t.topic_id = p.topic_id
452 9486 acydburn
                                                        AND t.topic_moved_id = 0
453 9487 acydburn
                                                        ' . $m_approve_fid_sql . '
454 9486 acydburn
                                                        ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
455 9487 acydburn
                                                GROUP BY t.topic_id
456 9486 acydburn
                                                $sql_sort";
457 9486 acydburn
*/
458 4500 psotfx
                                        $field = 'topic_id';
459 1938 psotfx
                                }
460 5488 naderman
                        break;
461 6814 naderman
462 6814 naderman
                        case 'egosearch':
463 6814 naderman
                                $l_search_title = $user->lang['SEARCH_SELF'];
464 6814 naderman
                        break;
465 5161 acydburn
                }
466 5981 naderman
        }
467 5236 acydburn
468 5981 naderman
        // show_results should not change after this
469 5981 naderman
        $per_page = ($show_results == 'posts') ? $config['posts_per_page'] : $config['topics_per_page'];
470 6643 acydburn
        $total_match_count = 0;
471 5981 naderman
472 5981 naderman
        if ($search_id)
473 5981 naderman
        {
474 5441 naderman
                if ($sql)
475 5161 acydburn
                {
476 5441 naderman
                        // only return up to 1000 ids (the last one will be removed later)
477 5441 naderman
                        $result = $db->sql_query_limit($sql, 1001 - $start, $start);
478 5003 acydburn
479 5441 naderman
                        while ($row = $db->sql_fetchrow($result))
480 5161 acydburn
                        {
481 9395 Kellanved
                                $id_ary[] = (int) $row[$field];
482 5161 acydburn
                        }
483 5441 naderman
                        $db->sql_freeresult($result);
484 5236 acydburn
485 5441 naderman
                        $total_match_count = sizeof($id_ary) + $start;
486 5441 naderman
                        $id_ary = array_slice($id_ary, 0, $per_page);
487 1511 psotfx
                }
488 10679 git-gate
                else if ($search_id == 'unreadposts')
489 10679 git-gate
                {
490 10679 git-gate
                        $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, 1001 - $start, $start));
491 10679 git-gate
492 10679 git-gate
                        $total_match_count = sizeof($id_ary) + $start;
493 10679 git-gate
                        $id_ary = array_slice($id_ary, 0, $per_page);
494 10679 git-gate
                }
495 5441 naderman
                else
496 5441 naderman
                {
497 5441 naderman
                        $search_id = '';
498 5441 naderman
                }
499 4500 psotfx
        }
500 2849 psotfx
501 5981 naderman
        // make sure that some arrays are always in the same order
502 5981 naderman
        sort($ex_fid_ary);
503 5981 naderman
        sort($m_approve_fid_ary);
504 5981 naderman
        sort($author_id_ary);
505 5981 naderman
506 6211 naderman
        if (!empty($search->search_query))
507 4500 psotfx
        {
508 9713 nickvergessen
                $total_match_count = $search->keyword_search($show_results, $search_fields, $search_terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_id_ary, $sql_author_match, $id_ary, $start, $per_page);
509 5441 naderman
        }
510 5441 naderman
        else if (sizeof($author_id_ary))
511 5441 naderman
        {
512 9040 naderman
                $firstpost_only = ($search_fields === 'firstpost' || $search_fields == 'titleonly') ? true : false;
513 9713 nickvergessen
                $total_match_count = $search->author_search($show_results, $firstpost_only, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_id_ary, $sql_author_match, $id_ary, $start, $per_page);
514 5441 naderman
        }
515 2448 psotfx
516 6643 acydburn
        // For some searches we need to print out the "no results" page directly to allow re-sorting/refining the search options.
517 6655 naderman
        if (!sizeof($id_ary) && !$search_id)
518 5441 naderman
        {
519 7919 kellanved
                trigger_error('NO_SEARCH_RESULTS');
520 4500 psotfx
        }
521 1051 psotfx
522 6643 acydburn
        $sql_where = '';
523 5441 naderman
524 6643 acydburn
        if (sizeof($id_ary))
525 6643 acydburn
        {
526 6643 acydburn
                $sql_where .= $db->sql_in_set(($show_results == 'posts') ? 'p.post_id' : 't.topic_id', $id_ary);
527 6643 acydburn
                $sql_where .= (sizeof($ex_fid_ary)) ? ' AND (' . $db->sql_in_set('f.forum_id', $ex_fid_ary, true) . ' OR f.forum_id IS NULL)' : '';
528 6643 acydburn
                $sql_where .= ($show_results == 'posts') ? $m_approve_fid_sql : str_replace(array('p.post_approved', 'p.forum_id'), array('t.topic_approved', 't.forum_id'), $m_approve_fid_sql);
529 6643 acydburn
        }
530 6643 acydburn
531 5003 acydburn
        if ($show_results == 'posts')
532 5003 acydburn
        {
533 5236 acydburn
                include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
534 5003 acydburn
        }
535 5003 acydburn
        else
536 5003 acydburn
        {
537 5236 acydburn
                include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
538 5003 acydburn
        }
539 1051 psotfx
540 8087 acydburn
        $user->add_lang('viewtopic');
541 8087 acydburn
542 4500 psotfx
        // Grab icons
543 6572 acydburn
        $icons = $cache->obtain_icons();
544 1051 psotfx
545 4500 psotfx
        // Output header
546 5441 naderman
        if ($search_id && ($total_match_count > 1000))
547 5441 naderman
        {
548 5441 naderman
                // limit the number to 1000 for pre-made searches
549 5441 naderman
                $total_match_count--;
550 5441 naderman
                $l_search_matches = sprintf($user->lang['FOUND_MORE_SEARCH_MATCHES'], $total_match_count);
551 5441 naderman
        }
552 5441 naderman
        else
553 5441 naderman
        {
554 5441 naderman
                $l_search_matches = ($total_match_count == 1) ? sprintf($user->lang['FOUND_SEARCH_MATCH'], $total_match_count) : sprintf($user->lang['FOUND_SEARCH_MATCHES'], $total_match_count);
555 5441 naderman
        }
556 1511 psotfx
557 5441 naderman
        // define some vars for urls
558 7385 naderman
        $hilit = implode('|', explode(' ', preg_replace('#\s+#u', ' ', str_replace(array('+', '-', '|', '(', ')', '&quot;'), ' ', $keywords))));
559 8669 acydburn
        // Do not allow *only* wildcard being used for hilight
560 8669 acydburn
        $hilit = (strspn($hilit, '*') === strlen($hilit)) ? '' : $hilit;
561 8669 acydburn
562 7385 naderman
        $u_hilit = urlencode(htmlspecialchars_decode(str_replace('|', ' ', $hilit)));
563 10117 acydburn
        $u_show_results = '&amp;sr=' . $show_results;
564 5441 naderman
        $u_search_forum = implode('&amp;fid%5B%5D=', $search_forum);
565 1947 psotfx
566 6015 acydburn
        $u_search = append_sid("{$phpbb_root_path}search.$phpEx", $u_sort_param . $u_show_results);
567 5441 naderman
        $u_search .= ($search_id) ? '&amp;search_id=' . $search_id : '';
568 9850 naderman
        $u_search .= ($u_hilit) ? '&amp;keywords=' . urlencode(htmlspecialchars_decode($keywords)) : '';
569 8843 toonarmy
        $u_search .= ($search_terms != 'all') ? '&amp;terms=' . $search_terms : '';
570 6015 acydburn
        $u_search .= ($topic_id) ? '&amp;t=' . $topic_id : '';
571 7261 naderman
        $u_search .= ($author) ? '&amp;author=' . urlencode(htmlspecialchars_decode($author)) : '';
572 5981 naderman
        $u_search .= ($author_id) ? '&amp;author_id=' . $author_id : '';
573 5441 naderman
        $u_search .= ($u_search_forum) ? '&amp;fid%5B%5D=' . $u_search_forum : '';
574 5441 naderman
        $u_search .= (!$search_child) ? '&amp;sc=0' : '';
575 5441 naderman
        $u_search .= ($search_fields != 'all') ? '&amp;sf=' . $search_fields : '';
576 7890 naderman
        $u_search .= ($return_chars != 300) ? '&amp;ch=' . $return_chars : '';
577 5441 naderman
578 4500 psotfx
        $template->assign_vars(array(
579 6814 naderman
                'SEARCH_TITLE'                => $l_search_title,
580 4500 psotfx
                'SEARCH_MATCHES'        => $l_search_matches,
581 7076 naderman
                'SEARCH_WORDS'                => $search->search_query,
582 7076 naderman
                'IGNORED_WORDS'                => (sizeof($search->common_words)) ? implode(' ', $search->common_words) : '',
583 5441 naderman
                'PAGINATION'                => generate_pagination($u_search, $total_match_count, $per_page, $start),
584 5003 acydburn
                'PAGE_NUMBER'                => on_page($total_match_count, $per_page, $start),
585 5003 acydburn
                'TOTAL_MATCHES'                => $total_match_count,
586 5441 naderman
                'SEARCH_IN_RESULTS'        => ($search_id) ? false : true,
587 1851 psotfx
588 4500 psotfx
                'S_SELECT_SORT_DIR'                => $s_sort_dir,
589 4500 psotfx
                'S_SELECT_SORT_KEY'                => $s_sort_key,
590 5161 acydburn
                'S_SELECT_SORT_DAYS'        => $s_limit_days,
591 5441 naderman
                'S_SEARCH_ACTION'                => $u_search,
592 5003 acydburn
                'S_SHOW_TOPICS'                        => ($show_results == 'posts') ? false : true,
593 1851 psotfx
594 6254 naderman
                'GOTO_PAGE_IMG'                => $user->img('icon_post_target', 'GOTO_PAGE'),
595 6254 naderman
                'NEWEST_POST_IMG'        => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'),
596 6254 naderman
                'REPORTED_IMG'                => $user->img('icon_topic_reported', 'TOPIC_REPORTED'),
597 6254 naderman
                'UNAPPROVED_IMG'        => $user->img('icon_topic_unapproved', 'TOPIC_UNAPPROVED'),
598 7384 acydburn
                'LAST_POST_IMG'                => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
599 5003 acydburn
600 7384 acydburn
                'U_SEARCH_WORDS'        => $u_search,
601 7384 acydburn
        ));
602 368 psotfx
603 5161 acydburn
        if ($sql_where)
604 4500 psotfx
        {
605 5161 acydburn
                if ($show_results == 'posts')
606 5161 acydburn
                {
607 6841 acydburn
                        // @todo Joining this query to the one below?
608 5161 acydburn
                        $sql = 'SELECT zebra_id, friend, foe
609 5441 naderman
                                FROM ' . ZEBRA_TABLE . '
610 5161 acydburn
                                WHERE user_id = ' . $user->data['user_id'];
611 5161 acydburn
                        $result = $db->sql_query($sql);
612 4530 psotfx
613 5161 acydburn
                        $zebra = array();
614 5161 acydburn
                        while ($row = $db->sql_fetchrow($result))
615 4530 psotfx
                        {
616 5161 acydburn
                                $zebra[($row['friend']) ? 'friend' : 'foe'][] = $row['zebra_id'];
617 4530 psotfx
                        }
618 5161 acydburn
                        $db->sql_freeresult($result);
619 5161 acydburn
620 6698 acydburn
                        $sql = 'SELECT p.*, f.forum_id, f.forum_name, t.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_colour
621 5552 naderman
                                FROM ' . POSTS_TABLE . ' p
622 5552 naderman
                                        LEFT JOIN ' . TOPICS_TABLE . ' t ON (p.topic_id = t.topic_id)
623 5552 naderman
                                        LEFT JOIN ' . FORUMS_TABLE . ' f ON (p.forum_id = f.forum_id)
624 5552 naderman
                                        LEFT JOIN ' . USERS_TABLE . " u ON (p.poster_id = u.user_id)
625 5552 naderman
                                WHERE $sql_where";
626 4530 psotfx
                }
627 5161 acydburn
                else
628 5161 acydburn
                {
629 5552 naderman
                        $sql_from = TOPICS_TABLE . ' t
630 5552 naderman
                                LEFT JOIN ' . FORUMS_TABLE . ' f ON (f.forum_id = t.forum_id)
631 5552 naderman
                                ' . (($sort_key == 'a') ? ' LEFT JOIN ' . USERS_TABLE . ' u ON (u.user_id = t.topic_poster) ' : '');
632 5488 naderman
                        $sql_select = 't.*, f.forum_id, f.forum_name';
633 6015 acydburn
634 5488 naderman
                        if ($user->data['is_registered'])
635 5488 naderman
                        {
636 8843 toonarmy
                                if ($config['load_db_track'] && $author_id !== $user->data['user_id'])
637 5488 naderman
                                {
638 5488 naderman
                                        $sql_from .= ' LEFT JOIN ' . TOPICS_POSTED_TABLE . ' tp ON (tp.user_id = ' . $user->data['user_id'] . '
639 5488 naderman
                                                AND t.topic_id = tp.topic_id)';
640 5488 naderman
                                        $sql_select .= ', tp.topic_posted';
641 5488 naderman
                                }
642 5603 acydburn
643 5488 naderman
                                if ($config['load_db_lastread'])
644 5488 naderman
                                {
645 5488 naderman
                                        $sql_from .= ' LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.user_id = ' . $user->data['user_id'] . '
646 5488 naderman
                                                        AND t.topic_id = tt.topic_id)
647 5488 naderman
                                                LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . '
648 5488 naderman
                                                        AND ft.forum_id = f.forum_id)';
649 5488 naderman
                                        $sql_select .= ', tt.mark_time, ft.mark_time as f_mark_time';
650 5488 naderman
                                }
651 5488 naderman
                        }
652 5488 naderman
653 6256 acydburn
                        if ($config['load_anon_lastread'] || ($user->data['is_registered'] && !$config['load_db_lastread']))
654 5488 naderman
                        {
655 6015 acydburn
                                $tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
656 7120 davidmj
                                $tracking_topics = ($tracking_topics) ? tracking_unserialize($tracking_topics) : array();
657 5488 naderman
                        }
658 5488 naderman
659 5488 naderman
                        $sql = "SELECT $sql_select
660 5552 naderman
                                FROM $sql_from
661 5552 naderman
                                WHERE $sql_where";
662 5161 acydburn
                }
663 5236 acydburn
                $sql .= ' ORDER BY ' . $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
664 5441 naderman
                $result = $db->sql_query($sql);
665 5441 naderman
                $result_topic_id = 0;
666 4530 psotfx
667 6152 naderman
                $rowset = array();
668 6152 naderman
669 5552 naderman
                if ($show_results == 'topics')
670 5161 acydburn
                {
671 6284 naderman
                        $forums = $rowset = $shadow_topic_list = array();
672 5488 naderman
                        while ($row = $db->sql_fetchrow($result))
673 5488 naderman
                        {
674 10339 rxu
                                $row['forum_id'] = (int) $row['forum_id'];
675 10339 rxu
                                $row['topic_id'] = (int) $row['topic_id'];
676 10339 rxu
677 6284 naderman
                                if ($row['topic_status'] == ITEM_MOVED)
678 6284 naderman
                                {
679 6284 naderman
                                        $shadow_topic_list[$row['topic_moved_id']] = $row['topic_id'];
680 6284 naderman
                                }
681 6284 naderman
682 5488 naderman
                                $rowset[$row['topic_id']] = $row;
683 5488 naderman
684 5499 naderman
                                if (!isset($forums[$row['forum_id']]) && $user->data['is_registered'] && $config['load_db_lastread'])
685 5488 naderman
                                {
686 5488 naderman
                                        $forums[$row['forum_id']]['mark_time'] = $row['f_mark_time'];
687 5488 naderman
                                }
688 5488 naderman
                                $forums[$row['forum_id']]['topic_list'][] = $row['topic_id'];
689 5488 naderman
                                $forums[$row['forum_id']]['rowset'][$row['topic_id']] = &$rowset[$row['topic_id']];
690 5488 naderman
                        }
691 5488 naderman
                        $db->sql_freeresult($result);
692 8146 acydburn
693 6650 acydburn
                        // If we have some shadow topics, update the rowset to reflect their topic information
694 6284 naderman
                        if (sizeof($shadow_topic_list))
695 6284 naderman
                        {
696 6284 naderman
                                $sql = 'SELECT *
697 6284 naderman
                                        FROM ' . TOPICS_TABLE . '
698 6284 naderman
                                        WHERE ' . $db->sql_in_set('topic_id', array_keys($shadow_topic_list));
699 6284 naderman
                                $result = $db->sql_query($sql);
700 8669 acydburn
701 6284 naderman
                                while ($row = $db->sql_fetchrow($result))
702 6284 naderman
                                {
703 6284 naderman
                                        $orig_topic_id = $shadow_topic_list[$row['topic_id']];
704 8669 acydburn
705 6284 naderman
                                        // We want to retain some values
706 6284 naderman
                                        $row = array_merge($row, array(
707 6284 naderman
                                                'topic_moved_id'        => $rowset[$orig_topic_id]['topic_moved_id'],
708 6284 naderman
                                                'topic_status'                => $rowset[$orig_topic_id]['topic_status'],
709 6284 naderman
                                                'forum_name'                => $rowset[$orig_topic_id]['forum_name'])
710 6284 naderman
                                        );
711 8669 acydburn
712 6284 naderman
                                        $rowset[$orig_topic_id] = $row;
713 6284 naderman
                                }
714 6284 naderman
                                $db->sql_freeresult($result);
715 6284 naderman
                        }
716 6284 naderman
                        unset($shadow_topic_list);
717 5488 naderman
718 5488 naderman
                        foreach ($forums as $forum_id => $forum)
719 5488 naderman
                        {
720 5499 naderman
                                if ($user->data['is_registered'] && $config['load_db_lastread'])
721 5488 naderman
                                {
722 5488 naderman
                                        $topic_tracking_info[$forum_id] = get_topic_tracking($forum_id, $forum['topic_list'], $forum['rowset'], array($forum_id => $forum['mark_time']), ($forum_id) ? false : $forum['topic_list']);
723 5488 naderman
                                }
724 6256 acydburn
                                else if ($config['load_anon_lastread'] || $user->data['is_registered'])
725 5488 naderman
                                {
726 5488 naderman
                                        $topic_tracking_info[$forum_id] = get_complete_topic_tracking($forum_id, $forum['topic_list'], ($forum_id) ? false : $forum['topic_list']);
727 8669 acydburn
728 5488 naderman
                                        if (!$user->data['is_registered'])
729 5488 naderman
                                        {
730 6015 acydburn
                                                $user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? (int) (base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate']) : 0;
731 5488 naderman
                                        }
732 5488 naderman
                                }
733 5488 naderman
                        }
734 5488 naderman
                        unset($forums);
735 5488 naderman
                }
736 5488 naderman
                else
737 5488 naderman
                {
738 6841 acydburn
                        $bbcode_bitfield = $text_only_message = '';
739 6321 naderman
                        $attach_list = array();
740 6321 naderman
741 5488 naderman
                        while ($row = $db->sql_fetchrow($result))
742 5488 naderman
                        {
743 6841 acydburn
                                // We pre-process some variables here for later usage
744 6841 acydburn
                                $row['post_text'] = censor_text($row['post_text']);
745 6841 acydburn
746 6841 acydburn
                                $text_only_message = $row['post_text'];
747 6841 acydburn
                                // make list items visible as such
748 6841 acydburn
                                if ($row['bbcode_uid'])
749 6321 naderman
                                {
750 6841 acydburn
                                        $text_only_message = str_replace('[*:' . $row['bbcode_uid'] . ']', '&sdot;&nbsp;', $text_only_message);
751 6841 acydburn
                                        // no BBCode in text only message
752 6841 acydburn
                                        strip_bbcode($text_only_message, $row['bbcode_uid']);
753 6841 acydburn
                                }
754 6841 acydburn
755 6841 acydburn
                                if ($return_chars == -1 || utf8_strlen($text_only_message) < ($return_chars + 3))
756 6841 acydburn
                                {
757 6841 acydburn
                                        $row['display_text_only'] = false;
758 6321 naderman
                                        $bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);
759 6321 naderman
760 6321 naderman
                                        // Does this post have an attachment? If so, add it to the list
761 6321 naderman
                                        if ($row['post_attachment'] && $config['allow_attachments'])
762 6321 naderman
                                        {
763 6517 acydburn
                                                $attach_list[$row['forum_id']][] = $row['post_id'];
764 6321 naderman
                                        }
765 6321 naderman
                                }
766 6841 acydburn
                                else
767 6841 acydburn
                                {
768 6841 acydburn
                                        $row['post_text'] = $text_only_message;
769 6841 acydburn
                                        $row['display_text_only'] = true;
770 6841 acydburn
                                }
771 6841 acydburn
772 6841 acydburn
                                $rowset[] = $row;
773 5488 naderman
                        }
774 5488 naderman
                        $db->sql_freeresult($result);
775 6321 naderman
776 6841 acydburn
                        unset($text_only_message);
777 6841 acydburn
778 6321 naderman
                        // Instantiate BBCode if needed
779 6321 naderman
                        if ($bbcode_bitfield !== '')
780 6321 naderman
                        {
781 6321 naderman
                                include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
782 6321 naderman
                                $bbcode = new bbcode(base64_encode($bbcode_bitfield));
783 6321 naderman
                        }
784 6321 naderman
785 6321 naderman
                        // Pull attachment data
786 6321 naderman
                        if (sizeof($attach_list))
787 6321 naderman
                        {
788 6517 acydburn
                                $use_attach_list = $attach_list;
789 6517 acydburn
                                $attach_list = array();
790 6517 acydburn
791 6517 acydburn
                                foreach ($use_attach_list as $forum_id => $_list)
792 6321 naderman
                                {
793 6517 acydburn
                                        if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id))
794 6321 naderman
                                        {
795 6517 acydburn
                                                $attach_list = array_merge($attach_list, $_list);
796 6321 naderman
                                        }
797 6321 naderman
                                }
798 6517 acydburn
                        }
799 6517 acydburn
800 6517 acydburn
                        if (sizeof($attach_list))
801 6517 acydburn
                        {
802 6517 acydburn
                                $sql = 'SELECT *
803 6517 acydburn
                                        FROM ' . ATTACHMENTS_TABLE . '
804 6517 acydburn
                                        WHERE ' . $db->sql_in_set('post_msg_id', $attach_list) . '
805 6517 acydburn
                                                AND in_message = 0
806 6628 acydburn
                                        ORDER BY filetime DESC, post_msg_id ASC';
807 6517 acydburn
                                $result = $db->sql_query($sql);
808 8669 acydburn
809 6517 acydburn
                                while ($row = $db->sql_fetchrow($result))
810 6321 naderman
                                {
811 6517 acydburn
                                        $attachments[$row['post_msg_id']][] = $row;
812 6321 naderman
                                }
813 6517 acydburn
                                $db->sql_freeresult($result);
814 6321 naderman
                        }
815 5488 naderman
                }
816 5488 naderman
817 6211 naderman
                if ($hilit)
818 6211 naderman
                {
819 6211 naderman
                        // Remove bad highlights
820 6211 naderman
                        $hilit_array = array_filter(explode('|', $hilit), 'strlen');
821 6211 naderman
                        foreach ($hilit_array as $key => $value)
822 6211 naderman
                        {
823 7559 naderman
                                $hilit_array[$key] = str_replace('\*', '\w*?', preg_quote($value, '#'));
824 7559 naderman
                                $hilit_array[$key] = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $hilit_array[$key]);
825 6211 naderman
                        }
826 6211 naderman
                        $hilit = implode('|', $hilit_array);
827 6211 naderman
                }
828 6211 naderman
829 5488 naderman
                foreach ($rowset as $row)
830 5488 naderman
                {
831 5161 acydburn
                        $forum_id = $row['forum_id'];
832 5441 naderman
                        $result_topic_id = $row['topic_id'];
833 5441 naderman
                        $topic_title = censor_text($row['topic_title']);
834 1051 psotfx
835 6211 naderman
                        // we need to select a forum id for this global topic
836 5488 naderman
                        if (!$forum_id)
837 5488 naderman
                        {
838 5488 naderman
                                if (!isset($g_forum_id))
839 5488 naderman
                                {
840 6211 naderman
                                        // Get a list of forums the user cannot read
841 6211 naderman
                                        $forum_ary = array_unique(array_keys($auth->acl_getf('!f_read', true)));
842 8669 acydburn
843 6211 naderman
                                        // Determine first forum the user is able to read (must not be a category)
844 8146 acydburn
                                        $sql = 'SELECT forum_id
845 6211 naderman
                                                FROM ' . FORUMS_TABLE . '
846 6211 naderman
                                                WHERE forum_type = ' . FORUM_POST;
847 8669 acydburn
848 6211 naderman
                                        if (sizeof($forum_ary))
849 6211 naderman
                                        {
850 6271 acydburn
                                                $sql .= ' AND ' . $db->sql_in_set('forum_id', $forum_ary, true);
851 6211 naderman
                                        }
852 6211 naderman
853 6211 naderman
                                        $result = $db->sql_query_limit($sql, 1);
854 6211 naderman
                                        $g_forum_id = (int) $db->sql_fetchfield('forum_id');
855 5488 naderman
                                }
856 5488 naderman
                                $u_forum_id = $g_forum_id;
857 5488 naderman
                        }
858 5488 naderman
                        else
859 5488 naderman
                        {
860 5488 naderman
                                $u_forum_id = $forum_id;
861 5488 naderman
                        }
862 368 psotfx
863 9459 acydburn
                        $view_topic_url_params = "f=$u_forum_id&amp;t=$result_topic_id" . (($u_hilit) ? "&amp;hilit=$u_hilit" : '');
864 9459 acydburn
                        $view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params);
865 5488 naderman
866 5727 naderman
                        $replies = ($auth->acl_get('m_approve', $forum_id)) ? $row['topic_replies_real'] : $row['topic_replies'];
867 5727 naderman
868 5161 acydburn
                        if ($show_results == 'topics')
869 5161 acydburn
                        {
870 8843 toonarmy
                                if ($config['load_db_track'] && $author_id === $user->data['user_id'])
871 8843 toonarmy
                                {
872 8843 toonarmy
                                        $row['topic_posted'] = 1;
873 8843 toonarmy
                                }
874 8843 toonarmy
875 5161 acydburn
                                $folder_img = $folder_alt = $topic_type = '';
876 5488 naderman
                                topic_status($row, $replies, (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_post_time'] > $topic_tracking_info[$forum_id][$row['topic_id']]) ? true : false, $folder_img, $folder_alt, $topic_type);
877 1051 psotfx
878 5607 naderman
                                $unread_topic = (isset($topic_tracking_info[$forum_id][$row['topic_id']]) && $row['topic_last_post_time'] > $topic_tracking_info[$forum_id][$row['topic_id']]) ? true : false;
879 5607 naderman
880 6351 acydburn
                                $topic_unapproved = (!$row['topic_approved'] && $auth->acl_get('m_approve', $forum_id)) ? true : false;
881 6351 acydburn
                                $posts_unapproved = ($row['topic_approved'] && $row['topic_replies'] < $row['topic_replies_real'] && $auth->acl_get('m_approve', $forum_id)) ? true : false;
882 6015 acydburn
                                $u_mcp_queue = ($topic_unapproved || $posts_unapproved) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&amp;mode=' . (($topic_unapproved) ? 'approve_details' : 'unapproved_posts') . "&amp;t=$result_topic_id", true, $user->session_id) : '';
883 5982 acydburn
884 8045 naderman
                                $row['topic_title'] = preg_replace('#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">$1</span>', $row['topic_title']);
885 8045 naderman
886 5161 acydburn
                                $tpl_ary = array(
887 6589 acydburn
                                        'TOPIC_AUTHOR'                                => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
888 6589 acydburn
                                        'TOPIC_AUTHOR_COLOUR'                => get_username_string('colour', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
889 6589 acydburn
                                        'TOPIC_AUTHOR_FULL'                        => get_username_string('full', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
890 6311 grahamje
                                        'FIRST_POST_TIME'                        => $user->format_date($row['topic_time']),
891 6360 grahamje
                                        'LAST_POST_SUBJECT'                        => $row['topic_last_post_subject'],
892 6311 grahamje
                                        'LAST_POST_TIME'                        => $user->format_date($row['topic_last_post_time']),
893 6311 grahamje
                                        'LAST_VIEW_TIME'                        => $user->format_date($row['topic_last_view_time']),
894 6589 acydburn
                                        'LAST_POST_AUTHOR'                        => get_username_string('username', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
895 6589 acydburn
                                        'LAST_POST_AUTHOR_COLOUR'        => get_username_string('colour', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
896 6589 acydburn
                                        'LAST_POST_AUTHOR_FULL'                => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
897 6311 grahamje
898 6015 acydburn
                                        'PAGINATION'                => topic_generate_pagination($replies, $view_topic_url),
899 6015 acydburn
                                        'TOPIC_TYPE'                => $topic_type,
900 1051 psotfx
901 5982 acydburn
                                        'TOPIC_FOLDER_IMG'                => $user->img($folder_img, $folder_alt),
902 6015 acydburn
                                        'TOPIC_FOLDER_IMG_SRC'        => $user->img($folder_img, $folder_alt, false, '', 'src'),
903 8857 acydburn
                                        'TOPIC_FOLDER_IMG_ALT'        => $user->lang[$folder_alt],
904 8857 acydburn
                                        'TOPIC_FOLDER_IMG_WIDTH'=> $user->img($folder_img, '', false, '', 'width'),
905 8857 acydburn
                                        'TOPIC_FOLDER_IMG_HEIGHT'        => $user->img($folder_img, '', false, '', 'height'),
906 8857 acydburn
907 5982 acydburn
                                        'TOPIC_ICON_IMG'                => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['img'] : '',
908 5161 acydburn
                                        'TOPIC_ICON_IMG_WIDTH'        => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['width'] : '',
909 5161 acydburn
                                        'TOPIC_ICON_IMG_HEIGHT'        => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['height'] : '',
910 6351 acydburn
                                        'ATTACH_ICON_IMG'                => ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id) && $row['topic_attachment']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '',
911 6237 acydburn
                                        'UNAPPROVED_IMG'                => ($topic_unapproved || $posts_unapproved) ? $user->img('icon_topic_unapproved', ($topic_unapproved) ? 'TOPIC_UNAPPROVED' : 'POSTS_UNAPPROVED') : '',
912 943 thefinn
913 5482 naderman
                                        'S_TOPIC_GLOBAL'                => (!$forum_id) ? true : false,
914 5161 acydburn
                                        'S_TOPIC_TYPE'                        => $row['topic_type'],
915 10776 git-gate
                                        'S_USER_POSTED'                        => (!empty($row['topic_posted'])) ? true : false,
916 5607 naderman
                                        'S_UNREAD_TOPIC'                => $unread_topic,
917 1368 psotfx
918 6351 acydburn
                                        'S_TOPIC_REPORTED'                => (!empty($row['topic_reported']) && $auth->acl_get('m_report', $forum_id)) ? true : false,
919 5982 acydburn
                                        'S_TOPIC_UNAPPROVED'        => $topic_unapproved,
920 5982 acydburn
                                        'S_POSTS_UNAPPROVED'        => $posts_unapproved,
921 4500 psotfx
922 9459 acydburn
                                        'U_LAST_POST'                        => append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params . '&amp;p=' . $row['topic_last_post_id']) . '#p' . $row['topic_last_post_id'],
923 6589 acydburn
                                        'U_LAST_POST_AUTHOR'        => get_username_string('profile', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
924 6589 acydburn
                                        'U_TOPIC_AUTHOR'                => get_username_string('profile', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
925 9459 acydburn
                                        'U_NEWEST_POST'                        => append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params . '&amp;view=unread') . '#unread',
926 6015 acydburn
                                        'U_MCP_REPORT'                        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&amp;mode=reports&amp;t=' . $result_topic_id, true, $user->session_id),
927 6015 acydburn
                                        'U_MCP_QUEUE'                        => $u_mcp_queue,
928 4530 psotfx
                                );
929 4530 psotfx
                        }
930 5161 acydburn
                        else
931 4500 psotfx
                        {
932 5161 acydburn
                                if ((isset($zebra['foe']) && in_array($row['poster_id'], $zebra['foe'])) && (!$view || $view != 'show' || $post_id != $row['post_id']))
933 5161 acydburn
                                {
934 5161 acydburn
                                        $template->assign_block_vars('searchresults', array(
935 5441 naderman
                                                'S_IGNORE_POST' => true,
936 1511 psotfx
937 7559 naderman
                                                'L_IGNORE_POST' => sprintf($user->lang['POST_BY_FOE'], $row['username'], "<a href=\"$u_search&amp;start=$start&amp;p=" . $row['post_id'] . '&amp;view=show#p' . $row['post_id'] . '">', '</a>'))
938 5161 acydburn
                                        );
939 5441 naderman
940 5161 acydburn
                                        continue;
941 5161 acydburn
                                }
942 5003 acydburn
943 6321 naderman
                                // Replace naughty words such as farty pants
944 6321 naderman
                                $row['post_subject'] = censor_text($row['post_subject']);
945 5441 naderman
946 6841 acydburn
                                if ($row['display_text_only'])
947 5161 acydburn
                                {
948 6321 naderman
                                        // now find context for the searched words
949 6841 acydburn
                                        $row['post_text'] = get_context($row['post_text'], array_filter(explode('|', $hilit), 'strlen'), $return_chars);
950 8050 naderman
                                        $row['post_text'] = bbcode_nl2br($row['post_text']);
951 5161 acydburn
                                }
952 6321 naderman
                                else
953 6321 naderman
                                {
954 6321 naderman
                                        // Second parse bbcode here
955 6321 naderman
                                        if ($row['bbcode_bitfield'])
956 6321 naderman
                                        {
957 6841 acydburn
                                                $bbcode->bbcode_second_pass($row['post_text'], $row['bbcode_uid'], $row['bbcode_bitfield']);
958 6321 naderman
                                        }
959 5441 naderman
960 8050 naderman
                                        $row['post_text'] = bbcode_nl2br($row['post_text']);
961 8050 naderman
                                        $row['post_text'] = smiley_text($row['post_text']);
962 8050 naderman
963 6803 acydburn
                                        if (!empty($attachments[$row['post_id']]))
964 6321 naderman
                                        {
965 6841 acydburn
                                                parse_attachments($forum_id, $row['post_text'], $attachments[$row['post_id']], $update_count);
966 8669 acydburn
967 6321 naderman
                                                // we only display inline attachments
968 6321 naderman
                                                unset($attachments[$row['post_id']]);
969 6321 naderman
                                        }
970 6321 naderman
                                }
971 6321 naderman
972 6330 naderman
                                if ($hilit)
973 6330 naderman
                                {
974 6330 naderman
                                        // post highlighting
975 6841 acydburn
                                        $row['post_text'] = preg_replace('#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">$1</span>', $row['post_text']);
976 8045 naderman
                                        $row['post_subject'] = preg_replace('#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">$1</span>', $row['post_subject']);
977 6330 naderman
                                }
978 5972 davidmj
979 5161 acydburn
                                $tpl_ary = array(
980 6589 acydburn
                                        'POST_AUTHOR_FULL'                => get_username_string('full', $row['poster_id'], $row['username'], $row['user_colour'], $row['post_username']),
981 6589 acydburn
                                        'POST_AUTHOR_COLOUR'        => get_username_string('colour', $row['poster_id'], $row['username'], $row['user_colour'], $row['post_username']),
982 6589 acydburn
                                        'POST_AUTHOR'                        => get_username_string('username', $row['poster_id'], $row['username'], $row['user_colour'], $row['post_username']),
983 6589 acydburn
                                        'U_POST_AUTHOR'                        => get_username_string('profile', $row['poster_id'], $row['username'], $row['user_colour'], $row['post_username']),
984 8669 acydburn
985 5441 naderman
                                        'POST_SUBJECT'                => $row['post_subject'],
986 5441 naderman
                                        'POST_DATE'                        => (!empty($row['post_time'])) ? $user->format_date($row['post_time']) : '',
987 6841 acydburn
                                        'MESSAGE'                        => $row['post_text']
988 5161 acydburn
                                );
989 5161 acydburn
                        }
990 1851 psotfx
991 5161 acydburn
                        $template->assign_block_vars('searchresults', array_merge($tpl_ary, array(
992 6015 acydburn
                                'FORUM_ID'                        => $forum_id,
993 6015 acydburn
                                'TOPIC_ID'                        => $result_topic_id,
994 5441 naderman
                                'POST_ID'                        => ($show_results == 'posts') ? $row['post_id'] : false,
995 1851 psotfx
996 5441 naderman
                                'FORUM_TITLE'                => $row['forum_name'],
997 6015 acydburn
                                'TOPIC_TITLE'                => $topic_title,
998 6015 acydburn
                                'TOPIC_REPLIES'                => $replies,
999 6015 acydburn
                                'TOPIC_VIEWS'                => $row['topic_views'],
1000 5161 acydburn
1001 5161 acydburn
                                'U_VIEW_TOPIC'                => $view_topic_url,
1002 6015 acydburn
                                'U_VIEW_FORUM'                => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
1003 8033 acydburn
                                'U_VIEW_POST'                => (!empty($row['post_id'])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=" . $row['topic_id'] . '&amp;p=' . $row['post_id'] . (($u_hilit) ? '&amp;hilit=' . $u_hilit : '')) . '#p' . $row['post_id'] : '')
1004 5161 acydburn
                        ));
1005 5161 acydburn
                }
1006 5441 naderman
1007 5441 naderman
                if ($topic_id && ($topic_id == $result_topic_id))
1008 5441 naderman
                {
1009 5441 naderman
                        $template->assign_vars(array(
1010 5441 naderman
                                'SEARCH_TOPIC'                => $topic_title,
1011 5441 naderman
                                'U_SEARCH_TOPIC'        => $view_topic_url
1012 5441 naderman
                        ));
1013 5441 naderman
                }
1014 4500 psotfx
        }
1015 5488 naderman
        unset($rowset);
1016 368 psotfx
1017 6814 naderman
        page_header(($l_search_title) ? $l_search_title : $user->lang['SEARCH']);
1018 2448 psotfx
1019 4500 psotfx
        $template->set_filenames(array(
1020 6930 acydburn
                'body' => 'search_results.html')
1021 4500 psotfx
        );
1022 6015 acydburn
        make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
1023 2448 psotfx
1024 4500 psotfx
        page_footer();
1025 4500 psotfx
}
1026 2448 psotfx
1027 4500 psotfx
// Search forum
1028 4500 psotfx
$s_forums = '';
1029 8834 toonarmy
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f.right_id, f.forum_password, f.enable_indexing, fa.user_id
1030 5313 acydburn
        FROM ' . FORUMS_TABLE . ' f
1031 6930 acydburn
        LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
1032 5981 naderman
                AND fa.session_id = '" . $db->sql_escape($user->session_id) . "')
1033 4500 psotfx
        ORDER BY f.left_id ASC";
1034 4500 psotfx
$result = $db->sql_query($sql);
1035 368 psotfx
1036 4500 psotfx
$right = $cat_right = $padding_inc = 0;
1037 4500 psotfx
$padding = $forum_list = $holding = '';
1038 4500 psotfx
$pad_store = array('0' => '');
1039 5236 acydburn
1040 4500 psotfx
while ($row = $db->sql_fetchrow($result))
1041 4500 psotfx
{
1042 4500 psotfx
        if ($row['forum_type'] == FORUM_CAT && ($row['left_id'] + 1 == $row['right_id']))
1043 4500 psotfx
        {
1044 4500 psotfx
                // Non-postable forum with no subforums, don't display
1045 4500 psotfx
                continue;
1046 4500 psotfx
        }
1047 368 psotfx
1048 8834 toonarmy
        if ($row['forum_type'] == FORUM_POST && ($row['left_id'] + 1 == $row['right_id']) && !$row['enable_indexing'])
1049 8834 toonarmy
        {
1050 8834 toonarmy
                // Postable forum with no subforums and indexing disabled, don't display
1051 8834 toonarmy
                continue;
1052 8834 toonarmy
        }
1053 8834 toonarmy
1054 8047 naderman
        if ($row['forum_type'] == FORUM_LINK || ($row['forum_password'] && !$row['user_id']))
1055 4500 psotfx
        {
1056 8047 naderman
                // if this forum is a link or password protected (user has not entered the password yet) then skip to the next branch
1057 4500 psotfx
                continue;
1058 4500 psotfx
        }
1059 1051 psotfx
1060 4500 psotfx
        if ($row['left_id'] < $right)
1061 4500 psotfx
        {
1062 4500 psotfx
                $padding .= '&nbsp; &nbsp;';
1063 4500 psotfx
                $pad_store[$row['parent_id']] = $padding;
1064 4500 psotfx
        }
1065 4500 psotfx
        else if ($row['left_id'] > $right + 1)
1066 4500 psotfx
        {
1067 5674 naderman
                if (isset($pad_store[$row['parent_id']]))
1068 5674 naderman
                {
1069 5674 naderman
                        $padding = $pad_store[$row['parent_id']];
1070 5674 naderman
                }
1071 5674 naderman
                else
1072 5674 naderman
                {
1073 5674 naderman
                        continue;
1074 5674 naderman
                }
1075 4500 psotfx
        }
1076 2448 psotfx
1077 4500 psotfx
        $right = $row['right_id'];
1078 368 psotfx
1079 8047 naderman
        if ($auth->acl_gets('!f_search', '!f_list', $row['forum_id']))
1080 5552 naderman
        {
1081 8047 naderman
                // if the user does not have permissions to search or see this forum skip only this forum/category
1082 5552 naderman
                continue;
1083 5552 naderman
        }
1084 368 psotfx
1085 5552 naderman
        $selected = (in_array($row['forum_id'], $search_forum)) ? ' selected="selected"' : '';
1086 5552 naderman
1087 4500 psotfx
        if ($row['left_id'] > $cat_right)
1088 4500 psotfx
        {
1089 7076 naderman
                // make sure we don't forget anything
1090 7076 naderman
                $s_forums .= $holding;
1091 4500 psotfx
                $holding = '';
1092 4500 psotfx
        }
1093 1051 psotfx
1094 4500 psotfx
        if ($row['right_id'] - $row['left_id'] > 1)
1095 4500 psotfx
        {
1096 4500 psotfx
                $cat_right = max($cat_right, $row['right_id']);
1097 2448 psotfx
1098 4500 psotfx
                $holding .= '<option value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . $row['forum_name'] . '</option>';
1099 368 psotfx
        }
1100 2455 dougk_ff7
        else
1101 2455 dougk_ff7
        {
1102 4500 psotfx
                $s_forums .= $holding . '<option value="' . $row['forum_id'] . '"' . $selected . '>' . $padding . $row['forum_name'] . '</option>';
1103 4500 psotfx
                $holding = '';
1104 2455 dougk_ff7
        }
1105 368 psotfx
}
1106 6740 naderman
1107 6740 naderman
if ($holding)
1108 6740 naderman
{
1109 6740 naderman
        $s_forums .= $holding;
1110 6740 naderman
}
1111 6740 naderman
1112 4500 psotfx
$db->sql_freeresult($result);
1113 4500 psotfx
unset($pad_store);
1114 368 psotfx
1115 6380 naderman
if (!$s_forums)
1116 6380 naderman
{
1117 7919 kellanved
        trigger_error('NO_SEARCH');
1118 6380 naderman
}
1119 6380 naderman
1120 1051 psotfx
// Number of chars returned
1121 4500 psotfx
$s_characters = '<option value="-1">' . $user->lang['ALL_AVAILABLE'] . '</option>';
1122 2205 psotfx
$s_characters .= '<option value="0">0</option>';
1123 2205 psotfx
$s_characters .= '<option value="25">25</option>';
1124 2205 psotfx
$s_characters .= '<option value="50">50</option>';
1125 1051 psotfx
1126 5236 acydburn
for ($i = 100; $i <= 1000 ; $i += 100)
1127 368 psotfx
{
1128 7890 naderman
        $selected = ($i == 300) ? ' selected="selected"' : '';
1129 2205 psotfx
        $s_characters .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
1130 368 psotfx
}
1131 368 psotfx
1132 7860 acydburn
$s_hidden_fields = array('t' => $topic_id);
1133 7860 acydburn
1134 7860 acydburn
if ($_SID)
1135 7860 acydburn
{
1136 7860 acydburn
        $s_hidden_fields['sid'] = $_SID;
1137 7860 acydburn
}
1138 7860 acydburn
1139 7860 acydburn
if (!empty($_EXTRA_URL))
1140 7860 acydburn
{
1141 7860 acydburn
        foreach ($_EXTRA_URL as $url_param)
1142 7860 acydburn
        {
1143 7860 acydburn
                $url_param = explode('=', $url_param, 2);
1144 7860 acydburn
                $s_hidden_fields[$url_param[0]] = $url_param[1];
1145 7860 acydburn
        }
1146 7860 acydburn
}
1147 7860 acydburn
1148 4500 psotfx
$template->assign_vars(array(
1149 8885 acydburn
        'S_SEARCH_ACTION'                => append_sid("{$phpbb_root_path}search.$phpEx", false, true, 0), // We force no ?sid= appending by using 0
1150 7860 acydburn
        'S_HIDDEN_FIELDS'                => build_hidden_fields($s_hidden_fields),
1151 4500 psotfx
        'S_CHARACTER_OPTIONS'        => $s_characters,
1152 4500 psotfx
        'S_FORUM_OPTIONS'                => $s_forums,
1153 4500 psotfx
        'S_SELECT_SORT_DIR'                => $s_sort_dir,
1154 4500 psotfx
        'S_SELECT_SORT_KEY'                => $s_sort_key,
1155 7451 acydburn
        'S_SELECT_SORT_DAYS'        => $s_limit_days,
1156 7451 acydburn
        'S_IN_SEARCH'                        => true,
1157 7451 acydburn
));
1158 1051 psotfx
1159 8064 naderman
// only show recent searches to search administrators
1160 8064 naderman
if ($auth->acl_get('a_search'))
1161 6332 davidmj
{
1162 8064 naderman
        // Handle large objects differently for Oracle and MSSQL
1163 8064 naderman
        switch ($db->sql_layer)
1164 8064 naderman
        {
1165 8064 naderman
                case 'oracle':
1166 8064 naderman
                        $sql = 'SELECT search_time, search_keywords
1167 8064 naderman
                                FROM ' . SEARCH_RESULTS_TABLE . '
1168 8064 naderman
                                WHERE dbms_lob.getlength(search_keywords) > 0
1169 8064 naderman
                                ORDER BY search_time DESC';
1170 8064 naderman
                break;
1171 8669 acydburn
1172 8064 naderman
                case 'mssql':
1173 8064 naderman
                case 'mssql_odbc':
1174 10603 git-gate
                case 'mssqlnative':
1175 8064 naderman
                        $sql = 'SELECT search_time, search_keywords
1176 8064 naderman
                                FROM ' . SEARCH_RESULTS_TABLE . '
1177 8064 naderman
                                WHERE DATALENGTH(search_keywords) > 0
1178 8064 naderman
                                ORDER BY search_time DESC';
1179 8064 naderman
                break;
1180 8669 acydburn
1181 8064 naderman
                default:
1182 8064 naderman
                        $sql = 'SELECT search_time, search_keywords
1183 8064 naderman
                                FROM ' . SEARCH_RESULTS_TABLE . '
1184 8064 naderman
                                WHERE search_keywords <> \'\'
1185 8064 naderman
                                ORDER BY search_time DESC';
1186 8064 naderman
                break;
1187 8064 naderman
        }
1188 8064 naderman
        $result = $db->sql_query_limit($sql, 5);
1189 6764 davidmj
1190 8064 naderman
        while ($row = $db->sql_fetchrow($result))
1191 8064 naderman
        {
1192 8064 naderman
                $keywords = $row['search_keywords'];
1193 6332 davidmj
1194 8064 naderman
                $template->assign_block_vars('recentsearch', array(
1195 8064 naderman
                        'KEYWORDS'        => $keywords,
1196 8064 naderman
                        'TIME'                => $user->format_date($row['search_time']),
1197 4500 psotfx
1198 8064 naderman
                        'U_KEYWORDS'        => append_sid("{$phpbb_root_path}search.$phpEx", 'keywords=' . urlencode(htmlspecialchars_decode($keywords)))
1199 8064 naderman
                ));
1200 8064 naderman
        }
1201 8064 naderman
        $db->sql_freeresult($result);
1202 4500 psotfx
}
1203 4500 psotfx
1204 2760 psotfx
// Output the basic page
1205 3969 psotfx
page_header($user->lang['SEARCH']);
1206 368 psotfx
1207 2760 psotfx
$template->set_filenames(array(
1208 2760 psotfx
        'body' => 'search_body.html')
1209 2760 psotfx
);
1210 6015 acydburn
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
1211 2760 psotfx
1212 3969 psotfx
page_footer();
1213 368 psotfx
1214 2532 psotfx
?>