View | Details | Raw Unified | Return to bug 8071
Collapse All | Expand All

(-)a/C4/AuthoritiesMarc.pm (-1 / +2 lines)
Lines 1387-1398 sub merge { Link Here
1387
        foreach my $tagfield (@tags_using_authtype){
1387
        foreach my $tagfield (@tags_using_authtype){
1388
#             warn "tagfield : $tagfield ";
1388
#             warn "tagfield : $tagfield ";
1389
            foreach my $field ($marcrecord->field($tagfield)){
1389
            foreach my $field ($marcrecord->field($tagfield)){
1390
                # biblio is linked to authority with $9 subfield containing authid
1390
                my $auth_number=$field->subfield("9");
1391
                my $auth_number=$field->subfield("9");
1391
                my $tag=$field->tag();          
1392
                my $tag=$field->tag();          
1392
                if ($auth_number==$mergefrom) {
1393
                if ($auth_number==$mergefrom) {
1393
                my $field_to=MARC::Field->new(($tag_to?$tag_to:$tag),$field->indicator(1),$field->indicator(2),"9"=>$mergeto);
1394
                my $field_to=MARC::Field->new(($tag_to?$tag_to:$tag),$field->indicator(1),$field->indicator(2),"9"=>$mergeto);
1394
		my $exclude='9';
1395
		my $exclude='9';
1395
                foreach my $subfield (@record_to) {
1396
                foreach my $subfield (grep {$_->[0] ne '9'} @record_to) {
1396
                    $field_to->add_subfields($subfield->[0] =>$subfield->[1]);
1397
                    $field_to->add_subfields($subfield->[0] =>$subfield->[1]);
1397
		    $exclude.= $subfield->[0];
1398
		    $exclude.= $subfield->[0];
1398
                }
1399
                }
(-)a/C4/Biblio.pm (-105 / +100 lines)
Lines 1682-1743 The subjects are stored in different fields depending on MARC flavour Link Here
1682
1682
1683
sub GetMarcSubjects {
1683
sub GetMarcSubjects {
1684
    my ( $record, $marcflavour ) = @_;
1684
    my ( $record, $marcflavour ) = @_;
1685
    my ( $mintag, $maxtag );
1685
    my ( $mintag, $maxtag, $fields_filter );
1686
    if ( $marcflavour eq "UNIMARC" ) {
1686
    if ( $marcflavour eq "UNIMARC" ) {
1687
        $mintag = "600";
1687
        $mintag = "600";
1688
        $maxtag = "611";
1688
        $maxtag = "611";
1689
    } else {    # assume marc21 if not unimarc
1689
        $fields_filter = '6..';
1690
    } else { # marc21/normarc
1690
        $mintag = "600";
1691
        $mintag = "600";
1691
        $maxtag = "699";
1692
        $maxtag = "699";
1693
        $fields_filter = '6..';
1692
    }
1694
    }
1693
1695
1694
    my @marcsubjects;
1696
    my @marcsubjects;
1695
    my $subject  = "";
1696
    my $subfield = "";
1697
    my $marcsubject;
1698
1697
1699
    my $subject_limit = C4::Context->preference("TraceCompleteSubfields") ? 'su,complete-subfield' : 'su';
1698
    my $subject_limit = C4::Context->preference("TraceCompleteSubfields") ? 'su,complete-subfield' : 'su';
1699
    my $authoritysep = C4::Context->preference('authoritysep');
1700
1700
1701
    foreach my $field ( $record->field('6..') ) {
1701
    foreach my $field ( $record->field($fields_filter) ) {
1702
        next unless $field->tag() >= $mintag && $field->tag() <= $maxtag;
1702
        next unless ($field->tag() >= $mintag && $field->tag() <= $maxtag);
1703
        my @subfields_loop;
1703
        my @subfields_loop;
1704
        my @subfields = $field->subfields();
1704
        my @subfields = $field->subfields();
1705
        my $counter   = 0;
1706
        my @link_loop;
1705
        my @link_loop;
1707
1706
1708
        # if there is an authority link, build the link with an= subfield9
1707
        # if there is an authority link, build the links with an= subfield9
1709
        my $found9 = 0;
1708
        my $subfield9 = $field->subfield('9');
1709
        if ($subfield9) {
1710
            my $linkvalue = $subfield9;
1711
            $linkvalue =~ s/(\(|\))//g;
1712
            @link_loop = ( { limit => 'an', 'link' => $linkvalue } );
1713
        }
1714
1715
        # other subfields
1710
        for my $subject_subfield (@subfields) {
1716
        for my $subject_subfield (@subfields) {
1717
            next if ( $subject_subfield->[0] eq '9' );
1711
1718
1712
            # don't load unimarc subfields 3,4,5
1719
            # don't load unimarc subfields 3,4,5
1713
            next if ( ( $marcflavour eq "UNIMARC" ) and ( $subject_subfield->[0] =~ /2|3|4|5/ ) );
1720
            next if ( ( $marcflavour eq "UNIMARC" ) and ( $subject_subfield->[0] =~ /2|3|4|5/ ) );
1714
1715
            # don't load MARC21 subfields 2 (FIXME: any more subfields??)
1721
            # don't load MARC21 subfields 2 (FIXME: any more subfields??)
1716
            next if ( ( $marcflavour eq "MARC21" ) and ( $subject_subfield->[0] =~ /2/ ) );
1722
            next if ( ( $marcflavour eq "MARC21" ) and ( $subject_subfield->[0] =~ /2/ ) );
1723
1717
            my $code      = $subject_subfield->[0];
1724
            my $code      = $subject_subfield->[0];
1718
            my $value     = $subject_subfield->[1];
1725
            my $value     = $subject_subfield->[1];
1719
            my $linkvalue = $value;
1726
            my $linkvalue = $value;
1720
            $linkvalue =~ s/(\(|\))//g;
1727
            $linkvalue =~ s/(\(|\))//g;
1721
            my $operator;
1728
            # if no authority link, build a search query
1722
            if ( $counter != 0 ) {
1729
            unless ($subfield9) {
1723
                $operator = ' and ';
1730
                push @link_loop, {
1724
            }
1731
                    limit    => $subject_limit,
1725
            if ( $code eq 9 ) {
1732
                    'link'   => $linkvalue,
1726
                $found9 = 1;
1733
                    operator => (scalar @link_loop) ? ' and ' : undef
1727
                @link_loop = ( { 'limit' => 'an', link => "$linkvalue" } );
1734
                };
1728
            }
1729
            if ( not $found9 ) {
1730
                push @link_loop, { 'limit' => $subject_limit, link => $linkvalue, operator => $operator };
1731
            }
1732
            my $separator;
1733
            if ( $counter != 0 ) {
1734
                $separator = C4::Context->preference('authoritysep');
1735
            }
1735
            }
1736
1737
            # ignore $9
1738
            my @this_link_loop = @link_loop;
1736
            my @this_link_loop = @link_loop;
1739
            push @subfields_loop, { code => $code, value => $value, link_loop => \@this_link_loop, separator => $separator } unless ( $subject_subfield->[0] eq 9 || $subject_subfield->[0] eq '0' );
1737
            # do not display $0
1740
            $counter++;
1738
            unless ( $code eq '0' ) {
1739
                push @subfields_loop, {
1740
                    code      => $code,
1741
                    value     => $value,
1742
                    link_loop => \@this_link_loop,
1743
                    separator => (scalar @subfields_loop) ? $authoritysep : ''
1744
                };
1745
            }
1741
        }
1746
        }
1742
1747
1743
        push @marcsubjects, { MARCSUBJECT_SUBFIELDS_LOOP => \@subfields_loop };
1748
        push @marcsubjects, { MARCSUBJECT_SUBFIELDS_LOOP => \@subfields_loop };
Lines 1757-1763 The authors are stored in different fields depending on MARC flavour Link Here
1757
1762
1758
sub GetMarcAuthors {
1763
sub GetMarcAuthors {
1759
    my ( $record, $marcflavour ) = @_;
1764
    my ( $record, $marcflavour ) = @_;
1760
    my ( $mintag, $maxtag );
1765
    my ( $mintag, $maxtag, $fields_filter );
1761
1766
1762
    # tagslib useful for UNIMARC author reponsabilities
1767
    # tagslib useful for UNIMARC author reponsabilities
1763
    my $tagslib =
1768
    my $tagslib =
Lines 1765-1779 sub GetMarcAuthors { Link Here
1765
    if ( $marcflavour eq "UNIMARC" ) {
1770
    if ( $marcflavour eq "UNIMARC" ) {
1766
        $mintag = "700";
1771
        $mintag = "700";
1767
        $maxtag = "712";
1772
        $maxtag = "712";
1768
    } elsif ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) { # assume marc21 or normarc if not unimarc
1773
        $fields_filter = '7..';
1774
    } else { # marc21/normarc
1769
        $mintag = "700";
1775
        $mintag = "700";
1770
        $maxtag = "720";
1776
        $maxtag = "720";
1771
    } else {
1777
        $fields_filter = '7..';
1772
        return;
1773
    }
1778
    }
1779
1774
    my @marcauthors;
1780
    my @marcauthors;
1781
    my $authoritysep = C4::Context->preference('authoritysep');
1775
1782
1776
    foreach my $field ( $record->fields ) {
1783
    foreach my $field ( $record->field($fields_filter) ) {
1777
        next unless $field->tag() >= $mintag && $field->tag() <= $maxtag;
1784
        next unless $field->tag() >= $mintag && $field->tag() <= $maxtag;
1778
        my @subfields_loop;
1785
        my @subfields_loop;
1779
        my @link_loop;
1786
        my @link_loop;
Lines 1782-1827 sub GetMarcAuthors { Link Here
1782
1789
1783
        # if there is an authority link, build the link with Koha-Auth-Number: subfield9
1790
        # if there is an authority link, build the link with Koha-Auth-Number: subfield9
1784
        my $subfield9 = $field->subfield('9');
1791
        my $subfield9 = $field->subfield('9');
1792
        if ($subfield9) {
1793
            my $linkvalue = $subfield9;
1794
            $linkvalue =~ s/(\(|\))//g;
1795
            @link_loop = ( { 'limit' => 'an', 'link' => $linkvalue } );
1796
        }
1797
1798
        # other subfields
1785
        for my $authors_subfield (@subfields) {
1799
        for my $authors_subfield (@subfields) {
1800
            next if ( $authors_subfield->[0] eq '9' );
1786
1801
1787
            # don't load unimarc subfields 3, 5
1802
            # don't load unimarc subfields 3, 5
1788
            next if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] =~ /3|5/ ) );
1803
            next if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] =~ /3|5/ ) );
1789
            my $subfieldcode = $authors_subfield->[0];
1804
1805
            my $code = $authors_subfield->[0];
1790
            my $value        = $authors_subfield->[1];
1806
            my $value        = $authors_subfield->[1];
1791
            my $linkvalue    = $value;
1807
            my $linkvalue    = $value;
1792
            $linkvalue =~ s/(\(|\))//g;
1808
            $linkvalue =~ s/(\(|\))//g;
1793
            my $operator;
1809
            # UNIMARC author responsibility
1794
            if ( $count_auth != 0 ) {
1810
            if ( $marcflavour eq 'UNIMARC' and $code eq '4' ) {
1795
                $operator = ' and ';
1811
                $value = GetAuthorisedValueDesc( $field->tag(), $code, $value, '', $tagslib );
1796
            }
1812
                $linkvalue = "($value)";
1797
1813
            }
1798
            # if we have an authority link, use that as the link, otherwise use standard searching
1814
            # if no authority link, build a search query
1799
            if ($subfield9) {
1815
            unless ($subfield9) {
1800
                @link_loop = ( { 'limit' => 'an', link => "$subfield9" } );
1816
                push @link_loop, {
1801
            } else {
1817
                    limit    => 'au',
1802
1818
                    'link'   => $linkvalue,
1803
                # reset $linkvalue if UNIMARC author responsibility
1819
                    operator => (scalar @link_loop) ? ' and ' : undef
1804
                if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] eq "4" ) ) {
1820
                };
1805
                    $linkvalue = "(" . GetAuthorisedValueDesc( $field->tag(), $authors_subfield->[0], $authors_subfield->[1], '', $tagslib ) . ")";
1806
                }
1807
                push @link_loop, { 'limit' => 'au', link => $linkvalue, operator => $operator };
1808
            }
1821
            }
1809
            $value = GetAuthorisedValueDesc( $field->tag(), $authors_subfield->[0], $authors_subfield->[1], '', $tagslib )
1810
              if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] =~ /4/ ) );
1811
            my @this_link_loop = @link_loop;
1822
            my @this_link_loop = @link_loop;
1812
            my $separator;
1823
            # do not display $0
1813
            if ( $count_auth != 0 ) {
1824
            unless ( $code eq '0') {
1814
                $separator = C4::Context->preference('authoritysep');
1825
                push @subfields_loop, {
1826
                    tag       => $field->tag(),
1827
                    code      => $code,
1828
                    value     => $value,
1829
                    link_loop => \@this_link_loop,
1830
                    separator => (scalar @subfields_loop) ? $authoritysep : ''
1831
                };
1815
            }
1832
            }
1816
            push @subfields_loop,
1817
              { tag       => $field->tag(),
1818
                code      => $subfieldcode,
1819
                value     => $value,
1820
                link_loop => \@this_link_loop,
1821
                separator => $separator
1822
              }
1823
              unless ( $authors_subfield->[0] eq '9' || $authors_subfield->[0] eq '0');
1824
            $count_auth++;
1825
        }
1833
        }
1826
        push @marcauthors, { MARCAUTHOR_SUBFIELDS_LOOP => \@subfields_loop };
1834
        push @marcauthors, { MARCAUTHOR_SUBFIELDS_LOOP => \@subfields_loop };
1827
    }
1835
    }
Lines 1894-1969 The series are stored in different fields depending on MARC flavour Link Here
1894
1902
1895
sub GetMarcSeries {
1903
sub GetMarcSeries {
1896
    my ( $record, $marcflavour ) = @_;
1904
    my ( $record, $marcflavour ) = @_;
1897
    my ( $mintag, $maxtag );
1905
    my ( $mintag, $maxtag, $fields_filter );
1898
    if ( $marcflavour eq "UNIMARC" ) {
1906
    if ( $marcflavour eq "UNIMARC" ) {
1899
        $mintag = "600";
1907
        $mintag = "600";
1900
        $maxtag = "619";
1908
        $maxtag = "619";
1901
    } else {    # assume marc21 if not unimarc
1909
        $fields_filter = '6..';
1910
    } else {    # marc21/normarc
1902
        $mintag = "440";
1911
        $mintag = "440";
1903
        $maxtag = "490";
1912
        $maxtag = "490";
1913
        $fields_filter = '4..';
1904
    }
1914
    }
1905
1915
1906
    my @marcseries;
1916
    my @marcseries;
1907
    my $subjct   = "";
1917
    my $authoritysep = C4::Context->preference('authoritysep');
1908
    my $subfield = "";
1909
    my $marcsubjct;
1910
1918
1911
    foreach my $field ( $record->field('440'), $record->field('490') ) {
1919
    foreach my $field ( $record->field($fields_filter) ) {
1920
        next unless $field->tag() >= $mintag && $field->tag() <= $maxtag;
1912
        my @subfields_loop;
1921
        my @subfields_loop;
1913
1914
        #my $value = $field->subfield('a');
1915
        #$marcsubjct = {MARCSUBJCT => $value,};
1916
        my @subfields = $field->subfields();
1922
        my @subfields = $field->subfields();
1917
1918
        #warn "subfields:".join " ", @$subfields;
1919
        my $counter = 0;
1920
        my @link_loop;
1923
        my @link_loop;
1924
1921
        for my $series_subfield (@subfields) {
1925
        for my $series_subfield (@subfields) {
1922
            my $volume_number;
1923
            undef $volume_number;
1924
1926
1925
            # see if this is an instance of a volume
1927
            # ignore $9, used for authority link
1926
            if ( $series_subfield->[0] eq 'v' ) {
1928
            next if ( $series_subfield->[0] eq '9' );
1927
                $volume_number = 1;
1928
            }
1929
1929
1930
            my $volume_number;
1930
            my $code      = $series_subfield->[0];
1931
            my $code      = $series_subfield->[0];
1931
            my $value     = $series_subfield->[1];
1932
            my $value     = $series_subfield->[1];
1932
            my $linkvalue = $value;
1933
            my $linkvalue = $value;
1933
            $linkvalue =~ s/(\(|\))//g;
1934
            $linkvalue =~ s/(\(|\))//g;
1934
            if ( $counter != 0 ) {
1935
1935
                push @link_loop, { link => $linkvalue, operator => ' and ', };
1936
            # see if this is an instance of a volume
1936
            } else {
1937
            if ( $code eq 'v' ) {
1937
                push @link_loop, { link => $linkvalue, operator => undef, };
1938
                $volume_number = 1;
1938
            }
1939
            my $separator;
1940
            if ( $counter != 0 ) {
1941
                $separator = C4::Context->preference('authoritysep');
1942
            }
1939
            }
1940
1941
            push @link_loop, {
1942
                'link' => $linkvalue,
1943
                operator => (scalar @link_loop) ? ' and ' : undef
1944
            };
1945
1943
            if ($volume_number) {
1946
            if ($volume_number) {
1944
                push @subfields_loop, { volumenum => $value };
1947
                push @subfields_loop, { volumenum => $value };
1945
            } else {
1948
            } else {
1946
                if ( $series_subfield->[0] ne '9' ) {
1949
                push @subfields_loop, {
1947
                    push @subfields_loop, {
1950
                    code      => $code,
1948
                        code      => $code,
1951
                    value     => $value,
1949
                        value     => $value,
1952
                    link_loop => \@link_loop,
1950
                        link_loop => \@link_loop,
1953
                    separator => (scalar @subfields_loop) ? $authoritysep : '',
1951
                        separator => $separator,
1954
                    volumenum => $volume_number,
1952
                        volumenum => $volume_number,
1953
                    };
1954
                }
1955
                }
1955
            }
1956
            }
1956
            $counter++;
1957
        }
1957
        }
1958
        push @marcseries, { MARCSERIES_SUBFIELDS_LOOP => \@subfields_loop };
1958
        push @marcseries, { MARCSERIES_SUBFIELDS_LOOP => \@subfields_loop };
1959
1959
1960
        #$marcsubjct = {MARCSUBJCT => $field->as_string(),};
1961
        #push @marcsubjcts, $marcsubjct;
1962
        #$subjct = $value;
1963
1964
    }
1960
    }
1965
    my $marcseriessarray = \@marcseries;
1961
    return \@marcseries;
1966
    return $marcseriessarray;
1967
}    #end getMARCseriess
1962
}    #end getMARCseriess
1968
1963
1969
=head2 GetMarcHosts
1964
=head2 GetMarcHosts
(-)a/authorities/blinddetail-biblio-search.pl (+1 lines)
Lines 84-89 if ($authid) { Link Here
84
    # Get all values for each distinct subfield
84
    # Get all values for each distinct subfield
85
    my %subfields;
85
    my %subfields;
86
    for ( $field->subfields ) {
86
    for ( $field->subfields ) {
87
        next if $_->[0] == "9"; # $9 will be set with authid value
87
        my $letter = $_->[0];
88
        my $letter = $_->[0];
88
        next if defined $subfields{$letter};
89
        next if defined $subfields{$letter};
89
        my @values = $field->subfield($letter);
90
        my @values = $field->subfield($letter);
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt (-19 / +21 lines)
Lines 13-36 Link Here
13
        }
13
        }
14
14
15
        var field_start = whichfield.parentNode.parentNode;
15
        var field_start = whichfield.parentNode.parentNode;
16
      
17
        // browse all its subfields (clear and $9)
18
        var subfields = field_start.getElementsByTagName('input');
19
        var re = /^tag_\d*_code_/;
20
        for(var i=0, len = subfields.length ; i< len ; i++) { // browse all subfields
21
            if(subfields[i].getAttribute('name').match(re)){ // it s a subfield
22
                var code     = subfields[i];   // code is the first input 
23
                var subfield = subfields[i+1]; // subfield the second
24
25
            [% IF ( clear ) %]
26
                if (subfield){subfield.value="" ;}
27
            [% ELSE %]
28
                if(code.value=='9'){
29
                    subfield.value = "[% authid |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]";
30
                }
31
            [% END %]
32
            }
33
        }
34
16
35
        // Sets the good number of form fields for the specified subfield
17
        // Sets the good number of form fields for the specified subfield
36
        // Returns false if the cloning failed
18
        // Returns false if the cloning failed
Lines 90-95 Link Here
90
            });
72
            });
