Bug 20081: Set inline headers for uploaded pdfs
authorNick Clemens <nick@bywatersolutions.com>
Tue, 23 Jan 2018 20:21:57 +0000 (20:21 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 26 Mar 2018 20:31:17 +0000 (17:31 -0300)
To test:
1 - Edit a framework and add the 'upload/pl' plugin to the 856 field
2 - Attach a pdf to one record
3 - Attach a different type of file to another
(To attach, edit a record in the framework edited above and find the
 helper by the 856 field)
4 - Click the links on the record
5 - Verify the pdf opens inline
6 - Verify the other file does not
7 - prove t/db_dependent/Upload.t

Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/UploadedFile.pm
t/db_dependent/Upload.t

index 1e62ab6..9df1178 100644 (file)
@@ -134,10 +134,17 @@ Will be extended by report 14282
 
 sub httpheaders {
     my ( $self ) = @_;
-    return (
-        '-type'       => 'application/octet-stream',
-        '-attachment' => $self->filename,
-    );
+    if( $self->filename =~ /\.pdf$/ ) {
+        return (
+            '-type'       => 'application/pdf',
+            'Content-Disposition' => 'inline; filename='.$self->filename,
+        );
+    } else {
+        return (
+            '-type'       => 'application/octet-stream',
+            '-attachment' => $self->filename,
+        );
+    }
 }
 
 =head2 CLASS METHODS
index 41b3fff..3637244 100644 (file)
@@ -2,7 +2,7 @@
 
 use Modern::Perl;
 use File::Temp qw/ tempdir /;
-use Test::More tests => 12;
+use Test::More tests => 13;
 use Test::Warn;
 
 use Test::MockModule;
@@ -316,6 +316,17 @@ subtest 'Testing delete_temporary' => sub {
         'Still 3 permanent uploads' );
 };
 
+subtest 'Testing download headers' => sub {
+    plan tests => 2;
+    my $test_pdf = Koha::UploadedFile->new({ filename => 'pdf.pdf', uploadcategorycode => 'B', filesize => 1000 });
+    my $test_not = Koha::UploadedFile->new({ filename => 'pdf.not', uploadcategorycode => 'B', filesize => 1000 });
+    my @pdf_expect = ( '-type'=>'application/pdf','Content-Disposition'=>'inline; filename=pdf.pdf' );
+    my @not_expect = ( '-type'=>'application/octet-stream','-attachment'=>'pdf.not' );
+    my @pdf_head = $test_pdf->httpheaders;
+    my @not_head = $test_not->httpheaders;
+    is_deeply(\@pdf_head, \@pdf_expect,"Get inline pdf headers for pdf");
+    is_deeply(\@not_head, \@not_expect,"Get download headers for non pdf");
+};
 # The end
 $schema->storage->txn_rollback;