Bug 20892: Correct basketgroup link in histsearch.pl
[koha.git] / Koha / UploadedFile.pm
bloba8eb8a3df365581c9ff844ad29f9533d979248dc
1 package Koha::UploadedFile;
3 # Copyright Rijksmuseum 2016
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
10 # version.
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 use Modern::Perl;
21 use File::Spec;
23 use parent qw(Koha::Object);
25 =head1 NAME
27 Koha::UploadedFile - Koha::Object class for single uploaded file
29 =head1 SYNOPSIS
31 use Koha::UploadedFile;
33 # store record in uploaded_files
34 my $upload = Koha::UploadedFile->new({ [columns and values] });
36 # get a file handle on an uploaded_file
37 my $fh = $upload->file_handle;
39 # get full path
40 my $path = $upload->full_path;
42 # delete uploaded file
43 $upload->delete;
45 =head1 DESCRIPTION
47 Allows regular CRUD operations on uploaded_files via Koha::Object / DBIx.
49 The delete method also takes care of deleting files. The full_path method
50 returns a fully qualified path for an upload.
52 Additional methods include: file_handle, httpheaders.
54 =head1 METHODS
56 =head2 INSTANCE METHODS
58 =head3 delete
60 Delete uploaded file.
61 It deletes not only the record, but also the actual file (unless you pass
62 the keep_file parameter).
64 Returns number of deleted records (1 or 0E0), or -1 for unknown.
65 Please keep in mind that a deleted record does not automatically imply a
66 deleted file; a warning may have been raised.
67 (TODO: Use exceptions.)
69 =cut
71 sub delete {
72 my ( $self, $params ) = @_;
74 my $name = $self->filename;
75 my $file = $self->full_path;
77 my $retval = $self->SUPER::delete;
78 if( !defined($retval) ) { # undef is Unknown (-1)
79 $retval = -1;
80 } elsif( $retval eq '0' ) { # 0 => 0E0
81 $retval = "0E0";
82 } elsif( $retval !~ /^(0E0|1)$/ ) { # Unknown too
83 $retval = -1;
85 return $retval if $params->{keep_file};
87 if( ! -e $file ) {
88 warn "Removing record for $name within category ".
89 $self->uploadcategorycode. ", but file was missing.";
90 } elsif( ! unlink($file) ) {
91 warn "Problem while deleting: $file";
93 return $retval;
96 =head3 full_path
98 Returns the fully qualified path name for an uploaded file.
100 =cut
102 sub full_path {
103 my ( $self ) = @_;
104 my $path = File::Spec->catfile(
105 $self->permanent?
106 $self->permanent_directory: $self->temporary_directory,
107 $self->dir,
108 $self->hashvalue. '_'. $self->filename,
110 return $path;
113 =head3 file_handle
115 Returns a file handle for an uploaded file.
117 =cut
119 sub file_handle {
120 my ( $self ) = @_;
121 $self->{_file_handle} = IO::File->new( $self->full_path, "r" );
122 return if !$self->{_file_handle};
123 $self->{_file_handle}->binmode;
124 return $self->{_file_handle};
127 =head3 httpheaders
129 httpheaders returns http headers for a retrievable upload.
131 Will be extended by report 14282
133 =cut
135 sub httpheaders {
136 my ( $self ) = @_;
137 if( $self->filename =~ /\.pdf$/ ) {
138 return (
139 '-type' => 'application/pdf',
140 'Content-Disposition' => 'inline; filename='.$self->filename,
142 } else {
143 return (
144 '-type' => 'application/octet-stream',
145 '-attachment' => $self->filename,
150 =head2 CLASS METHODS
152 =head3 permanent_directory
154 Returns root directory for permanent storage
156 =cut
158 sub permanent_directory {
159 my ( $class ) = @_;
160 return C4::Context->config('upload_path');
163 =head3 tmp_directory
165 Returns root directory for temporary storage
167 =cut
169 sub temporary_directory {
170 my ( $class ) = @_;
171 return C4::Context->config('tmp_path') || File::Spec->tmpdir;
174 =head3 _type
176 Returns name of corresponding DBIC resultset
178 =cut
180 sub _type {
181 return 'UploadedFile';
184 =head1 AUTHOR
186 Marcel de Rooy (Rijksmuseum)
188 Koha Development Team
190 =cut