From 32aa8b091f439043ec2a4c7807366cb26eb9de19 Mon Sep 17 00:00:00 2001 From: Arne Georg Gleditsch Date: Sun, 17 Feb 2008 23:05:18 +0100 Subject: Improved error handling. --- lib/LXRng/Context.pm | 2 +- lib/LXRng/Web.pm | 50 +++++++++++++++++++++++++++++++++++++++++++++----- tmpl/bare_error.tt2 | 20 ++++++++++++++++++++ tmpl/error.tt2 | 3 +++ tmpl/header.tt2 | 24 ++++++++++++------------ tmpl/search_result.tt2 | 4 ++++ 6 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 tmpl/bare_error.tt2 create mode 100644 tmpl/error.tt2 diff --git a/lib/LXRng/Context.pm b/lib/LXRng/Context.pm index 6909c58..db486bf 100644 --- a/lib/LXRng/Context.pm +++ b/lib/LXRng/Context.pm @@ -82,7 +82,7 @@ sub new { if ($$self{'tree'} and $$self{'tree'} !~ /^[+]/) { my $tree = $$self{'tree'}; - die("No config for tree $tree") + return $self unless exists($$config{$tree}); $$self{'config'} = $$config{$tree}; diff --git a/lib/LXRng/Web.pm b/lib/LXRng/Web.pm index 78380c8..e616170 100644 --- a/lib/LXRng/Web.pm +++ b/lib/LXRng/Web.pm @@ -170,6 +170,28 @@ sub print_markedup_file { } } +sub print_error { + my ($context, $template, $query, $error) = @_; + + my $tmpl; + if ($context->config and $context->config->{'repository'}) { + $tmpl = 'error.tt2'; + } + else { + $tmpl = 'bare_error.tt2'; + } + + print($query->header(-type => 'text/html', + -charset => 'utf-8')); + + my $base = $context->base_url(); + $template->process($tmpl, + {'context' => $context, + 'base_url' => $base, + 'error' => $error}) + or die $template->error(); +} + sub print_tree_list { my ($context, $template) = @_; @@ -243,10 +265,18 @@ sub source { my $ver = $context->release; my $rep = $context->config->{'repository'}; - die "No tree given" unless $rep; + unless ($rep) { + print_error($context, $template, $query, + "No/unknown tree indicated"); + return; + } my $node = $rep->node($context->path, $ver); - die "Node not found: ".$context->path." ($ver)" unless $node; + unless ($node) { + print_error($context, $template, $query, + "Node not found: ".$context->path." ($ver)"); + return; + } my $gzip = do_compress_response($query); @@ -404,13 +434,13 @@ sub search { my $rep = $context->config->{'repository'}; my @args = grep { $rep->node($_, $context->release) - } split(/\|/, $find); + } split(/\|/, $find); $template_args{'ambig_res'} = {'query' => $find, 'files' => \@args,} } } else { - die "No query string given"; + $template_args{'error'} = 'No query string given'; } my $html = ''; $template_args{'tree'} = $context->tree; @@ -473,6 +503,10 @@ sub handle_ajax_request { binmode(\*STDOUT, ":gzip") if $gzip; if ($context->param('fname') eq 'pjx_load_file') { + unless ($context->config and $context->config->{'repository'}) { + print('
No/unknown tree indicated.
'); + return; + } my $rep = $context->config->{'repository'}; my $node = $rep->node($context->param('file'), $context->release); print_markedup_file($context, $template, $node); @@ -773,8 +807,14 @@ sub generate_pdf { sub handle { my ($self, $query) = @_; - my $context = LXRng::Context->new('query' => $query); my $template = Template->new({'INCLUDE_PATH' => $LXRng::ROOT.'/tmpl/'}); + my $context = LXRng::Context->new('query' => $query); + + unless ($context->config) { + print_error($context, $template, $query, + "No/unknown tree indicated"); + return; + } if ($context->param('fname')) { handle_ajax_request($query, $context, $template); diff --git a/tmpl/bare_error.tt2 b/tmpl/bare_error.tt2 new file mode 100644 index 0000000..03f6aeb --- /dev/null +++ b/tmpl/bare_error.tt2 @@ -0,0 +1,20 @@ + + + + + LXR Error + + + + + +
[% error | html %]
+ + diff --git a/tmpl/error.tt2 b/tmpl/error.tt2 new file mode 100644 index 0000000..b8996ac --- /dev/null +++ b/tmpl/error.tt2 @@ -0,0 +1,3 @@ +[% INCLUDE header.tt2 %] +
[% error | html %]
+[% INCLUDE footer.tt2 %] diff --git a/tmpl/header.tt2 b/tmpl/header.tt2 index 2932823..106f3bd 100644 --- a/tmpl/header.tt2 +++ b/tmpl/header.tt2 @@ -10,19 +10,19 @@ var startup_tree = location.hash.match(/^#([^/+]+)([+][^/]*|)/); if (startup_tree) { - var base = '[% base_url %]'; + var base = '[% base_url | html %]'; base = base.replace(/\/ajax[+][*]/, '/' + startup_tree[1] + '+*'); document.write(''); } else { - document.write(''); + document.write(''); document.write(''); use_ajax_navigation = 0; } [% END %] [% IF !is_ajax %] - + [% END %] @@ -32,8 +32,8 @@ - LXR [% context.tree -%]/ - [%- FOREACH elem = context.path_elements %][% elem.node %][% END %] + <title>LXR [% context.tree | html -%]/ + [%- FOREACH elem = context.path_elements %][% elem.node | html %][% END %] @@ -47,15 +47,15 @@ - [% context.tree %]/[% + [% context.tree | html%]/[% FOREACH elem = context.path_elements - %][% elem.node %][% + %][% elem.node | html %][% END %] History -