CGI::Kwiki::Search - Search Base Class for CGI::Kwiki


CGI-Kwiki documentation Contained in the CGI-Kwiki distribution.

Index


Code Index:

NAME

Top

CGI::Kwiki::Search - Search Base Class for CGI::Kwiki

DESCRIPTION

Top

See installed kwiki pages for more information.

AUTHOR

Top

Brian Ingerson <INGY@cpan.org>

COPYRIGHT

Top


CGI-Kwiki documentation Contained in the CGI-Kwiki distribution.

package CGI::Kwiki::Search;
$VERSION = '0.18';
use strict;
use base 'CGI::Kwiki', 'CGI::Kwiki::Privacy';
use CGI::Kwiki ':char_classes';

sub process {
    my ($self) = @_;
    my $search = $self->cgi->page_id;
    return
      $self->template->process('display_header') .
      $self->search .
      $self->template->process('basic_footer');
}

sub search {
    my ($self) = @_;
    my $database = $self->database;
    my $search = $self->cgi->search;
    # Detaint query string
    $search =~ s/[^$WORD\ \-\.\^\$\*\|\:]//g;
    my @pages = $database->pages;
    my @results;
    for my $page_id (@pages) {
        next unless $self->is_readable($page_id);
        if ($page_id =~ m{$search}i) {
            push @results, $page_id;
            next;
        }
        my $wiki_text = $database->load($page_id);
        if ($wiki_text =~ m{$search}is) {
            push @results, $page_id;
        }
    }
    my $result = "<h3>";
    if (length $search) {
        $result .= $self->loc("%1 pages found containing '%2'", scalar @results, $search);
    }
    else {
        $result .= $self->loc("%1 pages found", scalar @results);
    }
    $result .= ":</h3>\n";
    my $script = $self->script;
    for my $page_id (sort @results) {
        $page_id =~ s/.*?([$WORD\-:]+)\n/$1/;
        $result .= qq{<a href="$script?$page_id">$page_id</a><br>\n};
    }
    return $result;
}

1;