keywordList);$i++){
$keyword=&$si->keywordList [$i];
if(is_string($keyword->keyword)&&strlen($keyword->keyword)>0){
$n=strposi($string,$keyword->keyword);
if($n !==FALSE){
$rep='' . substr($string,$n,strlen($keyword->keyword)). '';
$string=@str_replace_no_case($keyword->keyword,$rep,$string,TRUE);}}}
return TRUE;}
function ResultReplaceSpecialStrings($currentResultNumber,$docKind,&$si,$contents,$targetFrame,&$resultTemplate,&$currentResult){
$docType='HTML';
$docName=GetFilenameFromPath($currentResult->URL);
if($docKind==DOC_PDF){
$docType='PDF';}
else if($docKind==DOC_DOC){
$docType='Word';}
else if($docKind==DOC_XLS){
$docType='Excel';}
else if($docKind==DOC_PPT){
$docType='PowerPoint';}
$resultTemplate=str_replace('(URL)',$currentResult->URL,$resultTemplate);
$buf=$currentResult->description;
MakeSearchKeywordsBold($si,$buf);
$resultTemplate=str_replace('(docdesc)',$buf,$resultTemplate);
if(strlen($currentResult->title)==0)
$buf=$currentResult->URL;
else
$buf=$currentResult->title;
MakeSearchKeywordsBold($si,$buf);
$resultTemplate=str_replace('(doctitle)',$buf,$resultTemplate);
$resultTemplate=str_replace('(doctype)',$docType,$resultTemplate);
$resultTemplate=str_replace('(docname)',$docName,$resultTemplate);
$resultTemplate=str_replace('(resnumber)',$currentResultNumber,$resultTemplate);
$resultTemplate=str_replace('(trgframe)',$targetFrame,$resultTemplate);
$resultTemplate=str_replace('(doccontents)',is_string($contents)&&strlen($contents)>0 ? $contents : ' ',$resultTemplate);
ResultReplaceDateString($resultTemplate,$currentResult);
ResultReplaceSizeString($resultTemplate,$currentResult);}
function ProcessResultCode(&$si,&$currentResult,$currentResultNumber,&$resultBuffer,
&$contents,&$targetFrame){
$docKind=$currentResult->docType;
ResultResolveConditionalCommands($docKind,$resultBuffer,$currentResult);
ResultReplaceSpecialStrings($currentResultNumber,$docKind,$si,$contents,$targetFrame,
$resultBuffer,$currentResult);}
function OverviewResolveConditionalCommands($currentPageNumber,$lastPageNumber,&$resultTemplate){
while(TRUE){
$tempInt=strpos($resultTemplate,'{{IF');
if($tempInt===FALSE){
break;}
$tempInt2=strpos($resultTemplate,'|',$tempInt);
if($tempInt2===FALSE){
break;}
$tempInt3=strpos($resultTemplate,'}}',$tempInt);
$tempInt4=strpos($resultTemplate,'{{IF',$tempInt+4);
if($tempInt4 !==FALSE&&$tempInt3 !==FALSE&&$tempInt4<$tempInt3){
$tempInt4=$tempInt3+2-$tempInt;
$tempInt3=strpos($resultTemplate,'}}',$tempInt+$tempInt4);}
if($tempInt3===FALSE || $tempInt3<=$tempInt2){
break;}
$tempInt+=6;
$bInclude=FALSE;
if($resultTemplate [$tempInt-2]=='N'&&$resultTemplate [$tempInt-1]=='L'){
$bInclude=($currentPageNumber !=$lastPageNumber);}
else if($resultTemplate [$tempInt-2]=='L'&&$resultTemplate [$tempInt-1]=='A'){
$bInclude=($currentPageNumber==$lastPageNumber);}
else if($resultTemplate [$tempInt-2]=='E'&&$resultTemplate [$tempInt-1]=='X'){
$tempInt4=(int)substr($resultTemplate,$tempInt,$tempInt2-$tempInt);
$bInclude=($tempInt4-1<=$lastPageNumber);}
else if($resultTemplate [$tempInt-2]=='N'&&$resultTemplate [$tempInt-1]=='E'){
$tempInt4=(int)substr($resultTemplate,$tempInt,$tempInt2-$tempInt);
$bInclude=($tempInt4-1>$lastPageNumber);}
else if($resultTemplate [$tempInt-2]=='P'&&$resultTemplate [$tempInt-1]=='G'){
$tempInt4=(int)substr($resultTemplate,$tempInt,$tempInt2-$tempInt);
$bInclude=($currentPageNumber==$tempInt4-1);}
else if($resultTemplate [$tempInt-2]=='N'&&$resultTemplate [$tempInt-1]=='P'){
$tempInt4=(int)substr($resultTemplate,$tempInt,$tempInt2-$tempInt);
$bInclude=($currentPageNumber !=$tempInt4-1);}
$includedCode='';
if($bInclude){
$includedCode=substr($resultTemplate,$tempInt2+1,$tempInt3-$tempInt2-1);}
$remainingCode=substr($resultTemplate,$tempInt3+2);
$resultTemplate=substr($resultTemplate,0,$tempInt-6). $includedCode . $remainingCode;}}
function CreatePageLink($nPage,&$params){
$code=$params->scriptName . '?';
$bFirst=TRUE;
$bstrtSet=FALSE;
$bwrapSet=FALSE;
$arr=&GetHttpParamArray();
if($arr){
reset($arr);
while(list($name,$value)=each($arr)){
if(strtolower($name)=="strt"){
$value=$nPage*$params->count;
$bstrtSet=TRUE;}
else if(strtolower($name)=="wrap"){
if($bwrapSet)
continue;
$bwrapSet=TRUE;}
if(strlen($value)>0){
if(!$bFirst)$code .="&";
$code .=$name . "=" . urlencode($value);}
$bFirst=FALSE;}}
if(!$bstrtSet){
if(!$bFirst)$code .="&";
$code .="strt=" .($nPage*$params->count);
$bFirst=FALSE;}
return $code;}
function OverviewReplaceSpecialStrings($maxResults,$currentPageNumber,$lastPage,$resultCount,
&$params,&$resultTemplate){
$lastResult=($currentPageNumber*$params->count)+$params->count;
if($lastResult>$resultCount){
$lastResult=$resultCount;}
if($resultCount<$maxResults){
$resultCountStr=$resultCount;}
else{
$resultCountStr='>' . $maxResults;}
$resultTemplate=str_replace('(resultcount)',$resultCountStr,$resultTemplate);
$resultTemplate=str_replace('(firstresult)',($currentPageNumber*$params->count)+1,$resultTemplate);
$resultTemplate=str_replace('(lastresult)',$lastResult,$resultTemplate);
$resultTemplate=str_replace('(resultsperpage)',$params->count,$resultTemplate);
$resultTemplate=str_replace('(currentpage)',$currentPageNumber+1,$resultTemplate);
$resultTemplate=str_replace('(lastpage)',$lastPage+1,$resultTemplate);
$resultTemplate=str_replace('(searchquery)',$params->queryString,$resultTemplate);
$resultTemplate=str_replace('(linkprev)',CreatePageLink($currentPageNumber-1,$params),$resultTemplate);
$resultTemplate=str_replace('(linknext)',CreatePageLink($currentPageNumber+1,$params),$resultTemplate);
for($nPage=0;$nPage<=$lastPage;$nPage++){
$resultTemplate=str_replace("(linkpage" .($nPage+1).")",CreatePageLink($nPage,$params),$resultTemplate);}}
function ProcessOverviewCode($maxResults,$currentPageNumber,$resultCount,&$params,
&$resultBuffer){
$lastPage=(($resultCount % $params->count)!=0)?((int)($resultCount/$params->count)):(((int)($resultCount/$params->count))-1);
OverviewResolveConditionalCommands($currentPageNumber,$lastPage,$resultBuffer);
if($resultCount>0){
OverviewReplaceSpecialStrings($maxResults,$currentPageNumber,$lastPage,$resultCount,$params,$resultBuffer);}}
function PrintNormalResult(&$si,&$currentResult,$nResult,$firstResult){
global $string7;
global $resultFormatText;
$resultTemplate=$resultFormatText;
GetTitleAndDescriptionFromURLID($si,$currentResult->URLID,$currentResult->title,$currentResult->description,strstr($resultTemplate,'(docdesc)'));
$contents='';
if(strstr($resultTemplate,'(doccontents)')){
if(SDBIsInitialized($si->contentsDB)&&SDBIsInitialized($si->contentsIndexDB)&&
SDBIsInitialized($si->keywordIndex2DB)){
GetDescriptionFromContents($si,$currentResult->URLID,$contents);
$contents .='...';}}
ProcessResultCode($si,$currentResult,$nResult+$firstResult,$resultTemplate,$contents,$string7);
echo $resultTemplate;}
function PerformSearch(&$params){
global $string7;
global $resultFormatText;
global $contentPreviewBlockCount;
global $contentPreviewBlockSize;
global $resultOverviewText;
$si=new SearchInfo;
if(SearchInitialize($si,$params->prefixString)==FALSE){
echo "\n
Error: cannot open database files.";
return;}
$si->bDemoVersion=GetSettingByteValue($si->settingsDB,BDEMO_OFF);
$maxResults=GetSettingDoubleByteValue($si->settingsDB,MAXRESULTS_OFF);
if($maxResultsCQUERYMAXQUERYSIZE){
$maxResults=CQUERYMAXQUERYSIZE;}
if($params->count>CQUERYMAXSCREENSIZE){
$params->count=CQUERYMAXSCREENSIZE;}
if($params->count==0){
$params->count=1;}
$cSkipResults=$params->first;
$string7=GetSettingStringValue($si->settingsDB,DEFAULTFRAME_OFF);
$resultFormatText=GetSettingStringValue($si->settingsDB,RESULTFORMATTEXT_OFF);
$contentPreviewBlockCount=GetSettingByteValue($si->settingsDB,CONTENTPREVIEWBLOCKCOUNT_OFF);
$contentPreviewBlockSize=GetSettingByteValue($si->settingsDB,CONTENTPREVIEWBLOCKSIZE_OFF);
$resultOverviewText=GetSettingStringValue($si->settingsDB,RESULTOVERVIEWTEXT_OFF);
$minWordLen=GetSettingByteValue($si->settingsDB,MINLEN_OFF);
$specialChars=GetSettingSpecialChars($si->settingsDB,SPECIALCHARACTERS_OFF);
switch($params->sortType){
case SORT_URL:
$sortFunc="ResultSortByURLName";break;
case SORT_TYPE:
$sortFunc="ResultSortByType";break;
case SORT_SIZE:
$sortFunc="ResultSortBySize";break;
case SORT_DATE:
$sortFunc="ResultSortByDate";break;
default:
$sortFunc="ResultSortByScore";break;}
SearchStart($si,$params->queryString,$maxResults,$minWordLen,$specialChars,$params->searchFilter,$sortFunc,$params->codepage);
$totalResults=count($si->resultList);
if($params->first>=$totalResults){
$params->first=0;}
if($totalResults==0){
echo "\n
";
echo GetSettingStringValue($si->settingsDB,FONT1STR_OFF);
echo GetSettingStringValue($si->settingsDB,NORESULTSSTR_OFF);
echo GetSettingStringValue($si->settingsDB,FONT1ENDSTR_OFF);}
else{
ProcessOverviewCode($maxResults,(int)($params->first/$params->count),$totalResults,$params,
$resultOverviewText);
$markerPos=strpos($resultOverviewText,'(resultcode)');
if($markerPos !==FALSE){
echo substr($resultOverviewText,0,$markerPos);
$cCurrentResult=0;
for($i=0;$iresultList)&&$cCurrentResult<$params->count;$i++){
$result=&$si->resultList [$i];
if($cSkipResults>0){
$cSkipResults=$cSkipResults-1;}
else{
PrintNormalResult($si,$result,$cCurrentResult+1,$params->first);
$cCurrentResult++;}}
echo substr($resultOverviewText,$markerPos+12);}}
if($params->first==0&&is_string($params->queryString)&&strlen($params->queryString)>0){
$logPath=GetSettingStringValue($si->settingsDB,LOG_OFF);
if(is_string($logPath)&&strlen($logPath)>0){
$file=@fopen($logPath,"a+b");
if($file){
$now=time();
$l=localtime($now,TRUE);
$line=sprintf("%02d.%02d.%04d %02d:%02d:%02d %d Q:%s\n",$l['tm_mday'],$l['tm_mon']+1,$l['tm_year']+1900,$l['tm_hour'],$l['tm_min'],$l['tm_sec'],$totalResults,$params->queryString);
fwrite($file,$line);
fclose($file);}}}
SearchCleanup($si);}
function&GetHttpParamArray(){
global $HTTP_GET_VARS;
global $HTTP_POST_VARS;
if(isset($HTTP_GET_VARS)&&count($HTTP_GET_VARS)>0)
return $HTTP_GET_VARS;
if(isset($HTTP_POST_VARS)&&count($HTTP_POST_VARS)>0)
return $HTTP_POST_VARS;
return NULL;}
function GetHttpParam($name){
$arr=&GetHttpParamArray();
if($arr&&@$arr [$name])
return $arr [$name];
return NULL;}
function GetFilteredQuery($prefix){
$str='';
$ar=&GetHttpParamArray();
if($ar){
reset($ar);
while(list($key,$val)=each($ar)){
if(strncmp($key,$prefix,strlen($prefix))==0&&$val){
$str .=' {QF' . substr($key,strlen($prefix)). '} ' . $val;}}}
return $str;}
$searchFilter=new SearchFilter;
$query=GetHttpParam('q');
$op=GetHttpParam('op');
$searchFilter->bDefaultAnd=TRUE;
$searchFilter->bPhraseMode=FALSE;
if($op=='or')
$searchFilter->bDefaultAnd=FALSE;
else if($op=='ph')
$searchFilter->bPhraseMode=TRUE;
if(!$query){
$query=GetHttpParam('qor');
if($query)
$searchFilter->bDefaultAnd=FALSE;
else{
$query=GetHttpParam('qph');
if($query)
$searchFilter->bPhraseMode=TRUE;}}
if(!$query)
$query='';
$codepage=CODEPAGE_UTF8;
$enc=GetHttpParam('enc');
if($enc){
if(strcasecmp($enc,'iso-8859-1')==0)
$codepage=CODEPAGE_ANSI;}
else{
$ae=GetHttpParam('ae');
if(ord($ae [0])==0xDF)
$codepage=CODEPAGE_ANSI;}
$query .=GetFilteredQuery('fq');
$query=stripslashes($query);
$start=GetHttpParam('strt');
if($start==NULL)
$start=0;
$cnt=GetHttpParam('cnt');
if($cnt==0)
$cnt=10;
$pref=GetHttpParam('pref');
if($pref==NULL)
$pref='';
$searchFilter->prevValidDayCount=(int)GetHttpParam('pvdc');
$searchFilter->validDocTypes=(int)GetHttpParam('vdt');
$searchFilter->URLGroup=GetHttpParam('sec');
$scrName=@basename(PATH_THISSCRIPT);
if(!$scrName)
$scrName="sessearch.php";
$params=new SearchParams;
$params->queryString=$query;
$params->count=$cnt;
$params->first=$start;
$params->prefixString=$pref;
$params->sortType=GetHttpParam('sort');
$params->searchFilter=$searchFilter;
$params->scriptName=$scrName;
$params->codepage=$codepage;
if(!is_string($pref)|| !@include($pref . "header.htm"))
include("header.htm");
if($query)
PerformSearch($params);
if(!is_string($pref)|| !@include($pref . "footer.htm"))
include("footer.htm");
?>