Bug 19103: Fix Stored XSS in patron-attr-types.pl
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / catalogue / results.tt
index 4d89a53..fc212d9 100644 (file)
@@ -1,6 +1,24 @@
+[% USE Koha %]
+[% USE Biblio %]
+[% USE KohaDates %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Catalog &rsaquo; [% IF ( searchdesc ) %]Results of search [% IF ( query_desc ) %]for '[% query_desc | html %]'[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s):&nbsp;'[% limit_desc | html %]'[% END %][% ELSE %]You did not specify any search criteria[% END %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
+[% INCLUDE 'browser-strings.inc' %]
+[% IF BiblioDefaultViewmarc %]
+    [% SET DetailPage="MARCdetail.pl" %]
+[% ELSIF BiblioDefaultViewlabeled_marc %]
+    [% SET DetailPage="labeledMARCdetail.pl" %]
+[% ELSIF BiblioDefaultViewisbd %]
+    [% SET DetailPage="ISBDdetail.pl" %]
+[% ELSE %]
+    [% SET DetailPage="detail.pl" %]
+[% END %]
+
+<!--[if lt IE 9]>
+<script type="text/javascript" src="[% interface %]/lib/shims/json2.min.js"></script>
+<![endif]-->
+<script type="text/javascript" src="[% interface %]/js/browser.js"></script>
 <script type="text/javascript">
 //<![CDATA[
 var MSG_NO_ITEM_SELECTED = _("Nothing is selected.");
@@ -10,13 +28,13 @@ var q_array = new Array();  // will hold search terms, if present
 // http://www.oreillynet.com/pub/a/javascript/2003/10/21/amazonhacks.html
 function verify_images() {
     $("img").each(function(i){
-        if ((this.src.indexOf('images.amazon.com') >= 0) || (this.src.indexOf('g-images.amazon.com') >=0)) {
+        if ((this.src.indexOf('images-amazon.com') >= 0) || (this.src.indexOf('images.amazon.com') >=0)) {
             w = this.width;
             h = this.height;
             if ((w == 1) || (h == 1)) {
-                this.src = 'http://g-images.amazon.com/images/G/01/x-site/icons/no-img-sm.gif';
+                this.src = 'https://images-na.ssl-images-amazon.com/images/G/01/x-site/icons/no-img-sm.gif';
             } else if ((this.complete != null) && (!this.complete)) {
-                this.src = 'http://g-images.amazon.com/images/G/01/x-site/icons/no-img-sm.gif';
+                this.src = 'https://images-na.ssl-images-amazon.com/images/G/01/x-site/icons/no-img-sm.gif';
             }
         }
     });
@@ -30,51 +48,93 @@ 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;
     }
 }
-$(window).load(function() {
-        new YAHOO.widget.Button("cartsubmit", { onclick: { fn: cartList }});
-});
 $(document).ready(function() {
-$("#placeholdc").empty();
+$("#cartsubmit").click(function(){
+    cartList();
+    return false;
+});
+$("#z3950submit").click(function(){
+    PopupZ3950();
+    return false;
+});
+
+$("#searchheader").on("click",".placehold", function(){
+    placeHold();
+    $(".btn-group").removeClass("open");
+    return false;
+});
+$(".placeholdfor").click(function(){
+    holdForPatron();
+    $(".btn-group").removeClass("open");
+    return false;
+});
+$("#forgetholdfor").click(function(){
+    forgetPatron();
+    $(".btn-group").removeClass("open");
+    return false;
+});
 $('#sortbyform').find("input:submit").hide();
 $('#sort_by').change(function() {
         $('#sortbyform').submit();
     });
-$(".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 %]
-        param1 += "<option id=\"s[% addbarshelvesloo.shelfnumber %]\" value=\"addtolist\">[% addbarshelvesloo.shelfname |html %]<\/option>";[% END %]
-        param1 += "<\/optgroup>";[% END %]
-        [% IF ( addpubshelves ) %]param1 += "<optgroup label=\""+_("Public lists:")+"\">"[% FOREACH addpubshelvesloo IN addpubshelvesloop %]+"<option id=\"s[% addpubshelvesloo.shelfnumber %]\" value=\"addtolist\">[% addpubshelvesloo.shelfname |html %]<\/option>"[% 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>"
+
+        [% IF Koha.Preference('virtualshelves') %]
+            [% IF add_to_some_private_shelves.count %]
+                param1 += "<optgroup label=\""+_("Your lists:")+"\">";
+                [% SET number_of_private_shelves = 0 %]
+                [% FOREACH s IN add_to_some_private_shelves %]
+                    [% IF shelfnumber != s.shelfnumber %]
+                        param1 += "<option id=\"s[% s.shelfnumber %]\" value=\"addtolist\">[% s.shelfname |html %]<\/option>";
+                        [% SET number_of_private_shelves = number_of_private_shelves + 1 %]
+                        [% IF number_of_private_shelves == 10 %][% LAST %][% END %]
+                    [% END %]
+                [% END %]
+                param1 += "<\/optgroup>";
+            [% END %]
+            [% IF add_to_some_public_shelves.count %]
+                param1 += "<optgroup label=\""+_("Public lists:")+"\">";
+                [% SET number_of_public_shelves = 0 %]
+                [% FOREACH s IN add_to_some_public_shelves %]
+                    [% IF shelfnumber != s.shelfnumber %]
+                        param1 += "<option id=\"s[% s.shelfnumber %]\" value=\"addtolist\">[% s.shelfname |html %]<\/option>";
+                        [% SET number_of_public_shelves = number_of_public_shelves + 1 %]
+                        [% IF number_of_public_shelves == 10 %][% LAST %][% END %]
+                    [% END %]
+                [% END %]
+                param1 += "<\/optgroup>";
+            [% END %]
+            [% IF ( add_to_some_private_shelves and add_to_some_private_shelves.count > 10 ) or ( add_to_some_public_shelves and add_to_some_public_shelves.count > 10 ) %]
+                param1 += "<option value=\"morelists\">[ "+_("More lists")+" ]<\/option>";
+            [% END %]
+            param1 +="<option value=\"newlist\">"+_("[ New list ]")+"<\/option>"
         [% END %]
+
         param1 += "<\/select> <input id=\"cartsubmit\" type=\"submit\" class=\"submit\" value=\""+_("Save")+"\" />";
  $('#sortsubmit').hide();
         $("span.clearall").html("<a id=\"CheckNone\" href=\"#\">"+_("Clear all")+"<\/a>");
@@ -94,7 +154,7 @@ $(".addtocart").show();
     $(".selection").show();
     [% IF ( query_desc ) %]
     toHighlight = $("p,span.results_summary,a.title");
-        var query_desc = "[% query_desc |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]";
+        var query_desc = "[% query_desc |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') | html %]";
         q_array = query_desc.split(" ");
         // ensure that we don't have "" at the end of the array, which can
         // break the highlighter
@@ -105,6 +165,52 @@ $(".addtocart").show();
         $("#highlight_toggle_on" ).hide().click(function() {highlightOn() ;});
         $("#highlight_toggle_off").show().click(function() {highlightOff();});
     [% END %]
+
+    [% IF (SEARCH_RESULTS) %]
+        var newresults = [
+            [%- FOREACH result IN SEARCH_RESULTS -%]
+                [%- result.biblionumber %],
+            [%- END -%]
+        ];
+        var browser = KOHA.browser('[% searchid %]', parseInt('[% biblionumber %]', 10));
+        browser.create([% SEARCH_RESULTS.first.result_number %], '[% query_cgi %]', '[% limit_cgi | uri %]','[% sort_cgi | uri %]',
+               newresults, '[% total %]');
+    [% END %]
+    [% IF (gotoPage && gotoNumber) %]
+        [% IF (gotoNumber == 'first') %]
+            window.location = '/cgi-bin/koha/catalogue/[% gotoPage %]?biblionumber=' + [% SEARCH_RESULTS.first.biblionumber %] + '&searchid=[% searchid %]';
+        [% ELSIF (gotoNumber == 'last') %]
+            window.location = '/cgi-bin/koha/catalogue/[% gotoPage %]?biblionumber=' + [% SEARCH_RESULTS.last.biblionumber %] + '&searchid=[% searchid %]';
+        [% END %]
+    [% END %]
+
+    [% IF LocalCoverImages %]
+        KOHA.LocalCover.LoadResultsCovers();
+    [% END %]
+
+    $("#select_all").on("click",function(e){
+        e.preventDefault();
+        selectAll();
+    });
+    $("#clear_all").on("click",function(e){
+        e.preventDefault();
+        clearAll();
+    });
+
+    $("#searchresults").on("click",".addtocart",function(e){
+        e.preventDefault();
+        var selection_id = this.id;
+        var biblionumber = selection_id.replace("cart","");
+        addRecord(biblionumber);
+    });
+
+    $("#searchresults").on("click",".cartRemove",function(e){
+        e.preventDefault();
+        var selection_id = this.id;
+        var biblionumber = selection_id.replace("cartR","");
+        delSingleRecord(biblionumber);
+    });
+
 });
 
 
@@ -115,16 +221,20 @@ $(".addtocart").show();
 function highlightOn() {
     var x;
     for (x in q_array) {
-        toHighlight.highlight(q_array[x]);
+        q_array[x] = q_array[x].toLowerCase();
+        var myStopwords = "[% Koha.Preference('NotHighlightedWords') %]".toLowerCase().split('|');
+        if ( (q_array[x].length > 0) && ($.inArray(q_array[x], myStopwords) == -1) ) {
+            toHighlight.highlight(q_array[x]);
+        }
     }
     $(".highlight_toggle").toggle();
 }[% END %]
 
 function selectAll () {
-    $(".selection").attr("checked", "checked");
+    $(".selection").prop("checked", true);
 }
 function clearAll () {
-    $(".selection").removeAttr("checked");
+    $(".selection").prop("checked", false);
 }
 function placeHold () {
     var checkedItems = $(".selection:checked");
@@ -152,16 +262,9 @@ function placeHold () {
 }
 
 function forgetPatron(){
-    $.cookie("holdfor",null, { path: "/", expires: 0 });
+    $.removeCookie("holdfor", { path: '/' });
     $(".holdforlink").remove();
-    $("#placeholdc").empty();
-    new YAHOO.widget.Button({
-    id: "placehold",
-    type: "button",
-    label: _("Place hold"),
-    container: "placeholdc",
-    onclick: { fn: placeHold }
- });
+    $("#placeholdc").html("<a class=\"btn btn-default btn-xs placehold\" href=\"#\"><i class=\"fa fa-sticky-note-o\"></i> "+_("Place hold")+"</a>");
 }
 
 function addToList () {
@@ -191,45 +294,19 @@ function PopupZ3950() {
 function GetZ3950Terms(){
        var strQuery="&frameworkcode=";
        [% FOREACH z3950_search_param IN z3950_search_params %]
-               strQuery += "&" + "[% z3950_search_param.name %]" + "=" + "[% z3950_search_param.encvalue %]";
+        strQuery += "&" + "[% z3950_search_param.name |uri %]" + "=" + "[% z3950_search_param.value |uri %]";
        [% END %]
        return strQuery;
 }
 
-YAHOO.util.Event.onContentReady("searchheader", function () {
-        new YAHOO.widget.Button( "z3950submit", { onclick: { fn: PopupZ3950 }});
-        [% IF ( holdfor ) %]
-        var holdFor = function (){
-            $("#holdFor").val("");
-            placeHold();
-        }
-        var holdForPatron = function () {
-            $("#holdFor").val("[% holdfor_cardnumber %]");
-            placeHold();
-        }
-        var HoldForButtonMenu = [
-            { text: _("Place hold"), onclick: { fn: holdFor }},
-            { text: _("Place hold for") + " [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])", onclick: { fn: holdForPatron }},
-            { text: _("Forget") + " [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])", onclick: { fn: forgetPatron }}];
-
-        var HoldForButton = new YAHOO.widget.Button({
-                type: "split",
-                label: _("Place hold"),
-                name: "holdfor",
-                menu: HoldForButtonMenu,
-                container: "placeholdc",
-                onclick: { fn: holdFor }
-        });
-        [% ELSE %]
-        new YAHOO.widget.Button({
-            id: "placehold",
-            type: "button",
-            label: _("Place hold"),
-            container: "placeholdc",
-            onclick: { fn: placeHold }
-         });
-        [% END %]
-}); // YAHOO onContentReady
+var holdFor = function (){
+    $("#holdFor").val("");
+    placeHold();
+}
+var holdForPatron = function () {
+    $("#holdFor").val("[% holdfor_cardnumber %]");
+    placeHold();
+}
 //]]>
 </script>
 </head>
@@ -240,7 +317,7 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
 <div id="breadcrumbs">
          <a href="/cgi-bin/koha/mainpage.pl">Home</a>
 &rsaquo; <a href="/cgi-bin/koha/catalogue/search.pl">Catalog</a>
-&rsaquo; Search [% IF ( query_desc ) %]for '[% query_desc |html %]'[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s):&nbsp;'[% limit_desc %]'[% END %]
+&rsaquo; Search [% IF ( query_desc ) %]for '[% query_desc |html %]'[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s):&nbsp;'[% limit_desc | html %]'[% END %]
 </div>
 
 <div id="doc3" class="yui-t1">
@@ -285,36 +362,48 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                 <!-- RESORT END -->
             </form>
             <h3>
-                [% total %] result(s) found [% IF ( query_desc ) %]for <span style="font-weight: bold;">'[% query_desc |html %]'</span>[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s): <span style="font-weight: bold;">'[% limit_desc %]'</span>[% END %][% IF ( LibraryName ) %] in [% LibraryName %] Catalog[% END %].<br />&nbsp;
+                [% total %] result(s) found [% IF ( query_desc ) %]for <span style="font-weight: bold;">'[% query_desc |html %]'</span>[% END %][% IF limit_desc  %]&nbsp;with limit(s): <span style="font-weight: bold;">'[% limit_desc | html %]'</span>[% END %][% IF ( LibraryName ) %] in [% LibraryName %] Catalog[% END %].<br />&nbsp;
             </h3>
             <div id="selection_ops" class="cartlist" style="display:none">
-                <a href="#" onclick="selectAll(); return false;">Select all</a>
+                <a href="#" id="select_all"><i class="fa fa-check"></i> Select all</a>
                 |
-                <a href="#" onclick="clearAll(); return false;">Clear all</a>
+                <a href="#" id="clear_all"><i class="fa fa-remove"></i> Clear all</a>
                 |
                 <a href="#" class="highlight_toggle" id="highlight_toggle_off">Unhighlight</a>
                 <a href="#" class="highlight_toggle" id="highlight_toggle_on">Highlight</a>
                 |
                <span class="addto"></span>
-                [% IF ( CAN_user_reserveforothers ) %]
-                    [% IF ( DisplayMultiPlaceHold ) %]
-                  | <span id="placeholdc"><input type="button" id="placehold" onclick="placeHold(); return false;" value="Place Hold"/></span>
-                    [% END %]
+                [% IF ( CAN_user_reserveforothers && DisplayMultiPlaceHold ) %]
+                [% IF ( holdfor ) %]
+                    <div id="placeholdc" class="btn-group">
+                        <button class="btn btn-default btn-xs placehold"><i class="fa fa-sticky-note-o"></i> Place hold</button>
+                        <button class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
+                        <span class="caret"></span>
+                        </button>
+                        <ul class="dropdown-menu">
+                            <li><a href="#" class="placehold">Place hold</a></li>
+                            <li><a href="#" class="placeholdfor">Place hold for [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])</a></li>
+                            <li class="divider"></li>
+                            <li><a href="#" id="forgetholdfor">Forget  [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])</a></li>
+                        </ul>
+                    </div>
+                [% ELSE %]
+                    <div id="placeholdc" class="btn-group"><a class="btn btn-default btn-xs placehold" href="#"><i class="fa fa-sticky-note-o"></i> Place hold</a></div>
+                [% END %]
                 [% END %]
 
-                               [% IF ( CAN_user_editcatalogue_edit_catalogue ) %] | <input type="button" id="z3950submit" onclick="PopupZ3950(); return false;" value="Z39.50 Search"/>[% END %]
+                [% IF ( CAN_user_editcatalogue_edit_catalogue ) %] <div class="btn-group"><a class="btn btn-default btn-xs" id="z3950submit" href="#"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>[% END %]
             </div>
         </div>
-    [% IF ( stopwords_removed ) %]<div><p class="tip">Ignored the following common words: "[% stopwords_removed %]"<p></div>[% END %]
     [% ELSE %]
         <div id="searchheader">
                        <form method="post" name="fz3950" class="fz3950bigrpad">
-                               <span id="z3950searchc"><input type="button" id="z3950search" value="Z39.50 Search" onclick="PopupZ3950(); return false;" /></span>
+                <button class="btn btn-default" type="button" id="z3950submit"><i class="fa fa-search"></i> Z39.50/SRU search</button>
                        </form>
             <h3>No results found</h3>
         [% IF ( searchdesc ) %]
             <p>
-                No results match your search [% IF ( query_desc ) %]for <span style="font-weight: bold;">'[% query_desc |html %]'</span>[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s): <span style="font-weight: bold;">'[% limit_desc %]'</span>[% END %][% IF ( LibraryName ) %] in [% LibraryName %] Catalog[% END %].
+                No results match your search [% IF ( query_desc ) %]for <span style="font-weight: bold;">'[% query_desc |html %]'</span>[% END %][% IF ( limit_desc ) %]&nbsp;with limit(s): <span style="font-weight: bold;">'[% limit_desc | html %]'</span>[% END %][% IF ( LibraryName ) %] in [% LibraryName %] Catalog[% END %].
             </p>
         [% ELSE %]
             <p>You did not specify any search criteria.</p>
@@ -334,7 +423,11 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
             <table>
                 <tr>
                     <td>
-                        Scan Index for: <input type="text" name="q" id="scan-index" size="35" value="" />
+                        [% IF ( scan_search_term_to_use ) %]
+                            Scan Index for: <input type="text" name="q" id="scan-index" size="35" value="[% scan_search_term_to_use | html %]" />
+                        [% ELSE %]
+                            Scan Index for: <input type="text" name="q" id="scan-index" size="35" value="" />
+                        [% END %]
                     </td>
                 </tr>
                 <tr>
@@ -349,7 +442,7 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                             [% IF ( ms_ticommaphr ) %]<option selected="selected" value="ti,phr">Title phrase</option>
                             [% ELSE %]<option value="ti,phr">Title phrase</option>[% END %]
                             [% IF ( ms_aucommaphr ) %]<option selected="selected" value="au,phr">Author</option>
-                            [% ELSE %]<option value"au,phr">Author</option>[% END %]
+                            [% ELSE %]<option value="au,phr">Author</option>[% END %]
                             [% IF ( ms_su ) %]<option selected="selected" value="su">Subject</option>
                             [% ELSE %]<option value="su">Subject</option>[% END %]
                             [% IF ( ms_sucommaphr ) %]<option selected="selected" value="su,phr">Subject phrase</option>
@@ -378,9 +471,9 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                     <th>Count</th>
                 </tr>
                 [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %]
-                    [% IF ( loop.odd ) %]<tr>[% ELSE %]<tr class="highlight">[% END %]
+                    <tr>
                         <td>
-                            <a href="/cgi-bin/koha/catalogue/search.pl?idx=[% SEARCH_RESULT.scan_index_to_use %]&amp;q=[% SEARCH_RESULT.scan_use |url %]&quot;[% SEARCH_RESULT.title %]&quot;">[% SEARCH_RESULT.title |html %]</a>
+                            <a href="/cgi-bin/koha/catalogue/search.pl?idx=[% scan_index_to_use %]&amp;q=[% SEARCH_RESULT.scan_use |url %]&quot;[% SEARCH_RESULT.title %]&quot;">[% SEARCH_RESULT.title |html %]</a>
                         </td>
                         <td>
                             [% SEARCH_RESULT.author %]
@@ -391,46 +484,6 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
             </form>
         [% ELSE %]
 
-                [% IF ( NoZebra ) %]
-                <!-- ######### -->
-                <div id="facets">
-                <dl>
-                <!-- FACETS START -->
-                [% IF ( opacfacets ) %]
-                    <dt id="facets1" onclick="var Elt=document.getElementById('facets_list');if (Elt.style.display!='block'){Elt.style.display='block';} else {Elt.style.display='none';}">
-                    Refine your search
-                    </dt>
-                    <dd id="facets_list" style="display:none;">
-                    <ul>
-                    [% FOREACH facets_loo IN facets_loop %]
-                    <li id="[% facets_loo.type_id %]">[% facets_loo.type_label %]
-                        <ul>
-                        [% FOREACH facet IN facets_loo.facets %]
-                            <li>
-                                <a href="/cgi-bin/koha/catalogue/search.pl?q=[% facet.searchdesc %] and [% facet.type_link_value %]:[% facet.facet_link_value %]" title="[% facet.facet_title_value %]">
-                                    [% facet.facet_label_value %]
-                                </a> ([% facet.facet_count %])
-                            </li>
-                        [% END %]
-                        [% IF ( facets_loo.expandable ) %]
-                            <li class="showmore">
-                                <a href="/cgi-bin/koha/catalogue/search.pl?q=[% facets_loo.searchdesc %][% IF ( offset ) %]&amp;offset=[% offset %][% END %]&amp;expand=[% facets_loo.expand %]#[% facets_loo.type_id %]">
-                                    Show more
-                                </a>
-                            </li>
-                        [% END %]
-                        </ul>
-                    </li>
-                    [% END %]
-                    </ul>
-                    </dd>
-                [% END %]
-                <!-- FACETS END -->
-                </dl>
-            </div>
-            <!-- ######### -->
-            <!-- NoZebra -->[% END %]
-
             <div id="searchresults">
                 <form action="/cgi-bin/koha/catalogue/search.pl" method="get" name="bookbag_form" id="bookbag_form">
                 [% IF ( searchdesc ) %]
@@ -445,19 +498,32 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                     <!-- TABLE RESULTS START -->
                 <table>
                     <tr>
-                        [% IF ( AmazonCoverImages ) %]<th>&nbsp;</th>[% END %]
+                        [% IF ( AmazonCoverImages || LocalCoverImages ) %]<th>&nbsp;</th>[% END %]
                         <th colspan="2">Results</th>
                         <th>Location</th>
                     </tr>
                         <!-- Actual Search Results -->
+                        [% SET MaxSearchResultsItemsPerRecordStatusCheck = Koha.Preference('MaxSearchResultsItemsPerRecordStatusCheck') %]
                         [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %]
-                         [% IF ( loop.odd ) %]<tr>[% ELSE %]<tr class="highlight">[% END %]
-                            [% IF ( AmazonCoverImages ) %]
+                            <tr>
+                            [% IF ( AmazonCoverImages || LocalCoverImages ) %]
                                 <td>
-                                    <a class="p1" href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% SEARCH_RESULT.biblionumber |url %]">
-                                                                       
-                                        <img src="[% IF ( SEARCH_RESULT.normalized_isbn ) %]http://images.amazon.com/images/P/[% SEARCH_RESULT.normalized_isbn %].01.TZZZZZZZ.jpg[% ELSE %]http://g-images.amazon.com/images/G/01/x-site/icons/no-img-sm.gif[% END %]" alt="" class="thumbnail" />
-                                    </a></td>
+                                    [% IF ( LocalCoverImages) %]
+                                        <a class="p1" href="/cgi-bin/koha/catalogue/[% DetailPage %]?biblionumber=[% SEARCH_RESULT.biblionumber |url %]">
+                                        <span title="[% SEARCH_RESULT.biblionumber |url %]" class="[% SEARCH_RESULT.biblionumber %]" id="local-thumbnail[% loop.count %]"></span>
+                                        </a>
+                                    [% END %]
+                                    [% IF ( AmazonCoverImages ) %]
+                                        [% IF ( SEARCH_RESULT.normalized_isbn ) %]
+                                            <a class="p1" href="/cgi-bin/koha/catalogue/[% DetailPage %]?biblionumber=[% SEARCH_RESULT.biblionumber |url %]">
+                                            <img src="https://images-na.ssl-images-amazon.com/images/P/[% SEARCH_RESULT.normalized_isbn %].01.TZZZZZZZ.jpg" alt="" class="thumbnail" />
+                                        [% ELSIF ( !LocalCoverImages ) %]
+                                            <a class="p1 no-amazon-cover" href="/cgi-bin/koha/catalogue/[% DetailPage %]?biblionumber=[% SEARCH_RESULT.biblionumber |url %]">
+                                            <img src="https://images-na.ssl-images-amazon.com/images/G/01/x-site/icons/no-img-sm.gif" alt="" class="thumbnail" />
+                                        [% END %]
+                                        </a>
+                                    [% END %]
+                                </td>
                             [% END %]
                             <td>
                                 <input type="checkbox" class="selection" id="bib[% SEARCH_RESULT.biblionumber %]" name="biblionumber" value="[% SEARCH_RESULT.biblionumber %]" style="display:none" />
@@ -512,37 +578,62 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                                         [% IF ( SEARCH_RESULT.size ) %] ; [% SEARCH_RESULT.size %][% END %]</span> [% IF ( SEARCH_RESULT.isbn ) %]<span class="results_isbn">ISBN: [% SEARCH_RESULT.isbn | replace('\s\|', ', ')%]</span>[% END %]
                                         <span class="results_itemtype">[% SEARCH_RESULT.description %]</span>
                                         [% IF ( SEARCH_RESULT.timestamp ) %] <i>(modified on [% SEARCH_RESULT.timestamp %])</i>[% END %]
-                                        [% IF ( SEARCH_RESULT.cn_class ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=[% SEARCH_RESULT.cn_class |url %]">[% SEARCH_RESULT.cn_class %]</a>][% END %]
+                                        [% IF ( SEARCH_RESULT.cn_class ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% SEARCH_RESULT.cn_class |uri %]%22">[% SEARCH_RESULT.cn_class %]</a>][% END %]
                                     </p>
                                     [% IF ( SEARCH_RESULT.searchhighlightblob ) %]<p class="searchhighlightblob">[% SEARCH_RESULT.searchhighlightblob %]</p>[% END %]
 
-                                    [% IF ( SEARCH_RESULT.authorised_value_images ) %]
-                                <p>
-                                  [% FOREACH authorised_value_image IN SEARCH_RESULT.authorised_value_images %]
-                                  <img src="[% authorised_value_image.imageurl %]" alt="[% authorised_value_image.description %]" />
-                                  [% END %]
-                                </p>
                                 [% END %]
-
                                 [% END %]
-                                [% END %]
-                                  <p class="hold">[% IF ( SEARCH_RESULT.norequests ) %]
-                                  <span class="noholdstext">No holds allowed</span>
-                              [% ELSE %]
-                                  <a id="reserve_[% SEARCH_RESULT.biblionumber %]" href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]">Holds</a>
-                                  [% IF ( holdfor ) %] <span class="holdforlink">| <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]&amp;findborrower=[% holdfor_cardnumber %]">Place hold for [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])</a></span>[% END %]
-                              [% END %]
+                                  <p class="hold">
+
+                            [% IF ( SEARCH_RESULT.norequests ) %]
+                                <span class="noholdstext">No holds allowed</span>
+                            [% ELSE %]
+                                <a id="reserve_[% SEARCH_RESULT.biblionumber %]" href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]">Holds ([% Biblio.HoldsCount( SEARCH_RESULT.biblionumber ) %])</a>
+                                [% IF ( holdfor ) %] <span class="holdforlink">| <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]&amp;findborrower=[% holdfor_cardnumber %]">Place hold for [% holdfor_firstname %] [% holdfor_surname %] ([% holdfor_cardnumber %])</a></span>[% END %]
+                            [% END %]
+
+                                [% IF Koha.Preference('intranetbookbag') == 1 %]
+                                    [% IF ( SEARCH_RESULT.incart ) %]
+                                        | <a class="addtocart" id="cart[% SEARCH_RESULT.biblionumber %]" href="#">In your cart</a> <a class="cartRemove" id="cartR[% SEARCH_RESULT.biblionumber %]" href="#">(remove)</a>
+                                    [% ELSE %]
+                                        | <a class="addtocart" id="cart[% SEARCH_RESULT.biblionumber %]" href="#">Add to cart</a> <a style="display:none;" class="cartRemove" id="cartR[% SEARCH_RESULT.biblionumber %]" href="#">(remove)</a>
+                                    [% END %]
+                                [% END # / IF intranetbookbag %]
+
+                          [% IF Koha.Preference('ArticleRequests') %]
+                              | <a id="requst_article_[% SEARCH_RESULT.biblionumber %]" href="/cgi-bin/koha/circ/request-article.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]">Request article</a>
+                          [% END %]
+
                           [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]
                           | <a href="/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]">Edit record</a>
                           [% END %]
                           [% IF ( CAN_user_editcatalogue_edit_items ) %]
                           | <a href="/cgi-bin/koha/cataloguing/additem.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]">Edit items</a>
-                          [% END %]</p>
+                          [% END %]
+
+                          [% IF ( OPACBaseURL ) %]
+                              <span class="view-in-opac">
+                                | <a href="[% Koha.Preference('OPACBaseURL') %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% SEARCH_RESULT.biblionumber %]" target="_blank">OPAC view</a>
+                              </span>
+                          [% END %]
+
+                                </p>
                                 </td>
 
                                 <td><div class="availability">
-                                    [% IF ( SEARCH_RESULT.items_count ) %]<strong>[% SEARCH_RESULT.items_count %]
-                                    [% IF ( SEARCH_RESULT.itemsplural ) %]items[% ELSE %]item[% END %][% IF ( SEARCH_RESULT.availablecount ) %], [% SEARCH_RESULT.availablecount %] available:[% ELSE %], None available[% END %]</strong>
+                                    [% IF ( SEARCH_RESULT.items_count ) %]
+                                        <strong>
+                                            [% IF MaxSearchResultsItemsPerRecordStatusCheck && SEARCH_RESULT.items_count > MaxSearchResultsItemsPerRecordStatusCheck %]
+                                                <span class="blocker inaccurate-item-statuses" title="Item statuses may be inaccurate. Please view the record details for accurate item statuses">
+                                            [% END %]
+
+                                            [% SEARCH_RESULT.items_count %] [% IF ( SEARCH_RESULT.itemsplural ) %]items[% ELSE %]item[% END %][% IF ( SEARCH_RESULT.availablecount ) %], [% SEARCH_RESULT.availablecount %] available:[% ELSE %], None available[% END %]
+
+                                            [% IF MaxSearchResultsItemsPerRecordStatusCheck && SEARCH_RESULT.items_count > MaxSearchResultsItemsPerRecordStatusCheck %]
+                                                </span>
+                                            [% END %]
+                                        </strong>
 
                                     [% IF ( SEARCH_RESULT.availablecount ) %]
                                     <ul>
@@ -556,7 +647,7 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                                         [% END %]
                                         [% IF ( available_items_loo.branchname ) %][% available_items_loo.branchname %][% END %]
                                         [% IF ( available_items_loo.location ) %][% available_items_loo.location %][% END %]
-                                        [% IF ( available_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=[% available_items_loo.itemcallnumber |url %]">[% available_items_loo.itemcallnumber %]</a>][% END %]
+                                        [% IF ( available_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% available_items_loo.itemcallnumber |uri %]%22">[% available_items_loo.itemcallnumber %]</a>][% END %]
                                         ([% available_items_loo.count %])
                                         [% IF item_level_itypes && available_items_loo.description %]
                                         <br/>[% available_items_loo.description %]
@@ -578,8 +669,8 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                                         [% END %]
                                         [% IF ( onloan_items_loo.branchname ) %][% onloan_items_loo.branchname %][% END %]
                                         [% IF ( onloan_items_loo.location ) %][% onloan_items_loo.location %][% END %]
-                                        [% IF ( onloan_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=[% onloan_items_loo.itemcallnumber |url %]">[% onloan_items_loo.itemcallnumber %]</a>][% END %]
-                                        ([% onloan_items_loo.count %][% IF ( onloan_items_loo.longoverdue ) %], [% onloan_items_loo.longoverdue %] long overdue[% END %]) date due: [% onloan_items_loo.due_date %]
+                                        [% IF ( onloan_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% onloan_items_loo.itemcallnumber |uri %]%22">[% onloan_items_loo.itemcallnumber %]</a>][% END %]
+                                        ([% onloan_items_loo.count %][% IF ( onloan_items_loo.longoverdue ) %], [% onloan_items_loo.longoverdue %] long overdue[% END %]) date due: [% onloan_items_loo.due_date | $KohaDates %]
                                         [% IF item_level_itypes && onloan_items_loo.description %]
                                         <br/>[% onloan_items_loo.description %]
                                         [% END %]
@@ -600,8 +691,8 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                                         [% END %]
                                         [% IF ( other_items_loo.branchname ) %][% other_items_loo.branchname %][% END %]
                                         [% IF ( other_items_loo.location ) %][% other_items_loo.location %][% END %]
-                                        [% IF ( other_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=[% other_items_loo.itemcallnumber |url %]">[% other_items_loo.itemcallnumber %]</a>][% END %]
-                                        [% IF ( other_items_loo.wthdrawn ) %](Withdrawn)[% END %]
+                                        [% IF ( other_items_loo.itemcallnumber ) %][<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% other_items_loo.itemcallnumber |uri %]%22">[% other_items_loo.itemcallnumber %]</a>][% END %]
+                                        [% IF ( other_items_loo.withdrawn ) %](Withdrawn)[% END %]
                                         [% IF ( other_items_loo.itemlost ) %](Lost)[% END %]
                                         [% IF ( other_items_loo.damaged ) %](Damaged)[% END %]
                                         [% IF ( other_items_loo.intransit ) %](In transit)[% END %]
@@ -622,7 +713,7 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
                                     [% FOREACH ALTERNATEHOLDING IN SEARCH_RESULT.ALTERNATEHOLDINGS %]
                                     <li id="alternateholdings">[% ALTERNATEHOLDING.holding %]</li>
                                     [% END %]
-                                    </li>
+                                    </ul>
                                     [% ELSE %]
                                     <span class="unavailable">No items</span>
                                     [% END %]