91
        }
73
        }
92
74
75
        [% UNLESS ( clear ) %]
93
        [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
76
        [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
94
            SetSubfieldValues(
77
            SetSubfieldValues(
95
                "[% tag_number |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %][% SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
78
                "[% tag_number |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %][% SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
Lines 98-103 Link Here
98
            [% END %]
81
            [% END %]
99
            );
82
            );
100
        [% END %]
83
        [% END %]
84
        [% END %]
85
86
        // browse all its subfields (clear and $9)
87
        var subfields = field_start.getElementsByTagName('input');
88
        var re = /^tag_\d*_code_/;
89
        for(var i=0, len = subfields.length ; i< len ; i++) { // browse all subfields
90
            if(subfields[i].getAttribute('name').match(re)){ // it s a subfield
91
                var code     = subfields[i];   // code is the first input
92
                var subfield = subfields[i+1]; // subfield the second
93
94
            [% IF ( clear ) %]
95
                if (subfield){subfield.value="" ;}
96
            [% ELSE %]
97
                if(code.value=='9'){
98
                    subfield.value = "[% authid |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]";
99
                    break;
100
                }
101
            [% END %]
102
            }
103
        }
101
104
102
      	opener.close();
105
      	opener.close();
103
       	window.close();
106
       	window.close();
104
- 

Return to bug 8071