X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=lib%2FNDWeb%2FController%2FWiki.pm;h=1c3ea8714e3f48fa1b23da4320447318210bdfe9;hb=2a703f7250ea25f2f556eb25b644dcb7268f92ce;hp=d15c609672670e43b3f9dbd477a0383f23b21229;hpb=2c934746290ce8baa0b38425e1fd74d63a2a12f5;p=ndwebbie.git diff --git a/lib/NDWeb/Controller/Wiki.pm b/lib/NDWeb/Controller/Wiki.pm index d15c609..1c3ea87 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;