X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FRequest.pm;h=47f163ca91655b36cef40d76ab0693a6d7626728;hb=de7609414010f5dfa6c47091633a6319d0106c48;hp=860a0f0351ff8f4cfee0ffbc738dea581a424b24;hpb=e855756795da07e79807b8cf1a31cfea8d253d61;p=kivitendo-erp.git diff --git a/SL/Request.pm b/SL/Request.pm index 860a0f035..47f163ca9 100644 --- a/SL/Request.pm +++ b/SL/Request.pm @@ -41,6 +41,17 @@ sub init_type { return 'html'; } +sub cache { + my ($self, $topic, $default) = @_; + + $topic = '::' . (caller(0))[0] . "::$topic" unless $topic =~ m{^::}; + + $self->{_cache} //= {}; + $self->{_cache}->{$topic} //= ($default // {}); + + return $self->{_cache}->{$topic}; +} + sub _store_value { my ($target, $key, $value) = @_; my @tokens = split /((?:\[\+?\])?(?:\.)|(?:\[\+?\]))/, $key; @@ -126,7 +137,7 @@ sub _parse_multipart_formdata { $content_type = "text/plain"; $boundary_found = 1; $need_cr = 0; - $encoding = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; + $encoding = 'UTF-8'; $transfer_encoding = undef; last if $last_boundary; next; @@ -255,7 +266,6 @@ sub read_cgi_input { $::lxdebug->enter_sub; my ($target) = @_; - my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; # yes i know, copying all those values around isn't terribly efficient, but # the old version of dumping everything into form and then launching a @@ -284,9 +294,9 @@ sub read_cgi_input { } } - my $encoding = delete $temp_target->{INPUT_ENCODING} || $db_charset; + my $encoding = delete $temp_target->{INPUT_ENCODING} || 'UTF-8'; - _recode_recursively(SL::Iconv->new($encoding, $db_charset), $temp_target => $target) if keys %$target; + _recode_recursively(SL::Iconv->new($encoding, 'UTF-8'), $temp_target => $target) if keys %$target; if ($target->{RESTORE_FORM_FROM_SESSION_ID}) { my %temp_form; @@ -534,6 +544,21 @@ of L. Defaults to an isntance of L. For more information about layouts, see L. +=item C + +Caches an item for the duration of the request. C<$topic> must be an +index name referring to the thing to cache. It is used for retrieving +it later on. If C<$topic> doesn't start with C<::> then the caller's +package name is prepended to the topic. For example, if the a from +package C calls with topic = C then the +actual key will be C<::SL::StuffedStuff::get_stuff>. + +If no item exists in the cache for C<$topic> then it is created and +its initial value is set to C<$default>. If C<$default> is not given +(undefined) then a new, empty hash reference is created. + +Returns the cached item. + =back =head1 SPECIAL FUNCTIONS