@@ -, +, @@ --- C4/Search.pm | 17 +++--- catalogue/search.pl | 60 +++++++++++--------- .../intranet-tmpl/prog/en/css/staff-global.css | 16 +++-- .../en/modules/admin/preferences/searching.pref | 8 +-- .../prog/en/modules/catalogue/advsearch.tt | 50 ++++++++++------ koha-tmpl/opac-tmpl/prog/en/css/opac.css | 6 +- .../opac-tmpl/prog/en/modules/opac-advsearch.tt | 29 +++++++++- opac/opac-search.pl | 43 ++++++++------ 8 files changed, 140 insertions(+), 89 deletions(-) --- a/C4/Search.pm +++ a/C4/Search.pm @@ -1302,7 +1302,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/ ) { @@ -1319,17 +1319,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"; } @@ -1352,9 +1351,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 @@ -1998,32 +1998,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,10 @@ Searching: - subdivisions for searches generated by clicking on subject tracings. Search Form: - - - Show checkboxes to search by + - Show checkboxes for the - pref: AdvancedSearchTypes - choices: - itemtypes: itemtype - ccode: collection code - - on the OPAC and staff advanced search pages. + class: long + - "item fields on the OPAC and staff advanced search pages, in the order listed. 'itemtypes', 'ccode' and 'loc' supported at this time." - - 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] - - -