WebshopApi: falsche sql update Abhängigkeit
[kivitendo-erp.git] / SL / File.pm
index 31bebcf..677be67 100644 (file)
@@ -8,8 +8,10 @@ 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;
@@ -122,12 +124,12 @@ sub delete_all {
 
 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 (ref $err?$$err:$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;
 }
 
@@ -149,7 +151,7 @@ sub _delete {
 
     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);
@@ -179,11 +181,11 @@ sub _delete {
 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;
 }
 
@@ -194,11 +196,11 @@ sub _save {
 
   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};
@@ -240,6 +242,21 @@ sub _save {
 
   $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',
@@ -307,7 +324,7 @@ sub sync_from_backend {
   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);
 }
@@ -319,13 +336,18 @@ sub _get_backend {
   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;
 }