2006-05-03 23:50:39 +02:00
|
|
|
#!/usr/bin/perl
|
2008-06-03 21:29:54 +02:00
|
|
|
# xapian-omega search engine plugin
|
2006-05-03 23:50:39 +02:00
|
|
|
package IkiWiki::Plugin::search;
|
|
|
|
|
|
|
|
use warnings;
|
|
|
|
use strict;
|
2007-04-27 04:55:52 +02:00
|
|
|
use IkiWiki 2.00;
|
2006-05-03 23:50:39 +02:00
|
|
|
|
|
|
|
sub import { #{{{
|
2008-06-03 21:29:54 +02:00
|
|
|
hook(type => "checkconfig", id => "search", call => \&checkconfig);
|
|
|
|
hook(type => "pagetemplate", id => "search", call => \&pagetemplate);
|
|
|
|
hook(type => "delete", id => "search", call => \&delete);
|
|
|
|
hook(type => "change", id => "search", call => \&change);
|
|
|
|
hook(type => "cgi", id => "search", call => \&cgi);
|
2006-05-03 23:50:39 +02:00
|
|
|
} # }}}
|
|
|
|
|
|
|
|
sub checkconfig () { #{{{
|
|
|
|
foreach my $required (qw(url cgiurl)) {
|
2006-09-10 00:50:27 +02:00
|
|
|
if (! length $config{$required}) {
|
2006-12-29 05:38:40 +01:00
|
|
|
error(sprintf(gettext("Must specify %s when using the search plugin"), $required));
|
2006-05-03 23:50:39 +02:00
|
|
|
}
|
|
|
|
}
|
2008-06-03 21:29:54 +02:00
|
|
|
|
|
|
|
if (! exists $config{omega_cgi}) {
|
|
|
|
$config{omega_cgi}="/usr/lib/cgi-bin/omega/omega";
|
|
|
|
}
|
|
|
|
|
|
|
|
if (! -e $config{wikistatedir}."/xapian" || $config{rebuild}) {
|
|
|
|
writefile("omega.conf", $config{wikistatedir}."/xapian",
|
|
|
|
"database_dir .\n".
|
|
|
|
"template_dir ./templates\n");
|
|
|
|
writefile("query", $config{wikistatedir}."/xapian/templates",
|
|
|
|
IkiWiki::misctemplate(gettext("search"),
|
|
|
|
readfile(IkiWiki::template_file("searchquery.tmpl"))));
|
|
|
|
}
|
2006-05-26 03:10:58 +02:00
|
|
|
} #}}}
|
|
|
|
|
2006-08-26 23:57:59 +02:00
|
|
|
my $form;
|
2006-07-28 01:41:58 +02:00
|
|
|
sub pagetemplate (@) { #{{{
|
|
|
|
my %params=@_;
|
|
|
|
my $page=$params{page};
|
|
|
|
my $template=$params{template};
|
2006-05-03 23:50:39 +02:00
|
|
|
|
2006-05-26 03:10:58 +02:00
|
|
|
# Add search box to page header.
|
2006-07-28 01:08:03 +02:00
|
|
|
if ($template->query(name => "searchform")) {
|
2006-08-26 23:57:59 +02:00
|
|
|
if (! defined $form) {
|
2006-09-10 00:50:27 +02:00
|
|
|
my $searchform = template("searchform.tmpl", blind_cache => 1);
|
|
|
|
$searchform->param(searchaction => $config{cgiurl});
|
2006-08-26 23:57:59 +02:00
|
|
|
$form=$searchform->output;
|
|
|
|
}
|
|
|
|
|
|
|
|
$template->param(searchform => $form);
|
2006-07-28 01:08:03 +02:00
|
|
|
}
|
2006-05-03 23:50:39 +02:00
|
|
|
} #}}}
|
|
|
|
|
|
|
|
sub delete (@) { #{{{
|
2008-06-03 21:29:54 +02:00
|
|
|
debug(gettext("cleaning xapian search index"));
|
2006-05-03 23:50:39 +02:00
|
|
|
} #}}}
|
|
|
|
|
2006-05-05 07:10:00 +02:00
|
|
|
sub change (@) { #{{{
|
2008-06-03 21:29:54 +02:00
|
|
|
debug(gettext("updating xapian search index"));
|
2006-05-03 23:50:39 +02:00
|
|
|
} #}}}
|
|
|
|
|
|
|
|
sub cgi ($) { #{{{
|
|
|
|
my $cgi=shift;
|
|
|
|
|
2008-06-03 21:29:54 +02:00
|
|
|
if (defined $cgi->param('P')) {
|
2006-05-03 23:50:39 +02:00
|
|
|
# only works for GET requests
|
2008-06-03 21:29:54 +02:00
|
|
|
chdir("$config{wikistatedir}/xapian") || error("chdir: $!");
|
|
|
|
$ENV{OMEGA_CONFIG_FILE}="./omega.conf";
|
|
|
|
$ENV{CGIURL}=$config{cgiurl},
|
|
|
|
exec($config{omega_cgi}) || error("$config{omega_cgi} failed: $!");
|
2006-05-03 23:50:39 +02:00
|
|
|
}
|
|
|
|
} #}}}
|
|
|
|
|
|
|
|
1
|