X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=e3a92524a8f4a2d52bf458b0dc3c48f183f8b2d6;hb=e1058b36db231a58f819075b0e5658a872e94f11;hp=b55f7b924ec8309d148a5e3660212b1bae344771;hpb=fb132e6828e038d5b7f58f28af702a67f8e05d09;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index b55f7b9..e3a9252 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -4,7 +4,7 @@ use attributes (); use UNIVERSAL::require; use strict; use warnings; -our $VERSION = "1.7"; +our $VERSION = "1.8"; __PACKAGE__->mk_classdata($_) for qw( config init_done view_object ); __PACKAGE__->mk_accessors ( qw( ar params query objects model_class args action template )); @@ -52,11 +52,10 @@ sub handler { my $class = shift; $class->init unless $class->init_done; my $r = bless { config => $class->config }, $class; - $r->get_request(@_); + $r->get_request(); $r->parse_location(); my $status = $r->handler_guts(); return $status unless $status == OK; - $r->{content_type} ||= "text/html"; $r->send_output; return $status; } @@ -64,23 +63,25 @@ sub handler { sub handler_guts { my $r = shift; $r->model_class($r->config->{model}->class_of($r, $r->{table})); - my $status = $r->is_applicable; - if ($status == OK) { - $status = $r->call_authenticate; - if ($r->debug and $status != OK and $status != DECLINED) { - $r->view_object->error($r, - "Got unexpected status $status from calling authentication"); - } - return $status unless $status == OK; - $r->additional_data(); - - $r->model_class->process($r); - } else { - # Otherwise, it's just a plain template. + my $applicable = $r->is_applicable; + unless ($applicable == OK) { + # It's just a plain template delete $r->{model_class}; $r->{path} =~ s{/}{}; # De-absolutify $r->template($r->{path}); } + # We authenticate every request, needed for proper session management + my $status = $r->call_authenticate; + if ($r->debug and $status != OK and $status != DECLINED) { + $r->view_object->error($r, + "Got unexpected status $status from calling authentication"); + } + return $status unless $status == OK; + # We run additional_data for every request + $r->additional_data; + if ($applicable == OK) { + $r->model_class->process($r); + } if (!$r->{output}) { # You might want to do it yourself return $r->view_object->process($r); } else { return OK; } @@ -112,8 +113,11 @@ sub is_applicable { sub call_authenticate { my $self = shift; - return $self->model_class->authenticate($self) if - $self->model_class->can("authenticate"); + # Check if we have a model class + if ($self->{model_class}) { + return $self->model_class->authenticate($self) if + $self->model_class->can("authenticate"); + } return $self->authenticate($self); # Interface consistency is a Good Thing } @@ -269,10 +273,18 @@ http://maypole.simon-cozens.org/ L, L. +=head1 MAINTAINER + +Sebastian Riedel, c + =head1 AUTHOR Simon Cozens, C +=head1 THANK YOU + +Jesse Scheildlower, Jody Belka, Markus Ramberg, Mickael Joanne, Simon Flack and all the others who've helped. + =head1 LICENSE You may distribute this code under the same terms as Perl itself. @@ -280,4 +292,3 @@ You may distribute this code under the same terms as Perl itself. =cut 1; -