Bug 2940 - private shelf (list) display error on 2nd and subsequent pages.
authorJoe Atzberger <joe.atzberger@liblime.com>
Mon, 2 Feb 2009 20:36:19 +0000 (14:36 -0600)
committerGalen Charlton <galen.charlton@liblime.com>
Mon, 9 Feb 2009 20:28:52 +0000 (14:28 -0600)
The before/after URL for the 2nd page of list elements:
http://atz.dev.kohalibrary.com/cgi-bin/koha/opac-shelves.pl?display=privateshelves?viewshelf=120&itemoff=2
http://atz.dev.kohalibrary.com/cgi-bin/koha/opac-shelves.pl?viewshelf=120&display=privateshelves&itemoff=2

The change in query string arguments is incidental, the prevention of multiple "?" is essential.

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
C4/VirtualShelves/Page.pm

index 8e45029..27db71e 100644 (file)
@@ -291,9 +291,13 @@ foreach my $element (sort { lc($shelflist->{$a}->{'shelfname'}) cmp lc($shelflis
                push (@shelvesloop, $shelflist->{$element});
        }
 }
+
 my $url = $type eq 'opac' ? "/cgi-bin/koha/opac-shelves.pl" : "/cgi-bin/koha/virtualshelves/shelves.pl";
-$url .= "?display=" . $query->param('display') if $query->param('display');
-$url .= "?viewshelf=" . $query->param('viewshelf') if $query->param('viewshelf');
+my %qhash = ();
+foreach (qw(display viewshelf)) {
+    $qhash{$_} = $query->param($_) if $query->param($_);
+}
+(scalar keys %qhash) and $url .= '?' . join '&', map {"$_=$qhash{$_}"} keys %qhash;
 if ($query->param('viewshelf')) {
        $template->param( {pagination_bar => pagination_bar($url, (int($totitems/$shelflimit)) + (($totitems % $shelflimit) > 0 ? 1 : 0), $itemoff, "itemoff")} );
 } else {
@@ -311,7 +315,7 @@ if ($template->param('viewshelf') or
        $template->param(  'edit'   ) ) {
        $template->param(vseflag => 1);
 }
-if ($template->param( 'shelves' ) or
+if ($template->param( 'shelves' ) or    # note: this part looks duplicative, but is intentional
        $template->param(  'edit'   ) ) {
        $template->param( seflag => 1);
 }