diff options
author | Michael Klier chi@chimeric.de <andi@splitbrain.org> | 2006-05-18 18:18:55 +0200 |
---|---|---|
committer | Michael Klier chi@chimeric.de <andi@splitbrain.org> | 2006-05-18 18:18:55 +0200 |
commit | d0ab54f6197249cebc808395ab9de9da0df153f3 (patch) | |
tree | b6bc051f7d91f99bd6889600dd1650dab3831b5d | |
parent | 77b9890307337d49a0f519746f6a6f4ee1d61334 (diff) | |
download | rpg-d0ab54f6197249cebc808395ab9de9da0df153f3.tar.gz rpg-d0ab54f6197249cebc808395ab9de9da0df153f3.tar.bz2 |
namespace restricted fulltext-search
- The fulltext-search can now be restricted to a given
namespace seperated by an "@"
darcs-hash:20060518161855-484ab-1617b6d2c3593525f4d29a789b0a32ebf414b9ae.gz
-rw-r--r-- | inc/fulltext.php | 16 | ||||
-rw-r--r-- | inc/html.php | 15 |
2 files changed, 30 insertions, 1 deletions
diff --git a/inc/fulltext.php b/inc/fulltext.php index fd974c949..e8b31b201 100644 --- a/inc/fulltext.php +++ b/inc/fulltext.php @@ -49,6 +49,15 @@ function ft_pageSearch($query,&$poswords){ $hidden = array_filter(array_keys($docs),'isHiddenPage'); $not = array_merge($not,$hidden); + // filter unmatched namespaces + if(!empty($q['ns'])) { + foreach($docs as $key => $val) { + if(!preg_match('/^'.$q['ns'].'/',$key)) { + unset($docs[$key]); + } + } + } + // remove negative matches foreach($not as $n){ unset($docs[$n]); @@ -254,10 +263,17 @@ function ft_queryParser($query){ $q = array(); $q['query'] = $query; + $q['ns'] = ''; $q['phrases'] = array(); $q['and'] = array(); $q['not'] = array(); + // strip namespace from query + if(preg_match('/([^@]*)@([^@]*)/',$query,$match)) { + $query = $match[1]; + $q['ns'] = $match[2]; + } + // handle phrase searches while(preg_match('/"(.*?)"/',$query,$match)){ $q['phrases'][] = $match[1]; diff --git a/inc/html.php b/inc/html.php index 6d0b7e116..928da9cef 100644 --- a/inc/html.php +++ b/inc/html.php @@ -365,6 +365,18 @@ function html_search(){ print p_locale_xhtml('searchpage'); flush(); + //check if search is restricted to namespace + if(preg_match('/([^@]*)@([^@]*)/',$QUERY,$match)) { + $id = cleanID($match[1]); + if(empty($id)) { + print '<div class="nothing">'.$lang['nothingfound'].'</div>'; + flush(); + return; + } + } else { + $id = cleanID($QUERY); + } + //show progressbar print '<div class="centeralign" id="dw__loading">'; print '<br /></div>'; @@ -375,7 +387,8 @@ function html_search(){ //do quick pagesearch $data = array(); - $data = ft_pageLookup(cleanID($QUERY)); + + $data = ft_pageLookup($id); if(count($data)){ sort($data); print '<div class="search_quickresult">'; |