# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA 02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use strict;
+#use warnings; FIXME - Bug 2505
use C4::Context;
use C4::Auth qw/get_session/;
use IO::File;
use vars qw($VERSION);
-# set the version for version checking
-$VERSION = 3.00;
+BEGIN {
+ # set the version for version checking
+ $VERSION = 3.00;
+}
=head1 NAME
=head1 SYNOPSIS
-=over 4
-
-# create and store data
-my $uploaded_file = C4::UploadedFile->new($sessionID);
-my $fileID = $uploaded_file->id();
-$uploaded_file->name('c:\temp\file.mrc');
-$uploaded_file->max_size(1024);
-while ($have_more_data) {
+ # create and store data
+ my $uploaded_file = C4::UploadedFile->new($sessionID);
+ my $fileID = $uploaded_file->id();
+ $uploaded_file->name('c:\temp\file.mrc');
+ $uploaded_file->max_size(1024);
+ while ($have_more_data) {
$uploaded_file->stash($data, $bytes_read);
-}
-$uploaded_file->done();
+ }
+ $uploaded_file->done();
-# check status of current file upload
-my $progress = C4::UploadedFile->upload_progress($sessionID);
+ # check status of current file upload
+ my $progress = C4::UploadedFile->upload_progress($sessionID);
-# get file handle for reading uploaded file
-my $uploaded_file = C4::UploadedFile->fetch($fileID);
-my $fh = $uploaded_file->fh();
+ # get file handle for reading uploaded file
+ my $uploaded_file = C4::UploadedFile->fetch($fileID);
+ my $fh = $uploaded_file->fh();
-=back
Stores files uploaded by the user from their web browser. The
uploaded files are temporary and at present are not guaranteed
=head2 new
-=over 4
-
-my $uploaded_file = C4::UploadedFile->new($sessionID);
-
-=back
+ my $uploaded_file = C4::UploadedFile->new($sessionID);
Creates a new object to represent the uploaded file. Requires
the current session ID.
$fh->binmode(); # Windows compatibility
$self->{'fh'} = $fh;
$self->{'tmp_file_name'} = $tmp_file_name;
- my $session = get_session($sessionID);
- $session->param("$self->{'fileID'}.uploaded_tmpfile", $tmp_file_name);
- $session->param('current_upload', $self->{'fileID'});
- $session->flush();
- $self->{'session'} = $session;
- $self->{'name'} = '';
$self->{'max_size'} = 0;
$self->{'progress'} = 0;
+ $self->{'name'} = '';
bless $self, $class;
+ $self->_serialize();
+
+ my $session = get_session($sessionID);
+ $session->param('current_upload', $self->{'fileID'});
+ $session->flush();
return $self;
}
-=head2 id
+sub _serialize {
+ my $self = shift;
+
+ my $prefix = "upload_" . $self->{'fileID'};
+ my $session = get_session($self->{'sessionID'});
-=over 4
+ # temporarily take file handle out of structure
+ my $fh = $self->{'fh'};
+ delete $self->{'fh'};
+ $session->param($prefix, $self);
+ $session->flush();
+ $self->{'fh'} =$fh;
+}
-my $fileID = $uploaded_file->id();
+=head2 id
-=back
+ my $fileID = $uploaded_file->id();
=cut
=head2 name
-=over 4
-
-my $name = $uploaded_file->name();
-$uploaded_file->name($name);
-
-=back
+ my $name = $uploaded_file->name();
+ $uploaded_file->name($name);
Accessor method for the name by which the file is to be known.
my $self = shift;
if (@_) {
$self->{'name'} = shift;
- $self->{'session'}->param("$self->{'fileID'}.uploaded_filename", $self->{'name'});
- $self->{'session'}->flush();
+ $self->_serialize();
} else {
return $self->{'name'};
}
=head2 max_size
-=over 4
-
-my $max_size = $uploaded_file->max_size();
-$uploaded_file->max_size($max_size);
-
-=back
+ my $max_size = $uploaded_file->max_size();
+ $uploaded_file->max_size($max_size);
Accessor method for the maximum size of the uploaded file.
=head2 stash
-=over 4
-
-$uploaded_file->stash($dataref, $bytes_read);
-
-=back
+ $uploaded_file->stash($dataref, $bytes_read);
Write C<$dataref> to the temporary file. C<$bytes_read> represents
the number of bytes (out of C<$max_size>) transmitted so far.
my $percentage = int(($bytes_read / $self->{'max_size'}) * 100);
if ($percentage > $self->{'progress'}) {
$self->{'progress'} = $percentage;
- $self->{'session'}->param("$self->{'fileID'}.uploadprogress", $self->{'progress'});
- $self->{'session'}->flush();
+ $self->_serialize();
}
}
=head2 done
-=over 4
-
-$uploaded_file->done();
-
-=back
+ $uploaded_file->done();
Indicates that all of the bytes have been uploaded.
sub done {
my $self = shift;
- $self->{'session'}->param("$self->{'fileID'}.uploadprogress", 'done');
- $self->{'session'}->flush();
+ $self->{'progress'} = 'done';
$self->{'fh'}->close();
+ $self->_serialize();
}
=head2 upload_progress
-=over 4
-
-my $upload_progress = C4::UploadFile->upload_progress($sessionID);
-
-=back
+ my $upload_progress = C4::UploadFile->upload_progress($sessionID);
Returns (as an integer from 0 to 100) the percentage
progress of the current file upload.
my $reported_progress = 0;
if (defined $fileID and $fileID ne "") {
- my $progress = $session->param("$fileID.uploadprogress");
+ my $file = C4::UploadedFile->fetch($sessionID, $fileID);
+ my $progress = $file->{'progress'};
if (defined $progress) {
if ($progress eq "done") {
$reported_progress = 100;
=head2 fetch
-=over 4
-
- my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID);
-
-=back
+ my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID);
Retrieves an uploaded file object from the current session.
my $sessionID = shift;
my $fileID = shift;
- my $self = {};
-
- $self->{'sessionID'} = $sessionID;
- $self->{'fileID'} = $fileID;
my $session = get_session($sessionID);
- $self->{'session'} = $session;
- $self->{'tmp_file_name'} = $session->param("$self->{'fileID'}.uploaded_tmpfile");
- $self->{'name'} = $session->param("$self->{'fileID'}.uploaded_filename");
+ my $prefix = "upload_$fileID";
+ my $self = $session->param($prefix);
my $fh = new IO::File $self->{'tmp_file_name'}, "r";
$self->{'fh'} = $fh;
bless $self, $class;
-
return $self;
}
=head2 fh
-=over
-
-my $fh = $uploaded_file->fh();
-
-=back
+ my $fh = $uploaded_file->fh();
Returns an IO::File handle to read the uploaded file.
return $self->{'fh'};
}
+1;
+__END__
+
=head1 AUTHOR
-Koha Development Team <info@koha.org>
+Koha Development Team <http://koha-community.org/>
Galen Charlton <galen.charlton@liblime.com>