Bug 17018: Split AdvancedSearchTypes for staff and OPAC

This patch adds a new system preference, OpacAdvancedSearchTypes, as an
OPAC-specific version of the AdvancedSearchTypes preference. Values from
AdvancedSearchTypes are copied to OpacAdvancedSearchTypes so that
behavior is consistent.

The patch also alters the output of the "Most popular" page so that:
1. The page heading is correct ("Most popular titles" instead of "Top
issues").
2. The table show both item type and collection whether or not the user
has submitted query with one of those fields as a filter.

To test, apply the patch and run the database update process.

- Go to Administration -> System preferences.
- Search for AdvancedSearchTypes. You should get two results, one for
  the OPAC preference and one for the staff interface.
- Check that the OpacAdvancedSearchTypes settings match the
  AdvancedSearchTypes settings.
- View the advanced search pages in the staff interface and OPAC to
  confirm that the tabs look correct.
- Change the OpacAdvancedSearchTypes and AdvancedSearchTypes settings to
  be different and confirm that each is applied separately to each
  interface.
- Enable the OpacTopissue system preference.
- View the "Most popular" page in the OPAC.
  - The page heading should be correct.
  - The OpacAdvancedSearchTypes settings should be reflected in the
    "Refine your search" sidebar: If "Collection" is checked, a filter
    for collection should appear. If "Item types" is checked, a filter
    for item types should appear.
  - The output of your search should include collection and item type
    regardless of what filters you've submitted.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Owen Leonard 2022-02-14 19:18:15 +00:00 committed by Fridolin Somers
parent 69b9e1ddf4
commit c73967d87c
8 changed files with 38 additions and 17 deletions

View File

@ -0,0 +1,13 @@
use Modern::Perl;
return {
bug_number => "17018",
description => "Split AdvancedSearchTypes for staff and OPAC",
up => sub {
my ($args) = @_;
my $dbh = $args->{dbh};
$dbh->do( "INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) SELECT 'OpacAdvancedSearchTypes', `value`, `options`, 'Select which set of fields are available as limits on the OPAC advanced search page', `type` FROM systempreferences WHERE variable = 'AdvancedSearchTypes'" );
},
}

View File

@ -390,6 +390,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('OpacAddMastheadLibraryPulldown','0','','Adds a pulldown menu to select the library to search on the opac masthead.','YesNo'),
('OpacAdvSearchMoreOptions','pubdate,itemtype,language,subtype,sorting,location','Show search options for the expanded view (More options)','pubdate|itemtype|language|subtype|sorting|location','multiple'),
('OpacAdvSearchOptions','pubdate,itemtype,language,sorting,location','Show search options','pubdate|itemtype|language|subtype|sorting|location','multiple'),
('OpacAdvancedSearchTypes','itemtypes','itemtypes|ccode','Select which set of fields are available as limits on the OPAC advanced search page','Choice'),
('OPACAllowHoldDateInFuture','0','','If set, along with the AllowHoldDateInFuture system preference, OPAC users can set the date of a hold to be in the future.','YesNo'),
('OpacAllowPublicListCreation','1',NULL,'If set, allows opac users to create public lists','YesNo'),
('OpacAllowSharingPrivateLists','0',NULL,'If set, allows opac users to share private lists with other patrons','YesNo'),

View File

@ -871,6 +871,12 @@ OPAC:
subtype: Subtypes
sorting: Sorting
location: Location and availability
-
- Show tabs in the OPAC advanced search for limiting searches on the
- pref: OpacAdvancedSearchTypes
class: long
- "fields (separate values with |). Tabs appear in the order listed.<br/>"
- "<em>Currently supported values</em>: Item types (<strong>itemtypes</strong>), Collection, (<strong>ccode</strong>) and Shelving Location (<strong>loc</strong>)."
Authentication:
-
- pref: OPACShibOnly

View File

@ -96,11 +96,11 @@ Searching:
0: "Don't add"
- search history of the unlogged user to the next patron logging in.
-
- Show tabs in the OPAC and staff interface advanced search for limiting searches on the
- Show tabs in the staff interface advanced search for limiting searches on the
- pref: AdvancedSearchTypes
class: long
- "fields (separate values with |). Tabs appear in the order listed.<br/>"
- "<em>Currently supported values</em>: Item types (<strong>itemtypes</strong>), Collection Codes (<strong>ccode</strong>) and Shelving Location (<strong>loc</strong>)."
- "<em>Currently supported values</em>: Item types (<strong>itemtypes</strong>), Collection, (<strong>ccode</strong>) and Shelving Location (<strong>loc</strong>)."
-
- Limit the languages listed in the advanced search drop-down to the
- pref: AdvancedSearchLanguages

View File

@ -25,8 +25,8 @@
</select></li>
[% END %]
[% AdvancedSearchTypes = Koha.Preference('AdvancedSearchTypes').split('\|') %]
[% IF AdvancedSearchTypes.grep('^itemtypes$').size %]
[% OpacAdvancedSearchTypes = Koha.Preference('OpacAdvancedSearchTypes').split('\|') %]
[% IF OpacAdvancedSearchTypes.grep('^itemtypes$').size %]
<li>
<label for="itemtype">Limit to: </label>
<select name="itemtype" id="itemtype">
@ -44,7 +44,7 @@
</li>
[% END %]
[% IF AdvancedSearchTypes.grep('^ccode$').size %]
[% IF OpacAdvancedSearchTypes.grep('^ccode$').size %]
<li>
<label for="ccode">Limit to:</label>
<select name="ccode" id="ccode">

View File

@ -65,9 +65,10 @@
<div class="col-10 order-first order-md-first order-lg-2">
<div id="topissues" class="maincontent">
<h1>Top issues</h1>
<h1>Most popular</h1>
[% IF ( results ) %]
[% OpacAdvancedSearchTypes = Koha.Preference('OpacAdvancedSearchTypes').split('\|') %]
<table id="topissuest" class="table table-bordered table-striped">
<caption>
The [% limit | html %] most checked-out
@ -87,7 +88,8 @@
<thead>
<tr>
<th class="anti-the">Title</th>
<th>[% IF ( ccodesearch ) %]Collection[% ELSE %]Item type[% END %]</th>
<th>Item type</th>
<th>Collection</th>
<th>Checkouts</th>
[% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
<th class="NoSort">&nbsp;</th>
@ -110,13 +112,12 @@
[% IF ( result.item('size') ) %][% result.item('size') | html %][% END %]</p>
</td>
<td>
[% IF Koha.Preference('AdvancedSearchTypes') == 'ccode' %]
<span class="tdlabel">Collection</span>
[% AuthorisedValues.GetByCode('ccode', result.ccode, 1) | html %]
[% ELSE %]
<span class="tdlabel">Item type</span>
[% ItemTypes.GetDescription(result.itemtype) | html %]
[% END %]
<span class="tdlabel">Item type</span>
[% ItemTypes.GetDescription(result.itemtype) | html %]
</td>
<td>
<span class="tdlabel">Collection</span>
[% AuthorisedValues.GetByCode('ccode', result.ccode, 1) | html %]
</td>
<td data-order="[% result.count | html %]">
<span class="tdlabel">Checkouts: </span>
@ -150,7 +151,7 @@
<script>
$(function() {
$("#topissuest").dataTable($.extend(true, {}, dataTablesDefaults, {
"sorting": [[2, "desc"]],
"sorting": [[3, "desc"]],
"columnDefs": [
{ "sortable": false, "searchable": false, 'targets': [ 'NoSort' ] },
{ "type": "anti-the", "targets" : [ "anti-the" ] }

View File

@ -239,7 +239,7 @@ foreach my $itemtype ( keys %{$itemtypes} ) {
my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
my @advancedsearchesloop;
my $cnt;
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
my $advanced_search_types = C4::Context->preference("OpacAdvancedSearchTypes") || "itemtypes";
my @advanced_search_types = split(/\|/, $advanced_search_types);
my $hidingrules = C4::Context->yaml_preference('OpacHiddenItems') // {};

View File

@ -64,7 +64,7 @@ if (!$do_it && C4::Context->userenv && C4::Context->userenv->{'branch'} ) {
}
my $itemtype = $input->param('itemtype') || '';
my $timeLimit = $input->param('timeLimit') || 3;
my $advanced_search_types = C4::Context->preference('AdvancedSearchTypes');
my $advanced_search_types = C4::Context->preference('OpacAdvancedSearchTypes');
my @advanced_search_types = split /\|/, $advanced_search_types;
my $params = {