use Memoize because Memcache::Memoize is slow for me
[koha.git] / C4 / VirtualShelves.pm
index 7257149..57b86da 100644 (file)
@@ -186,9 +186,9 @@ sub GetShelvesSummary ($$$$) {
 
 =head2 GetRecentShelves
 
-       ($shelflist) = GetRecentShelves(1, $limit, $owner)
+       ($shelflist, $total) = GetRecentShelves(1, $limit, $owner)
 
-This function returns a references to an array of hashrefs containing specified shelves sorted
+This function returns a reference to an array of hashrefs containing specified shelves sorted
 by the date the shelf was last modified in descending order limited to the number of records
 specified by C<$row_count>. If calling with C<$mincategory> other than 1, use undef as C<$owner>.
 
@@ -197,26 +197,36 @@ the submitted parameters.
 
 =cut
 
-sub GetRecentShelves ($$$) {
-       my ($mincategory, $row_count, $owner) = @_;
-    my (@shelflist);
-       my $total = _shelf_count($owner, $mincategory);
-       my @params = ($owner, $mincategory, 0, $row_count);      #FIXME: offset is hardcoded here, but could be passed in for enhancements
-       shift @params if (not defined $owner);
-       my $query = "SELECT * FROM virtualshelves";
-       $query .= ((defined $owner) ? " WHERE owner = ? AND category = ?" : " WHERE category >= ? ");
-       $query .= " ORDER BY lastmodified DESC LIMIT ?, ?";
-       my $sth = $dbh->prepare($query);
-       $sth->execute(@params);
-       @shelflist = $sth->fetchall_arrayref({});
-       return ( \@shelflist, $total );
+sub GetRecentShelves {
+    my ($mincategory, $row_count, $owner) = @_;
+    my $total = _shelf_count($owner, $mincategory);
+    my @params;
+    my $selection;
+    if (defined $owner) {
+        @params = ($owner, $mincategory);
+        $selection = ' WHERE owner = ? AND category = ?';
+    } else {
+        @params = ( $mincategory);
+        $selection = ' WHERE category >= ? ';
+    }
+    my $query = 'SELECT * FROM virtualshelves';
+    $query .= $selection;
+    $query .= ' ORDER BY lastmodified DESC';
+    if ($row_count){
+       $query .= ' LIMIT ?';
+       push @params,$row_count;
+    }
+    my $sth = $dbh->prepare($query);
+    $sth->execute(@params);
+    my $shelflist = $sth->fetchall_arrayref({});
+    return ( $shelflist, $total );
 }
 
 =head2 GetAllShelves
 
-    ($shelflist) = GetAllShelves($owner)
+    $shelflist = GetAllShelves($owner)
 
-This function returns a references to an array of hashrefs containing all shelves sorted
+This function returns a reference to an array of hashrefs containing all shelves sorted
 by the shelf name.
 
 This function is intended to return a dataset reflecting all the shelves for
@@ -224,15 +234,12 @@ the submitted parameters.
 
 =cut
 
-sub GetAllShelves ($$) {
+sub GetAllShelves {
     my ($category,$owner) = @_;
-    my (@shelflist);
-    my @params = ($category,$owner);
-    my $query = "SELECT * FROM virtualshelves WHERE category = ? AND owner = ? ORDER BY shelfname ASC";
-    my $sth = $dbh->prepare($query);
-    $sth->execute(@params);
-    @shelflist = $sth->fetchall_arrayref({});
-    return ( \@shelflist );
+    my $query = 'SELECT * FROM virtualshelves WHERE category = ? AND owner = ? ORDER BY shelfname ASC';
+    my $sth = $dbh->prepare( $query );
+    $sth->execute( $category, $owner );
+    return $sth->fetchall_arrayref({});
 }
 
 =head2 GetShelf
@@ -289,7 +296,7 @@ sub GetShelfContents ($;$$$) {
        }
     my $query =
        " SELECT vc.biblionumber, vc.shelfnumber, vc.dateadded, itemtypes.*,
-            biblio.*, biblioitems.itemtype, biblioitems.publicationyear, biblioitems.publishercode, biblioitems.place, biblioitems.size, biblioitems.pages
+            biblio.*, biblioitems.itemtype, biblioitems.publicationyear as year, biblioitems.publishercode, biblioitems.place, biblioitems.size, biblioitems.pages
          FROM   virtualshelfcontents vc
                 LEFT JOIN biblio      ON      vc.biblionumber =      biblio.biblionumber
                 LEFT JOIN biblioitems ON  biblio.biblionumber = biblioitems.biblionumber
@@ -563,13 +570,13 @@ sub RefreshShelvesSummary ($$$) {
        $total->{'pubtotal'} = $totshelves;
 
        # Update the current session with the latest shelves...
-       $session->param('barshelves', $barshelves->[0]);
-       $session->param('pubshelves', $pubshelves->[0]);
+       $session->param('barshelves', $barshelves);
+       $session->param('pubshelves', $pubshelves);
        $session->param('totshelves', $total);
 
        # likewise the userenv...
-       C4::Context->set_shelves_userenv('bar',$barshelves->[0]);
-       C4::Context->set_shelves_userenv('pub',$pubshelves->[0]);
+       C4::Context->set_shelves_userenv('bar',$barshelves);
+       C4::Context->set_shelves_userenv('pub',$pubshelves);
        C4::Context::set_shelves_userenv('tot',$total);
 
        return ($total, $pubshelves, $barshelves);