X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=6b40b7052b5ee5e039a61c90c283b3a86340ec21;hb=650450caf089b65793c46ff38aa696337f4005df;hp=5e85cdfe59b45b23e7cf16905b45598a926593ba;hpb=14afca2d074d51d7b8fd5306b39e24e06c3a517a;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 5e85cdf..6b40b70 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -467,12 +467,12 @@ to the method sub component { my ( $r, $path ) = @_; my $self = bless { parent => $r, config => $r->{config}, } , ref $r; - $self->stash({}); - $self->params({}); - $self->query({}); - $self->template_args({}); - $self->args([]); - $self->objects([]); + $self->stash({}); + $self->params({}); + $self->query({}); + $self->template_args({}); + $self->args([]); + $self->objects([]); $self->get_user; my $url = URI->new($path); @@ -538,66 +538,59 @@ request/response and defines the workflow within Maypole. =cut # The root of all evil -sub handler_guts -{ - my ($self) = @_; - $self->build_form_elements(1); - $self->__load_request_model; +sub handler_guts { + my ($self) = @_; + $self->build_form_elements(1) unless (defined ($self->config->build_form_elements) && $self->config->build_form_elements == 0); + $self->__load_request_model; - my $applicable = $self->is_model_applicable == OK; + my $applicable = $self->is_model_applicable == OK; - my $status; + my $status; - # handle authentication - eval { $status = $self->call_authenticate }; - if ( my $error = $@ ) - { - $status = $self->call_exception($error, "authentication"); - if ( $status != OK ) - { - warn "caught authenticate error: $error"; - return $self->debug ? - $self->view_object->error($self, $error) : ERROR; - } - } - if ( $self->debug and $status != OK and $status != DECLINED ) - { - $self->view_object->error( $self, - "Got unexpected status $status from calling authentication" ); + # handle authentication + eval { $status = $self->call_authenticate }; + if ( my $error = $@ ) { + $status = $self->call_exception($error, "authentication"); + if ( $status != OK ) { + $self->warn("caught authenticate error: $error"); + return $self->debug ? + $self->view_object->error($self, $error) : ERROR; } + } + if ( $self->debug and $status != OK and $status != DECLINED ) { + $self->view_object->error( $self, + "Got unexpected status $status from calling authentication" ); + } - return $status unless $status == OK; - - # We run additional_data for every request - $self->additional_data; + return $status unless $status == OK; - if ($applicable) { - eval { $self->model_class->process($self) }; - if ( my $error = $@ ) - { - $status = $self->call_exception($error, "model"); - if ( $status != OK ) - { - warn "caught model error: $error"; - return $self->debug ? - $self->view_object->error($self, $error) : ERROR; - } - } - } else { - $self->__setup_plain_template; + # We run additional_data for every request + $self->additional_data; + + if ($applicable) { + eval { $self->model_class->process($self) }; + if ( my $error = $@ ) { + $status = $self->call_exception($error, "model"); + if ( $status != OK ) { + $self->warn("caught model error: $error"); + return $self->debug ? + $self->view_object->error($self, $error) : ERROR; + } } + } else { + $self->__setup_plain_template; + } - # less frequent path - perhaps output has been set to an error message - return OK if $self->output; - - # normal path - no output has been generated yet - my $processed_view_ok = $self->__call_process_view; + # less frequent path - perhaps output has been set to an error message + return OK if $self->output; - $self->{content_type} ||= $self->__get_mime_type(); - $self->{document_encoding} ||= "utf-8"; + # normal path - no output has been generated yet + my $processed_view_ok = $self->__call_process_view; + $self->{content_type} ||= $self->__get_mime_type(); + $self->{document_encoding} ||= "utf-8"; - return $processed_view_ok; + return $processed_view_ok; } my %filetypes = ( @@ -629,8 +622,8 @@ sub __load_request_model if ( eval {$mclass->isa('Maypole::Model::Base')} ) { $self->model_class( $mclass ); } - elsif ($self->debug) { - warn "***Warning: No $mclass class appropriate for model. @_"; + elsif ($self->debug > 1) { + $self->warn("***Warning: No $mclass class appropriate for model. @_"); } } @@ -644,12 +637,14 @@ sub __setup_plain_template # It's just a plain template $self->model_class(undef); - - my $path = $self->path; - $path =~ s{/$}{}; # De-absolutify - $self->path($path); - - $self->template($self->path); + + unless ($self->template) { + # FIXME: this is likely to be redundant and is definately causing problems. + my $path = $self->path; + $path =~ s{/$}{}; # De-absolutify + $self->path($path); + $self->template($self->path); + } } # The model has been processed or skipped (if is_applicable returned false), @@ -692,8 +687,11 @@ sub warn { } $r->build_form_elements(0); -Specify whether to build HTML form elements and populate -the cgi element of classmetadata. +Specify (in an action) whether to build HTML form elements and populate +the cgi element of classmetadata in the view. + +You can set this globally using the accessor of the same name in Maypole::Config, +this method allows you to over-ride that setting per action. =cut @@ -985,7 +983,11 @@ sub parse_path # conditionally, broke lots of tests, hence this: $self->$_(undef) for qw/action table args/; $self->preprocess_path; - $self->path || $self->path('frontpage'); + + # use frontpage template for frontpage + unless ($self->path && $self->path ne '/') { + $self->path('frontpage'); + } my @pi = grep {length} split '/', $self->path; @@ -1331,13 +1333,13 @@ sub redirect_request { die "redirect_request is a virtual method. Do not use Maypole directly; use Apache::MVC or similar"; } -=item redirect_internal_request - -=cut - -sub redirect_internal_request { - -} +# =item redirect_internal_request +# +# =cut +# +# sub redirect_internal_request { +# +# } =item make_random_id