Jonathan Druart
7d8b96803f
Bug 9978 should have fixed them all, but some were missing. We want all the license statements part of Koha to be identical, and using the GPLv3 statement. Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
209 lines
5.2 KiB
Perl
209 lines
5.2 KiB
Perl
package Koha::UploadedFiles;
|
|
|
|
# Copyright Rijksmuseum 2016
|
|
#
|
|
# 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 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, see <http://www.gnu.org/licenses>.
|
|
|
|
use Modern::Perl;
|
|
|
|
use C4::Koha;
|
|
use Koha::Database;
|
|
use Koha::DateUtils;
|
|
use Koha::UploadedFile;
|
|
|
|
use parent qw(Koha::Objects);
|
|
|
|
=head1 NAME
|
|
|
|
Koha::UploadedFiles - Koha::Objects class for uploaded files
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
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
|
|
|
|
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
|
|
|
|
=head2 INSTANCE METHODS
|
|
|
|
=head3 delete
|
|
|
|
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 = 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
|
|
|
|
=cut
|
|
|
|
sub _type {
|
|
return 'UploadedFile';
|
|
}
|
|
|
|
=head3 object_class
|
|
|
|
Returns name of corresponding Koha object class
|
|
|
|
=cut
|
|
|
|
sub object_class {
|
|
return 'Koha::UploadedFile';
|
|
}
|
|
|
|
=head1 AUTHOR
|
|
|
|
Marcel de Rooy (Rijksmuseum)
|
|
|
|
Koha Development Team
|
|
|
|
=cut
|
|
|
|
1;
|