From ad7942cd03bf16b857fa9ab68913292131796b72 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 | 49 +++++++++++++++++++++- 2 files changed, 63 insertions(+), 8 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..74da23b 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 @@ -50,6 +50,24 @@ } ); } }); + $('.add-search-field').click(function() { + var table = $(this).closest('table'); + var line = $(this).closest("tr"); + 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 ) { + var new_line = clone_line( line ); + new_line.appendTo($('table[data-index_name=search_fields]>tbody')); + $('.delete').click(function() { + $(this).parents('tr').remove(); + }); + clean_line(line); + + $(table).tableDnD( { + onDragClass: "dragClass", + } ); + } + }); });