= 0)
message(sprintf($lang_search['Search flood'], $forum_user['g_search_flood']));
if ($forum_user['is_guest'])
{
$query = array(
'UPDATE' => 'online',
'SET' => 'last_search='.time(),
'WHERE' => 'ident=\''.$forum_db->escape(get_remote_address()).'\''
);
}
else
{
$query = array(
'UPDATE' => 'users',
'SET' => 'last_search='.time(),
'WHERE' => 'id='.$forum_user['id'],
);
}
($hook = get_hook('sf_fn_create_search_cache_qr_update_last_search_time')) ? eval($hook) : null;
$forum_db->query_build($query) or error(__FILE__, __LINE__);
// We need to grab results, insert them into the cache and reload with a search id before showing them
$keyword_results = $author_results = array();
// If it's a search for keywords
if ($keywords)
{
// Remove any apostrophes which aren't part of words
$keywords = substr(preg_replace('((?<=\W)\'|\'(?=\W))', '', ' '.$keywords.' '), 1, -1);
// Remove symbols and multiple whitespace
$keywords = preg_replace('/[\^\$&\(\)<>`"\|,@_\?%~\+\[\]{}:=\/#\\\\;!\.\s]+/', ' ', $keywords);
// Fill an array with all the words
$keywords_array = array_unique(explode(' ', $keywords));
// Remove any words that are not indexed
$keywords_array = array_filter($keywords_array, 'validate_search_word');
if (empty($keywords_array))
no_search_results();
$word_count = 0;
$match_type = 'and';
$result_list = array();
foreach ($keywords_array as $cur_word)
{
switch ($cur_word)
{
case 'and':
case 'or':
case 'not':
$match_type = $cur_word;
break;
default:
{
$query = array(
'SELECT' => 'm.post_id',
'FROM' => 'search_words AS w',
'JOINS' => array(
array(
'INNER JOIN' => 'search_matches AS m',
'ON' => 'm.word_id=w.id'
)
),
'WHERE' => 'w.word LIKE \''.$forum_db->escape(str_replace('*', '%', $cur_word)).'\''
);
// Search in what?
if ($search_in)
$query['WHERE'] .= ($search_in > 0 ? ' AND m.subject_match=0' : ' AND m.subject_match=1');
($hook = get_hook('sf_fn_create_search_cache_qr_get_keyword_hits')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
$row = array();
while (list($post_id) = $forum_db->fetch_row($result))
{
$row[$post_id] = 1;
if (!$word_count)
$result_list[$post_id] = 1;
else if ($match_type == 'or')
$result_list[$post_id] = 1;
else if ($match_type == 'not')
$result_list[$post_id] = 0;
}
if ($match_type == 'and' && $word_count)
{
foreach (array_keys($result_list) as $post_id)
{
if (!isset($row[$post_id]))
$result_list[$post_id] = 0;
}
}
++$word_count;
$forum_db->free_result($result);
break;
}
}
}
foreach ($result_list as $post_id => $matches)
{
if ($matches)
$keyword_results[] = $post_id;
}
unset($result_list);
}
// If it's a search for author name (and that author name isn't Guest)
if ($author && $author != 'guest' && $author != utf8_strtolower($lang_common['Guest']))
{
$query = array(
'SELECT' => 'u.id',
'FROM' => 'users AS u',
'WHERE' => 'u.username '.($db_type == 'pgsql' ? 'ILIKE' : 'LIKE').' \''.$forum_db->escape(str_replace('*', '%', $author)).'\''
);
($hook = get_hook('sf_fn_create_search_cache_qr_get_author')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result))
{
$user_ids = array();
while ($row = $forum_db->fetch_row($result))
$user_ids[] = $row[0];
$query = array(
'SELECT' => 'p.id',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id IN('.implode(',', $user_ids).')'
);
($hook = get_hook('sf_fn_create_search_cache_qr_get_author_hits')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
$search_ids = array();
while ($row = $forum_db->fetch_row($result))
$author_results[] = $row[0];
$forum_db->free_result($result);
}
}
if ($author && $keywords)
{
// If we searched for both keywords and author name we want the intersection between the results
$search_ids = array_intersect($keyword_results, $author_results);
unset($keyword_results, $author_results);
}
else if ($keywords)
$search_ids = $keyword_results;
else
$search_ids = $author_results;
if (count($search_ids) == 0)
no_search_results();
// Setup the default show_as topics search
$query = array(
'SELECT' => 't.id',
'FROM' => 'posts AS p',
'JOINS' => array(
array(
'INNER JOIN' => 'topics AS t',
'ON' => 't.id=p.topic_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=t.forum_id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND p.id IN('.implode(',', $search_ids).')',
'GROUP BY' => 't.id'
);
// Search a specific forum?
if (!in_array(-1, $forum) || ($forum_config['o_search_all_forums'] == '0' && !$forum_user['is_admmod']))
$query['WHERE'] .= ' AND t.forum_id IN('.implode(',', $forum).')';
// Adjust the query if show_as posts
if ($show_as == 'posts')
{
$query['SELECT'] = 'p.id';
unset($query['GROUP BY']);
}
($hook = get_hook('sf_fn_create_search_cache_qr_get_hits')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
$search_ids = array();
while ($row = $forum_db->fetch_row($result))
$search_ids[] = $row[0];
// Prune "old" search results
$query = array(
'SELECT' => 'o.ident',
'FROM' => 'online AS o'
);
($hook = get_hook('sf_fn_create_search_cache_qr_get_online_idents')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result))
{
$online_idents = array();
while ($row = $forum_db->fetch_row($result))
$online_idents[] = '\''.$forum_db->escape($row[0]).'\'';
$query = array(
'DELETE' => 'search_cache',
'WHERE' => 'ident NOT IN('.implode(',', $online_idents).')'
);
($hook = get_hook('sf_fn_create_search_cache_qr_delete_old_cached_searches')) ? eval($hook) : null;
$forum_db->query_build($query) or error(__FILE__, __LINE__);
}
// Final search results
$search_results = implode(',', $search_ids);
// Fill an array with our results and search properties
$search_data = serialize(compact('search_results', 'sort_by', 'sort_dir', 'show_as'));
$search_id = mt_rand(1, 2147483647);
$ident = ($forum_user['is_guest']) ? get_remote_address() : $forum_user['username'];
$query = array(
'INSERT' => 'id, ident, search_data',
'INTO' => 'search_cache',
'VALUES' => $search_id.', \''.$forum_db->escape($ident).'\', \''.$forum_db->escape($search_data).'\''
);
($hook = get_hook('sf_fn_create_search_cache_qr_cache_search')) ? eval($hook) : null;
$forum_db->query_build($query) or error(__FILE__, __LINE__);
$return = ($hook = get_hook('sf_fn_create_search_cache_end')) ? eval($hook) : null;
if ($return != null)
return;
$forum_db->end_transaction();
$forum_db->close();
// Redirect the user to the cached result page
header('Location: '.str_replace('&', '&', forum_link($forum_url['search_results'], $search_id)));
exit;
}
//
// Generate query to grab the results for a cached search
//
function generate_cached_search_query($search_id, &$show_as)
{
global $forum_db, $db_type, $forum_user, $forum_config;
$return = ($hook = get_hook('sf_fn_generate_cached_search_query_start')) ? eval($hook) : null;
if ($return != null)
return $return;
$ident = ($forum_user['is_guest']) ? get_remote_address() : $forum_user['username'];
$query = array(
'SELECT' => 'sc.search_data',
'FROM' => 'search_cache AS sc',
'WHERE' => 'sc.id='.$search_id.' AND sc.ident=\''.$forum_db->escape($ident).'\''
);
($hook = get_hook('sf_fn_generate_cached_search_query_qr_get_cached_search_data')) ? eval($hook) : null;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($row = $forum_db->fetch_assoc($result))
{
$search_data = unserialize($row['search_data']);
$search_results = $search_data['search_results'];
$sort_by = $search_data['sort_by'];
$sort_dir = $search_data['sort_dir'];
$show_as = $search_data['show_as'];
unset($search_data);
}
else
return false;
// If there are no posts, we don't need to execute the query
if (empty($search_results))
return false;
switch ($sort_by)
{
case 1:
$sort_by_sql = ($show_as == 'topics') ? 't.poster' : 'p.poster';
break;
case 2:
$sort_by_sql = 't.subject';
break;
case 3:
$sort_by_sql = 't.forum_id';
break;
default:
$sort_by_sql = ($show_as == 'topics') ? 't.posted' : 'p.posted';
($hook = get_hook('sf_fn_generate_cached_search_query_qr_cached_sort_by')) ? eval($hook) : null;
break;
}
if ($show_as == 'posts')
{
$query = array(
'SELECT' => 'p.id AS pid, p.poster AS pposter, p.posted AS pposted, p.poster_id, p.message, p.hide_smilies, t.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.forum_id, f.forum_name',
'FROM' => 'posts AS p',
'JOINS' => array(
array(
'INNER JOIN' => 'topics AS t',
'ON' => 't.id=p.topic_id'
),
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
)
),
'WHERE' => 'p.id IN('.$search_results.')',
'ORDER BY' => $sort_by_sql . ' ' . $sort_dir
);
($hook = get_hook('sf_fn_generate_cached_search_query_qr_get_cached_hits_as_posts')) ? eval($hook) : null;
}
else
{
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
)
),
'WHERE' => 't.id IN('.$search_results.')',
'ORDER BY' => $sort_by_sql . ' ' . $sort_dir
);
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_cached_search_query_qr_get_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
($hook = get_hook('sf_fn_generate_cached_search_query_qr_get_cached_hits_as_topics')) ? eval($hook) : null;
}
($hook = get_hook('sf_fn_generate_cached_search_query_end')) ? eval($hook) : null;
return $query;
}
//
// Generate query to grab the results for an action search (i.e. quicksearch)
//
function generate_action_search_query($action, $value, &$search_id, &$url_type, &$show_as)
{
global $forum_db, $forum_user, $forum_config, $lang_common, $forum_url, $db_type;
$return = ($hook = get_hook('sf_fn_generate_action_search_query_start')) ? eval($hook) : null;
if ($return != null)
return $return;
switch ($action)
{
case 'show_new':
if ($forum_user['is_guest'])
message($lang_common['No permission']);
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>'.$forum_user['last_visit'].' AND t.moved_to IS NULL',
'ORDER BY' => 't.last_post DESC'
);
if ($value != -1)
$query['WHERE'] .= ' AND f.id='.$value;
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_new_topics_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
$url_type = $forum_url['search_new_results'];
$search_id = $value;
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_new')) ? eval($hook) : null;
break;
case 'show_recent':
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>'.(time() - $value).' AND t.moved_to IS NULL',
'ORDER BY' => 't.last_post DESC'
);
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_recent_topics_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
$url_type = $forum_url['search_recent_results'];
$search_id = $value;
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_recent')) ? eval($hook) : null;
break;
case 'show_user_posts':
$query = array(
'SELECT' => 'p.id AS pid, p.poster AS pposter, p.posted AS pposted, p.poster_id, p.message, p.hide_smilies, t.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.forum_id, f.forum_name',
'FROM' => 'posts AS p',
'JOINS' => array(
array(
'INNER JOIN' => 'topics AS t',
'ON' => 't.id=p.topic_id'
),
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id='.$value,
'ORDER BY' => 'pposted DESC'
);
$url_type = $forum_url['search_user_posts'];
$search_id = $value;
$show_as = 'posts';
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_user_posts')) ? eval($hook) : null;
break;
case 'show_user_topics':
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'posts AS p',
'ON' => 't.first_post_id=p.id'
),
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id='.$value,
'ORDER BY' => 't.last_post DESC'
);
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_user_topics_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
$url_type = $forum_url['search_user_topics'];
$search_id = $value;
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_user_topics')) ? eval($hook) : null;
break;
case 'show_subscriptions':
if ($forum_user['is_guest'])
message($lang_common['Bad request']);
// Check we're allowed to see the subscriptions we're trying to look at
if ($forum_user['g_id'] != FORUM_ADMIN && $forum_user['id'] != $value)
message($lang_common['Bad request']);
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'subscriptions AS s',
'ON' => '(t.id=s.topic_id AND s.user_id='.$value.')'
),
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1)',
'ORDER BY' => 't.last_post DESC'
);
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_subscriptions_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
$url_type = $forum_url['search_subscriptions'];
$search_id = $value;
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_subscriptions')) ? eval($hook) : null;
break;
case 'show_unanswered':
$query = array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.first_post_id, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.forum_id, f.forum_name',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.num_replies=0 AND t.moved_to IS NULL',
'ORDER BY' => 't.last_post DESC'
);
// With "has posted" indication
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1')
{
$subquery = array(
'SELECT' => 'COUNT(p.id)',
'FROM' => 'posts AS p',
'WHERE' => 'p.poster_id='.$forum_user['id'].' AND p.topic_id=t.id'
);
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_unanswered_topics_has_posted')) ? eval($hook) : null;
$query['SELECT'] .= ', ('.$forum_db->query_build($subquery, true).') AS has_posted';
}
$url_type = $forum_url['search_unanswered'];
($hook = get_hook('sf_fn_generate_action_search_query_qr_get_unanswered')) ? eval($hook) : null;
break;
}
($hook = get_hook('sf_fn_generate_action_search_query_end')) ? eval($hook) : null;
return $query;
}
//
// Get search results for a specified query, returns number of results
//
function get_search_results($query, &$search_set)
{
global $forum_db, $forum_user, $forum_page, $lang_common;
$return = ($hook = get_hook('sf_fn_get_search_results_start')) ? eval($hook) : null;
if ($return != null)
return $return;
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
// Make sure we actually have some results
$num_hits = $forum_db->num_rows($result);
if ($num_hits == 0)
return 0;
// Work out the settings for pagination
$forum_page['num_pages'] = ceil($num_hits / $forum_page['per_page']);
$forum_page['page'] = (!isset($_GET['p']) || !is_numeric($_GET['p']) || $_GET['p'] <= 1 || $_GET['p'] > $forum_page['num_pages']) ? 1 : $_GET['p'];
// Determine the topic or post offset (based on $forum_page['page'])
$forum_page['start_from'] = $forum_page['per_page'] * ($forum_page['page'] - 1);
$forum_page['finish_at'] = min(($forum_page['start_from'] + $forum_page['per_page']), $num_hits);
// Fill $search_set with out search hits
$search_set = array();
$row_num = 0;
while ($row = $forum_db->fetch_assoc($result))
{
if ($forum_page['start_from'] <= $row_num && $forum_page['finish_at'] > $row_num)
$search_set[] = $row;
++$row_num;
}
$forum_db->free_result($result);
$return = ($hook = get_hook('sf_fn_get_search_results_end')) ? eval($hook) : null;
if ($return != null)
return $return;
return $num_hits;
}
//
// Output a message if there are no results
//
function no_search_results($action = 'search')
{
global $forum_page, $lang_search, $forum_url;
$forum_page['search_again'] = ''.$lang_search['Perform new search'].'';
$return = ($hook = get_hook('sf_fn_no_search_results_start')) ? eval($hook) : null;
if ($return != null)
return;
switch ($action)
{
case 'show_new':
message($lang_search['No new posts'], $forum_page['search_again'], $lang_search['Topics with new']);
case 'show_recent':
message($lang_search['No recent posts'], $forum_page['search_again'], $lang_search['Recently active topics']);
case 'show_user_posts':
message($lang_search['No user posts'], $forum_page['search_again'], $lang_search['Posts by user']);
case 'show_user_topics':
message($lang_search['No user topics'], $forum_page['search_again'], $lang_search['Topics by user']);
case 'show_subscriptions':
message($lang_search['No subscriptions'], $forum_page['search_again'], $lang_search['Subscriptions']);
case 'show_unanswered':
message($lang_search['No unanswered'], $forum_page['search_again'], $lang_search['Unanswered topics']);
default:
message($lang_search['No hits'], $forum_page['search_again'], $lang_search['Search results']);
}
}
//
// Generate search breadcrumbs
//
function generate_search_crumbs($action = null)
{
global $forum_page, $lang_common, $lang_search, $forum_url, $forum_user, $num_hits, $search_set, $search_id, $show_as;
$return = ($hook = get_hook('sf_fn_generate_search_crumbs_start')) ? eval($hook) : null;
if ($return != null)
return;
switch ($action)
{
case 'show_new':
$forum_page['crumbs'][] = $lang_search['Topics with new'];
$forum_page['items_info'] = generate_items_info($lang_search['Topics found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
$forum_page['main_foot_options']['mark_all'] = ''.$lang_common['Mark all as read'].'';
break;
case 'show_recent':
$forum_page['crumbs'][] = $lang_search['Recently active topics'];
$forum_page['items_info'] = generate_items_info($lang_search['Topics found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
break;
case 'show_unanswered':
$forum_page['crumbs'][] = $lang_search['Unanswered topics'];
$forum_page['items_info'] = generate_items_info($lang_search['Topics found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
break;
case 'show_user_posts':
$forum_page['crumbs'][] = sprintf($lang_search['Posts by'], $search_set[0]['pposter'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['items_info'] = generate_items_info($lang_search['Posts found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['user_topics'] = ''.sprintf($lang_search['Topics by'], $search_set[0]['pposter']).'';
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
break;
case 'show_user_topics':
$forum_page['crumbs'][] = sprintf($lang_search['Topics by'], $search_set[0]['poster']);
$forum_page['items_info'] = generate_items_info($lang_search['Topics found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['user_posts'] = ''.sprintf($lang_search['Posts by'], $search_set[0]['poster']).'';
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
break;
case 'show_subscriptions':
$forum_page['crumbs'][] = $lang_search['Subscriptions'];
$forum_page['items_info'] = generate_items_info($lang_search['Topics found'], ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['defined_search'] = ''.$lang_search['User defined search'].'';
break;
default:
$forum_page['crumbs'][] = $lang_search['Search results'];
$forum_page['items_info'] = generate_items_info((($show_as == 'topics') ? $lang_search['Topics found'] : $lang_search['Posts found']), ($forum_page['start_from'] + 1), $num_hits);
$forum_page['main_head_options']['new_search'] = ''.$lang_search['Perform new search'].'';
break;
}
}
//
// Checks to see if an action is valid
//
function validate_search_action($action)
{
// A list of valid actions (extensions can add their own actions to the array)
$valid_actions = array('search', 'show_new', 'show_recent', 'show_user_posts', 'show_user_topics', 'show_subscriptions', 'show_unanswered');
$return = ($hook = get_hook('sf_fn_validate_actions_start')) ? eval($hook) : null;
if ($return != null)
return $return;
return in_array($action, $valid_actions);
}