]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
Fixes #6571 User-defined ok_tables: patch
[maypole.git] / lib / Maypole.pm
index fedd3e5af00af2e0d671cefae041f808db8f7c60..dd9b4c8af479fe8a9979ff0de0d5d0660a76dad3 100644 (file)
@@ -4,16 +4,13 @@ use attributes ();
 use UNIVERSAL::require;
 use strict;
 use warnings;
-our $VERSION = "1.3";
+our $VERSION = "1.4";
 __PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
 __PACKAGE__->mk_accessors ( qw( ar params query objects model_class
 args action template ));
 __PACKAGE__->config({});
 __PACKAGE__->init_done(0);
-
-# Ape Apache::Constants interface
-use constant OK => 0;
-use constant DECLINED => -1;
+use Maypole::Constants;
 
 sub debug { 0 }
 
@@ -57,7 +54,14 @@ sub handler {
     my $r = bless { config => $class->config }, $class;
     $r->get_request();
     $r->parse_location();
+    my $status = $r->handler_guts();
+    return $status unless $status == OK;
+    $r->send_output;
+    return $status;
+}
 
+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) { 
@@ -72,23 +76,21 @@ sub handler {
         $r->model_class->process($r);
     } else { 
         # Otherwise, it's just a plain template.
-        $r->call_authenticate; # No harm in it
         delete $r->{model_class};
         $r->{path} =~ s{/}{}; # De-absolutify
         $r->template($r->{path});
     }
-    $status = OK;
     if (!$r->{output}) { # You might want to do it yourself
-        $status = $r->view_object->process($r);
-    }
-    $r->send_output;
-    return $status;
+        return $r->view_object->process($r);
+    } else { return OK; }
 }
 
 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}};