X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=lib%2FNDWeb%2FController%2FWiki.pm;h=2bf03aa16eda20f4ca576e035a5f66d7487af5a7;hb=a75c781d5a2d121e1a459c2c7e0061eb45aee253;hp=d15c609672670e43b3f9dbd477a0383f23b21229;hpb=2c934746290ce8baa0b38425e1fd74d63a2a12f5;p=ndwebbie.git diff --git a/lib/NDWeb/Controller/Wiki.pm b/lib/NDWeb/Controller/Wiki.pm index d15c609..2bf03aa 100644 --- a/lib/NDWeb/Controller/Wiki.pm +++ b/lib/NDWeb/Controller/Wiki.pm @@ -102,6 +102,9 @@ sub postedit : Local { my $wpid = $c->req->param('wpid'); if ( $wpid eq 'new'){ + unless ($c->req->param('name') =~ /([A-Z]\w*)/){ + die 'The name is not valid, start with a capital letter and only use alphanumerical characters or _ for the rest'; + } my $namespace = $dbh->selectrow_array(q{SELECT namespace FROM wiki_namespace_access WHERE namespace = $1 AND post AND gid IN (SELECT groups($2)) @@ -152,6 +155,40 @@ sub postedit : Local { $c->stash(template => 'wiki/edit.tt2'); } +sub search : Local { + my ( $self, $c ) = @_; + my $dbh = $c->model; + + if ($c->req->param('search')){ + $c->stash(search => $c->req->param('search')); + my $queryfunc = 'plainto_tsquery'; + $queryfunc = 'to_tsquery' if $c->req->param('advsearch'); + my $posts = $dbh->prepare(q{SELECT wp.wpid,namespace,name + ,(CASE WHEN namespace <> '' THEN namespace || ':' ELSE '' END) || name AS fullname + ,ts_headline(wpr.text,}.$queryfunc.q{($2)) AS headline + ,ts_rank_cd(textsearch, }.$queryfunc.q{($2),32) AS rank + FROM wiki_pages wp + JOIN wiki_page_revisions wpr USING (wprev) + WHERE (namespace IN (SELECT namespace FROM wiki_namespace_access WHERE gid IN (SELECT groups($1))) + OR wp.wpid IN (SELECT wpid FROM wiki_page_access WHERE uid = $1)) + AND textsearch @@ }.$queryfunc.q{($2) + ORDER BY rank DESC + }); + eval { + $posts->execute($c->stash->{UID},$c->req->param('search')); + my @posts; + while (my $post = $posts->fetchrow_hashref){ + push @posts,$post; + } + $c->stash(searchresults => \@posts); + }; + if ($@){ + $c->stash( searcherror => $dbh->errstr); + } + } + +} + sub findPage : Private { my ( $self, $c, $p ) = @_; my $dbh = $c->model;