From: Moritz Bunkus Date: Fri, 17 Jun 2011 13:12:43 +0000 (+0200) Subject: flash_later durch Auto-Restore von 'FLASH' von Session nach $::form gefixt X-Git-Tag: release-2.7.0beta1~381 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=bc9d2f36944158fedf0e4229fb3b4f241933f60e;p=kivitendo-erp.git flash_later durch Auto-Restore von 'FLASH' von Session nach $::form gefixt Bug wurde in c90b4dcd implementiert. Hintergrund: c90b4dcd sollte ermöglichen, dass Werte in der Session gespeichert werden, die aber nicht automatisch nach $::form zurück kopiert werden. Das wird nun fürs Speichern der Form in der Session benutzt (Stichwort: previousform/callback). Es war aber seitdem nicht möglich, einer zu speichernden komplexen Datenstruktur zu sagen, dass sie doch automatisch nach $::form zurück kopiert werden soll. Der Flash ist ein solcher Fall, genauer: der einzige, bei dem passieren soll. Also das Interface von $::auth->set_session_value so erweitert, dass der auto_restore-Parameter gesetzt werden kann, und Flash so geändert, dass flash_later dieses nun auch tut. --- diff --git a/SL/Auth.pm b/SL/Auth.pm index 9398f557b..b1e4b25e9 100644 --- a/SL/Auth.pm +++ b/SL/Auth.pm @@ -673,12 +673,23 @@ sub set_session_value { $main::lxdebug->enter_sub(); my $self = shift; - my %params = @_; + my @params = @_; $self->{SESSION} ||= { }; - while (my ($key, $value) = each %params) { - $self->{SESSION}->{ $key } = YAML::Dump(ref($value) eq 'HASH' ? { data => $value } : $value); + while (@params) { + my $key = shift @params; + + if (ref $key eq 'HASH') { + my $value = { data => $key->{value}, + auto_restore => $key->{auto_restore}, + }; + $self->{SESSION}->{ $key->{key} } = YAML::Dump($value); + + } else { + my $value = shift @params; + $self->{SESSION}->{ $key } = YAML::Dump(ref($value) eq 'HASH' ? { data => $value } : $value); + } } $main::lxdebug->leave_sub(); @@ -1186,11 +1197,30 @@ SL::Auth - Authentication and session handling =over 4 +=item C =item C -Store all key/value pairs in C<%values> in the session. All of these -values are copied back into C<$::form> in the next request -automatically. +Store all values of C<@values> or C<%values> in the session. Each +member of C<@values> is tested if it is a hash reference. If it is +then it must contain the keys C and C and can optionally +contain the key C. In this case C is associated +with C and restored to C<$::form> upon the next request +automatically if C is trueish or if C is a scalar +value. + +If the current member of C<@values> is not a hash reference then it +will be used as the C and the next entry of C<@values> is used as +the C to store. In this case setting C is not +possible. + +Therefore the following two invocations are identical: + + $::auth-Eset_session_value(name =E "Charlie"); + $::auth-Eset_session_value({ key =E "name", value =E "Charlie" }); + +All of these values are copied back into C<$::form> for the next +request automatically if they're scalar values or if they have +C set to trueish. The values can be any Perl structure. They are stored as YAML dumps. diff --git a/SL/Helper/Flash.pm b/SL/Helper/Flash.pm index 876de9644..78a94e34f 100644 --- a/SL/Helper/Flash.pm +++ b/SL/Helper/Flash.pm @@ -16,7 +16,7 @@ sub flash { } sub flash_later { - $::auth->set_session_value(FLASH => _store_flash($::auth->get_session_value('FLASH'), @_)); + $::auth->set_session_value({ key => "FLASH", value => _store_flash($::auth->get_session_value('FLASH'), @_), auto_restore => 1 }); } sub render_flash {