View | Details | Raw Unified | Return to bug 20388
Collapse All | Expand All

(-)a/Koha/SearchField.pm (-1 / +1 lines)
Lines 75-81 my $is_mapped = $search_field->is_mapped Link Here
75
=cut
75
=cut
76
76
77
sub is_mapped {
77
sub is_mapped {
78
    my ( $self ) = @_;
78
    my ($self) = @_;
79
79
80
    return $self->search_marc_maps()->count ? 1 : 0;
80
    return $self->search_marc_maps()->count ? 1 : 0;
81
}
81
}
(-)a/admin/searchengine/elasticsearch/mappings.pl (-37 / +40 lines)
Lines 90-101 if ( $op eq 'cud-edit' ) { Link Here
90
90
91
    $schema->storage->txn_begin;
91
    $schema->storage->txn_begin;
92
92
93
    my @field_name = $input->multi_param('search_field_name');
93
    my @field_name         = $input->multi_param('search_field_name');
94
    my @field_label = $input->multi_param('search_field_label');
94
    my @field_label        = $input->multi_param('search_field_label');
95
    my @field_type = $input->multi_param('search_field_type');
95
    my @field_type         = $input->multi_param('search_field_type');
96
    my @field_weight = $input->multi_param('search_field_weight');
96
    my @field_weight       = $input->multi_param('search_field_weight');
97
    my @field_staff_client = $input->multi_param('search_field_staff_client');
97
    my @field_staff_client = $input->multi_param('search_field_staff_client');
98
    my @field_opac = $input->multi_param('search_field_opac');
98
    my @field_opac         = $input->multi_param('search_field_opac');
99
99
100
    my @index_name          = $input->multi_param('mapping_index_name');
100
    my @index_name          = $input->multi_param('mapping_index_name');
101
    my @search_field_name   = $input->multi_param('mapping_search_field_name');
101
    my @search_field_name   = $input->multi_param('mapping_search_field_name');
Lines 112-177 if ( $op eq 'cud-edit' ) { Link Here
112
        Koha::SearchFields->search()->delete;
112
        Koha::SearchFields->search()->delete;
113
113
114
        for my $i ( 0 .. scalar(@field_name) - 1 ) {
114
        for my $i ( 0 .. scalar(@field_name) - 1 ) {
115
            my $field_name = $field_name[$i];
115
            my $field_name         = $field_name[$i];
116
            my $field_label = $field_label[$i];
116
            my $field_label        = $field_label[$i];
117
            my $field_type = $field_type[$i];
117
            my $field_type         = $field_type[$i];
118
            my $field_weight = $field_weight[$i];
118
            my $field_weight       = $field_weight[$i];
119
            my $field_staff_client = $field_staff_client[$i];
119
            my $field_staff_client = $field_staff_client[$i];
120
            my $field_opac = $field_opac[$i];
120
            my $field_opac         = $field_opac[$i];
121
121
122
            my $search_field = Koha::SearchFields->find_or_create({
122
            my $search_field = Koha::SearchFields->find_or_create(
123
                name => $field_name,
123
                {
124
                label => $field_label,
124
                    name  => $field_name,
125
                type => $field_type,
125
                    label => $field_label,
126
            });
126
                    type  => $field_type,
127
                }
128
            );
127
129
128
            if (!length($field_weight)) {
130
            if ( !length($field_weight) ) {
129
                $search_field->weight(undef);
131
                $search_field->weight(undef);
130
            }
132
            } elsif ( $field_weight <= 0 || !looks_like_number($field_weight) ) {
131
            elsif ($field_weight <= 0 || !looks_like_number($field_weight)) {
132
                push @errors, { type => 'error', code => 'invalid_field_weight', 'weight' => $field_weight };
133
                push @errors, { type => 'error', code => 'invalid_field_weight', 'weight' => $field_weight };
133
            }
134
            } else {
134
            else {
135
                $search_field->weight($field_weight);
135
                $search_field->weight($field_weight);
136
            }
136
            }
137
            $search_field->staff_client($field_staff_client ? 1 : 0);
137
            $search_field->staff_client( $field_staff_client ? 1 : 0 );
138
            $search_field->opac($field_opac ? 1 : 0);
138
            $search_field->opac( $field_opac                 ? 1 : 0 );
139
139
140
            my $facet_order = first { $faceted_field_names[$_] eq $field_name } 0 .. $#faceted_field_names;
140
            my $facet_order = first { $faceted_field_names[$_] eq $field_name } 0 .. $#faceted_field_names;
141
            $search_field->facet_order(defined $facet_order ? $facet_order + 1 : undef);
141
            $search_field->facet_order( defined $facet_order ? $facet_order + 1 : undef );
142
            $search_field->store;
142
            $search_field->store;
143
        }
143
        }
144
144
145
        Koha::SearchMarcMaps->search( { marc_type => $marc_type, } )->delete;
145
        Koha::SearchMarcMaps->search( { marc_type => $marc_type, } )->delete;
146
        my @facetable_fields = Koha::SearchEngine::Elasticsearch->get_facetable_fields();
146
        my @facetable_fields      = Koha::SearchEngine::Elasticsearch->get_facetable_fields();
147
        my @facetable_field_names = map { $_->name } @facetable_fields;
147
        my @facetable_field_names = map { $_->name } @facetable_fields;
148
148
149
        my $mandatory_before = Koha::SearchFields->search({mandatory=>1})->count;
149
        my $mandatory_before = Koha::SearchFields->search( { mandatory => 1 } )->count;
150
        my $mandatory_after  = 0;
150
        my $mandatory_after  = 0;
151
        my %seen_fields;
151
        my %seen_fields;
152
        for my $i ( 0 .. scalar(@index_name) - 1 ) {
152
        for my $i ( 0 .. scalar(@index_name) - 1 ) {
153
            my $index_name          = $index_name[$i];
153
            my $index_name         = $index_name[$i];
154
            my $search_field_name   = $search_field_name[$i];
154
            my $search_field_name  = $search_field_name[$i];
155
            my $mapping_marc_field  = $mapping_marc_field[$i];
155
            my $mapping_marc_field = $mapping_marc_field[$i];
156
            my $mapping_facet       = $mapping_facet[$i];
156
            my $mapping_facet      = $mapping_facet[$i];
157
            $mapping_facet = ( grep { $_ eq $search_field_name } @facetable_field_names ) ? $mapping_facet : 0;
157
            $mapping_facet = ( grep { $_ eq $search_field_name } @facetable_field_names ) ? $mapping_facet : 0;
158
            my $mapping_suggestible = $mapping_suggestible[$i];
158
            my $mapping_suggestible = $mapping_suggestible[$i];
159
            my $mapping_sort        = $mapping_sort[$i];
159
            my $mapping_sort        = $mapping_sort[$i];
160
            my $mapping_search      = $mapping_search[$i];
160
            my $mapping_search      = $mapping_search[$i];
161
            my $mapping_filter      = $mapping_filter[$i];
161
            my $mapping_filter      = $mapping_filter[$i];
162
162
163
            my $search_field = Koha::SearchFields->find({ name => $search_field_name }, { key => 'name' });
163
            my $search_field = Koha::SearchFields->find( { name => $search_field_name }, { key => 'name' } );
164
            $mandatory_after++ if $search_field->mandatory && !defined $seen_fields{$search_field_name};
164
            $mandatory_after++ if $search_field->mandatory && !defined $seen_fields{$search_field_name};
165
            $seen_fields{$search_field_name} = 1;
165
            $seen_fields{$search_field_name} = 1;
166
166
167
            # TODO Check mapping format
167
            # TODO Check mapping format
168
            $mapping_marc_field =~ s/\s//g;
168
            $mapping_marc_field =~ s/\s//g;
169
169
170
            my $marc_field = Koha::SearchMarcMaps->find_or_create({
170
            my $marc_field = Koha::SearchMarcMaps->find_or_create(
171
                index_name => $index_name,
171
                {
172
                marc_type => $marc_type,
172
                    index_name => $index_name,
173
                marc_field => $mapping_marc_field
173
                    marc_type  => $marc_type,
174
            });
174
                    marc_field => $mapping_marc_field
175
                }
176
            );
175
            $search_field->add_to_search_marc_maps(
177
            $search_field->add_to_search_marc_maps(
176
                $marc_field,
178
                $marc_field,
177
                {
179
                {
Lines 185-192 if ( $op eq 'cud-edit' ) { Link Here
185
        }
187
        }
186
        push @errors, { type => 'error', code => 'missing_mandatory_fields' } if $mandatory_after < $mandatory_before;
188
        push @errors, { type => 'error', code => 'missing_mandatory_fields' } if $mandatory_after < $mandatory_before;
187
    };
189
    };
188
    if ($@ || @errors) {
190
    if ( $@ || @errors ) {
189
        push @errors, { type => 'error', code => 'error_on_update', message => $@, }; # FIXME $@ can be empty but @errors
191
        push @errors,
192
            { type => 'error', code => 'error_on_update', message => $@, };    # FIXME $@ can be empty but @errors
190
        $schema->storage->txn_rollback;
193
        $schema->storage->txn_rollback;
191
    } else {
194
    } else {
192
        push @messages, { type => 'message', code => 'success_on_update' };
195
        push @messages, { type => 'message', code => 'success_on_update' };
(-)a/t/db_dependent/Koha/SearchField.t (-22 / +25 lines)
Lines 39-69 my $sf = $builder->build({ Link Here
39
    source => 'SearchField',
39
    source => 'SearchField',
40
});
40
});
41
41
42
my $search_field = Koha::SearchFields->find($sf->{id});
42
my $search_field = Koha::SearchFields->find( $sf->{id} );
43
ok(!$search_field->is_mapped, 'Search field 1 is not mapped');
43
ok( !$search_field->is_mapped, 'Search field 1 is not mapped' );
44
44
45
my $auth_smm = $builder->build({
45
my $auth_smm = $builder->build(
46
    source => 'SearchMarcMap',
46
    {
47
    value => {
47
        source => 'SearchMarcMap',
48
        index_name  => 'authorities',
48
        value  => {
49
        marc_type   => 'marc21',
49
            index_name => 'authorities',
50
        marc_field  => '200abde'
50
            marc_type  => 'marc21',
51
            marc_field => '200abde'
52
        }
51
    }
53
    }
52
});
54
);
53
55
54
my $auth_smtf = $builder->build({
56
my $auth_smtf = $builder->build(
55
    source => 'SearchMarcToField',
57
    {
56
    value => {
58
        source => 'SearchMarcToField',
57
        search_marc_map_id  => $auth_smm->{id},
59
        value  => {
58
        search_field_id     => $sf->{id}
60
            search_marc_map_id => $auth_smm->{id},
61
            search_field_id    => $sf->{id}
62
        }
59
    }
63
    }
60
});
64
);
61
65
62
$search_field = Koha::SearchFields->find($sf->{id});
66
$search_field = Koha::SearchFields->find( $sf->{id} );
63
ok($search_field->is_mapped, 'Search field 1 is mapped');
67
ok( $search_field->is_mapped, 'Search field 1 is mapped' );
64
68
65
Koha::SearchMarcMaps->search({})->delete;
69
Koha::SearchMarcMaps->search( {} )->delete;
66
$schema->resultset('SearchMarcToField')->search({})->delete;
70
$schema->resultset('SearchMarcToField')->search( {} )->delete;
67
71
68
my $smm = $builder->build({
72
my $smm = $builder->build({
69
    source => 'SearchMarcMap',
73
    source => 'SearchMarcMap',
70
- 

Return to bug 20388