Apache-MiniWiki
view release on metacpan or search on metacpan
MiniWiki.pm view on Meta::CPAN
$r->log_error($text);
print <<__EOT__;
<html>
<body>
<p id="title">Error in Apache::MiniWiki</p>
<hr/>
$text
<hr/>
While viewing: $uri
<hr/>
This should never have occurred. Please notify the administrator responsible for this site.
</body>
</html>
__EOT__
return OK;
}
## The function pretty_error is called most commonly when the the user
## has done something correctly, and needs to be informed. In this situation,
## we assume that things like a template and so forth are available.
sub pretty_error {
my ($r, $text, $return) = @_;
$return ||= OK;
my $uri = $r->uri;
my $newtext = <<TEXT;
Error
*NOTE:* $text
Please hit the *back* button in your browser, and try again.
TEXT
$newtext = &prettify($newtext);
$template->param('vroot', $vroot || "no vroot");
$template->param('title', $uri);
$template->param('body', $newtext);
$template->param('editlink', "$vroot/\(edit\)\/$uri");
$template->param('loglink', "$vroot/\(log\)\/$uri");
$template->param('pageurl', "http://$ENV{SERVER_NAME}:$ENV{SERVER_PORT}$ENV{REQUEST_URI}");
my $output = $template->output;
$r->send_http_header('text/html');
print $output;
return $return;
}
# This converts the text into HTML with the help of HTML::FromText.
# See the POD information for HTML::FromText for an explanation of
# these settings.
sub prettify {
my ($text) = @_;
return text2html( $text,
urls => 1, email => 0, bold => 1,
underline =>1, paras => 1, bullets => 1, numbers=> 1,
headings => 1, blockcode => 1, tables => 1,
title => 1, code => 1
);
}
sub strip_virtual { $_[0] =~ s/^${vroot}\///i; $_[0] }
# This is the main request handler. It begins by finding out its
# configuration, if it has not before, loads templates and then calls
# the appropriate function depending upon the URI we received from
# the user.
sub handler {
my $r = shift;
# Load configuration directives.
$datadir = $r->dir_config('datadir') or
return fatal_error($r, "PerlVar datadir must be set.");
$vroot = $r->dir_config('vroot') or
return fatal_error($r, "PerlVar vroot must be set.");
$authen = $r->dir_config('authen') || -1;
$timediff = $r->dir_config('timediff') || -8;
@templates = $r->dir_config->get('templates');
$uploads = $r->dir_config('uploads') || 'yes';
$precaching = $r->dir_config('precaching') || 'no';
# First strip the virtual root from the URI
my $uri = &strip_virtual($r->uri);
# trailing / away
$datadir =~ s/(\/)$//g;
# Load the template for this Wiki
$template = &get_template($r);
# We currently do not allow the clients browser to cache the document.
# This means that Opera, for example, has a better chance of actually
# showing up-to-date content to the user.
$r->no_cache(1);
# We call the appropriate functions to perform a task if the
# URI that the user sent contains "(function)" as an element,
# otherwise, call the default, view_function.
my $function = "view_function";
$uri =~ m{^\(([a-z]*)\)/?(.*)} and $function = "$1_function";
my %args = $r->args;
my $revision = $args{rev};
my $page = $2 || $uri;
# all dot files are hidden and forbidden
if ($page =~ /^\./) {
return &pretty_error($r, "All dot files are hidden", FORBIDDEN);
}
my $retval;
eval {
no strict 'refs';
$retval = &$function($r, $page || "index", $revision);
};
( run in 1.426 second using v1.01-cache-2.11-cpan-d7f47b0818f )