]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/View/TT.pm
cosmetic tidy/freshen up
[maypole.git] / lib / Maypole / View / TT.pm
index fb94767f0bf24964720fb516110395dd7936c2af..433309e98a911f1d2fd2d2f58ec705ff09d005e9 100644 (file)
@@ -3,16 +3,26 @@ use base 'Maypole::View::Base';
 use Maypole::Constants;
 use Template;
 use File::Spec::Functions qw(catdir tmpdir);
 use Maypole::Constants;
 use Template;
 use File::Spec::Functions qw(catdir tmpdir);
+use Template::Constants qw( :all );
 
 
-our $error_template; 
+our $error_template;
 { local $/; $error_template = <DATA>; }
 
 { local $/; $error_template = <DATA>; }
 
+our $VERSION = '2.13';
+
+my $debug_flags = DEBUG_ON;
+
 use strict;
 
 sub template {
   my ( $self, $r ) = @_;
   unless ($self->{tt}) {
 use strict;
 
 sub template {
   my ( $self, $r ) = @_;
   unless ($self->{tt}) {
-    my $view_options = $r->config->view_options || {};
+    my $view_options = $r->config->view_options || { POST_CHOMP=>1, PRE_CHOMP=>1, TRIM=>1 };
+    if ($r->debug) {
+      $view_options->{DEBUG} = $debug_flags;
+    }
+
+    $view_options->{POST_CHOMP} = 1 unless (exists $view_options->{POST_CHOMP});
     $self->{provider} = Template::Provider->new($view_options);
     $self->{tt}       = Template->new({
                                       %$view_options,
     $self->{provider} = Template::Provider->new($view_options);
     $self->{tt}       = Template->new({
                                       %$view_options,
@@ -34,11 +44,13 @@ sub template {
     return OK;
   } else {
     if ($@) {
     return OK;
   } else {
     if ($@) {
-      warn "fatal error in template '$template_file' : $@\n";
-      $r->{error} = "fatal error in template '$template_file' : $@";
+      my $error = "fatal error in template '$template_file' : $@\nTT paths : " . join(', ',$self->paths($r)) . "\n";
+      $r->warn($error);
+      $r->{error} = $error;
     } else {
     } else {
-      warn "TT error for template '$template_file'\n" . $self->{tt}->error;
-      $r->{error} = "TT error for template '$template_file'\n" . $self->{tt}->error;
+      my $error = "TT error for template '$template_file'\n" . $self->{tt}->error . "\nTT paths : " . join(', ',$self->paths($r)) . "\n";
+      $r->warn($error);
+      $r->{error} = $error;
     }
     return ERROR;
   }
     }
     return ERROR;
   }
@@ -49,20 +61,21 @@ sub report_error {
     my ($self, $r, $error, $type) = @_;
     my $output;
 
     my ($self, $r, $error, $type) = @_;
     my $output;
 
-    warn "self : $self, r : $r, error : $error, type : $type\n";
-
     # Need to be very careful here.
     my $tt = Template->new;
     unless (ref $r->{config}) {
     # Need to be very careful here.
     my $tt = Template->new;
     unless (ref $r->{config}) {
-      warn "no config for this request\n";
+      $r->warn("no config for this request");
       $error .= '<br> There was a problem finding configuration for this request';
       $r->{config} ||= {};
     }
       $error .= '<br> There was a problem finding configuration for this request';
       $r->{config} ||= {};
     }
+
+    $r->warn("report_error - reporting error to user : $error\n");
+
     if ($tt->process(\$error_template,
                     { err_type => $type, error => $error,
                       config => $r->{config},
                       request => $r,
     if ($tt->process(\$error_template,
                     { err_type => $type, error => $error,
                       config => $r->{config},
                       request => $r,
-                      paths => $self->paths($r),
+                      paths => [ $self->paths($r) ],
                       eval{$self->vars($r)} }, \$output )) {
         $r->{output} = $output;
         if ($tt->error) { $r->{output} = "<html><body>Even the error template
                       eval{$self->vars($r)} }, \$output )) {
         $r->{output} = $output;
         if ($tt->error) { $r->{output} = "<html><body>Even the error template
@@ -286,6 +299,18 @@ truncate, format, escape or encode trivially. A useful selection is included
 with Template Toolkit and they can also be found on CPAN or can be written
 easily. See L<Template::Manual::Filters>.
 
 with Template Toolkit and they can also be found on CPAN or can be written
 easily. See L<Template::Manual::Filters>.
 
+TT provides stderr and stdout filters, which allow you to write handy macros
+like this one to output debug information to your web server log, etc :
+
+=over 4
+
+[% MACRO debug_msg(text)
+    FILTER stderr; "[TT debug_msg] $text\n"; END;
+%]
+
+=back
+
+
 TT Macros allow you to reuse small blocks of content, directives, etc. The MACRO
 directive allows you to define a directive or directive block which is then
 evaluated each time the macro is called. Macros can be passed named parameters
 TT Macros allow you to reuse small blocks of content, directives, etc. The MACRO
 directive allows you to define a directive or directive block which is then
 evaluated each time the macro is called. Macros can be passed named parameters
@@ -375,16 +400,14 @@ Simon Cozens
 __DATA__
 <html><head><title>Maypole error page</title>
 <style type="text/css">
 __DATA__
 <html><head><title>Maypole error page</title>
 <style type="text/css">
-body { background-color:#7d95b5; font-family: sans-serif}
-p { background-color: #fff; padding: 5px; }
-pre { background-color: #fff; padding: 5px; border: 1px dotted black }
-h1 { color: #fff }
-h2 { color: #fff }
-.lhs {background-color: #ffd; }
-.rhs {background-color: #dff; }
+body { background-color:#fff; font-family: sans-serif}
+p { background-color: #e3eaf0; padding: 5px; }
+pre { background-color: #e3eaf0; padding: 5px; border: 1px dotted red }
+.lhs {background-color: #b5cadc; }
+.rhs {background-color: #e3eaf0; }
 </style>
 </head> <body>
 </style>
 </head> <body>
-<h1> Maypole application error </h1>
+<h1> Maypole Application Error </h1>
 
 <p> This application living at <code>[%request.config.uri_base%]</code>, 
 [%request.config.application_name || "which is unnamed" %], has
 
 <p> This application living at <code>[%request.config.uri_base%]</code>, 
 [%request.config.application_name || "which is unnamed" %], has
@@ -402,26 +425,31 @@ the path "[% request.path %]". The error text returned was:
 
 <h2> Request details </h2>
 
 
 <h2> Request details </h2>
 
-<table width="85%" cellspacing="2" cellpadding="1">
+<table width="100%" cellspacing="2" cellpadding="1">
     [% FOR attribute = ["model_class", "table", "template", "path",
     "content_type", "document_encoding", "action", "args", "objects"] %]
     [% FOR attribute = ["model_class", "table", "template", "path",
     "content_type", "document_encoding", "action", "args", "objects"] %]
-    <tr> <td class="lhs" width="35%"> <b>[% attribute %]</b> </td> <td class="rhs" width="65%"> [%
+    <tr> <td class="lhs" width="20%"> <b>[% attribute %]</b> </td> <td class="rhs" width="65%"> [%
     request.$attribute.list.join(" , ") %] </td></tr>
     [% END %]
     request.$attribute.list.join(" , ") %] </td></tr>
     [% END %]
+    <tr><td colspan="2"></tr>
+    <tr><td class="lhs" colspan="2"><b>CGI Parameters</b> </td></tr>
+    [% FOREACH param IN request.params %]
+    <tr> <td class="lhs" width="20%">[% param.key %]</td> <td class="rhs" width="65%"> [% param.value %] </td></tr>
+    [% END %]
 </table>
 
 <h2> Website / Template Paths </h2>
 <table width="85%" cellspacing="2" cellpadding="1">
 </table>
 
 <h2> Website / Template Paths </h2>
 <table width="85%" cellspacing="2" cellpadding="1">
-<tr><td class="lhs" width="35%"> <b>Base URI</b> </td><td class="rhs" width="65%">[% request.config.uri_base %]</td></tr>
-<tr><td class="lhs" width="35%"> <b>Paths</b> </td><td class="rhs" width="65%"> [% paths %] </td></tr>
+<tr><td class="lhs" width="20%"> <b>Base URI</b> </td><td class="rhs" width="65%">[% request.config.uri_base %]</td></tr>
+<tr><td class="lhs" width="20%"> <b>Paths</b> </td><td class="rhs" width="65%"> [% paths %] </td></tr>
 </table>
 
 <h2> Application configuration </h2>
 <table width="85%" cellspacing="2" cellpadding="1">
 </table>
 
 <h2> Application configuration </h2>
 <table width="85%" cellspacing="2" cellpadding="1">
-    <tr><td class="lhs"  width="35%"> <b>Model </b> </td><td class="rhs" width="65%"> [% request.config.model %] </td></tr>
-    <tr><td class="lhs"  width="35%"> <b>View </b> </td><td class="rhs" width="65%"> [% request.config.view %] </td></tr>
-    <tr><td class="lhs" width="35%"> <b>Classes</b> </td><td class="rhs" width="65%"> [% request.config.classes.list.join(" , ") %] </td></tr>
-    <tr><td class="lhs" width="35%"> <b>Tables</b> </td><td class="rhs" width="65%"> [% request.config.display_tables.list.join(" , ") %] </td></tr>
+    <tr><td class="lhs"  width="20%"> <b>Model </b> </td><td class="rhs" width="65%"> [% request.config.model %] </td></tr>
+    <tr><td class="lhs"  width="20%"> <b>View </b> </td><td class="rhs" width="65%"> [% request.config.view %] </td></tr>
+    <tr><td class="lhs" width="20%"> <b>Classes</b> </td><td class="rhs" width="65%"> [% request.config.classes.list.join(" , ") %] </td></tr>
+    <tr><td class="lhs" width="20%"> <b>Tables</b> </td><td class="rhs" width="65%"> [% request.config.display_tables.list.join(" , ") %] </td></tr>
 </table>
 
 </body>
 </table>
 
 </body>