summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klier chi@chimeric.de <andi@splitbrain.org>2006-05-18 18:18:55 +0200
committerMichael Klier chi@chimeric.de <andi@splitbrain.org>2006-05-18 18:18:55 +0200
commitd0ab54f6197249cebc808395ab9de9da0df153f3 (patch)
treeb6bc051f7d91f99bd6889600dd1650dab3831b5d
parent77b9890307337d49a0f519746f6a6f4ee1d61334 (diff)
downloadrpg-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.php16
-rw-r--r--inc/html.php15
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">';