]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
Empty session attribute, and get_session method added to Maypole.pm, get_session...
[maypole.git] / lib / Maypole.pm
index 14260bd4320eb2ecfbf57591cbc5493b0fd5c50a..cae420fea4bcf68d88ce41abdeafbfb15b167dbb 100644 (file)
@@ -20,7 +20,7 @@ __PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
 __PACKAGE__->mk_accessors(
     qw( params query objects model_class template_args output path
         args action template error document_encoding content_type table
-        headers_in headers_out stash)
+        headers_in headers_out stash session)
 );
 __PACKAGE__->config( Maypole::Config->new() );
 __PACKAGE__->init_done(0);
@@ -119,10 +119,11 @@ sub handler_guts
     my $applicable = $self->is_model_applicable;
     
     $self->__setup_plain_template unless $applicable;
+
+    $self->session($self->call_get_session);
     
-    # We authenticate every request, needed for proper session management
     my $status;
-    
+
     eval { $status = $self->call_authenticate };
     
     if ( my $error = $@ ) 
@@ -300,6 +301,11 @@ sub call_authenticate
     return $self->authenticate($self);   
 }
 
+sub call_get_session {
+   my ($self) = @_;
+   return $self->get_session($self);
+}
+
 sub call_exception 
 {
     my ($self, $error) = @_;
@@ -339,45 +345,29 @@ sub additional_data { }
 
 sub authenticate { return OK }
 
+sub get_session { }
+
 sub exception { return ERROR }
 
+sub preprocess_path { };
+
 sub parse_path 
 {
     my ($self) = @_;
     
+    $self->preprocess_path;
+
     $self->path || $self->path('frontpage');
     
     my @pi = grep {length} split '/', $self->path;
     
-    $self->table(shift @pi);
+    $self->table || $self->table(shift @pi);
     
-    $self->action( shift @pi or 'index' );
+    $self->action || $self->action( shift @pi or 'index' );
     
-    $self->args(\@pi);
+    $self->args || $self->args(\@pi);
 }
 
-=head3 make_path( %args or \%args or @args )
-
-This is the counterpart to C<Maypole::parse_path>. It generates a path to use
-in links, form actions etc. To implement your own path scheme, just override
-this method and C<parse_path>.
-
-    %args = ( table      => $table,
-              action     => $action,        
-              additional => $additional,    # optional - generally an object ID
-              );
-              
-    \%args = as above, but a ref
-    
-    @args = ( $table, $action, $additional );   # $additional is optional
-
-C<id> can be used as an alternative key to C<additional>.
-
-C<$additional> can be a string, an arrayref, or a hashref. An arrayref is
-expanded into extra path elements, whereas a hashref is translated into a query
-string. 
-
-=cut
 
 sub make_path
 {
@@ -417,16 +407,6 @@ sub make_path
     return $uri->as_string;
 }
 
-=head3 make_uri( @segments )
-
-Make a L<URI> object given table, action etc. Automatically adds
-the C<uri_base>. 
-
-If the final element in C<@segments> is a hash ref, C<make_uri> will render it
-as a query string.
-
-=cut
-
 sub make_uri
 {
     my ($r, @segments) = @_;
@@ -572,8 +552,49 @@ Returns the request path
 
 =head3 parse_path
 
-Parses the request path and sets the C<args>, C<action> and C<table> 
-properties
+Parses the request path and sets the C<args>, C<action> and C<table>
+properties. Calls preprocess_path before parsing path and setting properties.
+
+=head3 make_path( %args or \%args or @args )
+
+This is the counterpart to C<parse_path>. It generates a path to use
+in links, form actions etc. To implement your own path scheme, just override
+this method and C<parse_path>.
+
+    %args = ( table      => $table,
+              action     => $action,        
+              additional => $additional,    # optional - generally an object ID
+              );
+              
+    \%args = as above, but a ref
+    
+    @args = ( $table, $action, $additional );   # $additional is optional
+
+C<id> can be used as an alternative key to C<additional>.
+
+C<$additional> can be a string, an arrayref, or a hashref. An arrayref is
+expanded into extra path elements, whereas a hashref is translated into a query
+string. 
+
+=head3 preprocess_path
+
+Sometimes when you don't want to rewrite or over-ride parse_path but
+want to rewrite urls or extract data from them before it is parsed.
+
+This method is called after parse_location has populated the request
+information and before parse_path has populated the model and action
+information, and is passed the request object.
+
+You can set action, args or table in this method and parse_path will
+then leave those values in place or populate them if not present
+
+=head3 make_uri( @segments )
+
+Make a L<URI> object given table, action etc. Automatically adds
+the C<uri_base>. 
+
+If the final element in C<@segments> is a hash ref, C<make_uri> will render it
+as a query string.
 
 =head3 table
 
@@ -800,7 +821,7 @@ L<Maypole::Application>, L<Apache::MVC>, L<CGI::Maypole>.
 
 =head1 AUTHOR
 
-Maypole is currently maintained by Simon Flack C<simonflk#cpan.org>
+Maypole is currently maintained by Aaron Trevena
 
 =head1 AUTHOR EMERITUS