Skip to content
Snippets Groups Projects
Commit 4735a949 authored by matthiasgrimm's avatar matthiasgrimm
Browse files

UNDO: extended search fix

This patch fixes a bug in the search code and did some
small optimizations.

The possibility to start a search with _only_ excluded
words (only words start with a minus sign) was disabled
because this seem to crash PHP 4.3.10 (at least the ppc
version :-()

darcs-hash:20050604194621-7ef76-c240e1089df10645f5ea959a7ccb664a50afde7a.gz
parent 56c1874e
No related branches found
No related tags found
No related merge requests found
......@@ -318,21 +318,17 @@ function search_fulltext(&$data,$base,$file,$type,$lvl,$opts){
}
}
// if only negwords are given the preg_match_all() call will
// crash libapache-mod-php4 v4.3.10-13 (segfault). Until we
// got to the bottom of this problem, at least one posword is
// required.
if(!count($poswords)) return true;
$reg = count($poswords) ? '^(?=.*?'.join(')(?=.*?',$poswords).')' : '^';
$req = count($poswords) ? $reg .= '^(?=.*?'.join(')(?=.*?',$poswords).')' : '^';
$reg .= count($negwords) ? '((?!'.join('|',$negwords).').)*$' : '.*$';
$mark = '('.join('|',$poswords).')';
//do the fulltext search
$matches = array();
if($cnt = preg_match_all('#'.$reg.'#usi',$lctext,$matches)){
//this is not the best way for snippet generation but the fastest I could find
//split query and only use the first token
$q = $poswords[0];
$q = preg_split('/\s+/',$opts['query'],2);
$q = $q[0];
$p = utf8_strpos($lctext,$q);
$f = $p - 100;
$l = utf8_strlen($q) + 200;
......@@ -340,7 +336,6 @@ function search_fulltext(&$data,$base,$file,$type,$lvl,$opts){
$snippet = '<span class="search_sep"> ... </span>'.
htmlspecialchars(utf8_substr($text,$f,$l)).
'<span class="search_sep"> ... </span>';
$mark = '('.join('|',$poswords).')';
$snippet = preg_replace('#'.$mark.'#si','<span class="search_hit">\\1</span>',$snippet);
$data[] = array(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment