|
Lines 697-752
sub marc_records_to_documents {
Link Here
|
| 697 |
$altscript = 1; |
697 |
$altscript = 1; |
| 698 |
} |
698 |
} |
| 699 |
} |
699 |
} |
| 700 |
|
700 |
$self->_process_data_field_rules( |
| 701 |
my $data_field_rules = $data_fields_rules->{$tag}; |
701 |
$data_fields_rules->{$tag}, |
| 702 |
if ($data_field_rules) { |
702 |
$field, |
| 703 |
my $subfields_mappings = $data_field_rules->{subfields}; |
703 |
$record_document, |
| 704 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
704 |
$altscript |
| 705 |
foreach my $subfield ( $field->subfields() ) { |
705 |
); |
| 706 |
my ( $code, $data ) = @{$subfield}; |
|
|
| 707 |
my $mappings = $subfields_mappings->{$code} // []; |
| 708 |
if ($wildcard_mappings) { |
| 709 |
$mappings = [ @{$mappings}, @{$wildcard_mappings} ]; |
| 710 |
} |
| 711 |
if ( @{$mappings} ) { |
| 712 |
$self->_process_mappings( |
| 713 |
$mappings, |
| 714 |
$data, |
| 715 |
$record_document, |
| 716 |
{ |
| 717 |
altscript => $altscript, |
| 718 |
data_source => 'subfield', |
| 719 |
code => $code, |
| 720 |
field => $field |
| 721 |
} |
| 722 |
); |
| 723 |
} |
| 724 |
} |
| 725 |
|
| 726 |
my $subfields_join_mappings = $data_field_rules->{subfields_join}; |
| 727 |
if ($subfields_join_mappings) { |
| 728 |
foreach my $subfields_group ( keys %{$subfields_join_mappings} ) { |
| 729 |
my $data_field = $field->clone; #copy field to preserve for alt scripts |
| 730 |
$data_field->delete_subfield( match => qr/^$/ ) |
| 731 |
; #remove empty subfields, otherwise they are printed as a space |
| 732 |
my $data = $data_field->as_string($subfields_group) |
| 733 |
; #get values for subfields as a combined string, preserving record order |
| 734 |
if ($data) { |
| 735 |
$self->_process_mappings( |
| 736 |
$subfields_join_mappings->{$subfields_group}, |
| 737 |
$data, |
| 738 |
$record_document, |
| 739 |
{ |
| 740 |
altscript => $altscript, |
| 741 |
data_source => 'subfields_group', |
| 742 |
codes => $subfields_group, |
| 743 |
field => $field |
| 744 |
} |
| 745 |
); |
| 746 |
} |
| 747 |
} |
| 748 |
} |
| 749 |
} |
| 750 |
} |
706 |
} |
| 751 |
} |
707 |
} |
| 752 |
|
708 |
|
|
Lines 764-824
sub marc_records_to_documents {
Link Here
|
| 764 |
if ( C4::Context->preference('IncludeSeeAlsoFromInSearches') ) { |
720 |
if ( C4::Context->preference('IncludeSeeAlsoFromInSearches') ) { |
| 765 |
push @other_headings, 'see_also_from'; |
721 |
push @other_headings, 'see_also_from'; |
| 766 |
} |
722 |
} |
|
|
723 |
|
| 767 |
$marc_filter->initialize( { options => { other_headings => \@other_headings } } ); |
724 |
$marc_filter->initialize( { options => { other_headings => \@other_headings } } ); |
| 768 |
foreach my $field ( $marc_filter->fields($record) ) { |
725 |
foreach my $field ( $marc_filter->fields($record) ) { |
| 769 |
my $data_field_rules = $data_fields_rules->{ $field->tag() }; |
726 |
$self->_process_data_field_rules( |
| 770 |
if ($data_field_rules) { |
727 |
$data_fields_rules->{ $field->tag() }, |
| 771 |
my $subfields_mappings = $data_field_rules->{subfields}; |
728 |
$field, |
| 772 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
729 |
$record_document, |
| 773 |
foreach my $subfield ( $field->subfields() ) { |
730 |
0, |
| 774 |
my ( $code, $data ) = @{$subfield}; |
731 |
|
| 775 |
my @mappings; |
732 |
# Do not include "see from" into these kind of fields |
| 776 |
push @mappings, @{ $subfields_mappings->{$code} } if $subfields_mappings->{$code}; |
733 |
qr/__(sort|facet|suggestion)$/ |
| 777 |
push @mappings, @$wildcard_mappings if $wildcard_mappings; |
734 |
); |
| 778 |
|
|
|
| 779 |
# Do not include "see from" into these kind of fields |
| 780 |
@mappings = grep { $_->[0] !~ /__(sort|facet|suggestion)$/ } @mappings; |
| 781 |
if (@mappings) { |
| 782 |
$self->_process_mappings( |
| 783 |
\@mappings, |
| 784 |
$data, |
| 785 |
$record_document, |
| 786 |
{ |
| 787 |
data_source => 'subfield', |
| 788 |
code => $code, |
| 789 |
field => $field |
| 790 |
} |
| 791 |
); |
| 792 |
} |
| 793 |
} |
| 794 |
|
| 795 |
my $subfields_join_mappings = $data_field_rules->{subfields_join}; |
| 796 |
if ($subfields_join_mappings) { |
| 797 |
foreach my $subfields_group ( keys %{$subfields_join_mappings} ) { |
| 798 |
my $data_field = $field->clone; |
| 799 |
|
| 800 |
# remove empty subfields, otherwise they are printed as a space |
| 801 |
$data_field->delete_subfield( match => qr/^$/ ); |
| 802 |
my $data = $data_field->as_string($subfields_group); |
| 803 |
if ($data) { |
| 804 |
my @mappings = @{ $subfields_join_mappings->{$subfields_group} }; |
| 805 |
|
| 806 |
# Do not include "see from" into these kind of fields |
| 807 |
@mappings = grep { $_->[0] !~ /__(sort|facet|suggestion)$/ } @mappings; |
| 808 |
$self->_process_mappings( |
| 809 |
\@mappings, |
| 810 |
$data, |
| 811 |
$record_document, |
| 812 |
{ |
| 813 |
data_source => 'subfields_group', |
| 814 |
codes => $subfields_group, |
| 815 |
field => $field |
| 816 |
} |
| 817 |
); |
| 818 |
} |
| 819 |
} |
| 820 |
} |
| 821 |
} |
| 822 |
} |
735 |
} |
| 823 |
} |
736 |
} |
| 824 |
|
737 |
|
|
Lines 979-984
sub marc_records_to_documents {
Link Here
|
| 979 |
return \@record_documents; |
892 |
return \@record_documents; |
| 980 |
} |
893 |
} |
| 981 |
|
894 |
|
|
|
895 |
=head2 _process_data_field_rules($rules, $field, $record_document, $altscript, $exclude_target_fields_regexp) |
| 896 |
|
| 897 |
Process mapping rules for a single MARC::Field data field. |
| 898 |
|
| 899 |
=over 4 |
| 900 |
|
| 901 |
=item C<$rules> |
| 902 |
|
| 903 |
Data field mapping rules to be applied. |
| 904 |
|
| 905 |
=item C<$field> |
| 906 |
|
| 907 |
The source Marc::Field data field. |
| 908 |
|
| 909 |
=item C<$record_document> |
| 910 |
|
| 911 |
The target elasticsearch document. |
| 912 |
|
| 913 |
=item C<$altscript> |
| 914 |
|
| 915 |
A boolean value indicating whether an alternate script presentation is being |
| 916 |
processed. |
| 917 |
|
| 918 |
=back |
| 919 |
|
| 920 |
=item C<$exclude_target_fields_regexp> |
| 921 |
|
| 922 |
An optional regexp for excluding target fields in mappings. |
| 923 |
|
| 924 |
=back |
| 925 |
|
| 926 |
=cut |
| 927 |
|
| 928 |
sub _process_data_field_rules { |
| 929 |
my ( $self, $rules, $field, $record_document, $altscript, $exclude_target_fields_regexp ) = @_; |
| 930 |
if ($rules) { |
| 931 |
my $subfields_mappings = $rules->{subfields}; |
| 932 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
| 933 |
foreach my $subfield ( $field->subfields() ) { |
| 934 |
my ( $code, $data ) = @{$subfield}; |
| 935 |
my @mappings; |
| 936 |
push @mappings, @{ $subfields_mappings->{$code} } if $subfields_mappings->{$code}; |
| 937 |
push @mappings, @{$wildcard_mappings} if $wildcard_mappings; |
| 938 |
if (@mappings) { |
| 939 |
if ($exclude_target_fields_regexp) { |
| 940 |
@mappings = grep { $_->[0] !~ $exclude_target_fields_regexp } @mappings; |
| 941 |
} |
| 942 |
$self->_process_mappings( |
| 943 |
\@mappings, |
| 944 |
$data, |
| 945 |
$record_document, |
| 946 |
{ |
| 947 |
altscript => $altscript, |
| 948 |
data_source => 'subfield', |
| 949 |
code => $code, |
| 950 |
field => $field |
| 951 |
} |
| 952 |
); |
| 953 |
} |
| 954 |
} |
| 955 |
|
| 956 |
my $subfields_join_mappings = $rules->{subfields_join}; |
| 957 |
if ($subfields_join_mappings) { |
| 958 |
foreach my $subfields_group ( keys %{$subfields_join_mappings} ) { |
| 959 |
|
| 960 |
# copy field to preserve for alt scripts |
| 961 |
my $data_field = $field->clone; |
| 962 |
|
| 963 |
#remove empty subfields, otherwise they are printed as a space |
| 964 |
$data_field->delete_subfield( match => qr/^$/ ); |
| 965 |
|
| 966 |
#get values for subfields as a combined string, preserving record order |
| 967 |
my $data = $data_field->as_string($subfields_group); |
| 968 |
if ($data) { |
| 969 |
my @mappings = @{ $subfields_join_mappings->{$subfields_group} }; |
| 970 |
if ($exclude_target_fields_regexp) { |
| 971 |
@mappings = grep { $_->[0] !~ /$exclude_target_fields_regexp/ } @mappings; |
| 972 |
} |
| 973 |
$self->_process_mappings( |
| 974 |
\@mappings, |
| 975 |
$data, |
| 976 |
$record_document, |
| 977 |
{ |
| 978 |
altscript => $altscript, |
| 979 |
data_source => 'subfields_group', |
| 980 |
codes => $subfields_group, |
| 981 |
field => $field |
| 982 |
} |
| 983 |
); |
| 984 |
} |
| 985 |
} |
| 986 |
} |
| 987 |
} |
| 988 |
} |
| 989 |
|
| 982 |
=head2 _marc_to_array($record) |
990 |
=head2 _marc_to_array($record) |
| 983 |
|
991 |
|
| 984 |
my @fields = _marc_to_array($record) |
992 |
my @fields = _marc_to_array($record) |
| 985 |
- |
|
|