]> 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 b55f7b924ec8309d148a5e3660212b1bae344771..e3a92524a8f4a2d52bf458b0dc3c48f183f8b2d6 100644 (file)
@@ -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<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.
@@ -280,4 +292,3 @@ You may distribute this code under the same terms as Perl itself.
 =cut
 
 1;
-