]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
Added Maypole::Manual::Inheritance and Maypole::Manual::Terminology. Renamed Maypole...
[maypole.git] / lib / Maypole.pm
index 14260bd4320eb2ecfbf57591cbc5493b0fd5c50a..53732c480dfdfa0aa5e8aa819f475f739cb07ba7 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) = @_;
@@ -508,16 +488,39 @@ Maypole is a Perl web application framework similar to Java's struts. It is
 essentially completely abstracted, and so doesn't know anything about
 how to talk to the outside world.
 
-To use it, you need to create a package which represents your entire
+To use it, you need to create a driver  package which represents your entire
 application. In our example above, this is the C<BeerDB> package.
 
 This needs to first use L<Maypole::Application> which will make your package
 inherit from the appropriate platform driver such as C<Apache::MVC> or
-C<CGI::Maypole>, and then call setup.  This sets up the model classes and
+C<CGI::Maypole>. Then, the driver calls C<setup>.  This sets up the model classes and
 configures your application. The default model class for Maypole uses
 L<Class::DBI> to map a database to classes, but this can be changed by altering
 configuration. (B<Before> calling setup.)
 
+
+=head1 DOCUMENTATION ROADMAP
+
+The primary documentation is the Maypole manual. This lives in the 
+C<Maypole::Manual> pod documents included with the distribution. 
+
+
+=head1 DEMOS
+
+A couple of demos are available, usually with source code and configs. 
+
+=over4 
+
+=item beerdb.riverside-cms.co.uk
+
+Looks to be down at the moment. 
+
+=item beerfb.riverside-cms.co.uk
+
+A demo of L<Maypole::FormBuilder>. This site is running on the set of Mason 
+templates included in the L<Maypole::FormBuilder> distribution. See the 
+synopsis of L<Maypole::Plugin::FormBuilder> for an example driver
+
 =head2 CLASS METHODS
 
 =head3 config
@@ -572,8 +575,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 +844,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