@@ -, +, @@
---
C4/Search.pm | 17 +++---
catalogue/search.pl | 60 +++++++++++---------
.../intranet-tmpl/prog/en/css/staff-global.css | 16 +++--
.../en/modules/admin/preferences/searching.pref | 9 +--
.../prog/en/modules/catalogue/advsearch.tt | 50 ++++++++++------
koha-tmpl/opac-tmpl/prog/en/css/opac.css | 8 +-
.../opac-tmpl/prog/en/modules/opac-advsearch.tt | 29 +++++++++-
opac/opac-search.pl | 59 +++++++++++---------
8 files changed, 150 insertions(+), 98 deletions(-)
--- a/C4/Search.pm
+++ a/C4/Search.pm
@@ -1305,7 +1305,7 @@ sub buildQuery {
warn "QUERY BEFORE LIMITS: >$query<" if $DEBUG;
# add limits
- my $group_OR_limits;
+ my %group_OR_limits;
my $availability_limit;
foreach my $this_limit (@limits) {
if ( $this_limit =~ /available/ ) {
@@ -1322,17 +1322,16 @@ sub buildQuery {
# group_OR_limits, prefixed by mc-
# OR every member of the group
elsif ( $this_limit =~ /mc/ ) {
-
- if ( $this_limit =~ /mc-ccode:/ ) {
+ my ($k,$v) = split(/:/, $this_limit,2);
+ if ( $k !~ /mc-i(tem)?type/ ) {
# in case the mc-ccode value has complicating chars like ()'s inside it we wrap in quotes
$this_limit =~ tr/"//d;
- my ($k,$v) = split(/:/, $this_limit,2);
$this_limit = $k.":\"".$v."\"";
}
- $group_OR_limits .= " or " if $group_OR_limits;
- $limit_desc .= " or " if $group_OR_limits;
- $group_OR_limits .= "$this_limit";
+ $group_OR_limits{$k} .= " or " if $group_OR_limits{$k};
+ $limit_desc .= " or " if $group_OR_limits{$k};
+ $group_OR_limits{$k} .= "$this_limit";
$limit_cgi .= "&limit=$this_limit";
$limit_desc .= " $this_limit";
}
@@ -1355,9 +1354,9 @@ sub buildQuery {
}
}
}
- if ($group_OR_limits) {
+ foreach my $k (keys (%group_OR_limits)) {
$limit .= " and " if ( $query || $limit );
- $limit .= "($group_OR_limits)";
+ $limit .= "($group_OR_limits{$k})";
}
if ($availability_limit) {
$limit .= " and " if ( $query || $limit );
--- a/catalogue/search.pl
+++ a/catalogue/search.pl
@@ -239,44 +239,50 @@ my $categories = GetBranchCategories(undef,'searchdomain');
$template->param(branchloop => \@branch_loop, searchdomainloop => $categories);
# load the Type stuff
-# load the Type stuff
my $itemtypes = GetItemTypes;
# the index parameter is different for item-level itemtypes
my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
-my @itemtypesloop;
-my $selected=1;
+my @advancedsearchesloop;
my $cnt;
-my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes");
-
-if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') { foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) {
- my %row =( number=>$cnt++,
- ccl => qq($itype_or_itemtype,phr),
+my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
+my @advanced_search_types = split(/\|/, $advanced_search_types);
+
+foreach my $advanced_srch_type (@advanced_search_types) {
+ if ($advanced_srch_type eq 'itemtypes') {
+ # itemtype is a special case, since it's not defined in authorized values
+ my @itypesloop;
+ foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) {
+ my %row =( number=>$cnt++,
+ ccl => "$itype_or_itemtype,phr",
code => $thisitemtype,
- selected => $selected,
description => $itemtypes->{$thisitemtype}->{'description'},
- count5 => $cnt % 4,
- imageurl=> getitemtypeimagelocation( 'intranet', $itemtypes->{$thisitemtype}->{'imageurl'} ),
+ imageurl=> getitemtypeimagelocation( 'opac', $itemtypes->{$thisitemtype}->{'imageurl'} ),
);
- $selected = 0 if ($selected) ;
- push @itemtypesloop, \%row;
- }
- $template->param(itemtypeloop => \@itemtypesloop);
-} else {
- my $advsearchtypes = GetAuthorisedValues($advanced_search_types);
- for my $thisitemtype (sort {$a->{'lib'} cmp $b->{'lib'}} @$advsearchtypes) {
- my %row =(
- number=>$cnt++,
- ccl => $advanced_search_types,
+ push @itypesloop, \%row;
+ }
+ my %search_code = ( advanced_search_type => $advanced_srch_type,
+ code_loop => \@itypesloop );
+ push @advancedsearchesloop, \%search_code;
+ } else {
+ # covers all the other cases: non-itemtype authorized values
+ my $advsearchtypes = GetAuthorisedValues($advanced_srch_type, '', 'opac');
+ my @authvalueloop;
+ for my $thisitemtype (@$advsearchtypes) {
+ my %row =(
+ number=>$cnt++,
+ ccl => $advanced_srch_type,
code => $thisitemtype->{authorised_value},
- selected => $selected,
description => $thisitemtype->{'lib'},
- count5 => $cnt % 4,
- imageurl=> getitemtypeimagelocation( 'intranet', $thisitemtype->{'imageurl'} ),
- );
- push @itemtypesloop, \%row;
+ imageurl => getitemtypeimagelocation( 'intranet', $thisitemtype->{'imageurl'} ),
+ );
+ push @authvalueloop, \%row;
+ }
+ my %search_code = ( advanced_search_type => $advanced_srch_type,
+ code_loop => \@authvalueloop );
+ push @advancedsearchesloop, \%search_code;
}
- $template->param(itemtypeloop => \@itemtypesloop);
}
+$template->param(advancedsearchesloop => \@advancedsearchesloop);
# The following should only be loaded if we're bringing up the advanced search template
if ( $template_type eq 'advsearch' ) {
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -2054,32 +2054,36 @@ fieldset.rows+h3 {clear:both;padding-top:.5em;}
padding-left:20px
}
-#advanced-search fieldset {
+.adsearch {
+ margin: 0;
+}
+
+.advsearch fieldset {
border : 1px solid #EEE;
-moz-border-radius : 3px;
border-radius : 3px;
}
-#advanced-search fieldset.action {
+.advsearch fieldset.action {
border : 0;
}
-#advanced-search fieldset fieldset {
+.advsearch fieldset fieldset {
border : 1px solid #EEE;
margin : 0;
padding : .3em .5em;
-moz-border-radius : 0;
border-radius : 0;
}
-#advanced-search fieldset fieldset+fieldset {
+.advsearch fieldset fieldset+fieldset {
border-top : 0;
}
-#advanced-search table {
+.advsearch table {
border-spacing : 5px;
border-collapse : separate;
border-width : 0;
}
-#advanced-search td {
+.advsearch td {
border : 1px solid #EEE;
padding : 0.3em 0.4em;
}
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
@@ -71,12 +71,11 @@ Searching:
- subdivisions for searches generated by clicking on subject tracings.
Search Form:
-
- - Show checkboxes to search by
+ - Show tabs in OPAC and staff-side advanced search for limiting searches on the
- pref: AdvancedSearchTypes
- choices:
- itemtypes: itemtype
- ccode: collection code
- - on the OPAC and staff advanced search pages.
+ class: long
+ - "fields (separate values with |). Tabs appear in the order listed.
"
+ - "Currently supported values: Item types (itemtypes), Collection Codes (ccode) and Shelving Location (loc)."
-
- By default,
- pref: expandedSearchOption
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tt
@@ -15,6 +15,7 @@
}
$(document).ready(function() {
$("input[name=q]:eq(0)").focus();
+ $('#advsearches > ul').tabs();
});
@@ -92,27 +93,40 @@
[New search]
-
-
-