Merge remote-tracking branch 'origin/new/bug_7805'
[koha.git] / C4 / VirtualShelves.pm
index 85dbc9f..25d092a 100644 (file)
@@ -1,9 +1,5 @@
-# -*- tab-width: 8 -*-
-# Please use 8-character tabs for this file (indents are every 4 characters)
-
 package C4::VirtualShelves;
 
-
 # Copyright 2000-2002 Katipo Communications
 #
 # This file is part of Koha.
@@ -37,7 +33,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 
 BEGIN {
     # set the version for version checking
-    $VERSION = 3.02;
+    $VERSION = 3.07.00.049;
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
@@ -198,20 +194,20 @@ sub GetSomeShelfNames {
     $qry1.= "ORDER BY vs.lastmodified DESC LIMIT $limit";
 
     unless($adding_allowed && (!defined($owner) || $owner<=0)) {
-      #if adding items, user should be known
-      $pub= $dbh->selectall_arrayref($qry1,{Slice=>{}},@params);
+        #if adding items, user should be known
+        $pub= $dbh->selectall_arrayref($qry1,{Slice=>{}},@params);
     }
 
     if($owner) {
-      my $qry2= $bquery. qq{
-        LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber AND sh.borrowernumber=?
-        WHERE vs.category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
-      @params=($owner,$owner,$owner);
-      $qry2.= "AND (allow_add=1 OR owner=?) " if $adding_allowed;
-      push @params, $owner if $adding_allowed;
-      $qry2.= "ORDER BY vs.lastmodified DESC ";
-      $qry2.= "LIMIT $limit";
-      $bar= $dbh->selectall_arrayref($qry2,{Slice=>{}},@params);
+        my $qry2= $bquery. qq{
+            LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber AND sh.borrowernumber=?
+            WHERE vs.category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
+        @params=($owner,$owner,$owner);
+        $qry2.= "AND (allow_add=1 OR owner=?) " if $adding_allowed;
+        push @params, $owner if $adding_allowed;
+        $qry2.= "ORDER BY vs.lastmodified DESC ";
+        $qry2.= "LIMIT $limit";
+        $bar= $dbh->selectall_arrayref($qry2,{Slice=>{}},@params);
     }
 
     return ( { bartotal => $bar? scalar @$bar: 0, pubtotal => $pub? scalar @$pub: 0}, $pub, $bar);
@@ -219,19 +215,17 @@ sub GetSomeShelfNames {
 
 =head2 GetShelf
 
-  (shelfnumber,shelfname,owner,category,sortfield) = &GetShelf($shelfnumber);
+  (shelfnumber,shelfname,owner,category,sortfield,allow_add,allow_delete_own,allow_delete_other) = &GetShelf($shelfnumber);
 
-Looks up information about the contents of virtual virtualshelves number
-C<$shelfnumber>
-
-Returns the database's information on 'virtualshelves' table.
+Returns the above-mentioned fields for passed virtual shelf number.
 
 =cut
 
-sub GetShelf ($) {
+sub GetShelf {
     my ($shelfnumber) = @_;
     my $query = qq(
-        SELECT shelfnumber, shelfname, owner, category, sortfield
+        SELECT shelfnumber, shelfname, owner, category, sortfield,
+            allow_add, allow_delete_own, allow_delete_other
         FROM   virtualshelves
         WHERE  shelfnumber=?
     );
@@ -258,7 +252,7 @@ from C4::Circulation.
 
 =cut
 
-sub GetShelfContents ($;$$$) {
+sub GetShelfContents {
     my ($shelfnumber, $row_count, $offset, $sortfield) = @_;
     my $dbh=C4::Context->dbh();
     my $sth1 = $dbh->prepare("SELECT count(*) FROM virtualshelfcontents WHERE shelfnumber = ?");
@@ -315,7 +309,7 @@ sub AddShelf {
 
     #initialize missing hash values to silence warnings
     foreach('shelfname','category', 'sortfield', 'allow_add', 'allow_delete_own', 'allow_delete_other' ) {
-        $hashref->{$_}= exists $hashref->{$_}? $hashref->{$_}||'': '';
+        $hashref->{$_}= undef unless exists $hashref->{$_};
     }
 
     return -1 unless _CheckShelfName($hashref->{shelfname}, $hashref->{category}, $owner, 0);
@@ -326,13 +320,13 @@ sub AddShelf {
 
     my $sth = $dbh->prepare($query);
     $sth->execute(
-    $hashref->{shelfname},
-    $owner,
-    $hashref->{category},
-    $hashref->{sortfield},
-    $hashref->{allow_add}||0,
-    $hashref->{allow_delete_own}||1,
-    $hashref->{allow_delete_other}||0 );
+        $hashref->{shelfname},
+        $owner,
+        $hashref->{category},
+        $hashref->{sortfield},
+        $hashref->{allow_add}//0,
+        $hashref->{allow_delete_own}//1,
+        $hashref->{allow_delete_other}//0 );
     my $shelfnumber = $dbh->{'mysql_insertid'};
     return $shelfnumber;
 }
@@ -357,7 +351,7 @@ sub AddToShelf {
     my $sth = $dbh->prepare($query);
 
     $sth->execute( $shelfnumber, $biblionumber );
-    ($sth->rows) and return undef;     # already on shelf
+    ($sth->rows) and return; # already on shelf
     $query = qq(
         INSERT INTO virtualshelfcontents
             (shelfnumber, biblionumber, flags, borrowernumber)
@@ -397,16 +391,17 @@ sub ModShelf {
 
     #initialize missing hash values to silence warnings
     foreach('shelfname','category', 'sortfield', 'allow_add', 'allow_delete_own', 'allow_delete_other' ) {
-        $hashref->{$_}= exists $hashref->{$_}? $hashref->{$_}||'': '';
+        $hashref->{$_}= undef unless exists $hashref->{$_};
     }
 
     #if name or category changes, the name should be tested
     if($hashref->{shelfname} || $hashref->{category}) {
         unless(_CheckShelfName(
-        $hashref->{shelfname}||$oldrecord->{shelfname},
-        $hashref->{category}||$oldrecord->{category},
-        $oldrecord->{owner}, $shelfnumber )) {
-        return 0; #name check failed
+            $hashref->{shelfname}//$oldrecord->{shelfname},
+            $hashref->{category}//$oldrecord->{category},
+            $oldrecord->{owner},
+            $shelfnumber )) {
+                return 0; #name check failed
         }
     }
 
@@ -414,13 +409,13 @@ sub ModShelf {
     $query= "UPDATE virtualshelves SET shelfname=?, category=?, sortfield=?, allow_add=?, allow_delete_own=?, allow_delete_other=? WHERE shelfnumber=?";
     $sth = $dbh->prepare($query);
     $sth->execute(
-    $hashref->{shelfname}||$oldrecord->{shelfname},
-    $hashref->{category}||$oldrecord->{category},
-    $hashref->{sortfield}||$oldrecord->{sortfield},
-    $hashref->{allow_add}||$oldrecord->{allow_add},
-    $hashref->{allow_delete_own}||$oldrecord->{allow_delete_own},
-    $hashref->{allow_delete_other}||$oldrecord->{allow_delete_other},
-    $shelfnumber );
+        $hashref->{shelfname}//$oldrecord->{shelfname},
+        $hashref->{category}//$oldrecord->{category},
+        $hashref->{sortfield}//$oldrecord->{sortfield},
+        $hashref->{allow_add}//$oldrecord->{allow_add},
+        $hashref->{allow_delete_own}//$oldrecord->{allow_delete_own},
+        $hashref->{allow_delete_other}//$oldrecord->{allow_delete_other},
+        $shelfnumber );
     return $@? 0: 1;
 }
 
@@ -471,23 +466,23 @@ sub ShelfPossibleAction {
 
     return 0 unless $shelf && ($shelf->{category}==2 || $shelf->{owner}==$user || $shelf->{borrowernumber}==$user);
     if($action eq 'view') {
-    #already handled in the above condition
-    return 1;
+        #already handled in the above condition
+        return 1;
     }
     elsif($action eq 'add') {
-    return 0 if $user<=0; #should be logged in
-    return 1 if $shelf->{allow_add}==1 || $shelf->{owner}==$user;
-    #owner may always add
+        return 0 if $user<=0; #should be logged in
+        return 1 if $shelf->{allow_add}==1 || $shelf->{owner}==$user;
+        #owner may always add
     }
     elsif($action eq 'delete') {
         #this answer is just diplomatic: it says that you may be able to delete
         #some items from that shelf
         #it does not answer the question about a specific biblio
         #DelFromShelf checks the situation per biblio
-    return 1 if $user>0 && ($shelf->{allow_delete_own}==1 || $shelf->{allow_delete_other}==1);
+        return 1 if $user>0 && ($shelf->{allow_delete_own}==1 || $shelf->{allow_delete_other}==1);
     }
     elsif($action eq 'manage') {
-    return 1 if $user && $shelf->{owner}==$user;
+        return 1 if $user && $shelf->{owner}==$user;
     }
     return 0;
 }
@@ -515,11 +510,11 @@ sub DelFromShelf {
         $query = qq(DELETE FROM virtualshelfcontents
             WHERE shelfnumber=? AND biblionumber=? AND borrowernumber=?);
         $sth= $dbh->prepare($query);
-    foreach my $biblionumber (@$bibref) {
+        foreach my $biblionumber (@$bibref) {
             $sth->execute($shelfnumber, $biblionumber, $user);
-        $r= $sth->rows; #Expect -1, 0 or 1 (-1 means Don't know; count as 1)
-        $t+= ($r==-1)? 1: $r;
-    }
+            $r= $sth->rows; #Expect -1, 0 or 1 (-1 means Don't know; count as 1)
+            $t+= ($r==-1)? 1: $r;
+        }
     }
     if($del_oth) {
         #includes a check if borrowernumber is null (deleted patron)
@@ -527,11 +522,11 @@ sub DelFromShelf {
             WHERE shelfnumber=? AND biblionumber=? AND
             (borrowernumber IS NULL OR borrowernumber<>?)/;
         $sth= $dbh->prepare($query);
-    foreach my $biblionumber (@$bibref) {
+        foreach my $biblionumber (@$bibref) {
             $sth->execute($shelfnumber, $biblionumber, $user);
-        $r= $sth->rows;
-        $t+= ($r==-1)? 1: $r;
-    }
+            $r= $sth->rows;
+            $t+= ($r==-1)? 1: $r;
+        }
     }
     return $t;
 }
@@ -585,12 +580,12 @@ main Koha toolbar with Lists button.
 =cut
 
 sub ShelvesMax {
-  my $which= shift;
-  return SHELVES_POPUP_MAX if $which eq 'POPUP';
-  return SHELVES_MGRPAGE_MAX if $which eq 'MGRPAGE';
-  return SHELVES_COMBO_MAX if $which eq 'COMBO';
-  return SHELVES_MASTHEAD_MAX if $which eq 'MASTHEAD';
-  return SHELVES_MASTHEAD_MAX;
+    my $which= shift;
+    return SHELVES_POPUP_MAX if $which eq 'POPUP';
+    return SHELVES_MGRPAGE_MAX if $which eq 'MGRPAGE';
+    return SHELVES_COMBO_MAX if $which eq 'COMBO';
+    return SHELVES_MASTHEAD_MAX if $which eq 'MASTHEAD';
+    return SHELVES_MASTHEAD_MAX;
 }
 
 sub HandleDelBorrower {
@@ -643,7 +638,7 @@ sub _shelf_count {
         @params= ($owner, $owner, $owner);
     }
     else {
-    $query.='WHERE category=2';
+        $query.='WHERE category=2';
         @params= ();
     }
     my $sth = $dbh->prepare($query);
@@ -657,28 +652,19 @@ sub _biblionumber_sth { #only used in obsolete sub below
     my $query = 'select biblionumber from virtualshelfcontents where shelfnumber = ?';
     my $dbh = C4::Context->dbh;
     my $sth = $dbh->prepare($query)
-    or die $dbh->errstr;
+        or die $dbh->errstr;
     $sth->execute( $shelf )
-    or die $sth->errstr;
+        or die $sth->errstr;
     $sth;
 }
 
-sub each_biblionumbers (&$) { #OBSOLETE
-    my ($code,$shelf) = @_;
-    my $ref =  _biblionumber_sth($shelf)->fetchall_arrayref;
-    map {
-    $_=$$_[0];
-    $code->();
-    } @$ref;
-}
-
 sub _CheckShelfName {
     my ($name, $cat, $owner, $number)= @_;
 
     my $query = qq(
         SELECT DISTINCT shelfnumber
         FROM   virtualshelves
-    LEFT JOIN virtualshelfshares sh USING (shelfnumber)
+        LEFT JOIN virtualshelfshares sh USING (shelfnumber)
         WHERE  shelfname=? AND shelfnumber<>?);
     if($cat==1) {
         $query.= ' AND (sh.borrowernumber=? OR owner=?) AND category=1';