use parent qw(Rose::Object);
-use Clone qw(clone);
use SL::File::Backend;
use SL::File::Object;
use SL::DB::History;
+use SL::DB::ShopImage;
use SL::DB::File;
use SL::Helper::UserPreferences;
+use SL::Controller::Helper::ThumbnailCreator qw(file_probe_type);
use SL::JSON;
use constant RENAME_OK => 0;
object_id => $params{object_id},
object_type => $params{object_type}
);
- push @query, (file_name => $params{file_name}) if $params{file_name};
- push @query, (file_type => $params{file_type}) if $params{file_type};
- push @query, (mime_type => $params{mime_type}) if $params{mime_type};
- push @query, (source => $params{source}) if $params{source};
+ push @query, (file_name => $params{file_name}) if $params{file_name};
+ push @query, (file_type => $params{file_type}) if $params{file_type};
+ push @query, (mime_type => $params{mime_type}) if $params{mime_type};
+ push @query, (source => $params{source}) if $params{source};
+ push @query, (print_variant => $params{print_variant}) if $params{print_variant};
my $sortby = $params{sort_by} || 'itime DESC,file_name ASC';
foreach my $fileobj (@fileobjs) {
$main::lxdebug->message(LXDebug->DEBUG2(), "obj=" . $fileobj . " id=" . $fileobj->id." versions=".$fileobj->version_count);
my $maxversion = $fileobj->version_count;
+ $fileobj->version($maxversion);
push @versionobjs, $fileobj;
if ($maxversion > 1) {
for my $version (2..$maxversion) {
$main::lxdebug->message(LXDebug->DEBUG2(), "clone for version=".($maxversion-$version+1));
eval {
- my $clone = clone($fileobj);
+ my $clone = $fileobj->clone;
$clone->version($maxversion-$version+1);
$clone->newest(0);
$main::lxdebug->message(LXDebug->DEBUG2(), "clone version=".$clone->version." mtime=". $clone->mtime);
push @versionobjs, $clone;
1;
- }
+ } or do {$::lxdebug->message(LXDebug::WARN(), "clone for version=".($maxversion-$version+1) . "failed: " . $@)};
}
}
}
object_id => $params{object_id},
object_type => $params{object_type}
);
- push @query, (file_name => $params{file_name}) if $params{file_name};
- push @query, (file_type => $params{file_type}) if $params{file_type};
- push @query, (mime_type => $params{mime_type}) if $params{mime_type};
- push @query, (source => $params{source}) if $params{source};
+ push @query, (file_name => $params{file_name}) if $params{file_name};
+ push @query, (file_type => $params{file_type}) if $params{file_type};
+ push @query, (mime_type => $params{mime_type}) if $params{mime_type};
+ push @query, (source => $params{source}) if $params{source};
+ push @query, (print_variant => $params{print_variant}) if $params{print_variant};
my $cnt = SL::DB::Manager::File->get_all_count(query => [@query]);
return $cnt;
sub delete {
my ($self, %params) = @_;
- die "no id or dbfile" unless $params{id} || $params{dbfile};
- my $rc = SL::DB->client->with_transaction(\&_delete, $self, %params);
- if (!$rc) {
- my $err = SL::DB->client->error;
- die $err?(ref $err?$$err:$err):"unknown err";
- }
+ die "no id or dbfile in delete" unless $params{id} || $params{dbfile};
+ my $rc = 0;
+ eval {
+ $rc = SL::DB->client->with_transaction(\&_delete, $self, %params);
+ 1;
+ } or do { die $@ };
return $rc;
}
if ($hist) {
if (!$main::auth->assert('import_ar | import_ap', 1)) {
- die \'no permission to unimport';
+ die 'no permission to unimport';
}
my $file = $backend->get_filepath(dbfile => $params{dbfile});
$main::lxdebug->message(LXDebug->DEBUG2(), "del file=" . $file . " to=" . $hist->snumbers);
}
if ($backend->delete(%params)) {
my $do_delete = 0;
- if ( $params{last} || $params{all_but_notlast} ) {
- if ( $backend->get_version_count > 0 ) {
+ if ( $params{last} || $params{version} || $params{all_but_notlast} ) {
+ if ( $backend->get_version_count(%params) > 0 ) {
$params{dbfile}->mtime(DateTime->now_local);
$params{dbfile}->save;
} else {
sub save {
my ($self, %params) = @_;
- my $obj = SL::DB->client->with_transaction(\&_save, $self, %params);
- if (!$obj) {
- my $err = SL::DB->client->error;
- die (ref $err?$$err:$err);
- }
+ my $obj;
+ eval {
+ $obj = SL::DB->client->with_transaction(\&_save, $self, %params);
+ 1;
+ } or do { die $@ };
return $obj;
}
if ($params{id}) {
$file = SL::DB::File->new(id => $params{id})->load;
- die \'dbfile not exists' unless $file;
+ die 'dbfile not exists' unless $file;
} elsif (!$file) {
$main::lxdebug->message(LXDebug->DEBUG2(), "obj_id=" .$params{object_id});
- die \'no object type set' unless $params{object_type};
- die \'no object id set' unless defined($params{object_id});
+ die 'no object type set' unless $params{object_type};
+ die 'no object id set' unless defined($params{object_id});
$exists = $self->get_all_count(%params);
die 'filename still exist' if $exists && $params{fail_if_exists};
mime_type => $params{mime_type},
title => $params{title},
description => $params{description},
+ print_variant => $params{print_variant},
);
+ $file->itime($params{mtime}) if $params{mtime};
+ $params{itime} = $params{mtime} if $params{mtime};
}
} else {
$exists = 1;
# load itime for new file
$file->save->load;
}
- $main::lxdebug->message(LXDebug->DEBUG2(), "backend3=" .$file->backend);
+
+ $file->mtime(DateTime->now_local) unless $params{mtime};
+ $file->mtime($params{mtime} ) if $params{mtime};
+
my $backend = $self->_get_backend($file->backend);
$params{dbfile} = $file;
$backend->save(%params);
- $file->mtime(DateTime->now_local);
$file->save;
+ #ShopImage
+ if($file->object_type eq "shop_image"){
+ my $image_content = $params{file_contents};
+ my $thumbnail = file_probe_type($image_content);
+ my $shopimage = SL::DB::ShopImage->new();
+ $shopimage->assign_attributes(
+ file_id => $file->id,
+ thumbnail_content => $thumbnail->{thumbnail_img_content},
+ org_file_height => $thumbnail->{file_image_height},
+ org_file_width => $thumbnail->{file_image_width},
+ thumbnail_content_type => $thumbnail->{thumbnail_img_content_type},
+ object_id => $file->object_id,
+ );
+ $shopimage->save;
+ }
if ($params{file_type} eq 'document' && $params{source} ne 'created') {
SL::DB::History->new(
addition => 'IMPORT',
return unless $params{file_type};
my $file = SL::DB::File->new;
$file->file_type($params{file_type});
- my $backend = $self->_get_backend(dbfile => $file->backend);
+ my $backend = $self->_get_backend($self->_get_backend_by_file_type($file));
return unless $backend;
$backend->sync_from_backend(%params);
}
my ($self, $backend_name) = @_;
my $class = 'SL::File::Backend::' . $backend_name;
my $obj = undef;
+ die $::locale->text('no backend enabled') if $backend_name eq 'None';
eval {
eval "require $class";
$obj = $class->new;
- die \'backend not enabled' unless $obj->enabled;
+ die $::locale->text('backend "#1" not enabled',$backend_name) unless $obj->enabled;
1;
} or do {
- die \'backend class not found';
+ if ( $obj ) {
+ die $@;
+ } else {
+ die $::locale->text('backend "#1" not found',$backend_name);
+ }
};
return $obj;
}
object_id => $self->object_id,
object_type => $self->object_type,
mime_type => 'application/pdf',
- file_type => 'documents',
+ file_type => 'document',
file_contents => 'this is no pdf');
my $file1 = SL::File->get(id => $id);
SL::File->rename(id => $id,to => $newname);
my $files1 = SL::File->get_all(object_id => $object_id,
object_type => $object_type,
- file_type => 'images', # may be optional
+ file_type => 'image', # may be optional
source => 'uploaded' # may be optional
);
=over 2
-=item - documents,
+=item - document,
which can be generated files (for sales), scanned files or uploaded files (for purchase) for an ERP-object.
They can exist in different versions. The versioning is handled implicit. All versions of a file may be
deleted by the user if she/he is allowed to do this.
-=item - attachments,
+=item - attachment,
which have additional information for an ERP-objects. They are uploadable. If a filename still exists
on a ERP-Object the new uploaded file is a new version of this or it must be renamed by user.
combinide/merged with the document-file in the time of printing.
Today only PDF-Attachmnets can be merged with the generated document-PDF.
-=item - images,
+=item - image,
they are like attachments, but they may be have thumbnails for displaying.
So the must have an image format like png,jpg. The versioning is like attachments
=item C<file_type>
-The type may be "documents", "attachments" or "images" for a new file.
+The type may be "document", "attachment" or "image" for a new file.
=item C<source>
=item C<file_type>
-The type may be "documents", "attachments" or "images". This parameter is optional.
+The type may be "document", "attachment" or "image". This parameter is optional.
=item C<file_name>