Revision bc9d2f36
Von Moritz Bunkus vor mehr als 13 Jahren hinzugefügt
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 |
|
Auch abrufbar als: Unified diff
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.