Bug 9757: Make staff client list contents view more like search results
authorOwen Leonard <oleonard@myacpl.org>
Wed, 6 Mar 2013 01:23:56 +0000 (20:23 -0500)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 26 Jun 2013 16:04:04 +0000 (09:04 -0700)
This patch revises the staff client list contents view to better match
staff client search results, showing more information and offering more
ways to interact with the contents than before.

- List contents output has been modified so that the staff client can
  use XSLT-formatted data just as the OPAC can. As in the OPAC it
  depends on XSLTResultsDisplay being enabled.
- A "toolbar" has been added which is similar to that in search results,
  offering the option to add items to a Cart, add them to a different
  list, place multiple holds, remove items from the list, or merge
  records.
- This toolbar has been made to float on scroll like the one on the
  MARC edit page.
- Library and shelving location have been added to the display of call
  numbers. Call numbers are linked to a search as they are in search
  results.
- Edit links are included just as they are in search results.
- Automatic focus on the add by barcode form has been removed so that
  the page doesn't jump to the bottom unnecessarily.
- basket.js's "addMultiple" function has been modified so that it
  receives an array of checkboxes rather than looking for checkboxes in
  a specific form. This helps abstract its functionality for use on both
  search results and lists. results.tt is modified accordingly.
- The page layout has been widened to make room for the increased amount
  of information on the page.
- A new "merge" icon has been added to the default Bootstrap sprite.

To test:

- View both public and private lists in the staff client.
- View lists with and without contents.
- Test the functionality of options in the toolbar: Add to cart, add to
  lists, place multiple holds, remove items, merge items.
- Test with users with and without cataloging privileges to confirm that
  catalog-related controls are correctly shown or hidden.
- Test with XSLTResultsDisplay set both to "default" and empty.
- Since the staff client and OPAC use some of the same code, test that
  lists in the OPAC have not broken.
- Since JavaScript was modified which affects both lists and search
  results, confirm that adding items to the Cart and Lists from search
  results hasn't been broken by this patch.

Revision corrects conditional display of hold link, hiding it in cases
where there are no items or the record's itemtype is not for loan.

Also corrected is the behavior of the Cart/List "save" button in order
to prevent it from submitting the "remove items" action which is the
default for the form.

Signed-off-by: jmbroust <jean-manuel.broust@univ-lyon2.fr>
Edit: Patch rebased against current master and hard-coded paths to
/prog/ corrected.

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/VirtualShelves/Page.pm
koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css
koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
koha-tmpl/intranet-tmpl/prog/en/js/basket.js
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt
koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt
koha-tmpl/intranet-tmpl/prog/img/glyphicons-halflings-koha.png

