X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FHelper%2FFlash.pm;h=77dda7846496f244050ecf50b5ec8a8fd4747bf7;hb=d58f0807a72e7a791cded47b057e5f20116ca13f;hp=8f68d00c78bbf5e673c193f653b627048ab95354;hpb=6b935d522a38e1a20802c25ed51a15e0cd292c1d;p=kivitendo-erp.git diff --git a/SL/Helper/Flash.pm b/SL/Helper/Flash.pm index 8f68d00c7..77dda7846 100644 --- a/SL/Helper/Flash.pm +++ b/SL/Helper/Flash.pm @@ -5,7 +5,12 @@ use strict; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(flash flash_later); -our @EXPORT_OK = qw(render_flash); +our @EXPORT_OK = qw(render_flash delay_flash); + +my %valid_categories = ( + map({$_ => 'info'} qw(information message)), + map({$_ => $_} qw(info error warning ok)), +); # # public functions @@ -16,7 +21,12 @@ sub flash { } sub flash_later { - $::auth->set_session_value(FLASH => _store_flash($::auth->get_session_value('FLASH'), @_))->save_session(); + $::auth->set_session_value({ key => "FLASH", value => _store_flash($::auth->get_session_value('FLASH'), @_), auto_restore => 1 }); +} + +sub delay_flash { + my $store = $::form->{FLASH} || { }; + flash_later($_ => @{ $store->{$_} || [] }) for keys %$store; } sub render_flash { @@ -29,16 +39,24 @@ sub render_flash { sub _store_flash { my $store = shift || { }; - my $category = shift; - $category = 'info' if $category eq 'information'; + my $category = _check_category(+shift); - $store ||= { }; $store->{ $category } ||= [ ]; push @{ $store->{ $category } }, @_; return $store; } +sub _check_category { + my ($c) = @_; + return $valid_categories{$c} + || do { + require Carp; + Carp->import; + croak("invalid category '$c' for flash"); + }; +} + 1; __END__ @@ -95,6 +113,13 @@ file. This function is not exported by default. +=item C + +Delays flash, as if all flash messages in this request would have been +C + +Not exported by default. + =back =head1 AUTHOR