Bug 15531 - DBRev 3.23.00.057
[koha.git] / Koha / Upload.pm
index e30b354..ceff56a 100644 (file)
@@ -122,7 +122,7 @@ sub cgi {
 
 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
@@ -135,7 +135,7 @@ sub 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;
 }
 
@@ -149,7 +149,7 @@ sub result {
 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;
     }
@@ -170,7 +170,7 @@ sub get {
     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};
@@ -211,10 +211,7 @@ sub delete {
     return @res;
 }
 
-sub DESTROY {
-}
-
-# **************  HELPER ROUTINES / CLASS METHODS ******************************
+=head1 CLASS METHODS
 
 =head2 getCategories
 
@@ -243,7 +240,30 @@ sub httpheaders {
     );
 }
 
-# **************  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 ) = @_;
@@ -253,8 +273,13 @@ sub _init {
 
     $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;
@@ -310,9 +335,11 @@ sub _full_fname {
     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;
 }
@@ -328,7 +355,7 @@ sub _hook {
 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};
@@ -339,8 +366,8 @@ sub _done {
 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,
@@ -359,25 +386,25 @@ sub _register {
 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;