View | Details | Raw Unified | Return to bug 33569
Collapse All | Expand All

(-)a/C4/Context.pm (+32 lines)
Lines 499-504 sub csv_delimiter { Link Here
499
    return $delimiter;
499
    return $delimiter;
500
}
500
}
501
501
502
=head2 default_catalog_sort_by
503
504
    $delimiter = C4::Context->default_catalog_sort_by;
505
506
    Returns default sort by for catalog search.
507
    For relevance no sort order is used.
508
509
    For staff interface, depends on system preferences 'defaultSortField' and 'defaultSortOrder'.
510
    For OPAC interface, depends on system preferences 'OPACdefaultSortField' and 'OPACdefaultSortOrder'.
511
512
=cut
513
514
sub default_catalog_sort_by {
515
    my $self = shift;
516
    my ( $sort_by, $sort_field, $sort_order );
517
    if ( C4::Context->interface eq 'opac' ) {
518
        $sort_field = C4::Context->preference('OPACdefaultSortField');
519
        $sort_order = C4::Context->preference('OPACdefaultSortOrder');
520
    } else {
521
        $sort_field = C4::Context->preference('defaultSortField');
522
        $sort_order = C4::Context->preference('defaultSortOrder');
523
    }
524
    if ( $sort_field && $sort_order ) {
525
        if ( $sort_field eq 'relevance' ) {
526
            $sort_by = $sort_field;
527
        } else {
528
            $sort_by = $sort_field . '_' . $sort_order;
529
        }
530
    }
531
    return $sort_by;
532
}
533
502
=head2 Zconn
534
=head2 Zconn
503
535
504
  $Zconn = C4::Context->Zconn
536
  $Zconn = C4::Context->Zconn
