Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision bc9d2f36

Von Moritz Bunkus vor mehr als 13 Jahren hinzugefügt

  • ID bc9d2f36944158fedf0e4229fb3b4f241933f60e
  • Vorgänger a609123f
  • Nachfolger 508801bb

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.

Unterschiede anzeigen:

SL/Auth.pm
673 673
  $main::lxdebug->enter_sub();
674 674

  
675 675
  my $self   = shift;
676
  my %params = @_;
676
  my @params = @_;
677 677

  
678 678
  $self->{SESSION} ||= { };
679 679

  
680
  while (my ($key, $value) = each %params) {
681
    $self->{SESSION}->{ $key } = YAML::Dump(ref($value) eq 'HASH' ? { data => $value } : $value);
680
  while (@params) {
681
    my $key = shift @params;
682

  
683
    if (ref $key eq 'HASH') {
684
      my $value = { data         => $key->{value},
685
                    auto_restore => $key->{auto_restore},
686
                  };
687
      $self->{SESSION}->{ $key->{key} } = YAML::Dump($value);
688

  
689
    } else {
690
      my $value = shift @params;
691
      $self->{SESSION}->{ $key } = YAML::Dump(ref($value) eq 'HASH' ? { data => $value } : $value);
692
    }
682 693
  }
683 694

  
684 695
  $main::lxdebug->leave_sub();
......
1186 1197

  
1187 1198
=over 4
1188 1199

  
1200
=item C<set_session_value @values>
1189 1201
=item C<set_session_value %values>
1190 1202

  
1191
Store all key/value pairs in C<%values> in the session. All of these
1192
values are copied back into C<$::form> in the next request
1193
automatically.
1203
Store all values of C<@values> or C<%values> in the session. Each
1204
member of C<@values> is tested if it is a hash reference. If it is
1205
then it must contain the keys C<key> and C<value> and can optionally
1206
contain the key C<auto_restore>. In this case C<value> is associated
1207
with C<key> and restored to C<$::form> upon the next request
1208
automatically if C<auto_restore> is trueish or if C<value> is a scalar
1209
value.
1210

  
1211
If the current member of C<@values> is not a hash reference then it
1212
will be used as the C<key> and the next entry of C<@values> is used as
1213
the C<value> to store. In this case setting C<auto_restore> is not
1214
possible.
1215

  
1216
Therefore the following two invocations are identical:
1217

  
1218
  $::auth-E<gt>set_session_value(name =E<gt> "Charlie");
1219
  $::auth-E<gt>set_session_value({ key =E<gt> "name", value =E<gt> "Charlie" });
1220

  
1221
All of these values are copied back into C<$::form> for the next
1222
request automatically if they're scalar values or if they have
1223
C<auto_restore> set to trueish.
1194 1224

  
1195 1225
The values can be any Perl structure. They are stored as YAML dumps.
1196 1226

  
SL/Helper/Flash.pm
16 16
}
17 17

  
18 18
sub flash_later {
19
  $::auth->set_session_value(FLASH => _store_flash($::auth->get_session_value('FLASH'), @_));
19
  $::auth->set_session_value({ key => "FLASH", value => _store_flash($::auth->get_session_value('FLASH'), @_), auto_restore => 1 });
20 20
}
21 21

  
22 22
sub render_flash {

Auch abrufbar als: Unified diff