X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWebdav%2FFile.pm;h=313c9ff31ed119a8287a196d03c1d7b631a77de5;hb=841762994976f7cdbdf1ab5c4bdcbf9daf8230e1;hp=8ad78838c639292c6e48be3d23b420c2a422190e;hpb=dc6d82312f264df3d2bf482836ff4fd2bfe3a462;p=kivitendo-erp.git diff --git a/SL/Webdav/File.pm b/SL/Webdav/File.pm index 8ad78838c..313c9ff31 100644 --- a/SL/Webdav/File.pm +++ b/SL/Webdav/File.pm @@ -4,6 +4,8 @@ use strict; use parent qw(Rose::Object); use File::Spec; +use File::Copy (); +use Carp; use Rose::Object::MakeMethods::Generic ( scalar => [ qw(webdav filename loaded) ], @@ -36,14 +38,19 @@ sub load { sub store { my ($self, %params) = @_; + croak 'Invalid call. Only data or file can be set' if ($params{data} && $params{file}); + $self->load unless $self->loaded; my $last = $self->latest_version; my $object; if (!$last) { + my ($basename, undef, $extension) = SL::Webdav::Object->new(filename => $self->filename, webdav => $self->webdav)->parse_filename; my $new_version = $self->webdav->version_scheme->first_version; - $object = SL::Webdav::Object->new(filename => $self->filename, webdav => $self->webdav); + my $sep = $self->webdav->version_scheme->separator; + my $new_filename = $basename . $sep . $new_version . "." . $extension; + $object = SL::Webdav::Object->new(filename => $new_filename, webdav => $self->webdav); $self->add_objects($object); } else { @@ -63,11 +70,18 @@ sub store { } } - open my $fh, '>:raw', $object->full_filedescriptor or die "could not open " . $object->filename . ": $!"; + if ($params{file}) { + croak 'No valid file' unless -f $params{file}; + File::Copy::copy($params{file}, $object->full_filedescriptor) or croak "Copy failed from $params{file} to @{[ $object->filename ]}: $!"; + } else { + + open my $fh, '>:raw', $object->full_filedescriptor or die "could not open " . $object->filename . ": $!"; + + $fh->print(${ $params{data} }); - $fh->print(${ $params{data} }); + close $fh; + } - close $fh; return $object; } @@ -98,6 +112,9 @@ SL::Webdav::File - Webdav file manipulation my $data = SL::Helper::CreatePDF->create_pdf(...); my $webdav_object = $webdav_file->store(data => \$data); + # use file instead of data + my $webdav_object = $webdav_file->store(file => $path_to_file); + # force new version my $webdav_object = $webdav_file->store(data => \$data, new_version => 1); @@ -126,8 +143,12 @@ Loads objects from disk. =item C -Store a new version on disk. C is expected to contain a reference to the -data to be written in raw encoding. +Store a new version on disk. If C is present, it is expected to contain a +reference to the data to be written in raw encoding. + +If C is a valid filename then it will be copied. + +C and C are exclusive. If param C is set, force a new version, even if the versioning scheme would keep the old one.