[Jifty-commit] r1920 - jifty/trunk/lib/Jifty
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sat Sep 2 20:39:24 EDT 2006
Author: nelhage
Date: Sat Sep 2 20:39:23 2006
New Revision: 1920
Modified:
jifty/trunk/lib/Jifty/Action.pm
jifty/trunk/lib/Jifty/Web.pm
Log:
Stickiness fix
Modified: jifty/trunk/lib/Jifty/Action.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Action.pm (original)
+++ jifty/trunk/lib/Jifty/Action.pm Sat Sep 2 20:39:23 2006
@@ -34,7 +34,7 @@
use base qw/Jifty::Object Class::Accessor::Fast Class::Data::Inheritable/;
-__PACKAGE__->mk_accessors(qw(moniker argument_values order result sticky_on_success sticky_on_failure));
+__PACKAGE__->mk_accessors(qw(moniker argument_values values_from_request order result sticky_on_success sticky_on_failure));
__PACKAGE__->mk_classdata(qw/PARAMS/);
=head1 COMMON METHODS
@@ -82,6 +82,15 @@
L<sticky|Jifty::Manual::Glossary/sticky> when the action succeeds. Defaults
to false.
+=begin private
+
+=item request_arguments
+
+A hashref of arguments passed in as part of the
+L<Jifty::Request>. Internal use only.
+
+=end private
+
=back
=cut
@@ -92,6 +101,7 @@
my %args = (
order => undef,
arguments => {},
+ request_arguments => {},
sticky_on_success => 0,
sticky_on_failure => 1,
current_user => undef,
@@ -110,7 +120,15 @@
$self->log->debug("Generating moniker auto-".Jifty->web->serial);
}
$self->order($args{'order'});
- $self->argument_values( { %{ $args{'arguments'} } } );
+
+ $self->argument_values( { %{ $args{'request_arguments' } }, %{ $args{'arguments'} } } );
+
+ # Keep track of whether arguments came from the request, or were
+ # programmatically set elsewhere
+ $self->values_from_request({});
+ $self->values_from_request->{$_} = 1 for keys %{ $args{'request_arguments' } };
+ $self->values_from_request->{$_} = 0 for keys %{ $args{'arguments' } };
+
$self->result(Jifty->web->response->result($self->moniker) || Jifty::Result->new);
$self->result->action_class(ref($self));
@@ -278,7 +296,10 @@
my $self = shift;
my $arg = shift;
- $self->argument_values->{$arg} = shift if @_;
+ if(@_) {
+ $self->values_from_request->{$arg} = 0;
+ $self->argument_values->{$arg} = shift;
+ }
return $self->argument_values->{$arg};
}
@@ -346,30 +367,41 @@
render_mode => 'update',
@_);
-
- my $arg_name = $args{'argument'}. '!!' .$args{'render_mode'};
+ my $field = $args{'argument'};
+
+ my $arg_name = $field. '!!' .$args{'render_mode'};
if ( not exists $self->{_private_form_fields_hash}{$arg_name} ) {
- my $field_info = $self->arguments->{$args{'argument'}};
+ my $field_info = $self->arguments->{$field};
my $sticky = 0;
- $sticky = 1 if $self->sticky_on_failure and (!Jifty->web->response->result($self->moniker) or $self->result->failure);
- $sticky = 1 if $self->sticky_on_success and (Jifty->web->response->result($self->moniker) and $self->result->success);
+ # Check stickiness iff the values came from the request
+ if($self->values_from_request->{$field} && Jifty->web->response->result($self->moniker)) {
+ $sticky = 1 if $self->sticky_on_failure and $self->result->failure;
+ $sticky = 1 if $self->sticky_on_success and $self->result->success;
+ }
# $sticky can be overrided per-parameter
$sticky = $field_info->{sticky} if defined $field_info->{sticky};
if ($field_info) {
# form_fields overrides stickiness of what the user last entered.
+ my $default_value;
+ $default_value = $field_info->{'default_value'}
+ if exists $field_info->{'default_value'};
+ $default_value = $self->argument_value($field)
+ if $self->has_argument($field) && !$self->values_from_request->{$field};
+
$self->{_private_form_fields_hash}{$arg_name}
= Jifty::Web::Form::Field->new(
%$field_info,
- action => $self,
- name => $args{'argument'},
- sticky => $sticky,
- sticky_value => $self->argument_value($args{'argument'}),
- render_mode => $args{'render_mode'},
+ action => $self,
+ name => $field,
+ sticky => $sticky,
+ sticky_value => $self->argument_value($field),
+ default_value => $default_value,
+ render_mode => $args{'render_mode'},
%args
);
Modified: jifty/trunk/lib/Jifty/Web.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Web.pm (original)
+++ jifty/trunk/lib/Jifty/Web.pm Sat Sep 2 20:39:23 2006
@@ -416,8 +416,6 @@
);
- my %arguments = %{ $args{arguments} };
-
if ( $args{'moniker'} ) {
my $action_in_request = $self->request->action( $args{moniker} );
@@ -425,7 +423,7 @@
# from the request; we read from the request to implement "sticky fields".
#
if ( $action_in_request and $action_in_request->arguments ) {
- %arguments = ( %{ $action_in_request->arguments }, %arguments );
+ $args{'request_arguments'} = $action_in_request->arguments;
}
}
@@ -447,7 +445,7 @@
my $action;
# XXX TODO bullet proof
- eval { $action = $class->new( %args, arguments => {%arguments} ); };
+ eval { $action = $class->new(%args) };
if ($@) {
my $err = $@;
$self->log->fatal($err);
More information about the Jifty-commit
mailing list