Bug 9458 - Add sorting to lists
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 23 Jan 2013 14:05:20 +0000 (09:05 -0500)
committerJared Camins-Esakov <jcamins@cpbibliography.com>
Wed, 13 Mar 2013 13:06:19 +0000 (09:06 -0400)
Test Plan:
1) Apply patch
2) View list in staff interface, try sorting by title, then author
3) Repeat 2 with same list in OPAC

Signed-off-by: Delaye Stephane <stephane.delaye@biblibre.com>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
C4/VirtualShelves.pm
C4/VirtualShelves/Page.pm
koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt
koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tt

index 0bb4b56..f632416 100644 (file)
@@ -255,7 +255,7 @@ from C4::Circulation.
 =cut
 
 sub GetShelfContents {
-    my ($shelfnumber, $row_count, $offset, $sortfield) = @_;
+    my ($shelfnumber, $row_count, $offset, $sortfield, $sort_direction ) = @_;
     my $dbh=C4::Context->dbh();
     my $sth1 = $dbh->prepare("SELECT count(*) FROM virtualshelfcontents WHERE shelfnumber = ?");
     $sth1->execute($shelfnumber);
@@ -277,7 +277,7 @@ sub GetShelfContents {
     my @params = ($shelfnumber);
     if($sortfield) {
         $query .= " ORDER BY " . $sortfield;
-        $query .= " DESC " if ($sortfield eq 'copyrightdate');
+        $query .= " DESC " if ( ( $sortfield eq 'copyrightdate' ) || ( $sort_direction eq 'desc' ) );
     }
     if($row_count){
        $query .= " LIMIT ?, ? ";
index 586384d..ab807da 100644 (file)
@@ -249,7 +249,9 @@ sub shelfpage {
                 my $items;
                 my $tag_quantity;
                 my $sortfield = ( $sorton ? $sorton : 'title' );
-                ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset, $sortfield );
+                $sortfield = $query->param('sort') || $sortfield; ## Passed in sorting overrides default sorting
+                my $direction = $query->param('direction');
+                ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset, $sortfield, $direction );
                 for my $this_item (@$items) {
                     my $biblionumber = $this_item->{'biblionumber'};
                     my $record = GetMarcBiblio($biblionumber);
@@ -419,7 +421,7 @@ sub shelfpage {
 
     my $url = $type eq 'opac' ? "/cgi-bin/koha/opac-shelves.pl" : "/cgi-bin/koha/virtualshelves/shelves.pl";
     my %qhash = ();
-    foreach (qw(display viewshelf sortfield)) {
+    foreach (qw(display viewshelf sortfield sort direction)) {
         $qhash{$_} = $query->param($_) if $query->param($_);
     }
     ( scalar keys %qhash ) and $url .= '?' . join '&', map { "$_=$qhash{$_}" } keys %qhash;
@@ -459,6 +461,8 @@ sub shelfpage {
             barshelvesloop => $barshelves,
             pubshelves     => $total->{pubtotal},
             pubshelvesloop => $pubshelves,
+            sort           => $query->param('sort'),
+            direction      => $query->param('direction'),
     );
 
     output_html_with_http_headers $query, $cookie, $template->output;
index 1eda7c9..e9f3994 100644 (file)
@@ -204,15 +204,44 @@ function placeHold () {
      <span class="clearall"></span></p>
  [% END %]
        
+ [% IF direction == 'asc' %][% direction = 'desc' %][% ELSE %][% direction = 'asc' %][% END %]
  <div class="pages">[% pagination_bar %]</div>
     <table>
             <tr>
                 [% IF ( itemsloop ) %]<th class="checkall">&nbsp;</th>[% END %]
+
                 [% UNLESS ( item_level_itypes ) %]<th>Item type</th>[% END %]
-                <th>Title</th>
-                <th>Author</th>
+                <th>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=title&direction=[% direction %]">Title</a>
+                    [% IF sort == 'title' %]
+                        [% IF direction == 'asc' %]
+                            <img src="/intranet-tmpl/prog/img/asc.gif" />
+                        [% ELSIF direction == 'desc' %]
+                            <img src="/intranet-tmpl/prog/img/desc.gif" />
+                        [% END %]
+                    [% END %]
+                </th>
+                <th>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=author&direction=[% direction %]">Author</a>
+                   [% IF sort == 'author' %]
+                        [% IF direction == 'asc' %]
+                            <img src="/intranet-tmpl/prog/img/asc.gif" />
+                        [% ELSIF direction == 'desc' %]
+                            <img src="/intranet-tmpl/prog/img/desc.gif" />
+                        [% END %]
+                    [% END %]
+                 </th>
                 <th>Date added</th>
-                <th>Call number</th>
+                <th>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=itemcallnumber&direction=[% direction %]">Call number</a>
+                   [% IF sort == 'itemcallnumber' %]
+                        [% IF direction == 'asc' %]
+                            <img src="/intranet-tmpl/prog/img/asc.gif" />
+                        [% ELSIF direction == 'desc' %]
+                            <img src="/intranet-tmpl/prog/img/desc.gif" />
+                        [% END %]
+                    [% END %]
+                 </th>
                 <th>&nbsp;</th>
             </tr>
                [% FOREACH itemsloo IN itemsloop %]
index d6c1ed5..59bedc7 100644 (file)
@@ -188,6 +188,11 @@ $(function() {
                        alert(alertString2);
                }
        }
+
+$(document).ready(function() {
+  $('#sort-submit').hide();
+});
+
 //]]>
 </script>
 </head>
@@ -287,6 +292,35 @@ $(function() {
 
 <a class="print" href="opac-shelves.pl" onclick="print(); return false;">Print list</a>
 
+<form action="/cgi-bin/koha/opac-shelves.pl" id="sorting-form">
+    <input type="hidden" name="viewshelf" value="[% shelfnumber %]" />
+
+    <label for="sort">Sort by: </label>
+    <select name="sort" onchange="$('#sorting-form').submit()">
+        <option value="">Default sorting</option>
+
+        [% IF sort == 'author' %]
+            <option value="author" selected="selected">Author</option>
+        [% ELSE %]
+            <option value="author">Author</option>
+        [% END %]
+
+        [% IF sort == 'title' %]
+            <option value="title" selected="selected">Title</option>
+        [% ELSE %]
+            <option value="title">Title</option>
+        [% END %]
+
+        [% IF sort == 'itemcallnumber' %]
+            <option value="itemcallnumber" selected="selected">Call number</option>
+        [% ELSE %]
+            <option value="itemcallnumber">Call number</option>
+        [% END %]
+
+        <input type="submit" id="sort-submit" value="Resort list" />
+    </select>
+</form>
+
                 [% IF ( manageshelf ) %] <span class="sep">|</span> <form method="get" action="opac-shelves.pl"><input type="hidden" name="op" value="modif" />
                 <input type="hidden" name="display" value="viewshelf" />
                 <input type="hidden" name="shelfnumber" value="[% shelfnumber %]" /> <input type="submit" class="editshelf" value="Edit list" /></form>