X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FView%2FBase.pm;h=fdc66298adf38c5db34cb02258197ff5a2e441dd;hb=5f530b5f17106319faa2f437a567332c86bf6a2c;hp=37ca4318d32304a42977e1cb996c36eb0ea5152b;hpb=49b0368ba6c1d3d0bd1418a5914bc5265a22941f;p=maypole.git diff --git a/lib/Maypole/View/Base.pm b/lib/Maypole/View/Base.pm index 37ca431..fdc6629 100644 --- a/lib/Maypole/View/Base.pm +++ b/lib/Maypole/View/Base.pm @@ -4,74 +4,107 @@ use UNIVERSAL::moniker; use strict; use Maypole::Constants; -sub new { bless {}, shift } # By default, do nothing. +sub new { bless {}, shift } # By default, do nothing. sub paths { - my ($self, $r) = @_; - my $root = $r->{config}{template_root} || $r->get_template_root; + my ( $self, $r ) = @_; + my $root = $r->config->template_root || $r->get_template_root; return ( $root, - ($r->model_class && - File::Spec->catdir($root, $r->model_class->moniker)), - File::Spec->catdir($root, "custom"), - File::Spec->catdir($root, "factory") + ( + $r->model_class + && File::Spec->catdir( $root, $r->model_class->moniker ) + ), + File::Spec->catdir( $root, "custom" ), + File::Spec->catdir( $root, "factory" ) ); } sub vars { - my ($self, $r) = @_; + my ( $self, $r ) = @_; my $class = $r->model_class; + my $base = $r->config->uri_base; + $base =~ s/\/+$//; my %args = ( request => $r, objects => $r->objects, - base => $r->config->{uri_base}, + base => $base, config => $r->config - # ... - ) ; - if ($class) { + + # ... + ); + if ($class) { $args{classmetadata} = { - name => $class, - table => $class->table, - columns => [ $class->display_columns ], - colnames => { $class->column_names }, + name => $class, + table => $class->table, + columns => [ $class->display_columns ], + colnames => { $class->column_names }, related_accessors => [ $class->related($r) ], - moniker => $class->moniker, - plural => $class->plural_moniker, - cgi => { $class->to_cgi }, - description => $class->description + moniker => $class->moniker, + plural => $class->plural_moniker, + cgi => { $class->to_cgi }, }; # User-friendliness facility for custom template writers. - if (@{$r->objects || []} > 1) { - $args{$r->model_class->plural_moniker} = $r->objects; - } else { - ($args{$r->model_class->moniker}) = @{$r->objects ||[]}; + if ( @{ $r->objects || [] } > 1 ) { + $args{ $r->model_class->plural_moniker } = $r->objects; + } + else { + ( $args{ $r->model_class->moniker } ) = @{ $r->objects || [] }; } } # Overrides - %args = (%args, %{$r->{template_args}||{}}); + %args = ( %args, %{ $r->{template_args} || {} } ); %args; } sub process { - my ($self, $r) = @_; + my ( $self, $r ) = @_; my $status = $self->template($r); return $self->error($r) if $status != OK; - $r->{content_type} ||= "text/html"; + $r->{content_type} ||= "text/html"; + $r->{document_encoding} ||= "utf-8"; return OK; } sub error { - my ($self, $r) = @_; + my ( $self, $r ) = @_; warn $r->{error}; - if ($r->{error} =~ /not found$/) { return -1 } + if ( $r->{error} =~ /not found$/ ) { + + # This is a rough test to see whether or not we're a template or + # a static page + return -1 unless @{ $r->{objects} || [] }; + + $r->{error} = < Template not found + +This template was not found while processing the following request: + +@{[$r->{action}]} on table @{[ $r->{table} ]} with objects: + +
+@{[join "\n", @{$r->{objects}}]}
+
+ +Looking for template @{[$r->{template}]} in paths: + +
+@{[ join "\n", $self->paths($r) ]}
+
+EOF + $r->{content_type} = "text/html"; + $r->{output} = $r->{error}; + return OK; + } $r->{content_type} = "text/plain"; - $r->{output} = $r->{error}; + $r->{output} = $r->{error}; $r->send_output; return ERROR; } -sub template { die shift()." didn't define a decent template method!" } +sub template { die shift() . " didn't define a decent template method!" } 1;