From a9c57f934a25157615541017c2eb64c512e58b1b 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 Signed-off-by: Björn Nylén Signed-off-by: Julian Maurice Signed-off-by: Michal Denar --- Koha/SearchField.pm | 12 +++++ admin/searchengine/elasticsearch/mappings.pl | 14 ++++-- .../admin/searchengine/elasticsearch/mappings.tt | 53 +++++++++++++++++++++- t/db_dependent/Koha/SearchField.t | 30 +++++++++++- 4 files changed, 103 insertions(+), 6 deletions(-) diff --git a/Koha/SearchField.pm b/Koha/SearchField.pm index bd19717..e225c3d 100644 --- a/Koha/SearchField.pm +++ b/Koha/SearchField.pm @@ -69,6 +69,18 @@ sub search_marc_maps { return $marc_map_fields; } +=head3 is_mapped + +my $is_mapped = $search_field->is_mapped + +=cut + +sub is_mapped { + my ( $self ) = @_; + + return $self->search_marc_maps()->count ? 1 : 0; +} + =head3 is_mapped_biblios my $is_mapped_biblios = $search_field->is_mapped_biblios diff --git a/admin/searchengine/elasticsearch/mappings.pl b/admin/searchengine/elasticsearch/mappings.pl index fa00e44..37cb0ba 100755 --- a/admin/searchengine/elasticsearch/mappings.pl +++ b/admin/searchengine/elasticsearch/mappings.pl @@ -97,6 +97,8 @@ 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]; @@ -105,9 +107,11 @@ if ( $op eq 'edit' ) { my $field_staff_client = $field_staff_client[$i]; my $field_opac = $field_opac[$i]; - my $search_field = Koha::SearchFields->find( { name => $field_name }, { key => 'name' } ); - $search_field->label($field_label); - $search_field->type($field_type); + my $search_field = Koha::SearchFields->find_or_create({ + name => $field_name, + label => $field_label, + type => $field_type, + }); if (!length($field_weight)) { $search_field->weight(undef); @@ -257,6 +261,10 @@ my @all_search_fields; while ( my $search_field = $search_fields->next ) { my $search_field_unblessed = $search_field->unblessed; $search_field_unblessed->{mapped_biblios} = 1 if $search_field->is_mapped_biblios; + + $search_field_unblessed->{is_mapped} = $schema->resultset('SearchMarcToField')->search( + { search_field_id => $search_field->id })->count; + push @all_search_fields, $search_field_unblessed; } 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 7c8f467..08bbd10 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 @@ -58,9 +58,29 @@ } ); } }); + $("#facet_biblios > table").tableDnD( { onDragClass: "dragClass", } ); + + $('.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", + } ); + } + }); });