X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FOutput.pm;h=324cf6993c06eaed88a7c7ce05eed99817788dfd;hb=9d3e8487b19c409b159c924c9005ece23e8f1b7d;hp=63acf1453e01949b5d5976d0215ec05b5d3c585e;hpb=9c0b2e408b496b999cdbede92e651f3aef588209;p=koha_fer diff --git a/C4/Output.pm b/C4/Output.pm index 63acf1453e..324cf6993c 100644 --- a/C4/Output.pm +++ b/C4/Output.pm @@ -255,7 +255,7 @@ sub pagination_bar { =item output_with_http_headers - &output_with_http_headers($query, $cookie, $data, $content_type[, $status]) + &output_with_http_headers($query, $cookie, $data, $content_type[, $status[, $extra_options]]) Outputs $data with the appropriate HTTP headers, the authentication cookie $cookie and a Content-Type specified in @@ -267,12 +267,18 @@ $content_type is one of the following: 'html', 'js', 'json', 'xml', 'rss', or 'a $status is an HTTP status message, like '403 Authentication Required'. It defaults to '200 OK'. +$extra_options is hashref. If the key 'force_no_caching' is present and has +a true value, the HTTP headers include directives to force there to be no +caching whatsoever. + =cut sub output_with_http_headers { - my ( $query, $cookie, $data, $content_type, $status ) = @_; + my ( $query, $cookie, $data, $content_type, $status, $extra_options ) = @_; $status ||= '200 OK'; + $extra_options //= {}; + my %content_type_map = ( 'html' => 'text/html', 'js' => 'text/javascript', @@ -285,27 +291,35 @@ sub output_with_http_headers { ); die "Unknown content type '$content_type'" if ( !defined( $content_type_map{$content_type} ) ); + my $cache_policy = 'no-cache'; + $cache_policy .= ', no-store, max-age=0' if $extra_options->{force_no_caching}; my $options = { type => $content_type_map{$content_type}, status => $status, charset => 'UTF-8', Pragma => 'no-cache', - 'Cache-Control' => 'no-cache', + 'Cache-Control' => $cache_policy, }; + $options->{expires} = 'now' if $extra_options->{force_no_caching}; + $options->{cookie} = $cookie if $cookie; if ($content_type eq 'html') { # guaranteed to be one of the content_type_map keys, else we'd have died $options->{'Content-Style-Type' } = 'text/css'; $options->{'Content-Script-Type'} = 'text/javascript'; } +# We can't encode here, that will double encode our templates, and xslt +# We need to fix the encoding as it comes out of the database, or when we pass the variables to templates + +# utf8::encode($data) if utf8::is_utf8($data); + $data =~ s/\&\;amp\; /\&\; /g; - utf8::encode($data); print $query->header($options), $data; } sub output_html_with_http_headers { - my ( $query, $cookie, $data, $status ) = @_; - output_with_http_headers( $query, $cookie, $data, 'html', $status ); + my ( $query, $cookie, $data, $status, $extra_options ) = @_; + output_with_http_headers( $query, $cookie, $data, 'html', $status, $extra_options ); }