From 5908c4ffded75f4c9854a8552deb8e41cef58682 Mon Sep 17 00:00:00 2001 From: Alex Arnaud Date: Thu, 22 Mar 2018 15:36:03 +0000 Subject: [PATCH] Bug 20388 - Add/delete search fields from search engine configuration page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test plan: - apply this patch, - check that SearchEngine system preference is set to Elasticsearch, - go to Admin > Search engine configuration, - on the search fields tab, fill a new line at the bottom of the table (name, label, type) - click on the "Add" button and save, - check that the new search field has been saved, - also test field deletions, - check that you can't delete already mapped fields. Signed-off-by: Nicolas Legrand Signed-off-by: Séverine QUEUNE Signed-off-by: Nick Clemens --- admin/searchengine/elasticsearch/mappings.pl | 22 +++++++--- .../admin/searchengine/elasticsearch/mappings.tt | 51 ++++++++++++++++++++-- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/admin/searchengine/elasticsearch/mappings.pl b/admin/searchengine/elasticsearch/mappings.pl index 7d63002..27579d4 100755 --- a/admin/searchengine/elasticsearch/mappings.pl +++ b/admin/searchengine/elasticsearch/mappings.pl @@ -61,14 +61,17 @@ if ( $op eq 'edit' ) { eval { + Koha::SearchFields->search()->delete; + for my $i ( 0 .. scalar(@field_name) - 1 ) { my $field_name = $field_name[$i]; my $field_label = $field_label[$i]; my $field_type = $field_type[$i]; - my $search_field = Koha::SearchFields->find( { name => $field_name }, { key => 'name' } ); - $search_field->label($field_label); - $search_field->type($field_type); - $search_field->store; + my $search_field = Koha::SearchFields->find_or_create({ + name => $field_name, + label => $field_label, + type => $field_type + }); } Koha::SearchMarcMaps->search( { marc_type => $marc_type, } )->delete; @@ -133,11 +136,16 @@ for my $index_name (qw| biblios authorities |) { push @indexes, { index_name => $index_name, mappings => \@mappings }; } -my $search_fields = $schema->resultset('SearchField')->search; -my @all_search_fields = $search_fields->search( {}, { order_by => ['name'] } ); +my $all_search_fields = Koha::SearchFields->search( {}, { order_by => ['name'] } )->unblessed; +foreach my $search_field ( @$all_search_fields ) { + $search_field->{is_mapped} = $schema->resultset('SearchMarcToField')->search( + { search_field_id => $search_field->{id} })->count; +} + + $template->param( indexes => \@indexes, - all_search_fields => \@all_search_fields, + all_search_fields => $all_search_fields, messages => \@messages, ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt index cc6f94c..93161a7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/searchengine/elasticsearch/mappings.tt @@ -23,6 +23,23 @@ return new_line; } + function valid_line( line, index_name ) { + if ( index_name == 'search_fields' ) { + var name = $(line).find('input[data-id="search_field_name"]').val();; + var label = $(line).find('input[data-id="search_field_name"]').val();; + if ( name.length > 0 && label.length > 0 ) { + return true; + } + return false; + } + + var marc_field = $(line).find('input[data-id="mapping_marc_field"]').val(); + if ( marc_field.length > 0 ) { + return true; + } + return false; + } + $(document).ready(function() { $("#tabs").tabs(); $('.delete').click(function() { @@ -36,8 +53,7 @@ var table = $(this).closest('table'); var index_name = $(table).attr('data-index_name'); var line = $(this).closest("tr"); - var marc_field = $(line).find('input[data-id="mapping_marc_field"]').val(); - if ( marc_field.length > 0 ) { + if ( valid_line(line, index_name) ) { var new_line = clone_line( line ); new_line.appendTo($('table[data-index_name="'+index_name+'"]>tbody')); $('.delete').click(function() { @@ -120,12 +136,13 @@ a.add, a.delete { [% END %]
- +
+ @@ -165,9 +182,37 @@ a.add, a.delete { [% END %] + [% END %] + + + + + + + +
Name Label Type
+ [% IF search_field.is_mapped %] + Delete + [% ELSE %] + Delete + [% END %] +
+ + + + + + Add
[% FOREACH index IN indexes %] -- 2.1.4