use C4::AuthoritiesMarc::UNIMARC;
use C4::Charset;
use C4::Log;
+use Koha::Authority;
use vars qw($VERSION @ISA @EXPORT);
}
} else {
my $query;
- my $attr;
+ my $attr = '';
# the marclist may contain "mainentry". In this case, search the tag_to_report, that depends on
# the authtypecode. Then, search on $a of this tag_to_report
# also store main entry MARC tag, to extract it at end of search
elsif ( @$tags[$i] eq "mainentry" ) {
$attr = " \@attr 1=Heading ";
}
- elsif ( @$tags[$i] eq "any" ) {
- $attr = " \@attr 1=Any ";
- }
elsif ( @$tags[$i] eq "match" ) {
$attr = " \@attr 1=Match ";
}
elsif ( @$tags[$i] eq "thesaurus" ) {
$attr = " \@attr 1=Subject-heading-thesaurus ";
}
+ else { # Assume any if no index was specified
+ $attr = " \@attr 1=Any ";
+ }
if ( @$operator[$i] eq 'is' ) {
$attr .= " \@attr 4=1 \@attr 5=100 "
; ##Phrase, No truncation,all of subfield field must match
else {
$attr .= " \@attr 5=1 \@attr 4=6 "
; ## Word list, right truncated, anywhere
+ if ($sortby eq 'Relevance') {
+ $attr .= "\@attr 2=102 ";
+ }
}
@$value[$i] =~ s/"/\\"/g; # Escape the double-quotes in the search value
$attr =$attr."\"".@$value[$i]."\"";
my $thisauthtype = GetAuthType(GetAuthTypeCode($authid));
$newline{authtype} = defined ($thisauthtype) ?
$thisauthtype->{'authtypetext'} :
- GetAuthType($authtypecode)->{'authtypetext'};
+ (GetAuthType($authtypecode) ? $_->{'authtypetext'} : '');
$newline{summary} = $summary;
$newline{even} = $counter % 2;
$newline{reported_tag} = $reported_tag;
sub GetAuthority {
my ($authid)=@_;
- my $dbh=C4::Context->dbh;
- my $sth=$dbh->prepare("select authtypecode, marcxml from auth_header where authid=?");
- $sth->execute($authid);
- my ($authtypecode, $marcxml) = $sth->fetchrow;
- my $record=eval {MARC::Record->new_from_xml(StripNonXmlChars($marcxml),'UTF-8',
- (C4::Context->preference("marcflavour") eq "UNIMARC"?"UNIMARCAUTH":C4::Context->preference("marcflavour")))};
- return undef if ($@);
- $record->encoding('UTF-8');
- if (C4::Context->preference("marcflavour") eq "MARC21") {
- my ($auth_type_tag, $auth_type_subfield) = get_auth_type_location($authtypecode);
- C4::AuthoritiesMarc::MARC21::fix_marc21_auth_type_location($record, $auth_type_tag, $auth_type_subfield);
- }
- return ($record);
+ my $authority = Koha::Authority->get_from_authid($authid);
+ return ($authority->record);
}
=head2 GetAuthType
$summary{type} = $authref->{authtypetext};
$summary{summary} = $authref->{summary};
}
- my $marc21subfields = 'abcdfghjklmnopqrstuvxyz';
+ my $marc21subfields = 'abcdfghjklmnopqrstuvxyz68';
my %marc21controlrefs = ( 'a' => 'earlier',
'b' => 'later',
'd' => 'acronym',
$thesaurus{'5'}="Lieux";
$thesaurus{'6'}="Sujets";
#thesaurus a remplir
- my @fields = $record->fields();
my $reported_tag;
# if the library has a summary defined, use it. Otherwise, build a standard one
# FIXME - it appears that the summary field in the authority frameworks
my @seefrom;
my @seealso;
my @otherscript;
- my @fields = $record->fields();
if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
# construct UNIMARC summary, that is quite different from MARC21 one
# accepted form
# see :
foreach my $field ($record->field('5..')) {
if (($field->subfield('5')) && ($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
- push @seealso, { $field->as_string('abcdefgjxyz'), type => 'broader', field => $field->tag() };
+ push @seealso, {
+ heading => $field->as_string('abcdefgjxyz'),
+ type => 'broader',
+ field => $field->tag(),
+ search => $field->as_string('abcdefgjxyz'),
+ authid => $field->subfield('9')
+ };
} elsif (($field->subfield('5')) && ($field->as_string) && ($field->subfield('5') eq 'h')){
- push @seealso, { heading => $field->as_string('abcdefgjxyz'), type => 'narrower', field => $field->tag() };
+ push @seealso, {
+ heading => $field->as_string('abcdefgjxyz'),
+ type => 'narrower',
+ field => $field->tag(),
+ search => $field->as_string('abcdefgjxyz'),
+ authid => $field->subfield('9')
+ };
} elsif ($field->subfield('a')) {
- push @seealso, { heading => $field->as_string('abcdefgxyz'), type => 'seealso', field => $field->tag() };
+ push @seealso, {
+ heading => $field->as_string('abcdefgxyz'),
+ type => 'seealso',
+ field => $field->tag(),
+ search => $field->as_string('abcdefgjxyz'),
+ authid => $field->subfield('9')
+ };
}
}
# // form
}
foreach my $field ($record->field('4..')) { #See From
my $type = 'seefrom';
- $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
+ $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
if ($type eq 'notapplicable') {
$type = substr $field->subfield('w'), 2, 1;
$type = 'earlier' if $type && $type ne 'n';
}
if ($type eq 'subfi') {
- push @seefrom, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
+ push @seefrom, { heading => $field->as_string($marc21subfields), type => ($field->subfield('i') || ''), field => $field->tag() };
} else {
push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
}
}
foreach my $field ($record->field('5..')) { #See Also
my $type = 'seealso';
- $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
+ $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
if ($type eq 'notapplicable') {
$type = substr $field->subfield('w'), 2, 1;
$type = 'earlier' if $type && $type ne 'n';
}
if ($type eq 'subfi') {
- push @seealso, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
+ push @seealso, {
+ heading => $field->as_string($marc21subfields),
+ type => $field->subfield('i'),
+ field => $field->tag(),
+ search => $field->as_string($marc21subfields) || '',
+ authid => $field->subfield('9') || ''
+ };
} else {
- push @seealso, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
+ push @seealso, {
+ heading => $field->as_string($marc21subfields),
+ type => $type,
+ field => $field->tag(),
+ search => $field->as_string($marc21subfields) || '',
+ authid => $field->subfield('9') || ''
+ };
}
}
foreach my $field ($record->field('6..')) {
} else {
#zebra connection
my $oConnection=C4::Context->Zconn("biblioserver",0);
- my $oldSyntax = $oConnection->option("preferredRecordSyntax");
- $oConnection->option("preferredRecordSyntax"=>"XML");
+ # We used to use XML syntax here, but that no longer works.
+ # Thankfully, we don't need it.
my $query;
$query= "an=".$mergefrom;
my $oResult = $oConnection->search(new ZOOM::Query::CCL2RPN( $query, $oConnection ));
my $rec;
$rec=$oResult->record($z);
my $marcdata = $rec->raw();
- my $marcrecordzebra= MARC::Record->new_from_xml($marcdata,"utf8",C4::Context->preference("marcflavour"));
+ my $marcrecordzebra= MARC::Record->new_from_usmarc($marcdata);
my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
- my $i = $marcrecordzebra->subfield($biblionumbertagfield, $biblionumbertagsubfield);
+ my $i = ($biblionumbertagfield < 10) ? $marcrecordzebra->field($biblionumbertagfield)->data : $marcrecordzebra->subfield($biblionumbertagfield, $biblionumbertagsubfield);
my $marcrecorddb=GetMarcBiblio($i);
push @reccache, $marcrecorddb;
$z++;
}
$oResult->destroy();
- $oConnection->option("preferredRecordSyntax"=>$oldSyntax);
}
#warn scalar(@reccache)." biblios to update";
# Get All candidate Tags for the change
foreach my $tagfield (@tags_using_authtype){
# warn "tagfield : $tagfield ";
foreach my $field ($marcrecord->field($tagfield)){
+ # biblio is linked to authority with $9 subfield containing authid
my $auth_number=$field->subfield("9");
my $tag=$field->tag();
if ($auth_number==$mergefrom) {
my $field_to=MARC::Field->new(($tag_to?$tag_to:$tag),$field->indicator(1),$field->indicator(2),"9"=>$mergeto);
my $exclude='9';
- foreach my $subfield (@record_to) {
+ foreach my $subfield (grep {$_->[0] ne '9'} @record_to) {
$field_to->add_subfields($subfield->[0] =>$subfield->[1]);
$exclude.= $subfield->[0];
}