index dd7d5f4..7756d92 100644 (file)
@@ -237,7 +237,10 @@ sub shelfpage {
             # explicitly fetch this shelf
             my ($shelfnumber2,$shelfname,$owner,$category,$sorton) = GetShelf($shelfnumber);
 
-            $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') );
+            $template->param(
+                'AllowOnShelfHolds'     => C4::Context->preference('AllowOnShelfHolds'),
+                'DisplayMultiPlaceHold' => C4::Context->preference('DisplayMultiPlaceHold'),
+            );
             if (C4::Context->preference('TagsEnabled')) {
                 $template->param(TagsEnabled => 1);
                     foreach (qw(TagsShowOnList TagsInputOnList)) {
@@ -259,9 +262,11 @@ sub shelfpage {
                 for my $this_item (@$items) {
                     my $biblionumber = $this_item->{'biblionumber'};
                     my $record = GetMarcBiblio($biblionumber);
-                    $this_item->{XSLTBloc} =
-                        XSLTParse4Display($biblionumber, $record, "OPACXSLTResultsDisplay")
-                            if C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac';
+                    if (C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac') {
+                        $this_item->{XSLTBloc} = XSLTParse4Display($biblionumber, $record, "OPACXSLTResultsDisplay");
+                    } elsif (C4::Context->preference("XSLTResultsDisplay") && $type eq 'intranet') {
+                        $this_item->{XSLTBloc} = XSLTParse4Display($biblionumber, $record, "XSLTResultsDisplay");
+                    }
 
                     # the virtualshelfcontents table does not store these columns nor are they retrieved from the items
                     # and itemtypes tables, so I'm commenting them out for now to quiet the log -crn
@@ -292,6 +297,17 @@ sub shelfpage {
                     }
 
                 }
+                if($type eq 'intranet'){
+                    # Build drop-down list for 'Add To:' menu...
+                    my ($totalref, $pubshelves, $barshelves)=
+                    C4::VirtualShelves::GetSomeShelfNames($loggedinuser,'COMBO',1);
+                    $template->param(
+                        addbarshelves     => $totalref->{bartotal},
+                        addbarshelvesloop => $barshelves,
+                        addpubshelves     => $totalref->{pubtotal},
+                        addpubshelvesloop => $pubshelves,
+                    );
+                }
                 push @paramsloop, { display => 'privateshelves' } if $category == 1;
                 $showadd = 1;
                 my $i = 0;
index 6972771..dfd36f5 100644 (file)
@@ -139,12 +139,6 @@ a.tagnum {
 .yui-gf .yui-u {
        width: 79.2%;
 }
-/* Class to be added to toolbar when it starts being fixed at the top of the screen*/
-.floating {
-       -webkit-box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, .5);
-       box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, .5);
-    margin-top: 0;
-}
 
 tr.active td {
     background-color: #FFFFCC;
index 2ceafe7..f5d5bc2 100644 (file)
@@ -2411,6 +2411,10 @@ video {
     background-position:-3px -166px;
 }
 
+.icon-merge {
+    background-position:-48px -166px;
+}
+
 #toolbar .btn,
 #toolbar .dropdown-menu {
     font-size: 13px;
@@ -2545,6 +2549,7 @@ a.disabled {
 .modal-header .closebtn{margin-top:2px;}
 .closebtn{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.closebtn:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);}
 button.closebtn{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}
+
 .btn-group label,
 .btn-group select {
     font-size: 13px;
@@ -2570,4 +2575,10 @@ fieldset.rows table.mceListBox {
     font-size: 140%;
     font-family : monospace;
     padding : .3em;
-}
\ No newline at end of file
+}
+
+/* Class to be added to toolbar when it starts being fixed at the top of the screen*/
+.floating {
+    -webkit-box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, .5);
+    box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, .5);
+}
index cddddf7..6dd9c0d 100644 (file)
@@ -153,17 +153,17 @@ function SelectAll(){
     }
 }
 
-function addMultiple(){
+function addMultiple(biblist){
     var c_value = "";
-    if(document.bookbag_form.biblionumber.length > 0) {
-        for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
-            if (document.bookbag_form.biblionumber[i].checked) {
-                c_value = c_value + document.bookbag_form.biblionumber[i].value + "/";
+    if(biblist.length > 0) {
+        for (var i=0; i < biblist.length; i++) {
+            if (biblist[i].checked) {
+                c_value = c_value + biblist[i].value + "/";
             }
         }
         addSelRecords(c_value);
     } else {
-        c_value = c_value + document.bookbag_form.biblionumber.value + "/";
+        c_value = c_value + biblist.value + "/";
         addSelRecords(c_value);
     }
 }
@@ -403,19 +403,19 @@ function addSelToShelf() {
 
 ///  vShelfAdd()  builds url string for multiple-biblio adds.
 
-function vShelfAdd() {
-        bibs= new Array;
-        if(document.bookbag_form.biblionumber.length > 0) {
-                for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
-                        if (document.bookbag_form.biblionumber[i].checked) {
-                                bibs.push("biblionumber=" +  document.bookbag_form.biblionumber[i].value);
+function vShelfAdd(biblist) {
+        bibs = new Array();
+        if(biblist.length > 0) {
+                for (var i=0; i < biblist.length; i++) {
+                        if (biblist[i].checked) {
+                                bibs.push("biblionumber=" +  biblist[i].value);
                         }
                 }
-           if (bibs.length == 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
+        if (bibs.length == 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
             return bibs.join("&");
         } else {
-            if (document.bookbag_form.biblionumber.checked) {
-                return "biblionumber=" + document.bookbag_form.biblionumber.value;
+            if (biblist.checked) {
+                return "biblionumber=" + biblist.value;
             }
         }
 }
index 1b20b07..db5aaec 100644 (file)
@@ -30,25 +30,27 @@ function Dopop(link) {
         newin=window.open(link,'popup','width=500,height=500,toolbar=false,scrollbars=yes,resizeable=yes');
 }
 function cartList(){
+    var checkboxes = $("#searchresults").find(":checkbox");
+    var vshelf = vShelfAdd(checkboxes);
     if($("#addto").find("option:selected").attr("value") == "addtolist"){
         var shelfnumber = $("#addto").find("option:selected").attr("id").replace("s","");
-        if (vShelfAdd()) {
-             Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?shelfnumber='+shelfnumber+'&confirm=1&' + vShelfAdd());
+        if (vshelf) {
+             Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?shelfnumber='+shelfnumber+'&confirm=1&' + vshelf);
         }
         return false;
     } else if($("#addto").find("option:selected").attr("value") == "newlist"){
-        if (vShelfAdd()) {
-            Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?newshelf=1&' + vShelfAdd());
+        if (vshelf) {
+            Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?newshelf=1&' + vshelf);
         }
         return false;
     } else if($("#addto").find("option:selected").attr("value") == "morelists"){
-        if (vShelfAdd()) {
-            Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?' + vShelfAdd());
+        if (vshelf) {
+            Dopop('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?' + vshelf);
         }
         return false;
     }
     if($("#addto").find("option:selected").attr("value") == "addtocart"){
-        addMultiple();
+        addMultiple(checkboxes);
         return false;
     }
 }
index db51dfb..aa93c83 100644 (file)
@@ -1,16 +1,19 @@
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; [% IF ( viewshelf ) %]Lists &rsaquo; Contents of [% shelfname | html %][% ELSE %]Lists[% END %][% IF ( shelves ) %] &rsaquo; Create new list[% END %][% IF ( edit ) %] &rsaquo; Edit list [% shelfname | html %][% END %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
+[% IF ( viewshelf ) %]
+    <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
+    <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.fixFloat.js"></script>
+[% END %]
 <script type="text/javascript">
 //<![CDATA[ 
 
 var MSG_NO_ITEM_SELECTED = _("Nothing is selected.");
 var MSG_REMOVE_FROM_LIST = _("Are you sure you want to remove these records from the shelf?");
 var MSG_CONFIRM_DELETE_LIST = _("Are you sure you want to remove this list?");
-
+[% IF ( viewshelf ) %]
 $(document).ready(function(){
-       $("#addbarcode").focus();
+    [% IF ( itemsloop ) %]$('#searchheader').fixFloat();[% END %]
     $("span.clearall").html("<a id=\"CheckNone\" href=\"/cgi-bin/koha/shelves.pl\">"+_("Clear all")+"<\/a>");
     $("span.checkall").html("<a id=\"CheckAll\" href=\"/cgi-bin/koha/shelves.pl\">"+_("Select all")+"<\/a>");
     $("#CheckAll").click(function(){
@@ -21,8 +24,70 @@ $(document).ready(function(){
         $(".checkboxed").unCheckCheckboxes();
         return false;
     });
-    $("#placehold").show();
+    $(".placehold").on("click",function(e){
+        placeHold();
+        e.preventDefault();
+    });
+    $(".addtocart").show();
+    var param1 = "| <label for=\"addto\">"+_("Add to:")+"<\/label><select name=\"addto\" id=\"addto\"><option value=\"\"><\/option>";
+    [% IF ( intranetbookbag ) %]
+         param1 += "<option value=\"addtocart\">"+_("Cart")+"<\/option>";
+    [% END %]
+    [% IF ( virtualshelves ) %]
+        [% IF ( addbarshelves ) %]
+            param1 += "<optgroup label=\""+_("Your lists:")+"\">";
+            [% FOREACH addbarshelvesloo IN addbarshelvesloop %]
+                [% IF ( shelfnumber != addbarshelvesloo.shelfnumber ) %]
+                    param1 += "<option id=\"s[% addbarshelvesloo.shelfnumber %]\" value=\"addtolist\">[% addbarshelvesloo.shelfname |html %]<\/option>";
+                [% END %]
+            [% END %]
+            param1 += "<\/optgroup>";
+        [% END %]
+        [% IF ( addpubshelves ) %]
+            param1 += "<optgroup label=\""+_("Public lists:")+"\">";
+            [% FOREACH addpubshelvesloo IN addpubshelvesloop %]
+                [% IF ( shelfnumber != addpubshelvesloo.shelfnumber ) %]
+                    param1 += "<option id=\"s[% addpubshelvesloo.shelfnumber %]\" value=\"addtolist\">[% addpubshelvesloo.shelfname |html %]<\/option>";
+                [% END %]
+            [% END %]
+            param1 += "<\/optgroup>";
+        [% END %]
+        [% IF ( ( addbarshelvesloop && addbarshelvesloop.size > 9 ) || (addpubshelvesloop && addpubshelvesloop.size > 9 )) %]
+            param1 += "<option value=\"morelists\">[ "+_("More lists")+" ]<\/option>";
+        [% END %]
+        param1 +="<option value=\"newlist\">"+_("[ New list ]")+"<\/option>"
+    [% END %]
+    param1 += "<\/select> <button id=\"cartsubmit\" type=\"submit\" class=\"btn btn-mini\">"+_("Save")+"</button>";
+    $("span.addto").html(param1);
+    $("#cartsubmit").on("click",function(e){
+        cartList();
+        e.preventDefault();
+    });
+    $("#addto").change(function(){
+        cartList();
+    });
+    $(".addto").find("input:submit").click(function(e){
+        e.preventDefault();
+        cartList();
+    });
+    $("#selection_ops").show();
+    $(".merge-items").on("click",function(e){
+        e.preventDefault();
+        MergeItems();
+    });
+    $("#listform").on("submit",function(e){
+
+    });
+    $(".list-remove").on("click",function(e){
+        if($(".selection").filter(":checked").length > 0){
+            return confirm(MSG_REMOVE_FROM_LIST);
+        } else {
+            alert(MSG_NO_ITEM_SELECTED);
+            e.preventDefault();
+        }
+    });
 });
+[% END %]
 
        function confirmDelete(message){
                if (window.confirm(message)) {
@@ -75,7 +140,7 @@ $(document).ready(function(){
         }
         return true;
     }
-    
+
 function placeHold () {
     var checkedItems = $(".selection:checked");
     if ($(checkedItems).size() == 0) {
@@ -98,7 +163,7 @@ function placeHold () {
                var alertString2;
 
            if($("#shelfname").val() == ""){
-                       _alertString += _("- You must enter a List Name") + "\n";
+            _alertString += "- "+_("You must enter a List Name") + "\n";
                }
 
                if (_alertString.length==0) {
@@ -110,6 +175,31 @@ function placeHold () {
                        alert(alertString2);
                }
        }
+    function cartList(){
+        var checkboxes = $("#searchresults").find(":checkbox");
+        var vshelf = vShelfAdd(checkboxes);
+        if($("#addto").find("option:selected").attr("value") == "addtolist"){
+            var shelfnumber = $("#addto").find("option:selected").attr("id").replace("s","");
+            if (vshelf) {
+                 openWindow('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?shelfnumber='+shelfnumber+'&confirm=1&' + vshelf,'popup',500,500);
+            }
+            return false;
+        } else if($("#addto").find("option:selected").attr("value") == "newlist"){
+            if (vshelf) {
+                openWindow('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?newshelf=1&' + vshelf,'popup',500,500);
+            }
+            return false;
+        } else if($("#addto").find("option:selected").attr("value") == "morelists"){
+            if (vshelf) {
+                openWindow('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?' + vshelf,'popup',500,500);
+            }
+            return false;
+        }
+        if($("#addto").find("option:selected").attr("value") == "addtocart"){
+            addMultiple(checkboxes);
+            return false;
+        }
+    }
 //]]>
 </script>
 </head>
@@ -147,7 +237,7 @@ function placeHold () {
 
 [% IF ( viewshelf ) %]&rsaquo; Contents of <i>[% shelfname | html %]</i>[% END %][% IF ( shelves ) %] &rsaquo; Create new list[% END %][% IF ( edit ) %] &rsaquo; Edit list <i>[% shelfname | html %]</i>[% END %]</div>
 
-<div id="doc" class="yui-t7">
+<div id="doc2" class="yui-t7">
  <div id="bd">
   <div id="yui-main">
    <div class="yui-g">[% INCLUDE 'virtualshelves-toolbar.inc' %]
@@ -193,56 +283,67 @@ function placeHold () {
    <div class="yui-g">
     [% IF ( itemsloop ) %]
 
-       <form action="/cgi-bin/koha/virtualshelves/shelves.pl" method="post" class="checkboxed">
+    <h3>Contents of <i>[% shelfname | html %]</i></h3>
+    <div class="pages">[% pagination_bar %]</div>
+    <form action="/cgi-bin/koha/virtualshelves/shelves.pl" id="listform" method="post" class="checkboxed">
         <input type="hidden" name="viewshelf" value="[% shelfnumber %]" />
         <input type="hidden" name="modifyshelfcontents" value="1" />
- <fieldset>
-  <legend>Contents of <i>[% shelfname | html %]</i></legend>
-   
- [% IF ( itemsloop ) %]
-     <p><span class="checkall"></span> |
-     <span class="clearall"></span></p>
- [% END %]
-       
- [% IF direction == 'asc' %]
-     [% SET new_direction = 'desc' %]
- [% ELSE %]
-     [% SET direction = 'desc' %]
-     [% SET new_direction = 'asc' %]
- [% END %]
 
- <div class="pages">[% pagination_bar %]</div>
-    <table>
+[% IF direction == 'asc' %]
+    [% SET new_direction = 'desc' %]
+[% ELSE %]
+    [% SET direction = 'desc' %]
+    [% SET new_direction = 'asc' %]
+[% END %]
+
+<div id="searchheader">
+    [% IF ( itemsloop ) %]
+        <div id="selection_ops"><span class="checkall"></span> |
+        <span class="clearall"></span>
+
+        <span class="addto">| </span>
+        &nbsp;
+        [% IF ( CAN_user_reserveforothers && DisplayMultiPlaceHold ) %]
+            <div class="btn-group"><button class="btn btn-mini placehold"><i class="icon-hold"></i> Place hold</button></div>
+        [% END %]
+        [% IF ( allowremovingitems ) %]
+            <div class="btn-group"><button type="submit" class="btn btn-mini list-remove"><i class="icon-remove-sign"></i> Remove selected</button></div>
+        [% END %]
+        [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]<div class="btn-group"><button type="submit" class="btn btn-mini merge-items"><i class="icon-merge"></i> Merge selected</button></div>[% END %]
+        </div>
+    [% END %]
+</div>
+
+    <table id="searchresults">
             <tr>
                 [% IF ( itemsloop ) %]<th class="checkall">&nbsp;</th>[% END %]
 
                 [% UNLESS ( item_level_itypes ) %]<th>Item type</th>[% END %]
                 <th>
-                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=title&direction=[% IF sort != 'title' %]asc[% ELSE %][% new_direction %][% END %]">Title</a>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&amp;sort=title&amp;direction=[% IF sort != 'title' %]asc[% ELSE %][% new_direction %][% END %]">Title</a>
                     [% IF sort == 'title' %]
-                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" />
+                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" alt="[% direction %] sort" />
                     [% ELSE %]
-                        <img src="[% interface %]/[% theme %]/img/ascdesc.gif" />
+                        <img src="[% interface %]/[% theme %]/img/ascdesc.gif" alt="" />
                     [% END %]
                 </th>
                 <th>
-                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=author&direction=[% IF sort != 'author' %]asc[% ELSE %][% new_direction %][% END %]">Author</a>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&amp;sort=author&amp;direction=[% IF sort != 'author' %]asc[% ELSE %][% new_direction %][% END %]">Author</a>
                    [% IF sort == 'author' %]
-                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" />
+                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" alt="[% direction %] sort" />
                    [% ELSE %]
-                       <img src="[% interface %]/[% theme %]/img/ascdesc.gif" />
+                       <img src="[% interface %]/[% theme %]/img/ascdesc.gif" alt="" />
                    [% END %]
                  </th>
                 <th>Date added</th>
                 <th>
-                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&sort=itemcallnumber&direction=[% IF sort != 'itemcallnumber' %]asc[% ELSE %][% new_direction %][% END %]">Call number</a>
+                    <a href="/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=[% shelfnumber %]&amp;sort=itemcallnumber&amp;direction=[% IF sort != 'itemcallnumber' %]asc[% ELSE %][% new_direction %][% END %]">Call number</a>
                    [% IF sort == 'itemcallnumber' %]
-                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" />
+                        <img src="[% interface %]/[% theme %]/img/[% direction %].gif" alt="[% direction %] sort" />
                    [% ELSE %]
-                       <img src="[% interface %]/[% theme %]/img/ascdesc.gif" />
+                       <img src="[% interface %]/[% theme %]/img/ascdesc.gif" alt="" />
                    [% END %]
                  </th>
-                <th>&nbsp;</th>
             </tr>
                [% FOREACH itemsloo IN itemsloop %]
                        [% UNLESS ( loop.odd ) %]
@@ -264,31 +365,58 @@ function placeHold () {
                 [% UNLESS ( noItemTypeImages || !itemsloo.imageurl ) %]<img src="[% itemsloo.imageurl %]" alt="[% itemsloo.description %]" title="[% itemsloo.description %]" />[% END %][% itemsloo.description %]
                        </td>[% END %]
                        <td>
-                       [% INCLUDE 'biblio-default-view.inc' biblionumber = itemsloo.biblionumber %]
-                       [% itemsloo.title |html %][% FOREACH subtitl IN itemsloo.subtitle %] [% subtitl.subfield %][% END %]</a>
+                [% IF ( itemsloo.XSLTBloc ) %]
+                    [% itemsloo.XSLTBloc %]
+                [% ELSE %]
+                    [% INCLUDE 'biblio-default-view.inc' biblionumber = itemsloo.biblionumber %]
+                    [% itemsloo.title |html %][% FOREACH subtitl IN itemsloo.subtitle %] [% subtitl.subfield %][% END %]</a>
+                [% END %]
+                    <p class="hold">
+                        [% IF ( itemsloo.notforloan ) %]
+                            <span class="noholdstext">No holds allowed</span>
+                        [% ELSE %]
+                            [% IF ( itemsloo.ITEM_RESULTS.size ) %]
+                                <a id="reserve_[% itemsloo.biblionumber %]" href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% itemsloo.biblionumber %]">Holds</a>
+                                [% IF ( holdfor ) %] <span class="holdforlink">| <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% itemsloo.biblionumber %]&amp;findborrower=[% holdfor_cardnumber %]">Place hold for [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])</a></span>[% END %]
+                            [% ELSE %]
+                                <span class="noholdstext">No holds allowed</span>
+                            [% END %]
+                        [% END %]
+                        [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]
+                            | <a href="/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% itemsloo.biblionumber %]">Edit record</a>
+                        [% END %]
+                        [% IF ( CAN_user_editcatalogue_edit_items ) %]
+                            | <a href="/cgi-bin/koha/cataloguing/additem.pl?biblionumber=[% itemsloo.biblionumber %]">Edit items</a>
+                        [% END %]
+                    </p>
                        </td>
                        <td>[% itemsloo.author %]</td>
                        <td>[% itemsloo.dateadded %]</td>
                        <td>
-                [% FOREACH result IN itemsloo.ITEM_RESULTS %][% result.itemcallnumber %][% UNLESS loop.last %], [% END %][% END %]
+                <ul>
+                [% FOREACH result IN itemsloo.ITEM_RESULTS %]
+                    <li>[% result.holdingbranch %] [% IF ( result.location_intranet ) %] ([% result.location_intranet %]) [% END %]
+                        [% IF ( result.itemcallnumber ) %]
+                            [<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=[% result.itemcallnumber |url %]">[% result.itemcallnumber %]</a>]
+                        [% END %]
+                    </li>
+                [% END %]
+                </ul>
             </td>
-            <td>
-                       [% UNLESS ( itemsloo.notforloan ) %]
-                       <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% itemsloo.biblionumber %]">Holds</a>
-                       [% END %]
-                       </td>
                        </tr>
                [% END %]<!-- /itemsloop -->
-    </table><fieldset class="action">
+    </table>
+    <div class="pages">[% pagination_bar %]</div>
+    <fieldset class="action">
         [% IF ( itemsloop ) %]
-            <input type="button" id="placehold" style="display:none" onclick="placeHold(); return false;" value="Place holds" />
-            [% IF ( allowremovingitems ) %]<input type="submit" value="Remove selected records" onclick="return confirm(MSG_REMOVE_FROM_LIST);" />[% END %]
-            <input type="submit" value="Merge selected records" onclick="return MergeItems();" />
+            [% IF ( CAN_user_reserveforothers && DisplayMultiPlaceHold ) %]<input type="button" class="placehold" value="Place hold" />[% END %]
+            [% IF ( allowremovingitems ) %]<input type="submit" value="Remove selected records" class="
+            list-remove" />[% END %]
+            [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]<input type="submit" value="Merge selected records" class="merge-items" />[% END %]
         [% END %]
  </fieldset>
- </fieldset>
 </form>
+
        [% END %]
    </div>
 [% END %]<!-- /viewshelf -->
index 6bc0fe8..4fe70e4 100644 (file)
Binary files a/koha-tmpl/intranet-tmpl/prog/img/glyphicons-halflings-koha.png and b/koha-tmpl/intranet-tmpl/prog/img/glyphicons-halflings-koha.png differ