$forums=isset($_GET['forums'])?(is_array($_GET['forums'])?$_GET['forums']:array_filter(explode(',',$_GET['forums']))):((isset($_GET['forum'])&&isset($sf_array_asc[$_GET['forum']]))?$sf_array_asc[$_GET['forum']]:array());// MOD subforums - Visman
$result=$db->query('SELECT search_data FROM '.$db->prefix.'search_cache WHERE id='.$search_id.' AND ident=\''.$db->escape($ident).'\'')orerror('Unable to fetch search results',__FILE__,__LINE__,$db->error());
$forum_sql=(!empty($forums)||(empty($forums)&&$pun_config['o_search_all_forums']=='0'&&!$pun_user['is_admmod']))?' AND t.forum_id IN ('.implode(',',$forums).')':'';
$db->query('UPDATE '.$db->prefix.'users SET last_search='.time().' WHERE id='.$pun_user['id'])orerror('Unable to update user',__FILE__,__LINE__,$db->error());
else
$db->query('UPDATE '.$db->prefix.'online SET last_search='.time().' WHERE ident=\''.$db->escape(get_remote_address()).'\'')orerror('Unable to update user',__FILE__,__LINE__,$db->error());
// Should we search in message body or topic subject specifically?
$search_in_cond=($search_in)?(($search_in>0)?' AND m.subject_match = 0':' AND m.subject_match = 1'):'';
$word_count=0;
$match_type='and';
$sort_data=array();
foreach($keywords_arrayas$cur_word)
{
switch($cur_word)
{
case'and':
case'or':
case'not':
$match_type=$cur_word;
break;
default:
{
// search HL - Visman
if($search_in>-1&&$match_type!='not')
$array_shl[]=$cur_word;
// search HL - Visman
if(is_cjk($cur_word))
{
$where_cond=str_replace('*','%',$cur_word);
$where_cond=($search_in?(($search_in>0)?'p.message LIKE \'%'.$db->escape($where_cond).'%\'':'t.subject LIKE \'%'.$db->escape($where_cond).'%\''):'p.message LIKE \'%'.$db->escape($where_cond).'%\' OR t.subject LIKE \'%'.$db->escape($where_cond).'%\'');
$result=$db->query('SELECT p.id AS post_id, p.topic_id, '.$sort_by_sql.' AS sort_by FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE ('.$where_cond.') AND (fp.read_forum IS NULL OR fp.read_forum=1)'.$forum_sql,true)orerror('Unable to search for posts',__FILE__,__LINE__,$db->error());
}
else
$result=$db->query('SELECT m.post_id, p.topic_id, '.$sort_by_sql.' AS sort_by FROM '.$db->prefix.'search_words AS w INNER JOIN '.$db->prefix.'search_matches AS m ON m.word_id = w.id INNER JOIN '.$db->prefix.'posts AS p ON p.id=m.post_id INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE w.word LIKE \''.$db->escape(str_replace('*','%',$cur_word)).'\''.$search_in_cond.' AND (fp.read_forum IS NULL OR fp.read_forum=1)'.$forum_sql,true)orerror('Unable to search for posts',__FILE__,__LINE__,$db->error());
// Sort the results - annoyingly array_multisort re-indexes arrays with numeric keys, so we need to split the keys out into a separate array then combine them again after
$result=$db->query('SELECT id FROM '.$db->prefix.'users WHERE username ILIKE \''.$db->escape($author).'\'')orerror('Unable to fetch users',__FILE__,__LINE__,$db->error());
break;
default:
$result=$db->query('SELECT id FROM '.$db->prefix.'users WHERE username LIKE \''.$db->escape($author).'\'')orerror('Unable to fetch users',__FILE__,__LINE__,$db->error());
break;
}
if($db->num_rows($result))
{
$user_ids=array();
while($row=$db->fetch_row($result))
$user_ids[]=$row[0];
$result=$db->query('SELECT p.id AS post_id, p.topic_id FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id IN('.implode(',',$user_ids).')'.$forum_sql.' ORDER BY '.$sort_by_sql.' '.$sort_dir)orerror('Unable to fetch matched posts list',__FILE__,__LINE__,$db->error());
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>'.$pun_user['last_visit'].' AND t.moved_to IS NULL'.(isset($_GET['fid'])?(isset($sf_array_asc[$_GET['fid']])?' AND t.forum_id IN ('.implode(',',$sf_array_asc[$_GET['fid']]).')':' AND t.forum_id='.intval($_GET['fid'])):'').' ORDER BY t.last_post DESC')orerror('Unable to fetch topic list',__FILE__,__LINE__,$db->error());// MOD subforums - Visman
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No new posts']);
}
// If it's a search for recent posts (in a certain time interval)
elseif($action=='show_recent')
{
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.last_post>'.(time()-$interval).' AND t.moved_to IS NULL'.(isset($_GET['fid'])?(isset($sf_array_asc[$_GET['fid']])?' AND t.forum_id IN ('.implode(',',$sf_array_asc[$_GET['fid']]).')':' AND t.forum_id='.intval($_GET['fid'])):'').' ORDER BY t.last_post DESC')orerror('Unable to fetch topic list',__FILE__,__LINE__,$db->error());// MOD subforums - Visman
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No recent posts']);
}
// If it's a search for topics in which the user has posted
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id='.$pun_user['id'].' GROUP BY t.id'.($container->getParameter('DB_TYPE')=='pgsql'?', t.last_post':'').' ORDER BY t.last_post DESC')orerror('Unable to fetch topic list',__FILE__,__LINE__,$db->error());
// If it's a search for posts by a specific user ID
elseif($action=='show_user_posts')
{
$show_as='posts';
$result=$db->query('SELECT p.id FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON p.topic_id=t.id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id='.$user_id.' ORDER BY p.posted DESC')orerror('Unable to fetch user posts',__FILE__,__LINE__,$db->error());
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No user posts']);
// Pass on the user ID so that we can later know whose posts we're searching for
$search_type[2]=$user_id;
}
// If it's a search for topics by a specific user ID
elseif($action=='show_user_topics')
{
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.first_post_id=p.id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.poster_id='.$user_id.' ORDER BY t.last_post DESC')orerror('Unable to fetch user topics',__FILE__,__LINE__,$db->error());
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No user topics']);
// Pass on the user ID so that we can later know whose topics we're searching for
$search_type[2]=$user_id;
}
// If it's a search for subscribed topics
elseif($action=='show_subscriptions')
{
if($pun_user['is_guest'])
message($lang_common['Bad request'],false,'404 Not Found');
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$user_id.') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) ORDER BY t.last_post DESC')orerror('Unable to fetch topic list',__FILE__,__LINE__,$db->error());
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No subscriptions']);
// Pass on user ID so that we can later know whose subscriptions we're searching for
$search_type[2]=$user_id;
}
// If it's a search for unanswered posts
else
{
$result=$db->query('SELECT t.id FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_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')orerror('Unable to fetch topic list',__FILE__,__LINE__,$db->error());
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No unanswered']);
}
$search_ids=array();
while($row=$db->fetch_row($result))
$search_ids[]=$row[0];
$db->free_result($result);
}
// MOD warnings - Visman
elseif($action=='show_user_warn')
{
$sort_by=9;
$show_as='posts';
$sort_dir='DESC';
$result=$db->query('SELECT p.id FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'warnings AS w ON w.id=p.id INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE p.poster_id='.$user_id.' AND (fp.read_forum IS NULL OR fp.read_forum=1) ORDER BY w.posted DESC')orerror('Unable to search for posts',__FILE__,__LINE__,$db->error());
$num_hits=$db->num_rows($result);
if(!$num_hits)
message($lang_search['No user posts']);
$search_ids=array();
while($row=$db->fetch_row($result))
$search_ids[]=$row[0];
$search_type=array('warn',$user_id);
$db->free_result($result);
}
else
message($lang_common['Bad request'],false,'404 Not Found');
// Prune "old" search results
// $old_searches = array();
// $result = $db->query('SELECT ident FROM '.$db->prefix.'online') or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());
//
if(count($onl_s)>0)
{
foreach($onl_sas$key=>$dkey)
$onl_s[$key]='\''.$db->escape($dkey).'\'';
$db->query('DELETE FROM '.$db->prefix.'search_cache WHERE ident NOT IN('.implode(',',$onl_s).')')orerror('Unable to delete search results',__FILE__,__LINE__,$db->error());
}
// Fill an array with our results and search properties
$result=$db->query('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.last_post, t.last_post_id, t.last_poster, t.num_replies, t.forum_id, f.forum_name, w.message AS wmessage, w.poster AS wposter, w.posted AS wposted FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'warnings AS w ON w.id=p.id WHERE p.id IN('.implode(',',$search_ids).') ORDER BY '.$sort_by_sql.' '.$sort_dir)orerror('Unable to fetch search results',__FILE__,__LINE__,$db->error());
else
$result=$db->query('SELECT t.id AS tid, t.poster, t.subject, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.sticky, t.poll_type, t.forum_id, f.forum_name FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id WHERE t.id IN('.implode(',',$search_ids).') ORDER BY '.$sort_by_sql.' '.$sort_dir)orerror('Unable to fetch search results',__FILE__,__LINE__,$db->error());
$result=$db->query('SELECT username FROM '.$db->prefix.'users WHERE id='.$subscriber_id)orerror('Unable to fetch username of subscriber',__FILE__,__LINE__,$db->error());
if($db->num_rows($result))
$subscriber_name=$db->result($result);
else
message($lang_common['Bad request'],false,'404 Not Found');
<legend><?phpecho$lang_search['Search in legend']?></legend>
<divclass="infldset">
<?php
//$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
// We either show a list of forums of which multiple can be selected