|
Lines 645-690
sub marc_records_to_documents {
Link Here
|
| 645 |
$altscript = 1; |
645 |
$altscript = 1; |
| 646 |
} |
646 |
} |
| 647 |
} |
647 |
} |
| 648 |
|
648 |
$self->_process_data_field_rules( |
| 649 |
my $data_field_rules = $data_fields_rules->{$tag}; |
649 |
$data_fields_rules->{$tag}, |
| 650 |
if ($data_field_rules) { |
650 |
$field, |
| 651 |
my $subfields_mappings = $data_field_rules->{subfields}; |
651 |
$record_document, |
| 652 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
652 |
$altscript |
| 653 |
foreach my $subfield ($field->subfields()) { |
653 |
); |
| 654 |
my ($code, $data) = @{$subfield}; |
|
|
| 655 |
my $mappings = $subfields_mappings->{$code} // []; |
| 656 |
if ($wildcard_mappings) { |
| 657 |
$mappings = [@{$mappings}, @{$wildcard_mappings}]; |
| 658 |
} |
| 659 |
if (@{$mappings}) { |
| 660 |
$self->_process_mappings($mappings, $data, $record_document, { |
| 661 |
altscript => $altscript, |
| 662 |
data_source => 'subfield', |
| 663 |
code => $code, |
| 664 |
field => $field |
| 665 |
} |
| 666 |
); |
| 667 |
} |
| 668 |
} |
| 669 |
|
| 670 |
my $subfields_join_mappings = $data_field_rules->{subfields_join}; |
| 671 |
if ($subfields_join_mappings) { |
| 672 |
foreach my $subfields_group (keys %{$subfields_join_mappings}) { |
| 673 |
my $data_field = $field->clone; #copy field to preserve for alt scripts |
| 674 |
$data_field->delete_subfield(match => qr/^$/); #remove empty subfields, otherwise they are printed as a space |
| 675 |
my $data = $data_field->as_string( $subfields_group ); #get values for subfields as a combined string, preserving record order |
| 676 |
if ($data) { |
| 677 |
$self->_process_mappings($subfields_join_mappings->{$subfields_group}, $data, $record_document, { |
| 678 |
altscript => $altscript, |
| 679 |
data_source => 'subfields_group', |
| 680 |
codes => $subfields_group, |
| 681 |
field => $field |
| 682 |
} |
| 683 |
); |
| 684 |
} |
| 685 |
} |
| 686 |
} |
| 687 |
} |
| 688 |
} |
654 |
} |
| 689 |
} |
655 |
} |
| 690 |
|
656 |
|
|
Lines 702-762
sub marc_records_to_documents {
Link Here
|
| 702 |
if ( C4::Context->preference('IncludeSeeAlsoFromInSearches') ) { |
668 |
if ( C4::Context->preference('IncludeSeeAlsoFromInSearches') ) { |
| 703 |
push @other_headings, 'see_also_from'; |
669 |
push @other_headings, 'see_also_from'; |
| 704 |
} |
670 |
} |
|
|
671 |
|
| 705 |
$marc_filter->initialize( { options => { other_headings => \@other_headings } } ); |
672 |
$marc_filter->initialize( { options => { other_headings => \@other_headings } } ); |
| 706 |
foreach my $field ( $marc_filter->fields($record) ) { |
673 |
foreach my $field ( $marc_filter->fields($record) ) { |
| 707 |
my $data_field_rules = $data_fields_rules->{ $field->tag() }; |
674 |
$self->_process_data_field_rules( |
| 708 |
if ($data_field_rules) { |
675 |
$data_fields_rules->{$field->tag()}, |
| 709 |
my $subfields_mappings = $data_field_rules->{subfields}; |
676 |
$field, |
| 710 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
677 |
$record_document, |
| 711 |
foreach my $subfield ( $field->subfields() ) { |
678 |
0, |
| 712 |
my ( $code, $data ) = @{$subfield}; |
679 |
# Do not include "see from" into these kind of fields |
| 713 |
my @mappings; |
680 |
qr/__(sort|facet|suggestion)$/ |
| 714 |
push @mappings, @{ $subfields_mappings->{$code} } if $subfields_mappings->{$code}; |
681 |
); |
| 715 |
push @mappings, @$wildcard_mappings if $wildcard_mappings; |
|
|
| 716 |
|
| 717 |
# Do not include "see from" into these kind of fields |
| 718 |
@mappings = grep { $_->[0] !~ /__(sort|facet|suggestion)$/ } @mappings; |
| 719 |
if (@mappings) { |
| 720 |
$self->_process_mappings( |
| 721 |
\@mappings, |
| 722 |
$data, |
| 723 |
$record_document, |
| 724 |
{ |
| 725 |
data_source => 'subfield', |
| 726 |
code => $code, |
| 727 |
field => $field |
| 728 |
} |
| 729 |
); |
| 730 |
} |
| 731 |
} |
| 732 |
|
| 733 |
my $subfields_join_mappings = $data_field_rules->{subfields_join}; |
| 734 |
if ($subfields_join_mappings) { |
| 735 |
foreach my $subfields_group ( keys %{$subfields_join_mappings} ) { |
| 736 |
my $data_field = $field->clone; |
| 737 |
|
| 738 |
# remove empty subfields, otherwise they are printed as a space |
| 739 |
$data_field->delete_subfield( match => qr/^$/ ); |
| 740 |
my $data = $data_field->as_string($subfields_group); |
| 741 |
if ($data) { |
| 742 |
my @mappings = @{ $subfields_join_mappings->{$subfields_group} }; |
| 743 |
|
| 744 |
# Do not include "see from" into these kind of fields |
| 745 |
@mappings = grep { $_->[0] !~ /__(sort|facet|suggestion)$/ } @mappings; |
| 746 |
$self->_process_mappings( |
| 747 |
\@mappings, |
| 748 |
$data, |
| 749 |
$record_document, |
| 750 |
{ |
| 751 |
data_source => 'subfields_group', |
| 752 |
codes => $subfields_group, |
| 753 |
field => $field |
| 754 |
} |
| 755 |
); |
| 756 |
} |
| 757 |
} |
| 758 |
} |
| 759 |
} |
| 760 |
} |
682 |
} |
| 761 |
} |
683 |
} |
| 762 |
|
684 |
|
|
Lines 891-896
sub marc_records_to_documents {
Link Here
|
| 891 |
return \@record_documents; |
813 |
return \@record_documents; |
| 892 |
} |
814 |
} |
| 893 |
|
815 |
|
|
|
816 |
=head2 _process_data_field_rules($rules, $field, $record_document, $altscript, $exclude_target_fields_regexp) |
| 817 |
|
| 818 |
Process mapping rules for a single MARC::Field data field. |
| 819 |
|
| 820 |
=over 4 |
| 821 |
|
| 822 |
=item C<$rules> |
| 823 |
|
| 824 |
Data field mapping rules to be applied. |
| 825 |
|
| 826 |
=item C<$field> |
| 827 |
|
| 828 |
The source Marc::Field data field. |
| 829 |
|
| 830 |
=item C<$record_document> |
| 831 |
|
| 832 |
The target elasticsearch document. |
| 833 |
|
| 834 |
=item C<$altscript> |
| 835 |
|
| 836 |
A boolean value indicating whether an alternate script presentation is being |
| 837 |
processed. |
| 838 |
|
| 839 |
=back |
| 840 |
|
| 841 |
=item C<$exclude_target_fields_regexp> |
| 842 |
|
| 843 |
An optional regexp for excluding target fields in mappings. |
| 844 |
|
| 845 |
=back |
| 846 |
|
| 847 |
=cut |
| 848 |
|
| 849 |
sub _process_data_field_rules { |
| 850 |
my ($self, $rules, $field, $record_document, $altscript, $exclude_target_fields_regexp) = @_; |
| 851 |
if ($rules) { |
| 852 |
my $subfields_mappings = $rules->{subfields}; |
| 853 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
| 854 |
foreach my $subfield ($field->subfields()) { |
| 855 |
my ($code, $data) = @{$subfield}; |
| 856 |
my @mappings; |
| 857 |
push @mappings, @{$subfields_mappings->{$code}} if $subfields_mappings->{$code}; |
| 858 |
push @mappings, @{$wildcard_mappings} if $wildcard_mappings; |
| 859 |
if (@mappings) { |
| 860 |
if ($exclude_target_fields_regexp) { |
| 861 |
@mappings = grep { $_->[0] !~ $exclude_target_fields_regexp } @mappings; |
| 862 |
} |
| 863 |
$self->_process_mappings(\@mappings, $data, $record_document, { |
| 864 |
altscript => $altscript, |
| 865 |
data_source => 'subfield', |
| 866 |
code => $code, |
| 867 |
field => $field |
| 868 |
} |
| 869 |
); |
| 870 |
} |
| 871 |
} |
| 872 |
|
| 873 |
my $subfields_join_mappings = $rules->{subfields_join}; |
| 874 |
if ($subfields_join_mappings) { |
| 875 |
foreach my $subfields_group (keys %{$subfields_join_mappings}) { |
| 876 |
my $data_field = $field->clone; #copy field to preserve for alt scripts |
| 877 |
$data_field->delete_subfield(match => qr/^$/); #remove empty subfields, otherwise they are printed as a space |
| 878 |
my $data = $data_field->as_string( $subfields_group ); #get values for subfields as a combined string, preserving record order |
| 879 |
if ($data) { |
| 880 |
my @mappings = @{$subfields_join_mappings->{$subfields_group}}; |
| 881 |
if ($exclude_target_fields_regexp) { |
| 882 |
@mappings = grep { $_->[0] !~ /$exclude_target_fields_regexp/ } @mappings; |
| 883 |
} |
| 884 |
$self->_process_mappings(\@mappings, $data, $record_document, { |
| 885 |
altscript => $altscript, |
| 886 |
data_source => 'subfields_group', |
| 887 |
codes => $subfields_group, |
| 888 |
field => $field |
| 889 |
} |
| 890 |
); |
| 891 |
} |
| 892 |
} |
| 893 |
} |
| 894 |
} |
| 895 |
} |
| 896 |
|
| 894 |
=head2 _marc_to_array($record) |
897 |
=head2 _marc_to_array($record) |
| 895 |
|
898 |
|
| 896 |
my @fields = _marc_to_array($record) |
899 |
my @fields = _marc_to_array($record) |
| 897 |
- |
|
|