X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=Koha%2FUploadedFiles.pm;h=c453c6f977860f82f10fc2f0f11c81730ac60197;hb=c009c3fa81d6c87aede3bd3de1fd119c6516d319;hp=23bb52a9bb23181737562169854bc271e4c23a83;hpb=44d4dc70404e596648415f3db60ff7975e986281;p=koha-ffzg.git diff --git a/Koha/UploadedFiles.pm b/Koha/UploadedFiles.pm index 23bb52a9bb..c453c6f977 100644 --- a/Koha/UploadedFiles.pm +++ b/Koha/UploadedFiles.pm @@ -4,22 +4,24 @@ package Koha::UploadedFiles; # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use Modern::Perl; -#use Koha::Database; +use C4::Koha qw( GetAuthorisedValues ); +use Koha::Database; +use Koha::DateUtils qw( dt_from_string ); use Koha::UploadedFile; use parent qw(Koha::Objects); @@ -30,11 +32,23 @@ Koha::UploadedFiles - Koha::Objects class for uploaded files =head1 SYNOPSIS -use Koha::UploadedFiles; + use Koha::UploadedFiles; + + # get one upload + my $upload01 = Koha::UploadedFiles->find( $id ); + + # get some uploads + my @uploads = Koha::UploadedFiles->search_term({ term => '.mrc' }); + + # delete all uploads + Koha::UploadedFiles->delete; =head1 DESCRIPTION -Description +Allows regular CRUD operations on uploaded_files via Koha::Objects / DBIx. + +The delete method also takes care of deleting files. The search_term method +provides a wrapper around search to look for a term in multiple columns. =head1 METHODS @@ -42,17 +56,128 @@ Description =head3 delete -Delete uploaded files +Delete uploaded files. + +Parameter keep_file may be used to delete records, but keep files. + +Returns the number of deleted records, 0E0 or -1 (Unknown). +Please note that the number of deleted records is not automatically the same +as the number of files. =cut sub delete { my ( $self, $params ) = @_; - $self->SUPER::delete( $params ); + $self = Koha::UploadedFiles->new if !ref($self); # handle class call + # We use the individual delete on each resultset record + my $rv = 0; + while( my $row = $self->next ) { + my $deleted = eval { $row->delete( $params ) }; + $rv++ if $deleted && !$@; + } + return $rv==0 ? "0E0" : $rv; +} + +=head3 delete_temporary + +Delete_temporary is called by cleanup_database and only removes temporary +uploads older than [pref UploadPurgeTemporaryFilesDays] days. +It is possible to override the pref with the override_pref parameter. + +Return value: see delete. + +=cut + +sub delete_temporary { + my ( $self, $params ) = @_; + my $days = C4::Context->preference('UploadPurgeTemporaryFilesDays'); + if( exists $params->{override_pref} ) { + $days = $params->{override_pref}; + } elsif( !defined($days) || $days eq '' ) { # allow 0, not NULL or "" + return "0E0"; + } + my $dt = dt_from_string(); + $dt->subtract( days => $days ); + my $parser = Koha::Database->new->schema->storage->datetime_parser; + return $self->search({ + permanent => [ undef, 0 ], + dtcreated => { '<' => $parser->format_datetime($dt) }, + })->delete; +} + +=head3 delete_missing + + $cnt = Koha::UploadedFiles->delete_missing(); + + $cnt = Koha::UploadedFiles->delete_missing({ keep_record => 1 }); + +Deletes all records where the actual file is not found. + +Supports a keep_record hash parameter to do a check only. + +Return value: If you pass keep_record, it returns the number of records where +the file is not found, or 0E0. Otherwise it returns a number, 0E0 or -1 just +as delete does. + +=cut + +sub delete_missing { + my ( $self, $params ) = @_; + $self = Koha::UploadedFiles->new if !ref($self); # handle class call + my $rv = 0; + while( my $row = $self->next ) { + my $file = $row->full_path; + next if -e $file; + if( $params->{keep_record} ) { + $rv++; + next; + } + # We are passing keep_file since we already know that the file + # is missing and we do not want to see the warning + # Apply the same logic as in delete for the return value + my $deleted = eval { $row->delete({ keep_file => 1 }) }; + $rv++ if $deleted && !$@; + } + return $rv==0 ? "0E0" : $rv; +} + +=head3 search_term + +Search_term allows you to pass a term to search in filename and hashvalue. +If you do not pass include_private, only public records are returned. + +Is only a wrapper around Koha::Objects search. Has similar return value. + +=cut + +sub search_term { + my ( $self, $params ) = @_; + my $term = $params->{term} // ''; + my %public = (); + if( !$params->{include_private} ) { + %public = ( public => 1 ); + } + return $self->search( + [ { filename => { like => '%'.$term.'%' }, %public }, + { hashvalue => { like => '%'.$params->{term}.'%' }, %public } ], + { order_by => { -asc => 'id' }}, + ); } =head2 CLASS METHODS +=head3 getCategories + +getCategories returns a list of upload category codes and names + +=cut + +sub getCategories { + my ( $class ) = @_; + my $cats = C4::Koha::GetAuthorisedValues('UPLOAD'); + [ map {{ code => $_->{authorised_value}, name => $_->{lib} }} @$cats ]; +} + =head3 _type Returns name of corresponding DBIC resultset