X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=e3a92524a8f4a2d52bf458b0dc3c48f183f8b2d6;hb=e1058b36db231a58f819075b0e5658a872e94f11;hp=ace9776ae7d7800bccecc92423c241bb1f3a7f49;hpb=1a1b33acd4fd5b3132d23d84242092996c18040e;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index ace9776..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.4"; +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 )); @@ -63,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; } @@ -88,7 +90,9 @@ sub handler_guts { sub is_applicable { my $self = shift; my $config = $self->config; - $config->{ok_tables} = {map {$_ => 1} @{$config->{display_tables}}}; + $config->{ok_tables} ||= $config->{display_tables}; + $config->{ok_tables} = {map {$_=>1} @{$config->{ok_tables}}} + if ref $config->{ok_tables} eq "ARRAY"; warn "We don't have that table ($self->{table})" if $self->debug and not $config->{ok_tables}{$self->{table}}; return DECLINED() unless exists $config->{ok_tables}{$self->{table}}; @@ -109,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 } @@ -266,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. @@ -277,4 +292,3 @@ You may distribute this code under the same terms as Perl itself. =cut 1; -