+
+ return ($path, $number);
+}
+
+sub copy_file_to_webdav_folder {
+ $::lxdebug->enter_sub();
+
+ my ($form) = @_;
+ my ($last_mod_time, $latest_file_name, $complete_path);
+
+ # checks
+ foreach my $item (qw(tmpdir tmpfile type)){
+ next if $form->{$item};
+ $::lxdebug->message(LXDebug::WARN(), 'Missing parameter:' . $item);
+ $::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->message(LXDebug::WARN(), 'Cannot check correct WebDAV folder');
+ $::lxdebug->leave_sub();
+ return $::locale->text("Cannot check correct WebDAV folder")
+ }
+
+ $complete_path = File::Spec->catfile($form->{cwd}, $webdav_folder);
+
+ # maybe the path does not exist (automatic printing), see #2446
+ if (!-d $complete_path) {
+ # we need a chdir and restore old dir
+ my $current_dir = POSIX::getcwd();
+ chdir("$form->{cwd}");
+ mkdir_with_parents($webdav_folder);
+ chdir($current_dir);
+ }
+
+ 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 ) ) ) {
+ my $path = File::Spec->catfile( $complete_path, $file );
+ next if -d $path; # skip directories, or anything else you like
+ ( $newest_name, $newest_time ) = ( $file, -M _ ) if( ! defined $newest_time or -M $path < $newest_time );
+ }
+
+ closedir $dh;
+
+ $latest_file_name = File::Spec->catfile($complete_path, $newest_name);
+ my $filesize = stat($latest_file_name)->size;
+
+ my $current_file = File::Spec->catfile($form->{tmpdir}, apply { s:.*/:: } $form->{tmpfile});
+ my $current_filesize = -f $current_file ? stat($current_file)->size : 0;
+
+ if ($current_filesize == $filesize) {
+ $::lxdebug->leave_sub();
+ return;
+ }
+
+ $form->{attachment_filename} ||= $form->generate_attachment_filename;
+
+ my $timestamp = get_current_formatted_time();
+ my $new_file = File::Spec->catfile($form->{cwd}, $webdav_folder, $form->{attachment_filename});
+ $new_file =~ s{(.*)\.}{$1$timestamp\.};
+
+ if (!File::Copy::copy($current_file, $new_file)) {
+ $::lxdebug->message(LXDebug::WARN(), "Copy file from $current_file to $new_file failed: $ERRNO");
+ $::lxdebug->leave_sub();
+ return $::locale->text("Copy file from #1 to #2 failed: #3", $current_file, $new_file, $ERRNO);
+ }
+
+ return;
+ $::lxdebug->leave_sub();
+}
+
+sub get_current_formatted_time {
+ return POSIX::strftime('_%Y%m%d_%H%M%S', localtime());