Fix issues with view posts since last visit, errors on next page, re-introduce external stopword list, examine feasibility of stemmer, tidy ups ...

git-svn-id: file:///svn/phpbb/trunk@2205 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Paul S. Owen 2002-02-25 01:00:48 +00:00
parent b9b87a04fa
commit 508b6d60ef
8 changed files with 674 additions and 661 deletions

View file

@ -0,0 +1,51 @@
<?php
//
// phpBB 2.x auto-generated config file
// Do not change anything in this file!
//
$dbms = "mysql4";
$dbhost = "localhost";
$dbname = "dev_starstreak_net";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
$dbhost = "localhost";
$dbname = "phpbb_com";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
/*
$dbhost = "localhost";
$dbname = "phpbb_test";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
$dbms = "mssql-odbc";
$dbhost = "phpbb_test_mssql_odbc";
$dbname = "";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
$dbms = "msaccess";
$dbhost = "phpbb_test_msaccess_odbc";
$dbname = "";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
$dbms = "mssql";
$dbhost = "localhost";
$dbname = "phpbb_com";
$dbuser = "devhttp";
$dbpasswd = "efx2KarizonaD";
*/
$table_prefix = "phpbb_";
define('PHPBB_INSTALLED', true);
?>

View file

@ -7,55 +7,41 @@
// Remove or comment the next line (die(".... ) to enable this script. // Remove or comment the next line (die(".... ) to enable this script.
// Do NOT FORGET to either remove this script or disable it after you have used it. // Do NOT FORGET to either remove this script or disable it after you have used it.
// //
die("Please read the first lines of this script for instructions on how to enable it");
// //
// Do not change anything below this line. // Do not change anything below this line.
// //
set_time_limit(0); set_time_limit(0);
$common_percent = 0.4; // Percentage of posts in which a word has to appear to be marked as common
$phpbb_root_path = "../"; $phpbb_root_path = "../";
include($phpbb_root_path . 'extension.inc'); include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'config.'.$phpEx); include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/constants.'.$phpEx);
include($phpbb_root_path . 'includes/db.'.$phpEx);
include($phpbb_root_path . 'includes/functions.'.$phpEx);
include($phpbb_root_path . 'includes/search.'.$phpEx); include($phpbb_root_path . 'includes/search.'.$phpEx);
$common_percent = 0.4; // Percentage of posts in which a word has to appear to be marked as common
print "<html>\n<body>\n"; print "<html>\n<body>\n";
// //
// Try and load stopword and synonym files // Try and load stopword and synonym files
// //
//$stopword_array = file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_stopwords.txt");
//$synonym_array = file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_synonyms.txt");
// This needs fixing! Shouldn't be hardcoded to English files! // This needs fixing! Shouldn't be hardcoded to English files!
//$stopword_array = file($phpbb_root_path . "language/lang_english/search_stopwords.txt"); $stopword_array = file($phpbb_root_path . "language/lang_english/search_stopwords.txt");
$synonym_array = file($phpbb_root_path . "language/lang_english/search_synonyms.txt"); $synonym_array = file($phpbb_root_path . "language/lang_english/search_synonyms.txt");
/*
for ($j = 0; $j < count($stopword_array); $j++)
{
$filter_word = trim(strtolower($stopword_array[$j]));
$search[] = "/\b" . phpbb_preg_quote($filter_word, "/") . "\b/is";
$replace[] = '';
}
*/
// //
// Fetch a batch of posts_text entries // Fetch a batch of posts_text entries
// //
$sql = "SELECT count(*) as total, max(post_id) as max_post_id $sql = "SELECT COUNT(*) as total, MAX(post_id) as max_post_id
FROM ". POSTS_TEXT_TABLE; FROM ". POSTS_TEXT_TABLE;
if(!$result = $db->sql_query($sql)) if ( !($result = $db->sql_query($sql)) )
{ {
$error = $db->sql_error(); $error = $db->sql_error();
die("Couldn't get maximum post ID :: " . $sql . " :: " . $error['message']); die("Couldn't get maximum post ID :: " . $sql . " :: " . $error['message']);
} }
$max_post_id = $db->sql_fetchrow($result); $max_post_id = $db->sql_fetchrow($result);
$totalposts = $max_post_id['total']; $totalposts = $max_post_id['total'];
$max_post_id = $max_post_id['max_post_id']; $max_post_id = $max_post_id['max_post_id'];
@ -74,15 +60,18 @@ for(;$postcounter <= $max_post_id; $postcounter += $batchsize)
WHERE post_id WHERE post_id
BETWEEN $batchstart BETWEEN $batchstart
AND $batchend"; AND $batchend";
if(!$posts_result = $db->sql_query($sql)) if( !($result = $db->sql_query($sql)) )
{ {
$error = $db->sql_error(); $error = $db->sql_error();
die("Couldn't get post_text :: " . $sql . " :: " . $error['message']); die("Couldn't get post_text :: " . $sql . " :: " . $error['message']);
} }
$rowset = $db->sql_fetchrowset($posts_result); $rowset = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
if( $post_rows = $db->sql_numrows($posts_result) ) $post_rows = count($rowset);
if( $post_rows )
{ {
// $sql = "LOCK TABLES ".POST_TEXT_TABLE." WRITE"; // $sql = "LOCK TABLES ".POST_TEXT_TABLE." WRITE";
@ -92,18 +81,14 @@ for(;$postcounter <= $max_post_id; $postcounter += $batchsize)
// For every post in the batch: // For every post in the batch:
for($post_nr = 0; $post_nr < $post_rows; $post_nr++ ) for($post_nr = 0; $post_nr < $post_rows; $post_nr++ )
{ {
print "."; print ".";
flush(); flush();
$matches = array();
$post_id = $rowset[$post_nr]['post_id']; $post_id = $rowset[$post_nr]['post_id'];
$text = clean_words("post", $rowset[$post_nr]['post_text'], $synonym_array); // Cleaned up post
$text_title = clean_words("post", $rowset[$post_nr]['post_subject'], $synonym_array);
$matches = array(); $matches = array();
$matches['text'] = split_words($text); $matches['text'] = split_words(clean_words("post", $rowset[$post_nr]['post_text'], $stopword_array, $synonym_array));
$matches['title'] = split_words($text_title); $matches['title'] = split_words(clean_words("post", $rowset[$post_nr]['post_subject'], $stopword_array, $synonym_array));
while( list($match_type, $match_ary) = @each($matches) ) while( list($match_type, $match_ary) = @each($matches) )
{ {
@ -190,13 +175,7 @@ for(;$postcounter <= $max_post_id; $postcounter += $batchsize)
// $result = $db->sql_query($sql); // $result = $db->sql_query($sql);
} }
else
{
print "Couldn't get rowcount for number of posts<br>$sql<br>\n";
} // All posts;
$db->sql_freeresult($posts_result);
// Remove common words after the first 2 batches and after every 4th batch after that. // Remove common words after the first 2 batches and after every 4th batch after that.
if( $batchcount % 4 == 3 ) if( $batchcount % 4 == 3 )
{ {

View file

@ -19,7 +19,7 @@
* *
***************************************************************************/ ***************************************************************************/
function clean_words($mode, &$entry, &$synonym_list) function clean_words($mode, &$entry, &$stopword_list, &$synonym_list)
{ {
// Weird, $init_match doesn't work with static when double quotes (") are used... // Weird, $init_match doesn't work with static when double quotes (") are used...
static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', "'", '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!'); static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', "'", '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!');
@ -37,16 +37,16 @@ function clean_words($mode, &$entry, &$synonym_list)
if( $mode == "post" ) if( $mode == "post" )
{ {
// HTML entities like &nbsp;
$entry = preg_replace("/\b&[a-z]+;\b/is", " ", $entry);
// Replace line endings by a space // Replace line endings by a space
$entry = preg_replace("/[\n\r]/is", " ", $entry); $entry = preg_replace("/[\n\r]/is", " ", $entry);
// HTML entities like &nbsp;
$entry = preg_replace("/\b&[a-z]+;\b/", " ", $entry);
// Remove URL's // Remove URL's
$entry = preg_replace("/\b[a-z0-9]+:\/\/[a-z0-9\.\-]+(\/[a-z0-9\?\.%_\-\+=&\/]+)?/si", " ", $entry); $entry = preg_replace("/\b[a-z0-9]+:\/\/[a-z0-9\.\-]+(\/[a-z0-9\?\.%_\-\+=&\/]+)?/", " ", $entry);
// Quickly remove BBcode. // Quickly remove BBcode.
$entry = preg_replace("/\[img:[a-z0-9]{10,}\].*?\[\/img:[a-z0-9]{10,}\]/is", " ", $entry); $entry = preg_replace("/\[img:[a-z0-9]{10,}\].*?\[\/img:[a-z0-9]{10,}\]/", " ", $entry);
$entry = preg_replace("/\[\/?url(=.*?)?\]/si", " ", $entry); $entry = preg_replace("/\[\/?url(=.*?)?\]/", " ", $entry);
$entry = preg_replace("/\[\/?[a-z\*=\+\-]+(\:?[0-9a-z]+)?:[a-z0-9]{10,}(\:[a-z0-9]+)?=?.*?\]/si", " ", $entry); $entry = preg_replace("/\[\/?[a-z\*=\+\-]+(\:?[0-9a-z]+)?:[a-z0-9]{10,}(\:[a-z0-9]+)?=?.*?\]/", " ", $entry);
} }
else if( $mode == "search" ) else if( $mode == "search" )
{ {
@ -55,7 +55,7 @@ function clean_words($mode, &$entry, &$synonym_list)
} }
// Replace numbers on their own // Replace numbers on their own
$entry = preg_replace("/\b[0-9]+\b/si", " ", $entry); $entry = preg_replace("/\b[0-9]+\b/", " ", $entry);
// //
// Filter out strange characters like ^, $, &, change "it's" to "its" // Filter out strange characters like ^, $, &, change "it's" to "its"
@ -69,8 +69,21 @@ function clean_words($mode, &$entry, &$synonym_list)
{ {
$entry = str_replace("*", " ", $entry); $entry = str_replace("*", " ", $entry);
// 'words' that consist of <=3 or >=50 characters are removed. // 'words' that consist of <=3 or >=25 characters are removed.
$entry = preg_replace("/\b([a-z0-9]{1,3}|[a-z0-9]{50,})\b/si", " ", $entry); $entry = preg_replace("/\b([a-z0-9]{1,3}|[a-z0-9]{25,})\b/", " ", $entry);
}
if( !empty($stopword_list) )
{
for ($j = 0; $j < count($stopword_list); $j++)
{
$stopword = trim($stopword_list[$j]);
if ( $mode == "post" || ( $stopword != "not" && $stopword != "and" && $stopword != "or" ) )
{
$entry = preg_replace("/\b" . $stopword . "\b/", " ", $entry);
}
}
} }
if( !empty($synonym_list) ) if( !empty($synonym_list) )
@ -78,11 +91,9 @@ function clean_words($mode, &$entry, &$synonym_list)
for ($j = 0; $j < count($synonym_list); $j++) for ($j = 0; $j < count($synonym_list); $j++)
{ {
list($replace_synonym, $match_synonym) = split(" ", trim(strtolower($synonym_list[$j]))); list($replace_synonym, $match_synonym) = split(" ", trim(strtolower($synonym_list[$j])));
if ( $mode == "post" || ( $match_synonym != "not" && $match_synonym != "and" && $match_synonym != "or" ) )
if( ( $match_synonym != "and" && $match_synonym != "or" && $match_synonym != "not" &&
$replace_synonym != "and" && $replace_synonym != "or" && $replace_synonym != "not" ) || $mode == "post" )
{ {
$entry = preg_replace("/\b" . phpbb_preg_quote(trim($match_synonym), "/") . "\b/is", " " . trim($replace_synonym) . " ", $entry); $entry = preg_replace("/\b" . trim($match_synonym) . "\b/", " " . trim($replace_synonym) . " ", $entry);
} }
} }
} }
@ -98,7 +109,7 @@ function split_words(&$entry, $mode = "post")
} }
else else
{ {
preg_match_all("/(\*?[a-z0-9]+\*?)|\b([a-z0-9]+)\b/is", $entry, $split_entries); preg_match_all("/(\*?[a-z0-9]+\*?)|\b([a-z0-9]+)\b/", $entry, $split_entries);
} }
return $split_entries[1]; return $split_entries[1];
@ -108,11 +119,12 @@ function add_search_words($post_id, $post_text, $post_title = "")
{ {
global $db, $phpbb_root_path, $board_config, $lang; global $db, $phpbb_root_path, $board_config, $lang;
$stopwords_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_stopwords.txt");
$synonym_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_synonyms.txt"); $synonym_array = @file($phpbb_root_path . "language/lang_" . $board_config['default_lang'] . "/search_synonyms.txt");
$search_raw_words = array(); $search_raw_words = array();
$search_raw_words['text'] = split_words(clean_words("post", $post_text, $synonym_array)); $search_raw_words['text'] = split_words(clean_words('post', $post_text, $stopword_array, $synonym_array));
$search_raw_words['title'] = split_words(clean_words("post", $post_title, $synonym_array)); $search_raw_words['title'] = split_words(clean_words('post', $post_title, $stopword_array, $synonym_array));
$word = array(); $word = array();
$word_insert_sql = array(); $word_insert_sql = array();
@ -389,4 +401,81 @@ function remove_unmatched_words()
return 0; return 0;
} }
//
// Username search
//
function username_search($search_match, $is_inline_review = 0, $default_list = "")
{
global $db, $board_config, $template, $lang, $images, $theme, $phpEx, $phpbb_root_path;
global $starttime;
$author_list = '';
if ( !empty($search_match) )
{
$username_search = preg_replace("/\*/", "%", trim(strip_tags($search_match)));
$sql = "SELECT username
FROM " . USERS_TABLE . "
WHERE username LIKE '" . str_replace("\'", "''", $username_search) . "'
ORDER BY username";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Couldn't obtain search results", "", __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
do
{
$author_list .= '<option value="' . $row['username'] . '">' .$row['username'] . '</option>';
}
while ( $row = $db->sql_fetchrow($result) );
}
else
{
$author_list = '<option>' . $lang['No_match']. '</option>';
}
}
if ( !$is_inline_review )
{
$gen_simple_header = TRUE;
$page_title = $lang['Search'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
$template->set_filenames(array(
"search_user_body" => "search_username.tpl")
);
$template->assign_vars(array(
"L_CLOSE_WINDOW" => $lang['Close_window'],
"L_SEARCH_USERNAME" => $lang['Find_username'],
"L_UPDATE_USERNAME" => $lang['Select_username'],
"L_SELECT" => $lang['Select'],
"L_SEARCH" => $lang['Search'],
"L_SEARCH_EXPLAIN" => $lang['Search_author_explain'],
"L_CLOSE_WINDOW" => $lang['Close_window'],
"S_AUTHOR_OPTIONS" => $author_list,
"S_SEARCH_ACTION" => append_sid("search.$phpEx?mode=searchuser"))
);
//
// If we have results then dump them out and enable
// the appropriate switch block
//
if ( !empty($author_list) )
{
$template->assign_block_vars("switch_select_name", array());
}
$template->pparse("search_user_body");
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
}
return($author_list);
}
?> ?>

View file

@ -8,30 +8,16 @@ andy andrew
anemia anaemia anemia anaemia
anemic anaemic anemic anaemic
anesthesia anaesthesia anesthesia anaesthesia
anesthesiologist anaesthesiologist
anesthesiololy anaesthesiology
anesthetic anaesthetic
anesthetist anaesthetist
appologize appologise appologize appologise
appologized appologised
appologizing appologising
apr april
archean archaean archean archaean
archeology archaeology archeology archaeology
archeozoic archaeozoic archeozoic archaeozoic
armor armour armor armour
armored armoured
armory armoury
armorment armourment
artic arctic artic arctic
attachment attachement attachment attachement
attachments attachements
attendence attendance attendence attendance
aug august
barbecue barbeque barbecue barbeque
bbq barbeque
behavior behaviour behavior behaviour
behaviorism behaviourism
biassed biased biassed biased
biol biology biol biology
buletin bulletin buletin bulletin
@ -43,18 +29,13 @@ cenozoic caenozoic
center centre center centre
check cheque check cheque
color colour color colour
colored coloured
coloring colouring
colorless colourless
comission commission comission commission
comittee committee comittee committee
commitee committee commitee committee
conceed concede conceed concede
creating createing creating createing
curiculum curriculum curiculum curriculum
dec december
defense defence defense defence
dept department
develope develop develope develop
discription description discription description
dulness dullness dulness dullness
@ -66,7 +47,6 @@ exhorbitant exorbitant
exhuberant exuberant exhuberant exuberant
existance existence existance existence
favorite favourite favorite favourite
feb february
fetus foetus fetus foetus
ficticious fictitious ficticious fictitious
flavor flavour flavor flavour
@ -78,66 +58,43 @@ geneology genealogy
grammer grammar grammer grammar
gray grey gray grey
guerilla guerrilla guerilla guerrilla
gynecological gynaecological
gynecologist gynaecologist
gynecology gynaecology gynecology gynaecology
harbor harbour harbor harbour
heighth height heighth height
hemaglobin haemaglobin hemaglobin haemaglobin
hematin haematin hematin haematin
hematite haematite hematite haematite
hematologist haematologist
hematology haematology hematology haematology
hemophilia haemophilia
hemorrhage haemorrhage
hemorrhoids haemorrhoids
honor honour honor honour
innoculate inoculate innoculate inoculate
installment instalment installment instalment
irrelevent irrelevant irrelevent irrelevant
irrevelant irrelevant irrevelant irrelevant
jan january
jeweler jeweller jeweler jeweller
judgement judgment judgement judgment
jul july
jun june
labeled labelled labeled labelled
labor labour labor labour
laborer labourer laborer labourer
laborers labourers laborers labourers
laboring labouring laboring labouring
lib library
licence license licence license
liesure leisure liesure leisure
liquify liquefy liquify liquefy
maintainance maintenance maintainance maintenance
maintenence maintenance maintenence maintenance
marshal marshall
medieval mediaeval medieval mediaeval
medievalism mediaevalism
medievalist mediaevalist
meg margaret
meter metre meter metre
milage mileage milage mileage
millipede millepede millipede millepede
miscelaneous miscellaneous miscelaneous miscellaneous
morgage mortgage morgage mortgage
noticable noticeable noticable noticeable
nov november
occurence occurrence occurence occurrence
oct october
offense offence offense offence
ommision omission ommision omission
ommission omission ommission omission
optimize optimize optimize optimize
optimizer optimiser
optimizing optimising
optimized optimised
organisation organization
organise organize organise organize
organised organized
organising organizing
organiser organizer
pajamas pyjamas pajamas pyjamas
paleography palaeography paleography palaeography
paleolithic palaeolithic paleolithic palaeolithic
@ -158,7 +115,6 @@ personel personnel
practise practice practise practice
program programme program programme
psych psychology psych psychology
qld queensland
questionaire questionnaire questionaire questionnaire
rarify rarefy rarify rarefy
reccomend recommend reccomend recommend
@ -178,7 +134,6 @@ supersede supercede
suprise surprise suprise surprise
surprize surprise surprize surprise
synchronise synchronize synchronise synchronize
tas tasmania
temperary temporary temperary temporary
theater theatre theater theatre
threshhold threshold threshhold threshold
@ -187,7 +142,6 @@ truely truly
truley truly truley truly
useable usable useable usable
valor valour valor valour
vic victoria
vigor vigour vigor vigour
vol volume vol volume
whack wack whack wack

File diff suppressed because it is too large Load diff

View file

@ -26,7 +26,7 @@
<span class="postdetails">{L_REPLIES}: <b>{searchresults.TOPIC_REPLIES}</b><br /> <span class="postdetails">{L_REPLIES}: <b>{searchresults.TOPIC_REPLIES}</b><br />
{L_VIEWS}: <b>{searchresults.TOPIC_VIEWS}</b></span><br /> {L_VIEWS}: <b>{searchresults.TOPIC_VIEWS}</b></span><br />
</td> </td>
<td valign="top" class="row1"> <img src="templates/subSilver/images/icon_minipost.gif" alt="Post image icon"><span class="postdetails">{L_FORUM}:&nbsp;<b><a href="{U_FORUM}" class="postdetails">{searchresults.FORUM_NAME}</a></b>&nbsp;&nbsp;&nbsp;{L_POSTED}: <td valign="top" class="row1"> <span class="postdetails">{L_FORUM}:&nbsp;<b><a href="{U_FORUM}" class="postdetails">{searchresults.FORUM_NAME}</a></b>&nbsp;&nbsp;&nbsp;{L_POSTED}:
{searchresults.POST_DATE}&nbsp;&nbsp;&nbsp;Subject: <b><a href="{searchresults.U_POST}">{searchresults.POST_SUBJECT}</a></b></span></td> {searchresults.POST_DATE}&nbsp;&nbsp;&nbsp;Subject: <b><a href="{searchresults.U_POST}">{searchresults.POST_SUBJECT}</a></b></span></td>
</tr> </tr>
<tr> <tr>

View file

@ -57,7 +57,7 @@
<table width="98%" cellspacing="2" border="0" align="center"> <table width="98%" cellspacing="2" border="0" align="center">
<tr> <tr>
<td><span class="gensmall"><b>{S_TIMEZONE}</b></span></td> <td valign="top"><span class="gensmall"><b>{S_TIMEZONE}</b></span></td>
<td align="right">{JUMPBOX}</td> <td align="right">{JUMPBOX}</td>
</tr> </tr>
</table> </table>

View file

@ -1,86 +1,57 @@
<form action="{S_SEARCH_ACTION}" method="POST">
<table width="100%" cellspacing="2" cellpadding="2" border="0" align="center"> <form action="{S_SEARCH_ACTION}" method="POST"><table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
<tr> <tr>
<td align="left"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a></span></td> <td align="left"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a></span></td>
</tr>
</table>
<table class="forumline" width="100%" cellpadding="4" cellspacing="1" border="0">
<tr>
<th class="thHead" colspan="4" height="25">{L_SEARCH_QUERY}</th>
</tr>
<tr>
<td class="row1" colspan="2" width="50%"><span class="gen">{L_SEARCH_KEYWORDS}:</span><br /><span class="gensmall">{L_SEARCH_KEYWORDS_EXPLAIN}</span></td>
<td class="row2" colspan="2" valign="top"><span class="genmed"><input type="text" style="width: 300px" class="post" name="search_keywords" size="30" /><br /><input type="radio" name="search_terms" value="any" checked="checked" /> {L_SEARCH_ANY_TERMS}<br /><input type="radio" name="search_terms" value="all" /> {L_SEARCH_ALL_TERMS}</span></td>
</tr>
<tr>
<td class="row1" colspan="2"><span class="gen">{L_SEARCH_AUTHOR}:</span><br /><span class="gensmall">{L_SEARCH_AUTHOR_EXPLAIN}</span></td>
<td class="row2" colspan="2" valign="middle"><span class="genmed"><input type="text" style="width: 300px" class="post" name="search_author" size="30" /></span></td>
</tr>
<tr>
<th class="thHead" colspan="4" height="25">{L_SEARCH_OPTIONS}</th>
</tr>
<tr>
<td class="row1" align="right"><span class="gen">{L_FORUM}:&nbsp;</span></td>
<td class="row2"><span class="genmed"><select class="post" name="search_forum">{S_FORUM_OPTIONS}</select></span></td>
<td class="row1" align="right" nowrap="nowrap"><span class="gen">{L_SEARCH_PREVIOUS}:&nbsp;</span></td>
<td class="row2" valign="middle"><span class="genmed"><select class="post" name="search_time">{S_TIME_OPTIONS}</select><br /><input type="radio" name="search_fields" value="all" checked="checked" /> {L_SEARCH_MESSAGE_TITLE}<br /><input type="radio" name="search_fields" value="msgonly" /> {L_SEARCH_MESSAGE_ONLY}</span></td>
</tr>
<tr>
<td class="row1" align="right"><span class="gen">{L_CATEGORY}:&nbsp;</span></td>
<td class="row2"><span class="genmed"><select class="post" name="search_cat">{S_CATEGORY_OPTIONS}
</select></span></td>
<td class="row1" align="right"><span class="gen">{L_SORT_BY}:&nbsp;</span></td>
<td class="row2" valign="middle" nowrap="nowrap"><span class="genmed"><select class="post" name="sort_by">{S_SORT_OPTIONS}</select><br /><input type="radio" name="sort_dir" value="ASC" /> {L_SORT_ASCENDING}<br /><input type="radio" name="sort_dir" value="DESC" checked /> {L_SORT_DESCENDING}</span>&nbsp;</td>
</tr>
<tr>
<td class="row1" align="right" nowrap="nowrap"><span class="gen">{L_DISPLAY_RESULTS}:&nbsp;</span></td>
<td class="row2" nowrap="nowrap"><input type="radio" name="show_results" value="posts" /><span class="genmed">{L_POSTS}<input type="radio" name="show_results" value="topics" checked="checked" />{L_TOPICS}</span></td>
<td class="row1" align="right"><span class="gen">{L_RETURN_FIRST}</span></td>
<td class="row2"><span class="genmed"><select class="post" name="return_chars">{S_CHARACTER_OPTIONS}</select> {L_CHARACTERS}</span></td>
</tr>
<tr>
<td class="catBottom" colspan="4" align="center" height="28">{S_HIDDEN_FIELDS}<input class="liteoption" type="submit" value="{L_SEARCH}" /></td>
</tr>
</table>
<table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
<tr>
<td align="right" valign="middle"><span class="gensmall">{S_TIMEZONE}</span></td>
</tr>
</table></form>
<table width="100%" border="0">
<tr>
<td align="right" valign="top">{JUMPBOX}</td>
</tr> </tr>
</table>
<table border="0" cellpadding="4" cellspacing="1" width="100%" class="forumline">
<tr>
<th class="thHead" colspan="4" height="25">{L_SEARCH_QUERY}</th>
</tr>
<tr>
<td class="row1" colspan="2" width="50%"><span class="gen">{L_SEARCH_KEYWORDS}:</span><br />
<span class="gensmall">{L_SEARCH_KEYWORDS_EXPLAIN}</span></td>
<td class="row2" colspan="2" valign="top"><span class="genmed">
<input type="text" style="width: 300px" class="post" name="search_keywords" size="30" />
<br />
<input type="radio" name="addterms" value="any" checked="checked" /> {L_SEARCH_ANY_TERMS}<br />
<input type="radio" name="addterms" value="all" /> {L_SEARCH_ALL_TERMS}</span></td>
</tr>
<tr>
<td class="row1" colspan="2"><span class="gen">{L_SEARCH_AUTHOR}:</span><br />
<span class="gensmall">{L_SEARCH_AUTHOR_EXPLAIN}</span></td>
<td class="row2" colspan="2" valign="middle"><span class="genmed">
<input type="text" style="width: 300px" class="post" name="search_author" size="30" />
</span> </td>
</tr>
<tr>
<th class="thHead" colspan="4" height="25">{L_SEARCH_OPTIONS}</th>
</tr>
<tr>
<td class="row1" align="right"><span class="gen">{L_FORUM}:&nbsp;</span></td>
<td class="row2"><span class="genmed">
<select class="post" name="searchforum">{S_FORUM_OPTIONS}
</select>
</span></td>
<td class="row1" align="right" nowrap="nowrap"><span class="gen">{L_SEARCH_PREVIOUS}:&nbsp;</span></td>
<td class="row2" valign="middle"><span class="genmed"><select class="post" name="resultdays">{S_TIME_OPTIONS}</select>
<br />
<input type="radio" name="searchfields" value="all" checked="checked" /> {L_SEARCH_MESSAGE_TITLE}<br />
<input type="radio" name="searchfields" value="msgonly" /> {L_SEARCH_MESSAGE_ONLY}</span></td>
</tr>
<tr>
<td class="row1" align="right"><span class="gen">{L_CATEGORY}:&nbsp;</span></td>
<td class="row2"><span class="genmed">
<select class="post" name="searchcat">{S_CATEGORY_OPTIONS}
</select>
</span></td>
<td class="row1" align="right"><span class="gen">{L_SORT_BY}:&nbsp;</span></td>
<td class="row2" valign="middle" nowrap="nowrap"><span class="genmed">
<select class="post" name="sortby">{S_SORT_OPTIONS}</select>
<br />
<input type="radio" name="sortdir" value="ASC" />
{L_SORT_ASCENDING}<br />
<input type="radio" name="sortdir" value="DESC" checked />
{L_SORT_DESCENDING}</span>&nbsp;</td>
</tr>
<tr>
<td class="row1" align="right" nowrap="nowrap"><span class="gen">{L_DISPLAY_RESULTS}:&nbsp;</span></td>
<td class="row2" nowrap="nowrap">
<input type="radio" name="showresults" value="posts" />
<span class="genmed">{L_POSTS}
<input type="radio" name="showresults" value="topics" checked="checked" />
{L_TOPICS}</span></td>
<td class="row1" align="right"><span class="gen">{L_RETURN_FIRST}</span></td>
<td class="row2"><span class="genmed">
<select class="post" name="charsreqd">{S_CHARACTER_OPTIONS}
</select>
{L_CHARACTERS}</span></td>
</tr>
<tr>
<td class="catBottom" colspan="4" align="center" height="28">{S_HIDDEN_FIELDS}
<input class="liteoption" type="submit" value="{L_SEARCH}" />
</td>
</tr>
</table>
<table width="100%" cellspacing="2" border="0" align="center" cellpadding="2">
<tr>
<td align="right" valign="middle"><span class="gensmall">{S_TIMEZONE}</span></td>
</tr>
</table>
</form>
<table width="100%" border="0">
<tr>
<td align="right" valign="top">{JUMPBOX}</td>
</tr>
</table> </table>