]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
Apache2::MVC, Maypole::Application, parse_args() and much more...
[maypole.git] / lib / Maypole.pm
index e4b36bc8e2ebcf4af32672de145aa154ad457dd8..e3a92524a8f4a2d52bf458b0dc3c48f183f8b2d6 100644 (file)
@@ -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,24 +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.
-        $r->call_authenticate; # No harm in it
+    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; }
@@ -89,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}};
@@ -110,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
 }
 
@@ -267,10 +273,18 @@ http://maypole.simon-cozens.org/
 
 L<Apache::MVC>, L<CGI::Maypole>.
 
+=head1 MAINTAINER
+
+Sebastian Riedel, c<sri@oook.de>
+
 =head1 AUTHOR
 
 Simon Cozens, C<simon@cpan.org>
 
+=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.
@@ -278,4 +292,3 @@ You may distribute this code under the same terms as Perl itself.
 =cut
 
 1;
-