|
Lines 689-714
sub GetRecordValue {
Link Here
|
| 689 |
carp 'GetRecordValue called with undefined record'; |
689 |
carp 'GetRecordValue called with undefined record'; |
| 690 |
return; |
690 |
return; |
| 691 |
} |
691 |
} |
| 692 |
my $dbh = C4::Context->dbh; |
|
|
| 693 |
|
692 |
|
| 694 |
my $sth = $dbh->prepare('SELECT fieldcode, subfieldcode FROM fieldmapping WHERE frameworkcode = ? AND field = ?'); |
693 |
# All field mappings are retrieved from cache, or from DB if not already |
| 695 |
$sth->execute( $frameworkcode, $field ); |
694 |
# cached. |
|
|
695 |
# The mapping is a data structure that looks like that: |
| 696 |
# '' => { |
| 697 |
# subtitle => [ |
| 698 |
# [ '200', 'e' ], |
| 699 |
# [ '400', 'e' ], |
| 700 |
# }, |
| 701 |
# maintitle => [ |
| 702 |
# [ '200', 'a' ], |
| 703 |
# [ '400', 'a' ], |
| 704 |
# }, |
| 705 |
# }, |
| 706 |
# MAIN = { |
| 707 |
# subtitle => [ |
| 708 |
# [ '200', 'e' ], |
| 709 |
# }, |
| 710 |
# maintitle => [ |
| 711 |
# [ '200', 'a' ], |
| 712 |
# }, |
| 713 |
# }, |
| 714 |
|
| 715 |
my $key = 'FieldMapping'; |
| 716 |
my $cache = Koha::Cache->get_instance(); |
| 717 |
my $mapping = $cache->get_from_cache($key); |
| 718 |
unless ( $mapping ) { |
| 719 |
my $sth = C4::Context->dbh->prepare('SELECT * FROM fieldmapping'); |
| 720 |
$sth->execute; |
| 721 |
$mapping = {}; |
| 722 |
for my $map ( @{ $sth->fetchall_arrayref({}) } ) { |
| 723 |
my ($field, $framework, $tag, $letter) = ( |
| 724 |
$map->{field}, |
| 725 |
$map->{frameworkcode}, |
| 726 |
$map->{fieldcode}, |
| 727 |
$map->{subfieldcode} ); |
| 728 |
$mapping->{$framework} ||= {}; |
| 729 |
$mapping->{$framework}->{$field} ||= []; |
| 730 |
push @{ $mapping->{$framework}->{$field} }, [ $tag, $letter ]; |
| 731 |
} |
| 732 |
$cache->set_in_cache($key, $mapping); |
| 733 |
} |
| 734 |
|
| 735 |
# Does the requested field mapping exists from the framework? |
| 736 |
my $maps = $mapping->{$frameworkcode}; |
| 737 |
return unless $maps; |
| 738 |
$maps = $maps->{$field}; |
| 739 |
return unless $maps; |
| 696 |
|
740 |
|
| 697 |
my @result = (); |
741 |
my @result = (); |
| 698 |
|
742 |
for my $map (@$maps) { |
| 699 |
while ( my $row = $sth->fetchrow_hashref ) { |
743 |
my ($tag, $letter) = @$map; |
| 700 |
foreach my $field ( $record->field( $row->{fieldcode} ) ) { |
744 |
foreach my $field ( $record->field($tag) ) { |
| 701 |
if ( ( $row->{subfieldcode} ne "" && $field->subfield( $row->{subfieldcode} ) ) ) { |
745 |
if ( $letter ) { |
| 702 |
foreach my $subfield ( $field->subfield( $row->{subfieldcode} ) ) { |
746 |
if ( my @values = $field->subfield($letter) ) { |
| 703 |
push @result, { 'subfield' => $subfield }; |
747 |
push @result, { subfield => $_ } for @values; |
| 704 |
} |
748 |
} |
| 705 |
|
749 |
} |
| 706 |
} elsif ( $row->{subfieldcode} eq "" ) { |
750 |
else { |
| 707 |
push @result, { 'subfield' => $field->as_string() }; |
751 |
push @result, { subfield => $field->as_string() }; |
| 708 |
} |
752 |
} |
| 709 |
} |
753 |
} |
| 710 |
} |
754 |
} |
| 711 |
|
|
|
| 712 |
return \@result; |
755 |
return \@result; |
| 713 |
} |
756 |
} |
| 714 |
|
757 |
|
|
Lines 732-737
sub SetFieldMapping {
Link Here
|
| 732 |
|
775 |
|
| 733 |
$sth->execute( $fieldcode, $subfieldcode, $framework, $field ); |
776 |
$sth->execute( $fieldcode, $subfieldcode, $framework, $field ); |
| 734 |
} |
777 |
} |
|
|
778 |
my $cache = Koha::Cache->get_instance()->clear_from_cache('FieldMapping'); |
| 735 |
} |
779 |
} |
| 736 |
|
780 |
|
| 737 |
=head2 DeleteFieldMapping |
781 |
=head2 DeleteFieldMapping |
|
Lines 748-753
sub DeleteFieldMapping {
Link Here
|
| 748 |
|
792 |
|
| 749 |
my $sth = $dbh->prepare('DELETE FROM fieldmapping WHERE id = ?'); |
793 |
my $sth = $dbh->prepare('DELETE FROM fieldmapping WHERE id = ?'); |
| 750 |
$sth->execute($id); |
794 |
$sth->execute($id); |
|
|
795 |
my $cache = Koha::Cache->get_instance()->clear_from_cache('FieldMapping'); |
| 751 |
} |
796 |
} |
| 752 |
|
797 |
|
| 753 |
=head2 GetFieldMapping |
798 |
=head2 GetFieldMapping |
| 754 |
- |
|
|