sub count {
my ( $self ) = @_;
- return scalar grep { !exists $self->{files}->{$_}->{errcode} } keys $self->{files};
+ return scalar grep { !exists $self->{files}->{$_}->{errcode} } keys %{ $self->{files} };
}
=head2 result
my ( $self ) = @_;
my @a = map { $self->{files}->{$_}->{id} }
grep { !exists $self->{files}->{$_}->{errcode} }
- keys $self->{files};
+ keys %{ $self->{files} };
return @a? ( join ',', @a ): undef;
}
sub err {
my ( $self ) = @_;
my $err;
- foreach my $f ( keys $self->{files} ) {
+ foreach my $f ( keys %{ $self->{files} } ) {
my $e = $self->{files}->{$f}->{errcode};
$err->{ $f } = $e if $e;
}
my ( @rv, $res);
foreach my $r ( @$temp ) {
undef $res;
- foreach( qw[id hashvalue filesize categorycode public permanent] ) {
+ foreach( qw[id hashvalue filesize uploadcategorycode public permanent owner] ) {
$res->{$_} = $r->{$_};
}
$res->{name} = $r->{filename};
return @res;
}
-sub DESTROY {
-}
-
-# ************** HELPER ROUTINES / CLASS METHODS ******************************
+=head1 CLASS METHODS
=head2 getCategories
);
}
-# ************** INTERNAL ROUTINES ********************************************
+=head2 allows_add_by
+
+ allows_add_by checks if $userid has permission to add uploaded files
+
+=cut
+
+sub allows_add_by {
+ my ( $class, $userid ) = @_; # do not confuse with borrowernumber
+ my $flags = [
+ { tools => 'upload_general_files' },
+ { circulate => 'circulate_remaining_permissions' },
+ { tools => 'stage_marc_import' },
+ { tools => 'upload_local_cover_images' },
+ ];
+ require C4::Auth;
+ foreach( @$flags ) {
+ return 1 if C4::Auth::haspermission( $userid, $_ );
+ }
+ return;
+}
+
+=head1 INTERNAL ROUTINES
+
+=cut
sub _init {
my ( $self, $params ) = @_;
$params->{tmp} = $params->{temp} if !exists $params->{tmp};
$self->{temporary} = $params->{tmp}? 1: 0; #default false
- $self->{category} = $params->{tmp}? KOHA_UPLOAD:
- ( $params->{category} || KOHA_UPLOAD );
+ if( $params->{tmp} ) {
+ my $db = C4::Context->config('database');
+ $self->{category} = KOHA_UPLOAD;
+ $self->{category} =~ s/koha/$db/;
+ } else {
+ $self->{category} = $params->{category} || KOHA_UPLOAD;
+ }
$self->{files} = {};
$self->{uid} = C4::Context->userenv->{number} if C4::Context->userenv;
my ( $self, $rec ) = @_;
my $p;
if( ref $rec ) {
- $p= $rec->{permanent}? $self->{rootdir}: $self->{tmpdir};
- $p.= '/';
- $p.= $rec->{dir}. '/'. $rec->{hashvalue}. '_'. $rec->{filename};
+ $p = File::Spec->catfile(
+ $rec->{permanent}? $self->{rootdir}: $self->{tmpdir},
+ $rec->{dir},
+ $rec->{hashvalue}. '_'. $rec->{filename}
+ );
}
return $p;
}
sub _done {
my ( $self ) = @_;
$self->{done} = 1;
- foreach my $f ( keys $self->{files} ) {
+ foreach my $f ( keys %{ $self->{files} } ) {
my $fh = $self->_fh($f);
$self->_register( $f, $fh? tell( $fh ): undef )
if !$self->{files}->{$f}->{errcode};
sub _register {
my ( $self, $filename, $size ) = @_;
my $dbh= C4::Context->dbh;
- my $sql= "INSERT INTO uploaded_files (hashvalue, filename, dir, filesize,
- owner, categorycode, public, permanent) VALUES (?,?,?,?,?,?,?,?)";
+ my $sql= 'INSERT INTO uploaded_files (hashvalue, filename, dir, filesize,
+ owner, uploadcategorycode, public, permanent) VALUES (?,?,?,?,?,?,?,?)';
my @pars= (
$self->{files}->{$filename}->{hash},
$filename,
sub _lookup {
my ( $self, $params ) = @_;
my $dbh = C4::Context->dbh;
- my $sql = qq|
-SELECT id,hashvalue,filename,dir,filesize,categorycode,public,permanent
+ my $sql = q|
+SELECT id,hashvalue,filename,dir,filesize,uploadcategorycode,public,permanent,owner
FROM uploaded_files
|;
my @pars;
if( $params->{id} ) {
return [] if $params->{id} !~ /^\d+(,\d+)*$/;
- $sql.= "WHERE id IN ($params->{id})";
+ $sql.= 'WHERE id IN ('.$params->{id}.')';
@pars = ();
} elsif( $params->{hashvalue} ) {
- $sql.= "WHERE hashvalue=?";
+ $sql.= 'WHERE hashvalue=?';
@pars = ( $params->{hashvalue} );
} elsif( $params->{term} ) {
- $sql.= "WHERE (filename LIKE ? OR hashvalue LIKE ?)";
+ $sql.= 'WHERE (filename LIKE ? OR hashvalue LIKE ?)';
@pars = ( '%'.$params->{term}.'%', '%'.$params->{term}.'%' );
} else {
return [];
}
- $sql.= $self->{public}? " AND public=1": '';
+ $sql.= $self->{public}? ' AND public=1': '';
$sql.= ' ORDER BY id';
my $temp= $dbh->selectall_arrayref( $sql, { Slice => {} }, @pars );
return $temp;