Lines 53-61
use MARC::Record;
Link Here
|
53 |
use MARC::File::XML; |
53 |
use MARC::File::XML; |
54 |
use MIME::Base64 qw( decode_base64 ); |
54 |
use MIME::Base64 qw( decode_base64 ); |
55 |
use JSON; |
55 |
use JSON; |
56 |
|
56 |
use Sort::Naturally qw(ncmp); |
57 |
use POSIX qw(setlocale LC_COLLATE); |
|
|
58 |
use Unicode::Collate::Locale; |
59 |
|
57 |
|
60 |
Koha::SearchEngine::Elasticsearch::Search->mk_accessors(qw( store )); |
58 |
Koha::SearchEngine::Elasticsearch::Search->mk_accessors(qw( store )); |
61 |
|
59 |
|
Lines 467-488
Sorts facets using a locale.
Link Here
|
467 |
sub _sort_facets { |
465 |
sub _sort_facets { |
468 |
my ( $self, $args ) = @_; |
466 |
my ( $self, $args ) = @_; |
469 |
my $facets = $args->{facets}; |
467 |
my $facets = $args->{facets}; |
470 |
my $locale = $args->{locale}; |
|
|
471 |
|
472 |
if ( !$locale ) { |
473 |
|
474 |
# Get locale from system preference, falling back to system LC_COLLATE |
475 |
$locale = C4::Context->preference('FacetSortingLocale') || 'default'; |
476 |
if ( $locale eq 'default' || !$locale ) { |
477 |
|
478 |
#NOTE: When setlocale is run with only the 1st parameter, it is a "get" not a "set" function. |
479 |
$locale = setlocale(LC_COLLATE) || 'default'; |
480 |
} |
481 |
} |
482 |
|
468 |
|
483 |
my $collator = Unicode::Collate::Locale->new( locale => $locale ); |
469 |
if ($facets) { |
484 |
if ( $collator && $facets ) { |
470 |
my @sorted_facets = sort { ncmp( $a->{facet_label_value}, $b->{facet_label_value} ) } @$facets; |
485 |
my @sorted_facets = sort { $collator->cmp( $a->{facet_label_value}, $b->{facet_label_value} ) } @{$facets}; |
|
|
486 |
if (@sorted_facets) { |
471 |
if (@sorted_facets) { |
487 |
return \@sorted_facets; |
472 |
return \@sorted_facets; |
488 |
} |
473 |
} |
489 |
- |
|
|