Bugzilla – Attachment 188031 Details for
Bug 41020
Add ability to use file transports for marc ordering accounts
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 41020: Add ability to delete files to Koha::File::Transport and derived classes
Bug-41020-Add-ability-to-delete-files-to-KohaFileT.patch (text/plain), 5.58 KB, created by
Kyle M Hall (khall)
on 2025-10-16 19:25:57 UTC
(
hide
)
Description:
Bug 41020: Add ability to delete files to Koha::File::Transport and derived classes
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2025-10-16 19:25:57 UTC
Size:
5.58 KB
patch
obsolete
>From f167426ca3821ce2dae2c0db51f919602f27b780 Mon Sep 17 00:00:00 2001 >From: John Doe <you@example.com> >Date: Wed, 15 Oct 2025 18:06:47 +0000 >Subject: [PATCH] Bug 41020: Add ability to delete files to > Koha::File::Transport and derived classes > >--- > Koha/File/Transport.pm | 13 ++++++ > Koha/File/Transport/FTP.pm | 29 ++++++++++++++ > Koha/File/Transport/Local.pm | 57 +++++++++++++++++++++++++++ > Koha/File/Transport/SFTP.pm | 30 ++++++++++++++ > t/db_dependent/Koha/File/Transports.t | 4 +- > 5 files changed, 132 insertions(+), 1 deletion(-) > >diff --git a/Koha/File/Transport.pm b/Koha/File/Transport.pm >index 8f5e7d61a75..495c8d8ec0f 100644 >--- a/Koha/File/Transport.pm >+++ b/Koha/File/Transport.pm >@@ -354,6 +354,19 @@ sub download_file { > return $self->_download_file( $remote_file, $local_file ); > } > >+=head3 delete_file >+ >+ $transport->delete_file($file); >+ >+Method for deleting a file from the current file server >+ >+=cut >+ >+sub delete_file { >+ my ( $self, $file ) = @_; >+ die "Subclass must implement delete_file"; >+} >+ > =head3 _download_file > > $transport->_download_file($remote_file, $local_file); >diff --git a/Koha/File/Transport/FTP.pm b/Koha/File/Transport/FTP.pm >index 10484b30f50..cce88f5b3a7 100644 >--- a/Koha/File/Transport/FTP.pm >+++ b/Koha/File/Transport/FTP.pm >@@ -122,6 +122,35 @@ sub _download_file { > return 1; > } > >+=head3 delete_file >+ >+ my $success = $server->delete_file($filename); >+ >+Passed a filename, this will delete the file from the current directory of the server connection. >+ >+Returns true on success or undefined on failure. >+ >+=cut >+ >+sub delete_file { >+ my ( $self, $remote_file ) = @_; >+ my $operation = "delete"; >+ >+ $self->{connection}->delete($remote_file) or return $self->_abort_operation( $operation, $remote_file ); >+ >+ $self->add_message( >+ { >+ message => $operation, >+ type => 'success', >+ payload => { >+ remote_file => $remote_file, >+ } >+ } >+ ); >+ >+ return 1; >+} >+ > =head3 change_directory > > my $success = $server->change_directory($directory); >diff --git a/Koha/File/Transport/Local.pm b/Koha/File/Transport/Local.pm >index e56f45318d0..adef6837fe6 100644 >--- a/Koha/File/Transport/Local.pm >+++ b/Koha/File/Transport/Local.pm >@@ -403,6 +403,63 @@ sub _is_connected { > return 1; # Local filesystem is always "connected" > } > >+=head3 delete_file >+ >+ $server->delete_file(); >+ >+Deletes a file in the current directory. >+ >+Returns true on success or undefined on failure. >+ >+=cut >+ >+sub delete_file { >+ my ( $self, $remote_file ) = @_; >+ my $operation = "delete"; >+ >+ my $directory = $self->download_directory || $self->{current_directory} || '.'; >+ my $source = File::Spec->catfile( $directory, $remote_file ); >+ >+ # Check if the file exists >+ unless ( -e $source ) { >+ $self->add_message( >+ { >+ message => $operation, >+ type => 'error', >+ payload => { >+ error => "File not found: $source", >+ path => $source >+ } >+ } >+ ); >+ return; >+ } >+ >+ # Attempt to delete the file >+ if ( unlink $source ) { >+ $self->add_message( >+ { >+ message => $operation, >+ type => 'success', >+ payload => { path => $source } >+ } >+ ); >+ } else { >+ $self->add_message( >+ { >+ message => $operation, >+ type => 'error', >+ payload => { >+ error => "File could not be deleted: $source", >+ path => $source >+ } >+ } >+ ); >+ } >+ >+ return 1; >+} >+ > =head3 disconnect > > $server->disconnect(); >diff --git a/Koha/File/Transport/SFTP.pm b/Koha/File/Transport/SFTP.pm >index ad3cabe8ff7..b69fc181919 100644 >--- a/Koha/File/Transport/SFTP.pm >+++ b/Koha/File/Transport/SFTP.pm >@@ -21,6 +21,7 @@ use Koha::Logger; > > use File::Spec; > use IO::File; >+use JSON qw( encode_json ); > use Net::SFTP::Foreign; > use Try::Tiny; > >@@ -134,6 +135,35 @@ sub _download_file { > return 1; > } > >+=head3 delete_file >+ >+ my $success = $server->delete_file($filename); >+ >+Passed a filename, this will delete the file from the current directory of the server connection. >+ >+Returns true on success or undefined on failure. >+ >+=cut >+ >+sub delete_file { >+ my ( $self, $remote_file ) = @_; >+ my $operation = "delete"; >+ >+ $self->{connection}->remove($remote_file) or return $self->_abort_operation( $operation, $remote_file ); >+ >+ $self->add_message( >+ { >+ message => $operation, >+ type => 'success', >+ payload => { >+ remote_file => $remote_file, >+ } >+ } >+ ); >+ >+ return 1; >+} >+ > =head3 change_directory > > my $success = $server->change_directory($directory); >diff --git a/t/db_dependent/Koha/File/Transports.t b/t/db_dependent/Koha/File/Transports.t >index 928c48423f0..597bd646bb4 100755 >--- a/t/db_dependent/Koha/File/Transports.t >+++ b/t/db_dependent/Koha/File/Transports.t >@@ -29,7 +29,7 @@ my $schema = Koha::Database->new->schema; > my $builder = t::lib::TestBuilder->new; > > subtest 'Polymorphic object creation' => sub { >- plan tests => 6; >+ plan tests => 7; > > $schema->storage->txn_begin; > >@@ -90,6 +90,8 @@ subtest 'Polymorphic object creation' => sub { > > can_ok( $local_transport, 'rename_file' ); > >+ can_ok( $local_transport, 'delete_file' ); >+ > $schema->storage->txn_rollback; > }; > >-- >2.39.5 (Apple Git-154)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 41020
:
187931
|
187932
|
187933
|
187934
|
187935
|
187936
|
187937
|
187938
|
187939
|
187940
|
187941
|
187942
|
188012
|
188013
|
188014
|
188015
|
188016
|
188017
|
188018
|
188030
| 188031 |
188032
|
188033
|
188034