| Filename | /usr/share/koha/lib/Koha/QueryParser/Driver/PQF.pm |
| Statements | Executed 38 statements in 5.55ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 783µs | 1.08ms | Koha::QueryParser::Driver::PQF::BEGIN@13 |
| 1 | 1 | 1 | 348µs | 618µs | Koha::QueryParser::Driver::PQF::BEGIN@9 |
| 1 | 1 | 1 | 320µs | 449µs | Koha::QueryParser::Driver::PQF::BEGIN@8 |
| 1 | 1 | 1 | 300µs | 507µs | Koha::QueryParser::Driver::PQF::BEGIN@12 |
| 1 | 1 | 1 | 278µs | 521µs | Koha::QueryParser::Driver::PQF::BEGIN@11 |
| 1 | 1 | 1 | 224µs | 520µs | Koha::QueryParser::Driver::PQF::BEGIN@10 |
| 1 | 1 | 1 | 202µs | 415µs | Koha::QueryParser::Driver::PQF::BEGIN@14 |
| 1 | 1 | 1 | 70µs | 100µs | Koha::QueryParser::Driver::PQF::BEGIN@5 |
| 1 | 1 | 1 | 44µs | 52µs | Koha::QueryParser::Driver::PQF::BEGIN@4 |
| 1 | 1 | 1 | 37µs | 19.8ms | Koha::QueryParser::Driver::PQF::BEGIN@2 |
| 1 | 1 | 1 | 27µs | 74µs | Koha::QueryParser::Driver::PQF::BEGIN@7 |
| 1 | 1 | 1 | 11µs | 12µs | Koha::QueryParser::Driver::PQF::BEGIN@15 |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::TEST_SETUP |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::_add_field_mapping |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::_add_mapping |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::_canonicalize_field_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::_canonicalize_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::add_bib1_field_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::add_bib1_filter_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::add_bib1_modifier_map |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::add_relevance_bump |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::bib1_mapping_by_attr |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::bib1_mapping_by_attr_string |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::bib1_mapping_by_name |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::clear_all_configuration |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::clear_all_mappings |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::date_filter_target_callback |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::get |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::initialize |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::load_config |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::serialize_mappings |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::set |
| 0 | 0 | 0 | 0s | 0s | Koha::QueryParser::Driver::PQF::target_syntax |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package Koha::QueryParser::Driver::PQF; | ||||
| 2 | 3 | 94µs | 2 | 39.5ms | # spent 19.8ms (37µs+19.7) within Koha::QueryParser::Driver::PQF::BEGIN@2 which was called:
# once (37µs+19.7ms) by C4::Search::parseQuery at line 2 # spent 19.8ms making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@2
# spent 19.7ms making 1 call to base::import |
| 3 | |||||
| 4 | 3 | 58µs | 2 | 59µs | # spent 52µs (44+8) within Koha::QueryParser::Driver::PQF::BEGIN@4 which was called:
# once (44µs+8µs) by C4::Search::parseQuery at line 4 # spent 52µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@4
# spent 8µs making 1 call to strict::import |
| 5 | 3 | 64µs | 2 | 131µs | # spent 100µs (70+31) within Koha::QueryParser::Driver::PQF::BEGIN@5 which was called:
# once (70µs+31µs) by C4::Search::parseQuery at line 5 # spent 100µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@5
# spent 31µs making 1 call to warnings::import |
| 6 | |||||
| 7 | 3 | 67µs | 2 | 121µs | # spent 74µs (27+47) within Koha::QueryParser::Driver::PQF::BEGIN@7 which was called:
# once (27µs+47µs) by C4::Search::parseQuery at line 7 # spent 74µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@7
# spent 47µs making 1 call to Exporter::import |
| 8 | 3 | 172µs | 2 | 453µs | # spent 449µs (320+128) within Koha::QueryParser::Driver::PQF::BEGIN@8 which was called:
# once (320µs+128µs) by C4::Search::parseQuery at line 8 # spent 449µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@8
# spent 4µs making 1 call to UNIVERSAL::import |
| 9 | 3 | 118µs | 2 | 621µs | # spent 618µs (348+270) within Koha::QueryParser::Driver::PQF::BEGIN@9 which was called:
# once (348µs+270µs) by C4::Search::parseQuery at line 9 # spent 618µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@9
# spent 3µs making 1 call to UNIVERSAL::import |
| 10 | 3 | 150µs | 2 | 524µs | # spent 520µs (224+296) within Koha::QueryParser::Driver::PQF::BEGIN@10 which was called:
# once (224µs+296µs) by C4::Search::parseQuery at line 10 # spent 520µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@10
# spent 4µs making 1 call to UNIVERSAL::import |
| 11 | 3 | 146µs | 2 | 524µs | # spent 521µs (278+242) within Koha::QueryParser::Driver::PQF::BEGIN@11 which was called:
# once (278µs+242µs) by C4::Search::parseQuery at line 11 # spent 521µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@11
# spent 3µs making 1 call to UNIVERSAL::import |
| 12 | 3 | 117µs | 2 | 510µs | # spent 507µs (300+207) within Koha::QueryParser::Driver::PQF::BEGIN@12 which was called:
# once (300µs+207µs) by C4::Search::parseQuery at line 12 # spent 507µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@12
# spent 3µs making 1 call to UNIVERSAL::import |
| 13 | 3 | 114µs | 2 | 1.08ms | # spent 1.08ms (783µs+295µs) within Koha::QueryParser::Driver::PQF::BEGIN@13 which was called:
# once (783µs+295µs) by C4::Search::parseQuery at line 13 # spent 1.08ms making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@13
# spent 3µs making 1 call to UNIVERSAL::import |
| 14 | 3 | 104µs | 2 | 418µs | # spent 415µs (202+214) within Koha::QueryParser::Driver::PQF::BEGIN@14 which was called:
# once (202µs+214µs) by C4::Search::parseQuery at line 14 # spent 415µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@14
# spent 2µs making 1 call to UNIVERSAL::import |
| 15 | 3 | 4.33ms | 2 | 14µs | # spent 12µs (11+2) within Koha::QueryParser::Driver::PQF::BEGIN@15 which was called:
# once (11µs+2µs) by C4::Search::parseQuery at line 15 # spent 12µs making 1 call to Koha::QueryParser::Driver::PQF::BEGIN@15
# spent 2µs making 1 call to UNIVERSAL::import |
| 16 | |||||
| 17 | |||||
| 18 | =head1 NAME | ||||
| 19 | |||||
| - - | |||||
| 51 | 1 | 15µs | 1 | 234µs | __PACKAGE__->mk_accessors(qw(bib1_field_map bib1_modifier_map bib1_filter_map bib1_relevance_bump_map)); # spent 234µs making 1 call to Class::Accessor::mk_accessors |
| 52 | |||||
| 53 | =head1 FUNCTIONS | ||||
| 54 | |||||
| - - | |||||
| 57 | =head2 get | ||||
| 58 | |||||
| - - | |||||
| 63 | sub get { | ||||
| 64 | my $self = shift; | ||||
| 65 | return $self->_map(@_); | ||||
| 66 | } | ||||
| 67 | |||||
| 68 | =head2 set | ||||
| 69 | |||||
| - - | |||||
| 74 | sub set { | ||||
| 75 | my $self = shift; | ||||
| 76 | return $self->_map(@_); | ||||
| 77 | } | ||||
| 78 | |||||
| 79 | =head2 add_bib1_field_map | ||||
| 80 | |||||
| - - | |||||
| 92 | sub add_bib1_field_map { | ||||
| 93 | my ($self, $class, $field, $server, $attributes) = @_; | ||||
| 94 | |||||
| 95 | $self->add_search_field( $class => $field ); | ||||
| 96 | $self->add_search_field_alias( $class => $field => $field ); | ||||
| 97 | return $self->_add_field_mapping($self->bib1_field_map, $class, $field, $server, $attributes); | ||||
| 98 | } | ||||
| 99 | |||||
| 100 | =head2 add_bib1_modifier_map | ||||
| 101 | |||||
| - - | |||||
| 113 | sub add_bib1_modifier_map { | ||||
| 114 | my ($self, $name, $server, $attributes) = @_; | ||||
| 115 | |||||
| 116 | $self->add_search_modifier( $name ); | ||||
| 117 | |||||
| 118 | return $self->_add_mapping($self->bib1_modifier_map, $name, $server, $attributes); | ||||
| 119 | } | ||||
| 120 | |||||
| 121 | =head2 add_bib1_filter_map | ||||
| 122 | |||||
| - - | |||||
| 134 | sub add_bib1_filter_map { | ||||
| 135 | my ($self, $name, $server, $attributes) = @_; | ||||
| 136 | |||||
| 137 | $self->add_search_filter( $name, $attributes->{'callback'} ); | ||||
| 138 | |||||
| 139 | return $self->_add_mapping($self->bib1_filter_map, $name, $server, $attributes); | ||||
| 140 | } | ||||
| 141 | |||||
| 142 | =head2 add_relevance_bump | ||||
| 143 | |||||
| - - | |||||
| 153 | sub add_relevance_bump { | ||||
| 154 | my ($self, $class, $field, $server, $multiplier, $active) = @_; | ||||
| 155 | my $attributes = { '9' => $multiplier, '2' => '102', 'active' => $active }; | ||||
| 156 | |||||
| 157 | $self->add_search_field( $class => $field ); | ||||
| 158 | return $self->_add_field_mapping($self->bib1_relevance_bump_map, $class, $field, $server, $attributes); | ||||
| 159 | } | ||||
| 160 | |||||
| 161 | |||||
| 162 | =head2 target_syntax | ||||
| 163 | |||||
| - - | |||||
| 174 | sub target_syntax { | ||||
| 175 | my ($self, $server, $query) = @_; | ||||
| 176 | my $pqf = ''; | ||||
| 177 | $self->parse($query) if $query; | ||||
| 178 | warn "QP query for $server: " . $self->query . "\n" if $self->debug; | ||||
| 179 | $pqf = $self->parse_tree->target_syntax($server); | ||||
| 180 | warn "PQF query: $pqf\n" if $self->debug; | ||||
| 181 | $pqf =~ s/ +/ /g; | ||||
| 182 | $pqf =~ s/^ //; | ||||
| 183 | $pqf =~ s/ $//; | ||||
| 184 | return $pqf; | ||||
| 185 | } | ||||
| 186 | |||||
| 187 | =head2 date_filter_target_callback | ||||
| 188 | |||||
| - - | |||||
| 197 | sub date_filter_target_callback { | ||||
| 198 | my ($QParser, $filter, $params, $negate, $server) = @_; | ||||
| 199 | my $attr_string = $QParser->bib1_mapping_by_name( 'filter', $filter, $server )->{'attr_string'}; | ||||
| 200 | my $pqf = ''; | ||||
| 201 | foreach my $datespec (@$params) { | ||||
| 202 | my $datepqf = ' '; | ||||
| 203 | if ($datespec) { | ||||
| 204 | if ($datespec =~ m/(.*)-(.*)/) { | ||||
| 205 | if ($1) { | ||||
| 206 | $datepqf .= $attr_string . ' @attr 2=4 "' . $1 . '"'; | ||||
| 207 | } | ||||
| 208 | if ($2) { | ||||
| 209 | $datepqf .= $attr_string . ' @attr 2=2 "' . $2 . '"'; | ||||
| 210 | $datepqf = ' @and ' . $datepqf if $1; | ||||
| 211 | } | ||||
| 212 | } else { | ||||
| 213 | $datepqf .= $attr_string . ' "' . $datespec . '"'; | ||||
| 214 | } | ||||
| 215 | } | ||||
| 216 | $pqf = ' @or ' . ($negate ? '@not @attr 1=_ALLRECORDS @attr 2=103 "" ' : '') . $pqf if $pqf; | ||||
| 217 | $pqf .= $datepqf; | ||||
| 218 | } | ||||
| 219 | return $pqf; | ||||
| 220 | } | ||||
| 221 | |||||
| 222 | =head2 _map | ||||
| 223 | |||||
| - - | |||||
| 230 | sub _map { | ||||
| 231 | my ($self, $name, $map) = @_; | ||||
| 232 | $self->custom_data->{$name} ||= {}; | ||||
| 233 | $self->custom_data->{$name} = $map if ($map); | ||||
| 234 | return $self->custom_data->{$name}; | ||||
| 235 | } | ||||
| 236 | |||||
| 237 | =head2 _add_mapping | ||||
| 238 | |||||
| - - | |||||
| 245 | sub _add_mapping { | ||||
| 246 | my ($self, $map, $name, $server, $attributes) = @_; | ||||
| 247 | |||||
| 248 | my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); | ||||
| 249 | $attributes->{'attr_string'} = $attr_string; | ||||
| 250 | |||||
| 251 | $map->{'by_name'}{$name}{$server} = $attributes; | ||||
| 252 | $map->{'by_attr'}{$server}{$attr_string} = { 'name' => $name, %$attributes }; | ||||
| 253 | |||||
| 254 | return $map; | ||||
| 255 | } | ||||
| 256 | |||||
| 257 | =head2 _add_field_mapping | ||||
| 258 | |||||
| - - | |||||
| 265 | sub _add_field_mapping { | ||||
| 266 | my ($self, $map, $class, $field, $server, $attributes) = @_; | ||||
| 267 | my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); | ||||
| 268 | $attributes->{'attr_string'} = $attr_string; | ||||
| 269 | |||||
| 270 | $map->{'by_name'}{$class}{$field}{$server} = $attributes; | ||||
| 271 | $map->{'by_attr'}{$server}{$attr_string} = { 'classname' => $class, 'field' => $field, %$attributes }; | ||||
| 272 | return $map; | ||||
| 273 | } | ||||
| 274 | |||||
| 275 | |||||
| 276 | =head2 bib1_mapping_by_name | ||||
| 277 | |||||
| - - | |||||
| 285 | sub bib1_mapping_by_name { | ||||
| 286 | my $server = pop; | ||||
| 287 | my ($self, $type, $name, $field) = @_; | ||||
| 288 | |||||
| 289 | return unless ($server && $name); | ||||
| 290 | return unless ($type eq 'field' || $type eq 'modifier' || $type eq 'filter' || $type eq 'relevance_bump'); | ||||
| 291 | if ($type eq 'field' || $type eq 'relevance_bump') { | ||||
| 292 | # Unfortunately field is a special case thanks to the class->field hierarchy | ||||
| 293 | return $self->_map('bib1_' . $type . '_map')->{'by_name'}{$name}{$field}{$server} if $field; | ||||
| 294 | return $self->_map('bib1_' . $type . '_map')->{'by_name'}{$name}; | ||||
| 295 | } else { | ||||
| 296 | return $self->_map('bib1_' . $type . '_map')->{'by_name'}{$name}{$server}; | ||||
| 297 | } | ||||
| 298 | } | ||||
| 299 | |||||
| 300 | =head2 bib1_mapping_by_attr | ||||
| 301 | |||||
| - - | |||||
| 311 | sub bib1_mapping_by_attr { | ||||
| 312 | my ($self, $type, $server, $attributes) = @_; | ||||
| 313 | return unless ($server && $attributes); | ||||
| 314 | |||||
| 315 | my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); | ||||
| 316 | |||||
| 317 | return $self->bib1_mapping_by_attr_string($type, $server, $attr_string); | ||||
| 318 | } | ||||
| 319 | |||||
| 320 | =head2 bib1_mapping_by_attr_string | ||||
| 321 | |||||
| - - | |||||
| 332 | sub bib1_mapping_by_attr_string { | ||||
| 333 | my ($self, $type, $server, $attr_string) = @_; | ||||
| 334 | return unless ($server && $attr_string); | ||||
| 335 | return unless ($type eq 'field' || $type eq 'modifier' || $type eq 'filter' || $type eq 'relevance_bump'); | ||||
| 336 | |||||
| 337 | return $self->_map('bib1_' . $type . '_map')->{'by_attr'}{$server}{$attr_string}; | ||||
| 338 | } | ||||
| 339 | |||||
| 340 | =head2 clear_all_configuration | ||||
| 341 | |||||
| - - | |||||
| 349 | sub clear_all_configuration { | ||||
| 350 | my ($self) = @_; | ||||
| 351 | %OpenILS::QueryParser::parser_config = ( | ||||
| 352 | 'OpenILS::QueryParser' => { | ||||
| 353 | filters => [], | ||||
| 354 | modifiers => [], | ||||
| 355 | operators => { | ||||
| 356 | 'and' => '&&', | ||||
| 357 | 'or' => '||', | ||||
| 358 | float_start => '{{', | ||||
| 359 | float_end => '}}', | ||||
| 360 | group_start => '(', | ||||
| 361 | group_end => ')', | ||||
| 362 | required => '+', | ||||
| 363 | disallowed => '-', | ||||
| 364 | modifier => '#', | ||||
| 365 | negated => '!' | ||||
| 366 | } | ||||
| 367 | } | ||||
| 368 | ); | ||||
| 369 | return $self; | ||||
| 370 | } | ||||
| 371 | |||||
| 372 | =head2 clear_all_mappings | ||||
| 373 | |||||
| - - | |||||
| 380 | sub clear_all_mappings { | ||||
| 381 | my ($self) = @_; | ||||
| 382 | |||||
| 383 | foreach my $name (qw(field modifier filter relevance_bump)) { | ||||
| 384 | $self->custom_data->{'bib1_' . $name . '_map'} = { }; | ||||
| 385 | } | ||||
| 386 | return $self; | ||||
| 387 | } | ||||
| 388 | |||||
| 389 | |||||
| 390 | =head2 _canonicalize_field_map | ||||
| 391 | |||||
| - - | |||||
| 397 | sub _canonicalize_field_map { | ||||
| 398 | my ( $map, $aliases ) = @_; | ||||
| 399 | my $canonical_map = {}; | ||||
| 400 | |||||
| 401 | foreach my $class ( keys %{ $map->{'by_name'} } ) { | ||||
| 402 | $canonical_map->{$class} ||= {}; | ||||
| 403 | foreach my $field ( keys %{ $map->{'by_name'}->{$class} } ) { | ||||
| 404 | my $field_map = { | ||||
| 405 | 'index' => $field, | ||||
| 406 | 'label' => ucfirst($field), | ||||
| 407 | 'enabled' => '1', | ||||
| 408 | }; | ||||
| 409 | foreach | ||||
| 410 | my $server ( keys %{ $map->{'by_name'}->{$class}->{$field} } ) | ||||
| 411 | { | ||||
| 412 | $field_map->{'bib1_mapping'} ||= {}; | ||||
| 413 | $field_map->{'bib1_mapping'}->{$server} = | ||||
| 414 | $map->{'by_name'}->{$class}->{$field}->{$server}; | ||||
| 415 | delete $field_map->{'bib1_mapping'}->{$server}->{'attr_string'} | ||||
| 416 | if defined( | ||||
| 417 | $field_map->{'bib1_mapping'}->{$server} | ||||
| 418 | ->{'attr_string'} | ||||
| 419 | ); | ||||
| 420 | } | ||||
| 421 | if ($aliases) { | ||||
| 422 | $field_map->{'aliases'} = []; | ||||
| 423 | foreach my $alias ( @{ $aliases->{$class}->{$field} } ) { | ||||
| 424 | push @{ $field_map->{'aliases'} }, | ||||
| 425 | $alias; | ||||
| 426 | } | ||||
| 427 | } | ||||
| 428 | $canonical_map->{$class}->{$field} = $field_map; | ||||
| 429 | } | ||||
| 430 | } | ||||
| 431 | return $canonical_map; | ||||
| 432 | } | ||||
| 433 | |||||
| 434 | =head2 _canonicalize_map | ||||
| 435 | |||||
| - - | |||||
| 440 | sub _canonicalize_map { | ||||
| 441 | my ($map) = @_; | ||||
| 442 | my $canonical_map = {}; | ||||
| 443 | |||||
| 444 | foreach my $name ( keys %{ $map->{'by_name'} } ) { | ||||
| 445 | $canonical_map->{$name} = { | ||||
| 446 | 'label' => ucfirst($name), | ||||
| 447 | 'enabled' => 1, | ||||
| 448 | 'bib1_mapping' => {} | ||||
| 449 | }; | ||||
| 450 | foreach my $server ( keys %{ $map->{'by_name'}->{$name} } ) { | ||||
| 451 | $canonical_map->{$name}->{'bib1_mapping'}->{$server} = | ||||
| 452 | $map->{'by_name'}->{$name}->{$server}; | ||||
| 453 | delete $canonical_map->{$name}->{'bib1_mapping'}->{$server} | ||||
| 454 | ->{'attr_string'} | ||||
| 455 | if defined( | ||||
| 456 | $canonical_map->{$name}->{'bib1_mapping'}->{$server} | ||||
| 457 | ->{'attr_string'} | ||||
| 458 | ); | ||||
| 459 | } | ||||
| 460 | } | ||||
| 461 | return $canonical_map; | ||||
| 462 | } | ||||
| 463 | |||||
| 464 | =head2 serialize_mappings | ||||
| 465 | |||||
| - - | |||||
| 473 | sub serialize_mappings { | ||||
| 474 | my ( $self, $format ) = @_; | ||||
| 475 | $format ||= 'yaml'; | ||||
| 476 | my $config; | ||||
| 477 | |||||
| 478 | $config->{'field_mappings'} = | ||||
| 479 | _canonicalize_field_map( $self->bib1_field_map, | ||||
| 480 | $self->search_field_aliases ); | ||||
| 481 | $config->{'modifier_mappings'} = | ||||
| 482 | _canonicalize_map( $self->bib1_modifier_map ); | ||||
| 483 | $config->{'filter_mappings'} = _canonicalize_map( $self->bib1_filter_map ); | ||||
| 484 | $config->{'relevance_bumps'} = | ||||
| 485 | _canonicalize_field_map( $self->bib1_relevance_bump_map ); | ||||
| 486 | |||||
| 487 | if ( $format eq 'json' && can_load( modules => { 'JSON' => undef } ) ) { | ||||
| 488 | return JSON::to_json($config); | ||||
| 489 | } | ||||
| 490 | elsif ( can_load( modules => { 'YAML::Any' => undef } ) ) { | ||||
| 491 | return YAML::Any::Dump($config); | ||||
| 492 | } | ||||
| 493 | return; | ||||
| 494 | } | ||||
| 495 | |||||
| 496 | =head2 initialize | ||||
| 497 | |||||
| - - | |||||
| 509 | sub initialize { | ||||
| 510 | my ( $self, $args ) = @_; | ||||
| 511 | |||||
| 512 | my $field_mappings = $args->{'field_mappings'}; | ||||
| 513 | my $modifier_mappings = $args->{'modifier_mappings'}; | ||||
| 514 | my $filter_mappings = $args->{'filter_mappings'}; | ||||
| 515 | my $relbumps = $args->{'relevance_bumps'}; | ||||
| 516 | my ( $server, $bib1_mapping ); | ||||
| 517 | foreach my $class ( keys %$field_mappings ) { | ||||
| 518 | foreach my $field ( keys %{ $field_mappings->{$class} } ) { | ||||
| 519 | if ( $field_mappings->{$class}->{$field}->{'enabled'} ) { | ||||
| 520 | while ( ( $server, $bib1_mapping ) = | ||||
| 521 | each | ||||
| 522 | %{ $field_mappings->{$class}->{$field}->{'bib1_mapping'} } ) | ||||
| 523 | { | ||||
| 524 | $self->add_bib1_field_map( | ||||
| 525 | $class => $field => $server => $bib1_mapping ); | ||||
| 526 | } | ||||
| 527 | $self->add_search_field_alias( $class => $field => | ||||
| 528 | $field_mappings->{$class}->{$field}->{'index'} ); | ||||
| 529 | foreach my $alias ( | ||||
| 530 | @{ $field_mappings->{$class}->{$field}->{'aliases'} } ) | ||||
| 531 | { | ||||
| 532 | next | ||||
| 533 | if ( $alias eq | ||||
| 534 | $field_mappings->{$class}->{$field}->{'index'} ); | ||||
| 535 | $self->add_search_field_alias( $class => $field => $alias ); | ||||
| 536 | } | ||||
| 537 | } | ||||
| 538 | } | ||||
| 539 | } | ||||
| 540 | foreach my $modifier ( keys %$modifier_mappings ) { | ||||
| 541 | if ( $modifier_mappings->{$modifier}->{'enabled'} ) { | ||||
| 542 | while ( ( $server, $bib1_mapping ) = | ||||
| 543 | each %{ $modifier_mappings->{$modifier}->{'bib1_mapping'} } ) | ||||
| 544 | { | ||||
| 545 | $self->add_bib1_modifier_map( | ||||
| 546 | $modifier => $server => $bib1_mapping ); | ||||
| 547 | } | ||||
| 548 | } | ||||
| 549 | } | ||||
| 550 | foreach my $filter ( keys %$filter_mappings ) { | ||||
| 551 | if ( $filter_mappings->{$filter}->{'enabled'} ) { | ||||
| 552 | while ( ( $server, $bib1_mapping ) = | ||||
| 553 | each %{ $filter_mappings->{$filter}->{'bib1_mapping'} } ) | ||||
| 554 | { | ||||
| 555 | if ( $bib1_mapping->{'target_syntax_callback'} eq | ||||
| 556 | 'date_filter_target_callback' ) | ||||
| 557 | { | ||||
| 558 | $bib1_mapping->{'target_syntax_callback'} = | ||||
| 559 | \&Koha::QueryParser::Driver::PQF::date_filter_target_callback; | ||||
| 560 | } | ||||
| 561 | $self->add_bib1_filter_map( | ||||
| 562 | $filter => $server => $bib1_mapping ); | ||||
| 563 | } | ||||
| 564 | } | ||||
| 565 | } | ||||
| 566 | foreach my $class ( keys %$relbumps ) { | ||||
| 567 | foreach my $field ( keys %{ $relbumps->{$class} } ) { | ||||
| 568 | if ( $relbumps->{$class}->{$field}->{'enabled'} ) { | ||||
| 569 | while ( ( $server, $bib1_mapping ) = | ||||
| 570 | each %{ $relbumps->{$class}->{$field}->{'bib1_mapping'} } ) | ||||
| 571 | { | ||||
| 572 | $self->add_relevance_bump( | ||||
| 573 | $class => $field => $server => $bib1_mapping, | ||||
| 574 | 1 | ||||
| 575 | ); | ||||
| 576 | } | ||||
| 577 | } | ||||
| 578 | } | ||||
| 579 | } | ||||
| 580 | return $self; | ||||
| 581 | } | ||||
| 582 | |||||
| 583 | =head2 load_config | ||||
| 584 | |||||
| - - | |||||
| 634 | sub load_config { | ||||
| 635 | my ($self, $file) = @_; | ||||
| 636 | require YAML::Any; | ||||
| 637 | return unless ($file && -f $file); | ||||
| 638 | my $config = YAML::Any::LoadFile($file); | ||||
| 639 | return unless ($config); | ||||
| 640 | $self->initialize($config); | ||||
| 641 | return 1; | ||||
| 642 | } | ||||
| 643 | |||||
| 644 | =head2 TEST_SETUP | ||||
| 645 | |||||
| - - | |||||
| 656 | sub TEST_SETUP { | ||||
| 657 | my ($self) = @_; | ||||
| 658 | |||||
| 659 | $self->default_search_class( 'keyword' ); | ||||
| 660 | |||||
| 661 | $self->add_bib1_field_map('keyword' => 'abstract' => 'biblioserver' => { '1' => '62' } ); | ||||
| 662 | $self->add_search_field_alias( 'keyword' => 'abstract' => 'ab' ); | ||||
| 663 | $self->add_bib1_field_map('keyword' => '' => 'biblioserver' => { '1' => '1016' } ); | ||||
| 664 | $self->add_search_field_alias( 'keyword' => '' => 'kw' ); | ||||
| 665 | $self->add_bib1_field_map('author' => '' => 'biblioserver' => { '1' => '1003' } ); | ||||
| 666 | $self->add_search_field_alias( 'author' => '' => 'au' ); | ||||
| 667 | $self->add_bib1_field_map('author' => 'personal' => 'biblioserver' => { '1' => '1004' } ); | ||||
| 668 | $self->add_bib1_field_map('author' => 'corporate' => 'biblioserver' => { '1' => '1005' } ); | ||||
| 669 | $self->add_search_field_alias( 'author' => 'corporate' => 'cpn' ); | ||||
| 670 | $self->add_bib1_field_map('author' => 'conference' => 'biblioserver' => { '1' => '1006' } ); | ||||
| 671 | $self->add_search_field_alias( 'author' => 'conference' => 'cfn' ); | ||||
| 672 | $self->add_bib1_field_map('keyword' => 'local-classification' => 'biblioserver' => { '1' => '20' } ); | ||||
| 673 | $self->add_search_field_alias( 'keyword' => 'local-classification' => 'lcn' ); | ||||
| 674 | $self->add_search_field_alias( 'keyword' => 'local-classification' => 'callnum' ); | ||||
| 675 | $self->add_bib1_field_map('keyword' => 'bib-level' => 'biblioserver' => { '1' => '1021' } ); | ||||
| 676 | $self->add_bib1_field_map('keyword' => 'code-institution' => 'biblioserver' => { '1' => '56' } ); | ||||
| 677 | $self->add_bib1_field_map('keyword' => 'language' => 'biblioserver' => { '1' => '54' } ); | ||||
| 678 | $self->add_search_field_alias( 'keyword' => 'language' => 'ln' ); | ||||
| 679 | $self->add_bib1_field_map('keyword' => 'record-type' => 'biblioserver' => { '1' => '1001' } ); | ||||
| 680 | $self->add_search_field_alias( 'keyword' => 'record-type' => 'rtype' ); | ||||
| 681 | $self->add_search_field_alias( 'keyword' => 'record-type' => 'mc-rtype' ); | ||||
| 682 | $self->add_search_field_alias( 'keyword' => 'record-type' => 'mus' ); | ||||
| 683 | $self->add_bib1_field_map('keyword' => 'content-type' => 'biblioserver' => { '1' => '1034' } ); | ||||
| 684 | $self->add_search_field_alias( 'keyword' => 'content-type' => 'ctype' ); | ||||
| 685 | $self->add_bib1_field_map('keyword' => 'lc-card-number' => 'biblioserver' => { '1' => '9' } ); | ||||
| 686 | $self->add_search_field_alias( 'keyword' => 'lc-card-number' => 'lc-card' ); | ||||
| 687 | $self->add_bib1_field_map('keyword' => 'local-number' => 'biblioserver' => { '1' => '12' } ); | ||||
| 688 | $self->add_search_field_alias( 'keyword' => 'local-number' => 'sn' ); | ||||
| 689 | $self->add_bib1_filter_map( 'biblioserver', 'copydate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => '30', '4' => '4' }); | ||||
| 690 | $self->add_bib1_filter_map( 'biblioserver', 'pubdate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => 'pubdate', '4' => '4' }); | ||||
| 691 | $self->add_bib1_filter_map( 'biblioserver', 'acqdate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => 'Date-of-acquisition', '4' => '4' }); | ||||
| 692 | $self->add_bib1_field_map('keyword' => 'isbn' => 'biblioserver' => { '1' => '7' } ); | ||||
| 693 | $self->add_search_field_alias( 'keyword' => 'isbn' => 'nb' ); | ||||
| 694 | $self->add_bib1_field_map('keyword' => 'issn' => 'biblioserver' => { '1' => '8' } ); | ||||
| 695 | $self->add_search_field_alias( 'keyword' => 'issn' => 'ns' ); | ||||
| 696 | $self->add_bib1_field_map('keyword' => 'identifier-standard' => 'biblioserver' => { '1' => '1007' } ); | ||||
| 697 | $self->add_search_field_alias( 'keyword' => 'identifier-standard' => 'ident' ); | ||||
| 698 | $self->add_bib1_field_map('keyword' => 'upc' => 'biblioserver' => { '1' => 'UPC' } ); | ||||
| 699 | $self->add_search_field_alias( 'keyword' => 'upc' => 'upc' ); | ||||
| 700 | $self->add_bib1_field_map('keyword' => 'ean' => 'biblioserver' => { '1' => 'EAN' } ); | ||||
| 701 | $self->add_search_field_alias( 'keyword' => 'ean' => 'ean' ); | ||||
| 702 | $self->add_bib1_field_map('keyword' => 'music' => 'biblioserver' => { '1' => 'Music-number' } ); | ||||
| 703 | $self->add_search_field_alias( 'keyword' => 'music' => 'music' ); | ||||
| 704 | $self->add_bib1_field_map('keyword' => 'stock-number' => 'biblioserver' => { '1' => '1028' } ); | ||||
| 705 | $self->add_search_field_alias( 'keyword' => 'stock-number' => 'stock-number' ); | ||||
| 706 | $self->add_bib1_field_map('keyword' => 'material-type' => 'biblioserver' => { '1' => '1031' } ); | ||||
| 707 | $self->add_search_field_alias( 'keyword' => 'material-type' => 'material-type' ); | ||||
| 708 | $self->add_bib1_field_map('keyword' => 'place-publication' => 'biblioserver' => { '1' => '59' } ); | ||||
| 709 | $self->add_search_field_alias( 'keyword' => 'place-publication' => 'pl' ); | ||||
| 710 | $self->add_bib1_field_map('keyword' => 'personal-name' => 'biblioserver' => { '1' => 'Personal-name' } ); | ||||
| 711 | $self->add_search_field_alias( 'keyword' => 'personal-name' => 'pn' ); | ||||
| 712 | $self->add_bib1_field_map('keyword' => 'publisher' => 'biblioserver' => { '1' => '1018' } ); | ||||
| 713 | $self->add_search_field_alias( 'keyword' => 'publisher' => 'pb' ); | ||||
| 714 | $self->add_bib1_field_map('keyword' => 'note' => 'biblioserver' => { '1' => '63' } ); | ||||
| 715 | $self->add_search_field_alias( 'keyword' => 'note' => 'nt' ); | ||||
| 716 | $self->add_bib1_field_map('keyword' => 'record-control-number' => 'biblioserver' => { '1' => '1045' } ); | ||||
| 717 | $self->add_search_field_alias( 'keyword' => 'record-control-number' => 'rcn' ); | ||||
| 718 | $self->add_bib1_field_map('subject' => '' => 'biblioserver' => { '1' => '21' } ); | ||||
| 719 | $self->add_search_field_alias( 'subject' => '' => 'su' ); | ||||
| 720 | $self->add_search_field_alias( 'subject' => '' => 'su-to' ); | ||||
| 721 | $self->add_search_field_alias( 'subject' => '' => 'su-geo' ); | ||||
| 722 | $self->add_search_field_alias( 'subject' => '' => 'su-ut' ); | ||||
| 723 | $self->add_bib1_field_map('subject' => 'name-personal' => 'biblioserver' => { '1' => '1009' } ); | ||||
| 724 | $self->add_search_field_alias( 'subject' => 'name-personal' => 'su-na' ); | ||||
| 725 | $self->add_bib1_field_map('title' => '' => 'biblioserver' => { '1' => '4' } ); | ||||
| 726 | $self->add_search_field_alias( 'title' => '' => 'ti' ); | ||||
| 727 | $self->add_bib1_field_map('title' => 'cover' => 'biblioserver' => { '1' => '36' } ); | ||||
| 728 | $self->add_search_field_alias( 'title' => 'cover' => 'title-cover' ); | ||||
| 729 | $self->add_bib1_field_map('keyword' => 'host-item' => 'biblioserver' => { '1' => '1033' } ); | ||||
| 730 | $self->add_bib1_field_map('keyword' => 'video-mt' => 'biblioserver' => { '1' => 'Video-mt' } ); | ||||
| 731 | $self->add_bib1_field_map('keyword' => 'graphics-type' => 'biblioserver' => { '1' => 'Graphic-type' } ); | ||||
| 732 | $self->add_bib1_field_map('keyword' => 'graphics-support' => 'biblioserver' => { '1' => 'Graphic-support' } ); | ||||
| 733 | $self->add_bib1_field_map('keyword' => 'type-of-serial' => 'biblioserver' => { '1' => 'Type-Of-Serial' } ); | ||||
| 734 | $self->add_bib1_field_map('keyword' => 'regularity-code' => 'biblioserver' => { '1' => 'Regularity-code' } ); | ||||
| 735 | $self->add_bib1_field_map('keyword' => 'material-type' => 'biblioserver' => { '1' => 'Material-type' } ); | ||||
| 736 | $self->add_bib1_field_map('keyword' => 'literature-code' => 'biblioserver' => { '1' => 'Literature-Code' } ); | ||||
| 737 | $self->add_bib1_field_map('keyword' => 'biography-code' => 'biblioserver' => { '1' => 'Biography-code' } ); | ||||
| 738 | $self->add_bib1_field_map('keyword' => 'illustration-code' => 'biblioserver' => { '1' => 'Illustration-code' } ); | ||||
| 739 | $self->add_bib1_field_map('title' => 'series' => 'biblioserver' => { '1' => '5' } ); | ||||
| 740 | $self->add_search_field_alias( 'title' => 'series' => 'title-series' ); | ||||
| 741 | $self->add_search_field_alias( 'title' => 'series' => 'se' ); | ||||
| 742 | $self->add_bib1_field_map('title' => 'uniform' => 'biblioserver' => { '1' => 'Title-uniform' } ); | ||||
| 743 | $self->add_search_field_alias( 'title' => 'uniform' => 'title-uniform' ); | ||||
| 744 | $self->add_bib1_field_map('subject' => 'authority-number' => 'biblioserver' => { '1' => 'Koha-Auth-Number' } ); | ||||
| 745 | $self->add_search_field_alias( 'subject' => 'authority-number' => 'an' ); | ||||
| 746 | $self->add_bib1_field_map('keyword' => 'control-number' => 'biblioserver' => { '1' => '9001' } ); | ||||
| 747 | $self->add_bib1_field_map('keyword' => 'biblionumber' => 'biblioserver' => { '1' => '9002', '5' => '100' } ); | ||||
| 748 | $self->add_bib1_field_map('keyword' => 'totalissues' => 'biblioserver' => { '1' => '9003' } ); | ||||
| 749 | $self->add_bib1_field_map('keyword' => 'cn-bib-source' => 'biblioserver' => { '1' => '9004' } ); | ||||
| 750 | $self->add_bib1_field_map('keyword' => 'cn-bib-sort' => 'biblioserver' => { '1' => '9005' } ); | ||||
| 751 | $self->add_bib1_field_map('keyword' => 'itemtype' => 'biblioserver' => { '1' => '9006' } ); | ||||
| 752 | $self->add_search_field_alias( 'keyword' => 'itemtype' => 'mc-itemtype' ); | ||||
| 753 | $self->add_bib1_field_map('keyword' => 'cn-class' => 'biblioserver' => { '1' => '9007' } ); | ||||
| 754 | $self->add_bib1_field_map('keyword' => 'cn-item' => 'biblioserver' => { '1' => '9008' } ); | ||||
| 755 | $self->add_bib1_field_map('keyword' => 'cn-prefix' => 'biblioserver' => { '1' => '9009' } ); | ||||
| 756 | $self->add_bib1_field_map('keyword' => 'cn-suffix' => 'biblioserver' => { '1' => '9010' } ); | ||||
| 757 | $self->add_bib1_field_map('keyword' => 'suppress' => 'biblioserver' => { '1' => '9011' } ); | ||||
| 758 | $self->add_bib1_field_map('keyword' => 'id-other' => 'biblioserver' => { '1' => '9012' } ); | ||||
| 759 | $self->add_bib1_field_map('keyword' => 'date-entered-on-file' => 'biblioserver' => { '1' => 'date-entered-on-file' } ); | ||||
| 760 | $self->add_bib1_field_map('keyword' => 'extent' => 'biblioserver' => { '1' => 'Extent' } ); | ||||
| 761 | $self->add_bib1_field_map('keyword' => 'llength' => 'biblioserver' => { '1' => 'llength' } ); | ||||
| 762 | $self->add_bib1_field_map('keyword' => 'summary' => 'biblioserver' => { '1' => 'Summary' } ); | ||||
| 763 | $self->add_bib1_field_map('keyword' => 'withdrawn' => 'biblioserver' => { '1' => '8001' } ); | ||||
| 764 | $self->add_bib1_field_map('keyword' => 'lost' => 'biblioserver' => { '1' => '8002' } ); | ||||
| 765 | $self->add_bib1_field_map('keyword' => 'classification-source' => 'biblioserver' => { '1' => '8003' } ); | ||||
| 766 | $self->add_bib1_field_map('keyword' => 'materials-specified' => 'biblioserver' => { '1' => '8004' } ); | ||||
| 767 | $self->add_bib1_field_map('keyword' => 'damaged' => 'biblioserver' => { '1' => '8005' } ); | ||||
| 768 | $self->add_bib1_field_map('keyword' => 'restricted' => 'biblioserver' => { '1' => '8006' } ); | ||||
| 769 | $self->add_bib1_field_map('keyword' => 'cn-sort' => 'biblioserver' => { '1' => '8007' } ); | ||||
| 770 | $self->add_bib1_field_map('keyword' => 'notforloan' => 'biblioserver' => { '1' => '8008', '4' => '109' } ); | ||||
| 771 | $self->add_bib1_field_map('keyword' => 'ccode' => 'biblioserver' => { '1' => '8009' } ); | ||||
| 772 | $self->add_search_field_alias( 'keyword' => 'ccode' => 'mc-ccode' ); | ||||
| 773 | $self->add_bib1_field_map('keyword' => 'itemnumber' => 'biblioserver' => { '1' => '8010' } ); | ||||
| 774 | $self->add_bib1_field_map('keyword' => 'homebranch' => 'biblioserver' => { '1' => 'homebranch' } ); | ||||
| 775 | $self->add_search_field_alias( 'keyword' => 'homebranch' => 'branch' ); | ||||
| 776 | $self->add_bib1_field_map('keyword' => 'holdingbranch' => 'biblioserver' => { '1' => '8012' } ); | ||||
| 777 | $self->add_bib1_field_map('keyword' => 'location' => 'biblioserver' => { '1' => '8013' } ); | ||||
| 778 | $self->add_search_field_alias( 'keyword' => 'location' => 'mc-loc' ); | ||||
| 779 | $self->add_bib1_field_map('keyword' => 'acqsource' => 'biblioserver' => { '1' => '8015' } ); | ||||
| 780 | $self->add_bib1_field_map('keyword' => 'coded-location-qualifier' => 'biblioserver' => { '1' => '8016' } ); | ||||
| 781 | $self->add_bib1_field_map('keyword' => 'price' => 'biblioserver' => { '1' => '8017' } ); | ||||
| 782 | $self->add_bib1_field_map('keyword' => 'stocknumber' => 'biblioserver' => { '1' => '1062' } ); | ||||
| 783 | $self->add_search_field_alias( 'keyword' => 'stocknumber' => 'inv' ); | ||||
| 784 | $self->add_bib1_field_map('keyword' => 'stack' => 'biblioserver' => { '1' => '8018' } ); | ||||
| 785 | $self->add_bib1_field_map('keyword' => 'issues' => 'biblioserver' => { '1' => '8019' } ); | ||||
| 786 | $self->add_bib1_field_map('keyword' => 'renewals' => 'biblioserver' => { '1' => '8020' } ); | ||||
| 787 | $self->add_bib1_field_map('keyword' => 'reserves' => 'biblioserver' => { '1' => '8021' } ); | ||||
| 788 | $self->add_bib1_field_map('keyword' => 'local-classification' => 'biblioserver' => { '1' => '8022' } ); | ||||
| 789 | $self->add_bib1_field_map('keyword' => 'barcode' => 'biblioserver' => { '1' => '8023' } ); | ||||
| 790 | $self->add_search_field_alias( 'keyword' => 'barcode' => 'bc' ); | ||||
| 791 | $self->add_bib1_field_map('keyword' => 'onloan' => 'biblioserver' => { '1' => '8024' } ); | ||||
| 792 | $self->add_bib1_field_map('keyword' => 'datelastseen' => 'biblioserver' => { '1' => '8025' } ); | ||||
| 793 | $self->add_bib1_field_map('keyword' => 'datelastborrowed' => 'biblioserver' => { '1' => '8026' } ); | ||||
| 794 | $self->add_bib1_field_map('keyword' => 'copynumber' => 'biblioserver' => { '1' => '8027' } ); | ||||
| 795 | $self->add_bib1_field_map('keyword' => 'uri' => 'biblioserver' => { '1' => '8028' } ); | ||||
| 796 | $self->add_bib1_field_map('keyword' => 'replacementprice' => 'biblioserver' => { '1' => '8029' } ); | ||||
| 797 | $self->add_bib1_field_map('keyword' => 'replacementpricedate' => 'biblioserver' => { '1' => '8030' } ); | ||||
| 798 | $self->add_bib1_field_map('keyword' => 'itype' => 'biblioserver' => { '1' => '8031' } ); | ||||
| 799 | $self->add_search_field_alias( 'keyword' => 'itype' => 'mc-itype' ); | ||||
| 800 | $self->add_bib1_field_map('keyword' => 'ff8-22' => 'biblioserver' => { '1' => '8822' } ); | ||||
| 801 | $self->add_bib1_field_map('keyword' => 'ff8-23' => 'biblioserver' => { '1' => '8823' } ); | ||||
| 802 | $self->add_bib1_field_map('keyword' => 'ff8-34' => 'biblioserver' => { '1' => '8834' } ); | ||||
| 803 | # Audience | ||||
| 804 | $self->add_bib1_field_map('keyword' => 'audience' => 'biblioserver' => { '1' => '8822' } ); | ||||
| 805 | $self->add_search_field_alias( 'keyword' => 'audience' => 'aud' ); | ||||
| 806 | |||||
| 807 | # Content and Literary form | ||||
| 808 | $self->add_bib1_field_map('keyword' => 'fiction' => 'biblioserver' => { '1' => '8833' } ); | ||||
| 809 | $self->add_search_field_alias( 'keyword' => 'fiction' => 'fic' ); | ||||
| 810 | $self->add_bib1_field_map('keyword' => 'biography' => 'biblioserver' => { '1' => '8834' } ); | ||||
| 811 | $self->add_search_field_alias( 'keyword' => 'biography' => 'bio' ); | ||||
| 812 | |||||
| 813 | # Format | ||||
| 814 | $self->add_bib1_field_map('keyword' => 'format' => 'biblioserver' => { '1' => '8823' } ); | ||||
| 815 | # format used as a limit FIXME: needed? | ||||
| 816 | $self->add_bib1_field_map('keyword' => 'l-format' => 'biblioserver' => { '1' => '8703' } ); | ||||
| 817 | |||||
| 818 | $self->add_bib1_field_map('keyword' => 'illustration-code' => 'biblioserver' => { '1' => 'Illustration-code ' } ); | ||||
| 819 | |||||
| 820 | # Lexile Number | ||||
| 821 | $self->add_bib1_field_map('keyword' => 'lex' => 'biblioserver' => { '1' => '9903 r=r' } ); | ||||
| 822 | |||||
| 823 | #Accelerated Reader Level | ||||
| 824 | $self->add_bib1_field_map('keyword' => 'arl' => 'biblioserver' => { '1' => '9904 r=r' } ); | ||||
| 825 | |||||
| 826 | #Accelerated Reader Point | ||||
| 827 | $self->add_bib1_field_map('keyword' => 'arp' => 'biblioserver' => { '1' => '9013 r=r' } ); | ||||
| 828 | |||||
| 829 | # Curriculum | ||||
| 830 | $self->add_bib1_field_map('keyword' => 'curriculum' => 'biblioserver' => { '1' => '9658' } ); | ||||
| 831 | |||||
| 832 | ## Statuses | ||||
| 833 | $self->add_bib1_field_map('keyword' => 'popularity' => 'biblioserver' => { '1' => 'issues' } ); | ||||
| 834 | |||||
| 835 | ## Type Limits | ||||
| 836 | $self->add_bib1_field_map('keyword' => 'dt-bks' => 'biblioserver' => { '1' => '8700' } ); | ||||
| 837 | $self->add_bib1_field_map('keyword' => 'dt-vis' => 'biblioserver' => { '1' => '8700' } ); | ||||
| 838 | $self->add_bib1_field_map('keyword' => 'dt-sr' => 'biblioserver' => { '1' => '8700' } ); | ||||
| 839 | $self->add_bib1_field_map('keyword' => 'dt-cf' => 'biblioserver' => { '1' => '8700' } ); | ||||
| 840 | $self->add_bib1_field_map('keyword' => 'dt-map' => 'biblioserver' => { '1' => '8700' } ); | ||||
| 841 | |||||
| 842 | $self->add_bib1_field_map('keyword' => 'name' => 'biblioserver' => { '1' => '1002' } ); | ||||
| 843 | $self->add_bib1_field_map('keyword' => 'item' => 'biblioserver' => { '1' => '9520' } ); | ||||
| 844 | $self->add_bib1_field_map('keyword' => 'host-item-number' => 'biblioserver' => { '1' => '8911' } ); | ||||
| 845 | $self->add_search_field_alias( 'keyword' => 'host-item-number' => 'hi' ); | ||||
| 846 | |||||
| 847 | $self->add_bib1_field_map('keyword' => 'alwaysmatch' => 'biblioserver' => { '1' => '_ALLRECORDS', '2' => '103' } ); | ||||
| 848 | $self->add_bib1_field_map('subject' => 'complete' => 'biblioserver' => { '1' => '21', '3' => '1', '4' => '1', '5' => '100', '6' => '3' } ); | ||||
| 849 | |||||
| 850 | $self->add_bib1_modifier_map('relevance' => 'biblioserver' => { '2' => '102' } ); | ||||
| 851 | $self->add_bib1_modifier_map('title-sort-za' => 'biblioserver' => { '7' => '2', '1' => '36', '' => '0', 'op' => '@or' } ); | ||||
| 852 | $self->add_bib1_modifier_map('title-sort-az' => 'biblioserver' => { '7' => '1', '1' => '36', '' => '0', 'op' => '@or' } ); | ||||
| 853 | $self->add_bib1_modifier_map('relevance_dsc' => 'biblioserver' => { '2' => '102' } ); | ||||
| 854 | $self->add_bib1_modifier_map('title_dsc' => 'biblioserver' => { '7' => '2', '1' => '4', '' => '0', 'op' => '@or' } ); | ||||
| 855 | $self->add_bib1_modifier_map('title_asc' => 'biblioserver' => { '7' => '1', '1' => '4', '' => '0', 'op' => '@or' } ); | ||||
| 856 | $self->add_bib1_modifier_map('author_asc' => 'biblioserver' => { '7' => '2', '1' => '1003', '' => '0', 'op' => '@or' } ); | ||||
| 857 | $self->add_bib1_modifier_map('author_dsc' => 'biblioserver' => { '7' => '1', '1' => '1003', '' => '0', 'op' => '@or' } ); | ||||
| 858 | $self->add_bib1_modifier_map('popularity_asc' => 'biblioserver' => { '7' => '2', '1' => '9003', '' => '0', 'op' => '@or' } ); | ||||
| 859 | $self->add_bib1_modifier_map('popularity_dsc' => 'biblioserver' => { '7' => '1', '1' => '9003', '' => '0', 'op' => '@or' } ); | ||||
| 860 | $self->add_bib1_modifier_map('call_number_asc' => 'biblioserver' => { '7' => '2', '1' => '8007', '' => '0', 'op' => '@or' } ); | ||||
| 861 | $self->add_bib1_modifier_map('call_number_dsc' => 'biblioserver' => { '7' => '1', '1' => '8007', '' => '0', 'op' => '@or' } ); | ||||
| 862 | $self->add_bib1_modifier_map('pubdate_asc' => 'biblioserver' => { '7' => '2', '1' => '31', '' => '0', 'op' => '@or' } ); | ||||
| 863 | $self->add_bib1_modifier_map('pubdate_dsc' => 'biblioserver' => { '7' => '1', '1' => '31', '' => '0', 'op' => '@or' } ); | ||||
| 864 | $self->add_bib1_modifier_map('acqdate_asc' => 'biblioserver' => { '7' => '2', '1' => '32', '' => '0', 'op' => '@or' } ); | ||||
| 865 | $self->add_bib1_modifier_map('acqdate_dsc' => 'biblioserver' => { '7' => '1', '1' => '32', '' => '0', 'op' => '@or' } ); | ||||
| 866 | |||||
| 867 | $self->add_bib1_modifier_map('title_za' => 'biblioserver' => { '7' => '2', '1' => '4', '' => '0', 'op' => '@or' } ); | ||||
| 868 | $self->add_bib1_modifier_map('title_az' => 'biblioserver' => { '7' => '1', '1' => '4', '' => '0', 'op' => '@or' } ); | ||||
| 869 | $self->add_bib1_modifier_map('author_za' => 'biblioserver' => { '7' => '2', '1' => '1003', '' => '0', 'op' => '@or' } ); | ||||
| 870 | $self->add_bib1_modifier_map('author_az' => 'biblioserver' => { '7' => '1', '1' => '1003', '' => '0', 'op' => '@or' } ); | ||||
| 871 | $self->add_bib1_modifier_map('ascending' => 'biblioserver' => { '7' => '1' } ); | ||||
| 872 | $self->add_bib1_modifier_map('descending' => 'biblioserver' => { '7' => '2' } ); | ||||
| 873 | |||||
| 874 | $self->add_bib1_field_map('title' => 'exacttitle' => 'biblioserver' => { '1' => '4', '4' => '1', '6' => '3' } ); | ||||
| 875 | $self->add_search_field_alias( 'title' => 'exacttitle' => 'ti,ext' ); | ||||
| 876 | $self->add_bib1_field_map('author' => 'exactauthor' => 'biblioserver' => { '1' => '1003', '4' => '1', '6' => '3' } ); | ||||
| 877 | $self->add_search_field_alias( 'author' => 'exactauthor' => 'au,ext' ); | ||||
| 878 | |||||
| 879 | $self->add_bib1_field_map('subject' => 'headingmain' => 'authorityserver' => { '1' => 'Heading-Main' } ); | ||||
| 880 | $self->add_bib1_field_map('subject' => 'heading' => 'authorityserver' => { '1' => 'Heading' } ); | ||||
| 881 | $self->add_bib1_field_map('subject' => 'matchheading' => 'authorityserver' => { '1' => 'Match-heading' } ); | ||||
| 882 | $self->add_bib1_field_map('subject' => 'seefrom' => 'authorityserver' => { '1' => 'Match-heading-see-from' } ); | ||||
| 883 | $self->add_bib1_field_map('subject' => '' => 'authorityserver' => { '1' => 'Match-heading' } ); | ||||
| 884 | $self->add_bib1_field_map('keyword' => 'alwaysmatch' => 'authorityserver' => { '1' => '_ALLRECORDS', '2' => '103' } ); | ||||
| 885 | $self->add_bib1_field_map('keyword' => 'match' => 'authorityserver' => { '1' => 'Match' } ); | ||||
| 886 | $self->add_bib1_field_map('keyword' => 'thesaurus' => 'authorityserver' => { '1' => 'Subject-heading-thesaurus' } ); | ||||
| 887 | $self->add_bib1_field_map('keyword' => 'authtype' => 'authorityserver' => { '1' => 'authtype', '5' => '100' } ); | ||||
| 888 | $self->add_bib1_field_map('keyword' => '' => 'authorityserver' => { '1' => 'Any' } ); | ||||
| 889 | $self->add_search_field_alias( 'subject' => 'headingmain' => 'mainmainentry' ); | ||||
| 890 | $self->add_search_field_alias( 'subject' => 'heading' => 'mainentry' ); | ||||
| 891 | $self->add_search_field_alias( 'subject' => 'heading' => 'he' ); | ||||
| 892 | $self->add_search_field_alias( 'subject' => 'matchheading' => 'match-heading' ); | ||||
| 893 | $self->add_search_field_alias( 'keyword' => '' => 'any' ); | ||||
| 894 | $self->add_search_field_alias( 'keyword' => 'match' => 'match' ); | ||||
| 895 | $self->add_search_field_alias( 'subject' => 'seefrom' => 'see-from' ); | ||||
| 896 | $self->add_search_field_alias( 'keyword' => 'thesaurus' => 'thesaurus' ); | ||||
| 897 | $self->add_search_field_alias( 'keyword' => 'alwaysmatch' => 'all' ); | ||||
| 898 | $self->add_search_field_alias( 'keyword' => 'authtype' => 'authtype' ); | ||||
| 899 | $self->add_search_field_alias( 'keyword' => 'authtype' => 'at' ); | ||||
| 900 | |||||
| 901 | $self->add_bib1_field_map('subject' => 'start' => 'authorityserver' => { '3' => '2', '4' => '1', '5' => '1' } ); | ||||
| 902 | $self->add_bib1_field_map('subject' => 'exact' => 'authorityserver' => { '4' => '1', '5' => '100', '6' => '3' } ); | ||||
| 903 | |||||
| 904 | $self->add_bib1_modifier_map('HeadingAsc' => 'authorityserver' => { '7' => '1', '1' => 'Heading', '' => '0', 'op' => '@or' } ); | ||||
| 905 | $self->add_bib1_modifier_map('HeadingDsc' => 'authorityserver' => { '7' => '2', '1' => 'Heading', '' => '0', 'op' => '@or' } ); | ||||
| 906 | $self->add_bib1_modifier_map('AuthidAsc' => 'authorityserver' => { '7' => '1', '1' => 'Local-Number', '' => '0', 'op' => '@or' } ); | ||||
| 907 | $self->add_bib1_modifier_map('AuthidDsc' => 'authorityserver' => { '7' => '2', '1' => 'Local-Number', '' => '0', 'op' => '@or' } ); | ||||
| 908 | $self->add_bib1_modifier_map('Relevance' => 'authorityserver' => { '2' => '102' } ); | ||||
| 909 | |||||
| 910 | return $self; | ||||
| 911 | } | ||||
| 912 | |||||
| 913 | 1 | 6µs | 1; |