Vergleich inc/functions_search.php - 1.8.4 - 1.8.22

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 11Zeile 11
/**
* Build a select box list of forums the current user has permission to search
*

/**
* Build a select box list of forums the current user has permission to search
*

 * @param int The parent forum ID to start at
* @param int The selected forum ID
* @param int Add select boxes at this call or not
* @param int The current depth

 * @param int $pid The parent forum ID to start at
* @param int $selitem The selected forum ID
* @param int $addselect Add select boxes at this call or not
* @param string $depth The current depth

 * @return string The forum select boxes
*/

 * @return string The forum select boxes
*/

function make_searchable_forums($pid="0", $selitem='', $addselect="1", $depth='')

function make_searchable_forums($pid=0, $selitem=0, $addselect=1, $depth='')

{
global $db, $pforumcache, $permissioncache, $mybb, $selecteddone, $forumlist, $forumlistbits, $theme, $templates, $lang, $forumpass;
$pid = (int)$pid;

{
global $db, $pforumcache, $permissioncache, $mybb, $selecteddone, $forumlist, $forumlistbits, $theme, $templates, $lang, $forumpass;
$pid = (int)$pid;

Zeile 56Zeile 56
					}
if($forum['password'] != '')
{

					}
if($forum['password'] != '')
{

						if($mybb->cookies['forumpass'][$forum['fid']] == md5($mybb->user['uid'].$forum['password']))

						if($mybb->cookies['forumpass'][$forum['fid']] === md5($mybb->user['uid'].$forum['password']))

						{
$pwverified = 1;
}

						{
$pwverified = 1;
}

Zeile 88Zeile 88
/**
* Build a comma separated list of the forums this user cannot search
*

/**
* Build a comma separated list of the forums this user cannot search
*

 * @param int The parent ID to build from
* @param int First rotation or not (leave at default)
* @return return a CSV list of forums the user cannot search

 * @param int $pid The parent ID to build from
* @param int $first First rotation or not (leave at default)
* @return string return a CSV list of forums the user cannot search

 */

 */

function get_unsearchable_forums($pid="0", $first=1)

function get_unsearchable_forums($pid=0, $first=1)

{
global $db, $forum_cache, $permissioncache, $mybb, $unsearchableforums, $unsearchable, $templates, $forumpass;


{
global $db, $forum_cache, $permissioncache, $mybb, $unsearchableforums, $unsearchable, $templates, $forumpass;


Zeile 125Zeile 125
		$pwverified = 1;
if($forum['password'] != '')
{

		$pwverified = 1;
if($forum['password'] != '')
{

			if($mybb->cookies['forumpass'][$forum['fid']] != md5($mybb->user['uid'].$forum['password']))

			if(!isset($mybb->cookies['forumpass'][$forum['fid']]) || !my_hash_equals($mybb->cookies['forumpass'][$forum['fid']], md5($mybb->user['uid'].$forum['password'])))

			{
$pwverified = 0;
}

			{
$pwverified = 0;
}

Zeile 173Zeile 173
/**
* Build a array list of the forums this user cannot search due to password protection
*

/**
* Build a array list of the forums this user cannot search due to password protection
*

 * @param int the fids to check (leave null to check all forums)
* @return return a array list of password protected forums the user cannot search

 * @param array $fids the fids to check (leave blank to check all forums)
* @return array return a array list of password protected forums the user cannot search

 */
function get_password_protected_forums($fids=array())
{

 */
function get_password_protected_forums($fids=array())
{

Zeile 207Zeile 207
			continue;
}


			continue;
}


		if(md5($mybb->user['uid'].$forum_cache[$fid]['password']) != $mybb->cookies['forumpass'][$fid])

		if(md5($mybb->user['uid'].$forum_cache[$fid]['password']) !== $mybb->cookies['forumpass'][$fid])

		{
$pass_fids[] = $fid;
$child_list = get_child_list($fid);

		{
$pass_fids[] = $fid;
$child_list = get_child_list($fid);

Zeile 224Zeile 224
/**
* Clean search keywords and make them safe for querying
*

/**
* Clean search keywords and make them safe for querying
*

 * @param string The keywords to be cleaned

 * @param string $keywords The keywords to be cleaned

 * @return string The cleaned keywords
*/
function clean_keywords($keywords)
{

 * @return string The cleaned keywords
*/
function clean_keywords($keywords)
{

 
	global $db;


	$keywords = my_strtolower($keywords);

	$keywords = my_strtolower($keywords);

	$keywords = str_replace("%", "\\%", $keywords);

	$keywords = $db->escape_string_like($keywords);

	$keywords = preg_replace("#\*{2,}#s", "*", $keywords);
$keywords = str_replace("*", "%", $keywords);

	$keywords = preg_replace("#\*{2,}#s", "*", $keywords);
$keywords = str_replace("*", "%", $keywords);

	$keywords = preg_replace("#([\[\]\|\.\,:'])#s", " ", $keywords);
$keywords = preg_replace("#\s+#s", " ", $keywords);

	$keywords = preg_replace("#\s+#s", " ", $keywords);
$keywords = str_replace('\\"', '"', $keywords);


// Search for "and" or "or" and remove if it's at the beginning
$keywords = trim($keywords);
if(my_strpos($keywords, "or") === 0)


// Search for "and" or "or" and remove if it's at the beginning
$keywords = trim($keywords);
if(my_strpos($keywords, "or") === 0)

	{

	{

		$keywords = substr_replace($keywords, "", 0, 2);
}

if(my_strpos($keywords, "and") === 0)

		$keywords = substr_replace($keywords, "", 0, 2);
}

if(my_strpos($keywords, "and") === 0)

	{

	{

		$keywords = substr_replace($keywords, "", 0, 3);
}


		$keywords = substr_replace($keywords, "", 0, 3);
}


Zeile 254Zeile 256
/**
* Clean search keywords for fulltext searching, making them safe for querying
*

/**
* Clean search keywords for fulltext searching, making them safe for querying
*

 * @param string The keywords to be cleaned
* @return string The cleaned keywords

 * @param string $keywords The keywords to be cleaned
* @return string|bool The cleaned keywords or false on failure

 */
function clean_keywords_ft($keywords)
{
if(!$keywords)

 */
function clean_keywords_ft($keywords)
{
if(!$keywords)

	{

	{

		return false;
}
$keywords = my_strtolower($keywords);

		return false;
}
$keywords = my_strtolower($keywords);

Zeile 270Zeile 272
	// Separate braces for further processing
$keywords = preg_replace("#((\+|-|<|>|~)?\(|\))#s", " $1 ", $keywords);
$keywords = preg_replace("#\s+#s", " ", $keywords);

	// Separate braces for further processing
$keywords = preg_replace("#((\+|-|<|>|~)?\(|\))#s", " $1 ", $keywords);
$keywords = preg_replace("#\s+#s", " ", $keywords);

 
	
global $mybb;

$min_word_length = (int) $mybb->settings['minsearchword'];
if($min_word_length <= 0)
{
$min_word_length = 3;
}
$min_word_length -= 1;

// Replaces less than 3 characters
$keywords = preg_replace("/(\b.{1,{$min_word_length}})(\s)|(\b.{1,{$min_word_length}}$)/", '$2', $keywords);
// Collapse multiple spaces
$keywords = preg_replace('/(\s)+/', '$1', $keywords);
$keywords = trim($keywords);


$words = array(array());



$words = array(array());


Zeile 408Zeile 425
/**
* Perform a thread and post search under MySQL or MySQLi
*

/**
* Perform a thread and post search under MySQL or MySQLi
*

 * @param array Array of search data

 * @param array $search Array of search data

 * @return array Array of search data with results mixed in
*/
function privatemessage_perform_search_mysql($search)

 * @return array Array of search data with results mixed in
*/
function privatemessage_perform_search_mysql($search)

Zeile 554Zeile 571
				if($search['subject'] && $search['message'] && $subject_lookin == " AND (")
{
// We're looking for anything, check for a subject lookin

				if($search['subject'] && $search['message'] && $subject_lookin == " AND (")
{
// We're looking for anything, check for a subject lookin

					$error = true;
}
elseif($search['subject'] && !$search['message'] && $subject_lookin == " AND (")

					$error = true;
}
elseif($search['subject'] && !$search['message'] && $subject_lookin == " AND (")

				{
// Just in a subject?

				{
// Just in a subject?

					$error = true;
}

					$error = true;
}

				elseif(!$search['subject'] && $search['message'] && $message_lookin == " {$string} (")

				elseif(!$search['subject'] && $search['message'] && $message_lookin == " {$string} (")

				{

				{

					// Just in a message?
$error = true;

					// Just in a message?
$error = true;

				}


				}


				if($error == true)
{
// There are no search keywords to look for
$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);

				if($error == true)
{
// There are no search keywords to look for
$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);

				}

$inquote = !$inquote;
}

				}

$inquote = !$inquote;
}


if($search['subject'] == 1)


if($search['subject'] == 1)

			{

			{

				$subject_lookin .= ")";

				$subject_lookin .= ")";

			}


			}


			if($search['message'] == 1)
{
$message_lookin .= ")";

			if($search['message'] == 1)
{
$message_lookin .= ")";

Zeile 593Zeile 610
		{
$keywords = str_replace("\"", '', trim($keywords));
if(my_strlen($keywords) < $mybb->settings['minsearchword'])

		{
$keywords = str_replace("\"", '', trim($keywords));
if(my_strlen($keywords) < $mybb->settings['minsearchword'])

			{

			{

				$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);
}

				$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);
}

Zeile 653Zeile 670
	if(!is_array($search['folder']))
{
$search['folder'] = array($search['folder']);

	if(!is_array($search['folder']))
{
$search['folder'] = array($search['folder']);

	}

	}


if(!empty($search['folder']))


if(!empty($search['folder']))

	{

	{

		$folderids = array();

		$folderids = array();





		$search['folder'] = array_map("intval", $search['folder']);

$folderids = implode(',', $search['folder']);

		$search['folder'] = array_map("intval", $search['folder']);

$folderids = implode(',', $search['folder']);

Zeile 673Zeile 690
	{
$searchsql .= " AND (";
if($search['status']['new'])

	{
$searchsql .= " AND (";
if($search['status']['new'])

		{

		{

			$statussql[] = " status='0' ";
}
if($search['status']['replied'])

			$statussql[] = " status='0' ";
}
if($search['status']['replied'])

Zeile 696Zeile 713
		$statussql = implode("OR", $statussql);
$searchsql .= $statussql.")";
}

		$statussql = implode("OR", $statussql);
$searchsql .= $statussql.")";
}

 

$limitsql = "";
if((int)$mybb->settings['searchhardlimit'] > 0)
{
$limitsql = " LIMIT ".(int)$mybb->settings['searchhardlimit'];
}
$searchsql .= $limitsql;


// Run the search
$pms = array();


// Run the search
$pms = array();

Zeile 703Zeile 727
	while($pm = $db->fetch_array($query))
{
$pms[$pm['pmid']] = $pm['pmid'];

	while($pm = $db->fetch_array($query))
{
$pms[$pm['pmid']] = $pm['pmid'];

	}


	}


	if(count($pms) < 1)
{
error($lang->error_nosearchresults);
}
$pms = implode(',', $pms);

	if(count($pms) < 1)
{
error($lang->error_nosearchresults);
}
$pms = implode(',', $pms);





	return array(
"querycache" => $pms

	return array(
"querycache" => $pms

	);
}

/**

	);
}

/**

 * Perform a help document search under MySQL or MySQLi
*

 * Perform a help document search under MySQL or MySQLi
*

 * @param array Array of search data

 * @param array $search Array of search data

 * @return array Array of search data with results mixed in
*/
function helpdocument_perform_search_mysql($search)
{
global $mybb, $db, $lang;

 * @return array Array of search data with results mixed in
*/
function helpdocument_perform_search_mysql($search)
{
global $mybb, $db, $lang;





	$keywords = clean_keywords($search['keywords']);
if(!$keywords && !$search['sender'])
{

	$keywords = clean_keywords($search['keywords']);
if(!$keywords && !$search['sender'])
{

Zeile 733Zeile 757
	}

if($mybb->settings['minsearchword'] < 1)

	}

if($mybb->settings['minsearchword'] < 1)

	{

	{

		$mybb->settings['minsearchword'] = 3;
}


		$mybb->settings['minsearchword'] = 3;
}


Zeile 812Zeile 836
									// Just in a document?
continue;
}

									// Just in a document?
continue;
}

							}

							}


$boolean = $word;
}


$boolean = $word;
}

Zeile 871Zeile 895
				{
// Just in a document?
$error = true;

				{
// Just in a document?
$error = true;

				}

if($error == true)
{
// There are no search keywords to look for
$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);
}

$inquote = !$inquote;
}


				}

if($error == true)
{
// There are no search keywords to look for
$lang->error_minsearchlength = $lang->sprintf($lang->error_minsearchlength, $mybb->settings['minsearchword']);
error($lang->error_minsearchlength);
}

$inquote = !$inquote;
}


			if($search['name'] == 1)
{
$name_lookin .= ")";
}

if($search['document'] == 1)

			if($search['name'] == 1)
{
$name_lookin .= ")";
}

if($search['document'] == 1)

			{

			{

				$document_lookin .= ")";
}


				$document_lookin .= ")";
}


Zeile 946Zeile 970
/**
* Perform a thread and post search under MySQL or MySQLi
*

/**
* Perform a thread and post search under MySQL or MySQLi
*

 * @param array Array of search data

 * @param array $search Array of search data

 * @return array Array of search data with results mixed in
*/
function perform_search_mysql($search)

 * @return array Array of search data with results mixed in
*/
function perform_search_mysql($search)

Zeile 954Zeile 978
	global $mybb, $db, $lang, $cache;

$keywords = clean_keywords($search['keywords']);

	global $mybb, $db, $lang, $cache;

$keywords = clean_keywords($search['keywords']);

	if(!$keywords && !$search['author'])
{
error($lang->error_nosearchterms);
}

 

if($mybb->settings['minsearchword'] < 1)
{


if($mybb->settings['minsearchword'] < 1)
{

Zeile 1092Zeile 1112
		if($search['matchusername'])
{
$user = get_user_by_username($search['author']);

		if($search['matchusername'])
{
$user = get_user_by_username($search['author']);

			$userids[] = $user['uid'];




			if($user)
{
$userids[] = $user['uid'];
}

		}
else
{

		}
else
{

Zeile 1128Zeile 1151
	if($search['postdate'])
{
if($search['pddir'] == 0)

	if($search['postdate'])
{
if($search['pddir'] == 0)

		{

		{

			$datecut = "<=";

			$datecut = "<=";

		}

		}

		else
{
$datecut = ">=";

		else
{
$datecut = ">=";

Zeile 1140Zeile 1163
		$datecut .= "'$datelimit'";
$post_datecut = " AND p.dateline $datecut";
$thread_datecut = " AND t.dateline $datecut";

		$datecut .= "'$datelimit'";
$post_datecut = " AND p.dateline $datecut";
$thread_datecut = " AND t.dateline $datecut";

	}


	}


	$thread_replycut = '';
if($search['numreplies'] != '' && $search['findthreadst'])
{
if((int)$search['findthreadst'] == 1)
{
$thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'";

	$thread_replycut = '';
if($search['numreplies'] != '' && $search['findthreadst'])
{
if((int)$search['findthreadst'] == 1)
{
$thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'";

		}

		}

		else
{
$thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'";

		else
{
$thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'";

		}
}


		}
}


	$thread_prefixcut = '';
$prefixlist = array();
if($search['threadprefix'] && $search['threadprefix'][0] != 'any')

	$thread_prefixcut = '';
$prefixlist = array();
if($search['threadprefix'] && $search['threadprefix'][0] != 'any')

Zeile 1179Zeile 1202

$forumin = '';
$fidlist = array();


$forumin = '';
$fidlist = array();

	$searchin = array();
if(!is_array($search['forums']) || $search['forums'][0] != "all")

	if(!empty($search['forums']) && (!is_array($search['forums']) || $search['forums'][0] != "all"))


	{
if(!is_array($search['forums']))
{
$search['forums'] = array((int)$search['forums']);
}

	{
if(!is_array($search['forums']))
{
$search['forums'] = array((int)$search['forums']);
}

		// Generate a comma separated list of all groups the user belongs to
$user_groups = $mybb->user['usergroup'];
if($mybb->user['additionalgroups'])
{
$user_groups .= ",".$mybb->user['additionalgroups'];

// Setup some quick permissions for us
$fcache = $cache->read("forumpermissions");
$add_groups = explode(",", $mybb->user['additionalgroups']);
}
foreach($search['forums'] as $forum)

		foreach($search['forums'] as $forum)











		{
$forum = (int)$forum;

		{
$forum = (int)$forum;

			if(empty($searchin[$forum]))
{
if(isset($add_groups) && is_array($add_groups))
{
$can_search = 0;
foreach($add_groups as $add_group)
{
// Check to make sure that we have sufficient permissions to search this forum
if(!is_array($fcache[$forum][$add_group]) || $fcache[$forum][$add_group]['cansearch'] == 1 || $mybb->usergroup['cansearch'] == 1)
{
$can_search = 1;
}
}

if($can_search == 0)
{
// We can't search this forum...
continue;
}
}

switch($db->type)
{
case "pgsql":
$query = $db->simple_select("forums", "DISTINCT fid", "(','||parentlist||',' LIKE ',%{$forum}%,') = true AND active != 0");
break;
case "sqlite":
$query = $db->simple_select("forums", "DISTINCT fid", "(','||parentlist||',' LIKE ',%{$forum}%,') > 0 AND active != 0");
break;
default:
$query = $db->simple_select("forums", "DISTINCT fid", "INSTR(CONCAT(',',parentlist,','),',{$forum},') > 0 AND active != 0");
}

while($sforum = $db->fetch_array($query))

			if($forum > 0)
{
$fidlist[] = $forum;
$child_list = get_child_list($forum);
if(is_array($child_list))






























				{

				{

					$fidlist[] = $sforum['fid'];

					$fidlist = array_merge($fidlist, $child_list);

				}

				}

			}
}
if(count($fidlist) == 1)
{
$forumin .= " AND t.fid='$forum' ";
$searchin[$forum] = 1;

			}






		}

		}

		else


		$fidlist = array_unique($fidlist);
if(count($fidlist) >= 1)

		{

		{

			if(count($fidlist) > 1)
{
$forumin = " AND t.fid IN (".implode(',', $fidlist).")";
}

			$forumin = " AND t.fid IN (".implode(',', $fidlist).")";




		}
}


		}
}


Zeile 1420Zeile 1396
/**
* Perform a thread and post search under MySQL or MySQLi using boolean fulltext capabilities
*

/**
* Perform a thread and post search under MySQL or MySQLi using boolean fulltext capabilities
*

 * @param array Array of search data

 * @param array $search Array of search data

 * @return array Array of search data with results mixed in
*/
function perform_search_mysql_ft($search)

 * @return array Array of search data with results mixed in
*/
function perform_search_mysql_ft($search)

Zeile 1428Zeile 1404
	global $mybb, $db, $lang;

$keywords = clean_keywords_ft($search['keywords']);

	global $mybb, $db, $lang;

$keywords = clean_keywords_ft($search['keywords']);

	if(!$keywords && !$search['author'])
{
error($lang->error_nosearchterms);
}


	





	// Attempt to determine minimum word length from MySQL for fulltext searches
$query = $db->query("SHOW VARIABLES LIKE 'ft_min_word_len';");
$min_length = $db->fetch_field($query, 'Value');

	// Attempt to determine minimum word length from MySQL for fulltext searches
$query = $db->query("SHOW VARIABLES LIKE 'ft_min_word_len';");
$min_length = $db->fetch_field($query, 'Value');

Zeile 1506Zeile 1478
		if($search['matchusername'])
{
$user = get_user_by_username($search['author']);

		if($search['matchusername'])
{
$user = get_user_by_username($search['author']);

			$userids[] = $user['uid'];




			if($user)
{
$userids[] = $user['uid'];
}

		}
else
{

		}
else
{

			switch($db->type)
{
case 'mysql':
case 'mysqli':
$field = 'username';
break;
default:
$field = 'LOWER(username)';
break;
}
$query = $db->simple_select("users", "uid", "{$field} LIKE '%".$db->escape_string_like($search['author'])."%'");

			$query = $db->simple_select("users", "uid", "username LIKE '%".$db->escape_string_like($search['author'])."%'");












while($user = $db->fetch_array($query))
{
$userids[] = $user['uid'];


while($user = $db->fetch_array($query))
{
$userids[] = $user['uid'];

			}
}

			}
}


if(count($userids) < 1)


if(count($userids) < 1)

		{

		{

			error($lang->error_nosearchresults);
}
else

			error($lang->error_nosearchresults);
}
else

Zeile 1537Zeile 1502
			$userids = implode(',', $userids);
$post_usersql = " AND p.uid IN (".$userids.")";
$thread_usersql = " AND t.uid IN (".$userids.")";

			$userids = implode(',', $userids);
$post_usersql = " AND p.uid IN (".$userids.")";
$thread_usersql = " AND t.uid IN (".$userids.")";

		}
}

		}
}

	$datecut = '';
if($search['postdate'])
{

	$datecut = '';
if($search['postdate'])
{

Zeile 1561Zeile 1526
	if($search['numreplies'] != '' && $search['findthreadst'])
{
if((int)$search['findthreadst'] == 1)

	if($search['numreplies'] != '' && $search['findthreadst'])
{
if((int)$search['findthreadst'] == 1)

		{

		{

			$thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'";

			$thread_replycut = " AND t.replies >= '".(int)$search['numreplies']."'";

		}

		}

		else
{
$thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'";

		else
{
$thread_replycut = " AND t.replies <= '".(int)$search['numreplies']."'";

Zeile 1573Zeile 1538
	$thread_prefixcut = '';
$prefixlist = array();
if($search['threadprefix'] && $search['threadprefix'][0] != 'any')

	$thread_prefixcut = '';
$prefixlist = array();
if($search['threadprefix'] && $search['threadprefix'][0] != 'any')

	{

	{

		foreach($search['threadprefix'] as $threadprefix)
{
$threadprefix = (int)$threadprefix;

		foreach($search['threadprefix'] as $threadprefix)
{
$threadprefix = (int)$threadprefix;

Zeile 1581Zeile 1546
		}
}
if(count($prefixlist) == 1)

		}
}
if(count($prefixlist) == 1)

	{

	{

		$thread_prefixcut .= " AND t.prefix='$threadprefix' ";
}
else

		$thread_prefixcut .= " AND t.prefix='$threadprefix' ";
}
else

	{

	{

		if(count($prefixlist) > 1)

		if(count($prefixlist) > 1)

		{

		{

			$thread_prefixcut = " AND t.prefix IN (".implode(',', $prefixlist).")";
}
}

			$thread_prefixcut = " AND t.prefix IN (".implode(',', $prefixlist).")";
}
}

Zeile 1595Zeile 1560
	$forumin = '';
$fidlist = array();
$searchin = array();

	$forumin = '';
$fidlist = array();
$searchin = array();

	if(!is_array($search['forums']) || $search['forums'][0] != "all")

	if(!empty($search['forums']) && (!is_array($search['forums']) || $search['forums'][0] != "all"))

	{
if(!is_array($search['forums']))

	{
if(!is_array($search['forums']))

		{

		{

			$search['forums'] = array((int)$search['forums']);

			$search['forums'] = array((int)$search['forums']);

		}
// Generate a comma separated list of all groups the user belongs to
$user_groups = $mybb->user['usergroup'];
if($mybb->user['additionalgroups'])
{
$user_groups .= ",".$mybb->user['additionalgroups'];
}

		}







		foreach($search['forums'] as $forum)
{
$forum = (int)$forum;

		foreach($search['forums'] as $forum)
{
$forum = (int)$forum;

			if(empty($searchin[$forum]))
{
switch($db->type)
{
case "pgsql":
case "sqlite":
$query = $db->query("
SELECT f.fid
FROM ".TABLE_PREFIX."forums f
LEFT JOIN ".TABLE_PREFIX."forumpermissions p ON (f.fid=p.fid AND p.gid IN (".$user_groups."))
WHERE INSTR(','||parentlist||',',',$forum,') > 0 AND active!=0 AND ((p.fid) IS NULL OR p.cansearch=1)
");
break;
default:
$query = $db->query("
SELECT f.fid
FROM ".TABLE_PREFIX."forums f
LEFT JOIN ".TABLE_PREFIX."forumpermissions p ON (f.fid=p.fid AND p.gid IN (".$user_groups."))
WHERE INSTR(CONCAT(',',parentlist,','),',$forum,') > 0 AND active!=0 AND ((p.fid) IS NULL OR p.cansearch=1)
");
}
while($sforum = $db->fetch_array($query))

			if($forum > 0)
{
$fidlist[] = $forum;
$child_list = get_child_list($forum);
if(is_array($child_list))


















				{

				{

					$fidlist[] = $sforum['fid'];

					$fidlist = array_merge($fidlist, $child_list);

				}

				}

			}
}
if(count($fidlist) == 1)
{
$forumin .= " AND t.fid='$forum' ";
$searchin[$forum] = 1;

			}






		}

		}

		else


		$fidlist = array_unique($fidlist);
if(count($fidlist) >= 1)

		{

		{


if(count($fidlist) > 1)
{
$forumin = " AND t.fid IN (".implode(',', $fidlist).")";
}

			$forumin = " AND t.fid IN (".implode(',', $fidlist).")";





		}
}
$permsql = "";

		}
}
$permsql = "";