From: Bernd Bleßmann Date: Fri, 22 Nov 2019 21:41:18 +0000 (+0100) Subject: WebDav: Fehler beim Kopieren anzeigen / Verzeichnis zurück wechseln X-Git-Tag: release-3.5.6.1~427 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=108753a78b203dbe0ccbe6438cc16c8df33c04d3;p=kivitendo-erp.git WebDav: Fehler beim Kopieren anzeigen / Verzeichnis zurück wechseln Wenn in SL::Form->parse_template bei Common::copy_file_to_webdav_folder etwas schief ging, wurde dort ein "die" oder "Form->error" aufgerufen. Allderdings wird in parse_template vorher das Arbeitsverzeichnis gewechselt, so dass die web-templates zum Anzeigen des Fehlers nicht mehr gefunden werden. Dies ist nur ein schlechter Fix. In #96 (redmine) sind einige bessere Lösungen erwähnt, die aber etwas mehr Aufwand und vor allem Testen verlangen. Bezieht sich auch auf #96 (redmine) Refs #96 --- diff --git a/SL/Common.pm b/SL/Common.pm index b70378e66..193476c54 100644 --- a/SL/Common.pm +++ b/SL/Common.pm @@ -539,16 +539,16 @@ sub copy_file_to_webdav_folder { foreach my $item (qw(tmpdir tmpfile type)){ next if $form->{$item}; $::lxdebug->message(LXDebug::WARN(), 'Missing parameter:' . $item); - $::form->error($::locale->text("Missing parameter for WebDAV file copy")); + $::lxdebug->leave_sub(); + return $::locale->text("Missing parameter for WebDAV file copy"); } my ($webdav_folder, $document_name) = get_webdav_folder($form); if (! $webdav_folder){ - $::lxdebug->leave_sub(); $::lxdebug->message(LXDebug::WARN(), 'Cannot check correct WebDAV folder'); - $::form->error($::locale->text("Cannot check correct WebDAV folder")); - return undef; + $::lxdebug->leave_sub(); + return $::locale->text("Cannot check correct WebDAV folder") } $complete_path = File::Spec->catfile($form->{cwd}, $webdav_folder); @@ -562,7 +562,11 @@ sub copy_file_to_webdav_folder { chdir($current_dir); } - opendir my $dh, $complete_path or die "Could not open $complete_path: $!"; + my $dh; + if (!opendir $dh, $complete_path) { + $::lxdebug->leave_sub(); + return "Could not open $complete_path: $!"; + } my ($newest_name, $newest_time); while ( defined( my $file = readdir( $dh ) ) ) { @@ -590,7 +594,8 @@ sub copy_file_to_webdav_folder { if (!File::Copy::copy($current_file, $new_file)) { $::lxdebug->message(LXDebug::WARN(), "Copy file from $current_file to $new_file failed: $ERRNO"); - $::form->error($::locale->text("Copy file from #1 to #2 failed: #3", $current_file, $new_file, $ERRNO)); + $::lxdebug->leave_sub(); + return $::locale->text("Copy file from #1 to #2 failed: #3", $current_file, $new_file, $ERRNO); } $::lxdebug->leave_sub(); diff --git a/SL/Form.pm b/SL/Form.pm index 51483e631..e815fec12 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -1035,7 +1035,13 @@ sub parse_template { } if ($self->{media} eq 'file') { copy(join('/', $self->{cwd}, $userspath, $self->{tmpfile}), $out =~ m|^/| ? $out : join('/', $self->{cwd}, $out)) if $template->uses_temp_file; - Common::copy_file_to_webdav_folder($self) if $copy_to_webdav; + + if ($copy_to_webdav) { + my $error = Common::copy_file_to_webdav_folder($self); + chdir("$self->{cwd}"); + $self->error($error) if $error; + } + if (!$self->{preview} && $self->doc_storage_enabled) { $self->{attachment_filename} ||= $self->generate_attachment_filename; @@ -1049,7 +1055,11 @@ sub parse_template { return; } - Common::copy_file_to_webdav_folder($self) if $copy_to_webdav; + if ($copy_to_webdav) { + my $error = Common::copy_file_to_webdav_folder($self); + chdir("$self->{cwd}"); + $self->error($error) if $error; + } if ( !$self->{preview} && $ext_for_format eq 'pdf' && $self->doc_storage_enabled) { $self->{attachment_filename} ||= $self->generate_attachment_filename;