"Fossies" - the Fresh Open Source Software Archive

Member "koha-19.11.15/Koha/UploadedFiles.pm" (23 Feb 2021, 5479 Bytes) of package /linux/misc/koha-19.11.15.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "UploadedFiles.pm" see the Fossies "Dox" file reference documentation.

    1 package Koha::UploadedFiles;
    2 
    3 # Copyright Rijksmuseum 2016
    4 #
    5 # This file is part of Koha.
    6 #
    7 # Koha is free software; you can redistribute it and/or modify it under the
    8 # terms of the GNU General Public License as published by the Free Software
    9 # Foundation; either version 3 of the License, or (at your option) any later
   10 # version.
   11 #
   12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
   13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
   14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
   15 #
   16 # You should have received a copy of the GNU General Public License along
   17 # with Koha; if not, write to the Free Software Foundation, Inc.,
   18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
   19 
   20 use Modern::Perl;
   21 
   22 use C4::Koha;
   23 use Koha::Database;
   24 use Koha::DateUtils;
   25 use Koha::UploadedFile;
   26 
   27 use parent qw(Koha::Objects);
   28 
   29 =head1 NAME
   30 
   31 Koha::UploadedFiles - Koha::Objects class for uploaded files
   32 
   33 =head1 SYNOPSIS
   34 
   35     use Koha::UploadedFiles;
   36 
   37     # get one upload
   38     my $upload01 = Koha::UploadedFiles->find( $id );
   39 
   40     # get some uploads
   41     my @uploads = Koha::UploadedFiles->search_term({ term => '.mrc' });
   42 
   43     # delete all uploads
   44     Koha::UploadedFiles->delete;
   45 
   46 =head1 DESCRIPTION
   47 
   48 Allows regular CRUD operations on uploaded_files via Koha::Objects / DBIx.
   49 
   50 The delete method also takes care of deleting files. The search_term method
   51 provides a wrapper around search to look for a term in multiple columns.
   52 
   53 =head1 METHODS
   54 
   55 =head2 INSTANCE METHODS
   56 
   57 =head3 delete
   58 
   59 Delete uploaded files.
   60 
   61 Parameter keep_file may be used to delete records, but keep files.
   62 
   63 Returns the number of deleted records, 0E0 or -1 (Unknown).
   64 Please note that the number of deleted records is not automatically the same
   65 as the number of files.
   66 
   67 =cut
   68 
   69 sub delete {
   70     my ( $self, $params ) = @_;
   71     $self = Koha::UploadedFiles->new if !ref($self); # handle class call
   72     # We use the individual delete on each resultset record
   73     my $rv = 0;
   74     while( my $row = $self->next ) {
   75         my $delete= $row->delete( $params ); # 1, 0E0 or -1
   76         $rv = ( $delete < 0 || $rv < 0 ) ? -1 : ( $rv + $delete );
   77     }
   78     return $rv==0 ? "0E0" : $rv;
   79 }
   80 
   81 =head3 delete_temporary
   82 
   83 Delete_temporary is called by cleanup_database and only removes temporary
   84 uploads older than [pref UploadPurgeTemporaryFilesDays] days.
   85 It is possible to override the pref with the override_pref parameter.
   86 
   87 Return value: see delete.
   88 
   89 =cut
   90 
   91 sub delete_temporary {
   92     my ( $self, $params ) = @_;
   93     my $days = C4::Context->preference('UploadPurgeTemporaryFilesDays');
   94     if( exists $params->{override_pref} ) {
   95         $days = $params->{override_pref};
   96     } elsif( !defined($days) || $days eq '' ) { # allow 0, not NULL or ""
   97         return "0E0";
   98     }
   99     my $dt = dt_from_string();
  100     $dt->subtract( days => $days );
  101     my $parser = Koha::Database->new->schema->storage->datetime_parser;
  102     return $self->search({
  103         permanent => [ undef, 0 ],
  104         dtcreated => { '<' => $parser->format_datetime($dt) },
  105     })->delete;
  106 }
  107 
  108 =head3 delete_missing
  109 
  110     $cnt = Koha::UploadedFiles->delete_missing();
  111 
  112     $cnt = Koha::UploadedFiles->delete_missing({ keep_record => 1 });
  113 
  114 Deletes all records where the actual file is not found.
  115 
  116 Supports a keep_record hash parameter to do a check only.
  117 
  118 Return value: If you pass keep_record, it returns the number of records where
  119 the file is not found, or 0E0. Otherwise it returns a number, 0E0 or -1 just
  120 as delete does.
  121 
  122 =cut
  123 
  124 sub delete_missing {
  125     my ( $self, $params ) = @_;
  126     $self = Koha::UploadedFiles->new if !ref($self); # handle class call
  127     my $rv = 0;
  128     while( my $row = $self->next ) {
  129         my $file = $row->full_path;
  130         next if -e $file;
  131         if( $params->{keep_record} ) {
  132             $rv++;
  133             next;
  134         }
  135         # We are passing keep_file since we already know that the file
  136         # is missing and we do not want to see the warning
  137         # Apply the same logic as in delete for the return value
  138         my $delete = $row->delete({ keep_file => 1 }); # 1, 0E0 or -1
  139         $rv = ( $delete < 0 || $rv < 0 ) ? -1 : ( $rv + $delete );
  140     }
  141     return $rv==0 ? "0E0" : $rv;
  142 }
  143 
  144 =head3 search_term
  145 
  146 Search_term allows you to pass a term to search in filename and hashvalue.
  147 If you do not pass include_private, only public records are returned.
  148 
  149 Is only a wrapper around Koha::Objects search. Has similar return value.
  150 
  151 =cut
  152 
  153 sub search_term {
  154     my ( $self, $params ) = @_;
  155     my $term = $params->{term} // '';
  156     my %public = ();
  157     if( !$params->{include_private} ) {
  158         %public = ( public => 1 );
  159     }
  160     return $self->search(
  161         [ { filename => { like => '%'.$term.'%' }, %public },
  162           { hashvalue => { like => '%'.$params->{term}.'%' }, %public } ],
  163         { order_by => { -asc => 'id' }},
  164     );
  165 }
  166 
  167 =head2 CLASS METHODS
  168 
  169 =head3 getCategories
  170 
  171 getCategories returns a list of upload category codes and names
  172 
  173 =cut
  174 
  175 sub getCategories {
  176     my ( $class ) = @_;
  177     my $cats = C4::Koha::GetAuthorisedValues('UPLOAD');
  178     [ map {{ code => $_->{authorised_value}, name => $_->{lib} }} @$cats ];
  179 }
  180 
  181 =head3 _type
  182 
  183 Returns name of corresponding DBIC resultset
  184 
  185 =cut
  186 
  187 sub _type {
  188     return 'UploadedFile';
  189 }
  190 
  191 =head3 object_class
  192 
  193 Returns name of corresponding Koha object class
  194 
  195 =cut
  196 
  197 sub object_class {
  198     return 'Koha::UploadedFile';
  199 }
  200 
  201 =head1 AUTHOR
  202 
  203 Marcel de Rooy (Rijksmuseum)
  204 
  205 Koha Development Team
  206 
  207 =cut
  208 
  209 1;