$qpquery = $1;
}
- $qpquery .= " #$sortby";
+ $qpquery .= " #$sortby" unless $sortby eq '';
$QParser->parse( $qpquery );
$query = $QParser->target_syntax('authorityserver');
##Here we have to extract MARC record and $authid from ZEBRA AUTHORITIES
my $rec=$oAResult->record($counter);
- my $marcdata=$rec->raw();
- my $authrecord;
- my $separator=C4::Context->preference('authoritysep');
- $authrecord = MARC::File::USMARC::decode($marcdata);
+ my $separator=C4::Context->preference('AuthoritySeparator');
+ my $authrecord = C4::Search::new_record_from_zebra(
+ 'authorityserver',
+ $rec->raw()
+ );
+
+ if ( !defined $authrecord or !defined $authrecord->field('001') ) {
+ $counter++;
+ next;
+ }
+
my $authid=$authrecord->field('001')->data();
my %newline;
$newline{authid} = $authid;
if ( !$skipmetadata ) {
- my $summary =
- BuildSummary( $authrecord, $authid, $authtypecode );
my $query_auth_tag =
"SELECT auth_tag_to_report FROM auth_types WHERE authtypecode=?";
my $sth = $dbh->prepare($query_auth_tag);
my $reported_tag;
my $mainentry = $authrecord->field($auth_tag_to_report);
if ($mainentry) {
-
foreach ( $mainentry->subfields() ) {
$reported_tag .= '$' . $_->[0] . $_->[1];
}
}
- my $thisauthtype = GetAuthType(GetAuthTypeCode($authid));
+ my $thisauthtypecode = GetAuthTypeCode($authid);
+ my $thisauthtype = GetAuthType($thisauthtypecode);
unless (defined $thisauthtype) {
- $thisauthtype = GetAuthType($authtypecode) if $authtypecode;
+ $thisauthtypecode = $authtypecode;
+ $thisauthtype = GetAuthType($authtypecode);
}
+ my $summary = BuildSummary( $authrecord, $authid, $thisauthtypecode );
+
$newline{authtype} = defined($thisauthtype) ?
$thisauthtype->{'authtypetext'} : '';
$newline{summary} = $summary;
sub CountUsage {
my ($authid) = @_;
- if (C4::Context->preference('NoZebra')) {
- # Read the index Koha-Auth-Number for this authid and count the lines
- my $result = C4::Search::NZanalyse("an=$authid");
- my @tab = split /;/,$result;
- return scalar @tab;
- } else {
### ZOOM search here
my $query;
$query= "an:".$authid;
}
return $result;
- }
}
=head2 CountUsageChildren
=cut
sub GuessAuthTypeCode {
- my ($record) = @_;
+ my ($record, $heading_fields) = @_;
return unless defined $record;
-my $heading_fields = {
+ $heading_fields //= {
"MARC21"=>{
'100'=>{authtypecode=>'PERSO_NAME'},
'110'=>{authtypecode=>'CORPO_NAME'},
$res->{$tag}->{repeatable} = $repeatable;
}
$sth= $dbh->prepare(
-"SELECT tagfield,tagsubfield,liblibrarian,libopac,tab, mandatory, repeatable,authorised_value,frameworkcode as authtypecode,value_builder,kohafield,seealso,hidden,isurl
+"SELECT tagfield,tagsubfield,liblibrarian,libopac,tab, mandatory, repeatable,authorised_value,frameworkcode as authtypecode,value_builder,kohafield,seealso,hidden,isurl,defaultvalue
FROM auth_subfield_structure
WHERE authtypecode=?
ORDER BY tagfield,tagsubfield"
my $hidden;
my $isurl;
my $link;
+ my $defaultvalue;
while (
( $tag, $subfield, $liblibrarian, , $libopac, $tab,
$mandatory, $repeatable, $authorised_value, $authtypecode,
$value_builder, $kohafield, $seealso, $hidden,
- $isurl, $link )
+ $isurl, $defaultvalue, $link )
= $sth->fetchrow
)
{
$res->{$tag}->{$subfield}->{hidden} = $hidden;
$res->{$tag}->{$subfield}->{isurl} = $isurl;
$res->{$tag}->{$subfield}->{link} = $link;
+ $res->{$tag}->{$subfield}->{defaultvalue} = $defaultvalue;
}
return $res;
}
"VALUES (?,?)";
$dbh->do($sqlinsert,undef,($authid,0));
}
- logaction( "AUTHORITIES", "MODIFY", $authid, "BEFORE=>" . $oldrecord->as_formatted ) if C4::Context->preference("AuthoritiesLog");
+ logaction( "AUTHORITIES", "MODIFY", $authid, "authority BEFORE=>" . $oldrecord->as_formatted ) if C4::Context->preference("AuthoritiesLog");
return $authid;
}
my $query='at:'.$authtypecode.' ';
my $filtervalues=qr([\001-\040\!\'\"\`\#\$\%\&\*\+,\-\./:;<=>\?\@\(\)\{\[\]\}_\|\~]);
if ($record->field($auth_tag_to_report)) {
- foreach ($record->field($auth_tag_to_report)->subfields()) {
- $_->[1]=~s/$filtervalues/ /g; $query.= " $op he:\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
- }
+ foreach ($record->field($auth_tag_to_report)->subfields()) {
+ $_->[1]=~s/$filtervalues/ /g; $query.= " $op he:\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
+ }
}
my ($error, $results, $total_hits) = C4::Search::SimpleSearch( $query, 0, 1, [ "authorityserver" ] );
# there is at least 1 result => return the 1st one
if (!defined $error && @{$results} ) {
- my $marcrecord = MARC::File::USMARC::decode($results->[0]);
- return $marcrecord->field('001')->data,BuildSummary($marcrecord,$marcrecord->field('001')->data,$authtypecode);
+ my $marcrecord = C4::Search::new_record_from_zebra(
+ 'authorityserver',
+ $results->[0]
+ );
+ return $marcrecord->field('001')->data,BuildSummary($marcrecord,$marcrecord->field('001')->data,$authtypecode);
}
# no result, returns nothing
return;
my ($record,$authid,$authtypecode)=@_;
my $dbh=C4::Context->dbh;
my %summary;
+ my $summary_template;
# handle $authtypecode is NULL or eq ""
if ($authtypecode) {
my $authref = GetAuthType($authtypecode);
$summary{authtypecode} = $authref->{authtypecode};
$summary{type} = $authref->{authtypetext};
- $summary{summary} = $authref->{summary};
+ $summary_template = $authref->{summary};
+ # for MARC21, the authority type summary displays a label meant for
+ # display
+ if (C4::Context->preference('marcflavour') ne 'UNIMARC') {
+ $summary{summary} = $authref->{summary};
+ }
}
my $marc21subfields = 'abcdfghjklmnopqrstuvxyz68';
my %marc21controlrefs = ( 'a' => 'earlier',
# suit the MARC21 version, so for now the "templating"
# feature will be enabled only for UNIMARC for backwards
# compatibility.
- if ($summary{summary} and C4::Context->preference('marcflavour') eq 'UNIMARC') {
+ if ($summary_template and C4::Context->preference('marcflavour') eq 'UNIMARC') {
my @fields = $record->fields();
# $reported_tag = '$9'.$result[$counter];
- my @stringssummary;
+ my @repets;
foreach my $field (@fields) {
my $tag = $field->tag();
my $tagvalue = $field->as_string();
- my $localsummary= $summary{summary};
+ my $localsummary= $summary_template;
$localsummary =~ s/\[(.?.?.?.?)$tag\*(.*?)\]/$1$tagvalue$2\[$1$tag$2\]/g;
if ($tag<10) {
if ($tag eq '001') {
$localsummary =~ s/\[(.?.?.?.?)$tagsubf(.*?)\]/$1$subfieldvalue$2\[$1$tagsubf$2\]/g;
}
}
- push @stringssummary, $localsummary if ($localsummary ne $summary{summary});
+ if ($localsummary ne $summary_template) {
+ $localsummary =~ s/\[(.*?)\]//g;
+ $localsummary =~ s/\n/<br>/g;
+ push @repets, $localsummary;
+ }
}
- my $resultstring;
- $resultstring = join(" -- ",@stringssummary);
- $resultstring =~ s/\[(.*?)\]//g;
- $resultstring =~ s/\n/<br>/g;
- $summary{summary} = $resultstring;
+ $summary{repets} = \@repets;
}
my @authorized;
my @notes;
# construct UNIMARC summary, that is quite different from MARC21 one
# accepted form
foreach my $field ($record->field('2..')) {
- push @authorized, { heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'), field => $field->tag() };
+ push @authorized, {
+ heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'),
+ hemain => ( $field->subfield('a') // undef ),
+ field => $field->tag(),
+ };
}
# rejected form(s)
foreach my $field ($record->field('3..')) {
}
foreach my $field ($record->field('4..')) {
my $thesaurus = $field->subfield('2') ? "thes. : ".$thesaurus{"$field->subfield('2')"}." : " : '';
- push @seefrom, { heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'), type => 'seefrom', field => $field->tag() };
+ push @seefrom, {
+ heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'),
+ hemain => ( $field->subfield('a') // undef ),
+ type => 'seefrom',
+ field => $field->tag(),
+ };
}
# see :
field => $_->tag,
type => $type,
heading => $heading,
+ hemain => ( $_->subfield('a') // undef ),
search => $heading,
- authid => $_->subfield('9'),
+ authid => ( $_->subfield('9') // undef ),
}
} $record->field('5..');
# Other forms
@otherscript = map { {
- lang => $_->subfield('8') || '',
- term => $_->subfield('a'),
+ lang => length ($_->subfield('8')) == 6 ? substr ($_->subfield('8'), 3, 3) : $_->subfield('8') || '',
+ term => $_->subfield('a') . ($_->subfield('b') ? ', ' . $_->subfield('b') : ''),
direction => 'ltr',
field => $_->tag,
} } $record->field('7..');
$subfields_to_report = 'vxyz';
}
if ($subfields_to_report) {
- push @authorized, { heading => $field->as_string($subfields_to_report), field => $tag };
+ push @authorized, {
+ heading => $field->as_string($subfields_to_report),
+ hemain => ( $field->subfield( substr($subfields_to_report, 0, 1) ) // undef ),
+ field => $tag,
+ };
} else {
- push @authorized, { heading => $field->as_string(), field => $tag };
+ push @authorized, {
+ heading => $field->as_string(),
+ hemain => ( $field->subfield( 'a' ) // undef ),
+ field => $tag,
+ };
}
}
foreach my $field ($record->field('4..')) { #See From
$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),
+ hemain => $field->subfield( substr($marc21subfields, 0, 1) ),
+ type => ($field->subfield('i') || ''),
+ field => $field->tag(),
+ };
} else {
- push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
+ push @seefrom, {
+ heading => $field->as_string($marc21subfields),
+ hemain => $field->subfield( substr($marc21subfields, 0, 1) ),
+ type => $type,
+ field => $field->tag(),
+ };
}
}
foreach my $field ($record->field('5..')) { #See Also
if ($type eq 'subfi') {
push @seealso, {
heading => $field->as_string($marc21subfields),
- type => $field->subfield('i'),
- field => $field->tag(),
- search => $field->as_string($marc21subfields) || '',
- authid => $field->subfield('9') || ''
+ hemain => $field->subfield( substr($marc21subfields, 0, 1) ),
+ 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(),
- search => $field->as_string($marc21subfields) || '',
- authid => $field->subfield('9') || ''
+ hemain => $field->subfield( substr($marc21subfields, 0, 1) ),
+ type => $type,
+ field => $field->tag(),
+ search => $field->as_string($marc21subfields) || '',
+ authid => $field->subfield('9') || ''
};
}
}
}
}
$summary{mainentry} = $authorized[0]->{heading};
+ $summary{mainmainentry} = $authorized[0]->{hemain};
$summary{authorized} = \@authorized;
$summary{notes} = \@notes;
$summary{seefrom} = \@seefrom;
my @reccache;
# search all biblio tags using this authority.
#Getting marcbiblios impacted by the change.
- if (C4::Context->preference('NoZebra')) {
- #nozebra way
- my $dbh=C4::Context->dbh;
- my $rq=$dbh->prepare(qq(SELECT biblionumbers from nozebra where indexname="an" and server="biblioserver" and value="$mergefrom" ));
- $rq->execute;
- while (my $biblionumbers=$rq->fetchrow){
- my @biblionumbers=split /;/,$biblionumbers;
- foreach (@biblionumbers) {
- if ($_=~/(\d+),.*/) {
- my $marc=GetMarcBiblio($1);
- push @reccache,$marc;
- }
- }
- }
- } else {
- #zebra connection
- my $oConnection=C4::Context->Zconn("biblioserver",0);
- # 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 $count = 0;
- if ($oResult) {
- $count=$oResult->size();
- }
- my $z=0;
- while ( $z<$count ) {
- my $rec;
- $rec=$oResult->record($z);
- my $marcdata = $rec->raw();
- my $marcrecordzebra= MARC::Record->new_from_usmarc($marcdata);
- my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
- my $i = ($biblionumbertagfield < 10) ? $marcrecordzebra->field($biblionumbertagfield)->data : $marcrecordzebra->subfield($biblionumbertagfield, $biblionumbertagsubfield);
- my $marcrecorddb=GetMarcBiblio($i);
- push @reccache, $marcrecorddb;
- $z++;
- }
- $oResult->destroy();
+ #zebra connection
+ my $oConnection=C4::Context->Zconn("biblioserver",0);
+ # 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 $count = 0;
+ if ($oResult) {
+ $count=$oResult->size();
+ }
+ my $z=0;
+ while ( $z<$count ) {
+ my $marcrecordzebra = C4::Search::new_record_from_zebra(
+ 'biblioserver',
+ $oResult->record($z)->raw()
+ );
+ my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
+ my $i = ($biblionumbertagfield < 10)
+ ? $marcrecordzebra->field( $biblionumbertagfield )->data
+ : $marcrecordzebra->subfield( $biblionumbertagfield, $biblionumbertagsubfield );
+ my $marcrecorddb = GetMarcBiblio($i);
+ push @reccache, $marcrecorddb;
+ $z++;
}
+ $oResult->destroy();
#warn scalar(@reccache)." biblios to update";
# Get All candidate Tags for the change
# (This will reduce the search scope in marc records).