X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=NDWeb%2FPages%2FForum%2FSearch.pm;h=1789bc71760f7502133a7380b1f49d2ea469a0dd;hb=f539657a3047bdf3d65d87a635b6741bcf72f025;hp=a0f28acff060ad8e03a87ddffaa0d93be9f7b9d1;hpb=055f7e12029e85248d4b9ba60d377c1816bce265;p=ndwebbie.git diff --git a/NDWeb/Pages/Forum/Search.pm b/NDWeb/Pages/Forum/Search.pm index a0f28ac..1789bc7 100644 --- a/NDWeb/Pages/Forum/Search.pm +++ b/NDWeb/Pages/Forum/Search.pm @@ -32,8 +32,23 @@ sub render_body { my ($BODY) = @_; my $DBH = $self->{DBH}; $self->{TITLE} = 'Forum'; - + my @queries; if (param('search')){ + push @queries,'('.param('search').')'; + } + my %cat = (body => 'D', topic => 'A', author => 'B'); + for ('body','topic','author'){ + if (param($_)){ + my @words = split /\W+/,param($_); + my $op = param('all'.$_) ? '&' : '|'; + my $cat = $cat{$_}; + my $query = join " $op ", map {"$_:$cat"} @words; + push @queries,"($query)"; + } + } + my $search = join ' & ', @queries; + + if ($search){ my $posts = $DBH->prepare(q{SELECT fp.ftid,u.username,ft.subject ,ts_headline(fp.message,to_tsquery($2)) AS headline ,ts_rank_cd(fp.textsearch, to_tsquery($2),32) AS rank @@ -46,7 +61,7 @@ sub render_body { AND fp.textsearch @@@ to_tsquery($2) ORDER BY rank DESC }) or warn $DBH->errstr; - $posts->execute($ND::UID,param('search')) or warn $DBH->errstr; + $posts->execute($ND::UID,$search) or warn escapeHTML $DBH->errstr; my @posts; while (my $post = $posts->fetchrow_hashref){ push @posts,$post;