From c6135f765e1a0f20118817ef175f6cd784779c95 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 --- Koha/SearchField.pm | 16 +++++++ admin/searchengine/elasticsearch/mappings.pl | 17 +++++--- .../admin/searchengine/elasticsearch/mappings.tt | 49 +++++++++++++++++++++- t/db_dependent/Koha/SearchField.t | 30 ++++++++++++- 4 files changed, 104 insertions(+), 8 deletions(-) diff --git a/Koha/SearchField.pm b/Koha/SearchField.pm index a734204..8ee405d 100644 --- a/Koha/SearchField.pm +++ b/Koha/SearchField.pm @@ -67,6 +67,22 @@ sub search_marc_maps { } +=head3 is_mapped + +my $is_mapped = $search_field->is_mapped + +=cut + +sub is_mapped { + my ( $self ) = @_; + + if ( scalar $self->search_marc_maps ) { + return 1; + } + + return 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 0c5def7..3c681c6 100755 --- a/admin/searchengine/elasticsearch/mappings.pl +++ b/admin/searchengine/elasticsearch/mappings.pl @@ -62,17 +62,20 @@ 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 $field_weight = $field_weight[$i]; - my $search_field = Koha::SearchFields->find( { name => $field_name }, { key => 'name' } ); - $search_field->label($field_label); - $search_field->type($field_type); - $search_field->weight($field_weight || ''); - $search_field->store; + my $search_field = Koha::SearchFields->find_or_create({ + name => $field_name, + label => $field_label, + type => $field_type, + weight =>$field_weight + }); } Koha::SearchMarcMaps->search( { marc_type => $marc_type, } )->delete; @@ -142,6 +145,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 7a4774c..ed097e1 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", + } ); + } + }); });