|
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' }; |