(-)a/catalogue/search.pl (-14 / +4 lines)
Lines 259-264 $template->param(advancedsearchesloop => $advancedsearchesloop); Link Here
259
259
260
$template->param( searchid => scalar $cgi->param('searchid'), );
260
$template->param( searchid => scalar $cgi->param('searchid'), );
261
261
262
my $default_sort_by = C4::Context->default_catalog_sort_by;
263
262
# The following should only be loaded if we're bringing up the advanced search template
264
# The following should only be loaded if we're bringing up the advanced search template
263
if ( $template_type eq 'advsearch' ) {
265
if ( $template_type eq 'advsearch' ) {
264
266
Lines 322-333 if ( $template_type eq 'advsearch' ) { Link Here
322
    $template->param(outer_sup_servers_loop => $secondary_servers_loop,);
324
    $template->param(outer_sup_servers_loop => $secondary_servers_loop,);
323
325
324
    # set the default sorting
326
    # set the default sorting
325
    if (   C4::Context->preference('defaultSortField')
327
    if ($default_sort_by) {
326
        && C4::Context->preference('defaultSortOrder') ) {
328
        $template->param( sort_by => $default_sort_by );
327
        my $default_sort_by =
328
            C4::Context->preference('defaultSortField') . '_'
329
          . C4::Context->preference('defaultSortOrder');
330
        $template->param( sort_by => $default_sort_by  );
331
    }
329
    }
332
330
333
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
331
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
Lines 361-374 my $params = $cgi->Vars; Link Here
361
# sort by is used to sort the query
359
# sort by is used to sort the query
362
# in theory can have more than one but generally there's just one
360
# in theory can have more than one but generally there's just one
363
my @sort_by;
361
my @sort_by;
364
my $default_sort_by;
365
if (   C4::Context->preference('defaultSortField')
366
    && C4::Context->preference('defaultSortOrder') ) {
367
    $default_sort_by =
368
        C4::Context->preference('defaultSortField') . '_'
369
      . C4::Context->preference('defaultSortOrder');
370
}
371
372
@sort_by = $cgi->multi_param('sort_by');
362
@sort_by = $cgi->multi_param('sort_by');
373
$sort_by[0] = $default_sort_by unless $sort_by[0];
363
$sort_by[0] = $default_sort_by unless $sort_by[0];
374
foreach my $sort (@sort_by) {
364
foreach my $sort (@sort_by) {
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt (-1 / +1 lines)
Lines 221-227 Link Here
221
                                    Sort <span class="caret"></span>
221
                                    Sort <span class="caret"></span>
222
                                </button>
222
                                </button>
223
                                <ul class="dropdown-menu">
223
                                <ul class="dropdown-menu">
224
                                    [% IF ( sort_by == "relevance_dsc" ) %]
224
                                    [% IF ( sort_by == "relevance" ) %]
225
                                        <li><a href="/cgi-bin/koha/catalogue/search.pl?count=[% results_per_page | uri %]&sort_by=relevance[% PROCESS sort_search_query %]"><i class="fa fa-check"></i> Relevance</a></li>
225
                                        <li><a href="/cgi-bin/koha/catalogue/search.pl?count=[% results_per_page | uri %]&sort_by=relevance[% PROCESS sort_search_query %]"><i class="fa fa-check"></i> Relevance</a></li>
226
                                    [% ELSE %]
226
                                    [% ELSE %]
227
                                        <li><a href="/cgi-bin/koha/catalogue/search.pl?count=[% results_per_page | uri %]&sort_by=relevance[% PROCESS sort_search_query %]">Relevance</a></li>
227
                                        <li><a href="/cgi-bin/koha/catalogue/search.pl?count=[% results_per_page | uri %]&sort_by=relevance[% PROCESS sort_search_query %]">Relevance</a></li>
(-)a/opac/opac-detail.pl (-1 / +1 lines)
Lines 238-244 if ($session->param('busc')) { Link Here
238
        @servers = ("biblioserver") unless (@servers);
238
        @servers = ("biblioserver") unless (@servers);
239
239
240
        my ($default_sort_by, @sort_by);
240
        my ($default_sort_by, @sort_by);
241
        $default_sort_by = C4::Context->preference('OPACdefaultSortField')."_".C4::Context->preference('OPACdefaultSortOrder') if (C4::Context->preference('OPACdefaultSortField') && C4::Context->preference('OPACdefaultSortOrder'));
241
        $default_sort_by = C4::Context->default_catalog_sort_by;
242
        @sort_by = @{$arrParamsBusc->{'sort_by'}} if $arrParamsBusc->{'sort_by'};
242
        @sort_by = @{$arrParamsBusc->{'sort_by'}} if $arrParamsBusc->{'sort_by'};
243
        $sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by);
243
        $sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by);
244
        my ($error, $results_hashref, $facets);
244
        my ($error, $results_hashref, $facets);
(-)a/opac/opac-search.pl (-13 / +3 lines)
Lines 304-309 foreach my $advanced_srch_type (@advanced_search_types) { Link Here
304
}
304
}
305
$template->param(advancedsearchesloop => \@advancedsearchesloop);
305
$template->param(advancedsearchesloop => \@advancedsearchesloop);
306
306
307
my $default_sort_by = C4::Context->default_catalog_sort_by;
308
307
# The following should only be loaded if we're bringing up the advanced search template
309
# The following should only be loaded if we're bringing up the advanced search template
308
if ( $template_type && $template_type eq 'advsearch' ) {
310
if ( $template_type && $template_type eq 'advsearch' ) {
309
    # load the servers (used for searching -- to do federated searching, etc.)
311
    # load the servers (used for searching -- to do federated searching, etc.)
Lines 314-324 if ( $template_type && $template_type eq 'advsearch' ) { Link Here
314
    $template->param(outer_sup_servers_loop => $secondary_servers_loop,);
316
    $template->param(outer_sup_servers_loop => $secondary_servers_loop,);
315
317
316
    # set the default sorting
318
    # set the default sorting
317
    if (   C4::Context->preference('OPACdefaultSortField')
319
    if ($default_sort_by) {
318
        && C4::Context->preference('OPACdefaultSortOrder') ) {
319
        my $default_sort_by =
320
            C4::Context->preference('OPACdefaultSortField') . '_'
321
          . C4::Context->preference('OPACdefaultSortOrder');
322
        $template->param( sort_by => $default_sort_by );
320
        $template->param( sort_by => $default_sort_by );
323
    }
321
    }
324
322
Lines 378-391 for (keys %$params) { Link Here
378
# sort by is used to sort the query
376
# sort by is used to sort the query
379
# in theory can have more than one but generally there's just one
377
# in theory can have more than one but generally there's just one
380
my @sort_by;
378
my @sort_by;
381
my $default_sort_by;
382
if (   C4::Context->preference('OPACdefaultSortField')
383
    && C4::Context->preference('OPACdefaultSortOrder') ) {
384
    $default_sort_by =
385
        C4::Context->preference('OPACdefaultSortField') . '_'
386
      . C4::Context->preference('OPACdefaultSortOrder');
387
}
388
389
my @allowed_sortby = qw /acqdate_asc acqdate_dsc author_az author_za call_number_asc call_number_dsc popularity_asc popularity_dsc pubdate_asc pubdate_dsc relevance title_az title_za/; 
379
my @allowed_sortby = qw /acqdate_asc acqdate_dsc author_az author_za call_number_asc call_number_dsc popularity_asc popularity_dsc pubdate_asc pubdate_dsc relevance title_az title_za/; 
390
@sort_by = $cgi->multi_param('sort_by');
380
@sort_by = $cgi->multi_param('sort_by');
391
$sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by);
381
$sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by);
(-)a/t/Context.t (-2 / +31 lines)
Lines 18-24 Link Here
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use DBI;
20
use DBI;
21
use Test::More tests => 33;
21
use Test::More tests => 34;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
24
use YAML::XS;
24
use YAML::XS;
Lines 80-85 subtest 'csv_delimiter() tests' => sub { Link Here
80
    is( C4::Context->csv_delimiter, "\t", "csv_delimiter returns '\t' if system preference CSVDelimiter is tabulation" );
80
    is( C4::Context->csv_delimiter, "\t", "csv_delimiter returns '\t' if system preference CSVDelimiter is tabulation" );
81
};
81
};
82
82
83
subtest 'default_catalog_sort_by() tests' => sub {
84
85
    plan tests => 5;
86
87
    my $context = Test::MockModule->new( 'C4::Context' );
88
89
    $context->mock( 'interface', 'intranet' );
90
91
    t::lib::Mocks::mock_preference( 'defaultSortField', undef );
92
    is( C4::Context->default_catalog_sort_by, undef, "default_catalog_sort_by() returns undef if system preference defaultSortField is undefined" );
93
94
    t::lib::Mocks::mock_preference( 'defaultSortField', 'title' );
95
    t::lib::Mocks::mock_preference( 'defaultSortOrder', 'az' );
96
    is( C4::Context->default_catalog_sort_by, 'title_az', "default_catalog_sort_by() returns concatenation of system preferences defaultSortField and defaultSortOrder" );
97
98
    t::lib::Mocks::mock_preference( 'defaultSortField', 'relevance' );
99
    is( C4::Context->default_catalog_sort_by, 'relevance', "default_catalog_sort_by() returns only system preference defaultSortField if it is relevance" );
100
101
    $context->mock( 'interface', 'opac' );
102
103
    t::lib::Mocks::mock_preference( 'OPACdefaultSortField', 'pubdate' );
104
    t::lib::Mocks::mock_preference( 'OPACdefaultSortOrder', 'desc' );
105
    is( C4::Context->default_catalog_sort_by, 'pubdate_desc', "default_catalog_sort_by() returns concatenation of system preferences OPACdefaultSortField and OPACdefaultSortOrder" );
106
107
    t::lib::Mocks::mock_preference( 'OPACdefaultSortField', 'relevance' );
108
    is( C4::Context->default_catalog_sort_by, 'relevance', "default_catalog_sort_by() returns only system preference OPACdefaultSortField if it is relevance" );
109
110
    $context->unmock( 'interface' );
111
};
112
83
my $context = Test::MockModule->new('C4::Context');
113
my $context = Test::MockModule->new('C4::Context');
84
my $userenv = {};
114
my $userenv = {};
85
115
86
- 

Return to bug 33569