my $reset;
my $biblios;
my $authorities;
+my $noxml;
GetOptions(
'd:s' => \$directory,
'reset' => \$reset,
's' => \$skip_export,
'k' => \$keep_export,
'b' => \$biblios,
+ 'noxml' => \$noxml,
'a' => \$authorities,
);
open(OUT,">:utf8","$directory/authorities/authorities.iso2709") or die $!;
my $dbh=C4::Context->dbh;
my $sth;
- $sth=$dbh->prepare("select authid from auth_header $limit");
+ $sth=$dbh->prepare("select authid,marc from auth_header $limit");
$sth->execute();
my $i=0;
- while (my ($authid) = $sth->fetchrow) {
+ while (my ($authid,$record) = $sth->fetchrow) {
+ # FIXME : we retrieve the iso2709 record. if the GetAuthority (that uses the XML) fails
+ # due to some MARC::File::XML failure, then try the iso2709,
+ # (add authid & authtype if needed)
my $record;
eval {
$record = GetAuthority($authid);
print " There was some pb getting authority : ".$authid."\n";
next;
}
-
+
print ".";
print "\r$i" unless ($i++ %100);
- # remove leader length, that could be wrong, it will be calculated automatically by as_usmarc
- # otherwise, if it's wron, zebra will fail miserabily (and never index what is after the failing record)
+# # remove leader length, that could be wrong, it will be calculated automatically by as_usmarc
+# # otherwise, if it's wron, zebra will fail miserabily (and never index what is after the failing record)
my $leader=$record->leader;
substr($leader,0,5)=' ';
substr($leader,10,7)='22 ';
$record->leader(substr($leader,0,24));
- print OUT $record->as_usmarc();
+ print OUT $record->as_usmarc;
}
close(OUT);
}
open(OUT,">:utf8 ","$directory/biblios/export") or die $!;
my $dbh=C4::Context->dbh;
my $sth;
+ if ($noxml){
+ $sth=$dbh->prepare("select biblionumber,marc from biblioitems order by biblionumber $limit");
+ $sth->execute();
+ my $i=0;
+ while (my ($biblionumber,$marc) = $sth->fetchrow) {
+ my $record;
+ $record=MARC::Record->new_from_usmarc($marc);
+ my $record_correct=1;
+ next unless $record->field($biblionumbertagfield);
+ if ($biblionumbertagfield eq '001') {
+ unless ($record->field($biblionumbertagfield)->data()) {
+ $record_correct=0;
+ my $field;
+ # if the field where biblionumber is already exist, just update it, otherwise create it
+ if ($record->field($biblionumbertagfield)) {
+ $field = $record->field($biblionumbertagfield);
+ $field->update($biblionumber);
+ } else {
+ my $newfield;
+ $newfield = MARC::Field->new( $biblionumbertagfield, $biblionumber);
+ $record->append_fields($newfield);
+ }
+ }
+ } else {
+ unless ($record->subfield($biblionumbertagfield,$biblionumbertagsubfield)) {
+ $record_correct=0;
+ my $field;
+ # if the field where biblionumber is already exist, just update it, otherwise create it
+ if ($record->field($biblionumbertagfield)) {
+ $field = $record->field($biblionumbertagfield);
+ $field->add_subfields($biblionumbertagsubfield => $biblionumber);
+ } else {
+ my $newfield;
+ $newfield = MARC::Field->new( $biblionumbertagfield,'','', $biblionumbertagsubfield => $biblionumber);
+ $record->append_fields($newfield);
+ }
+ }
+ # warn "FIXED BIBLIONUMBER".$record->as_formatted;
+ }
+ unless ($record->subfield($biblioitemnumbertagfield,$biblioitemnumbertagsubfield)) {
+ $record_correct=0;
+ # warn "INCORRECT BIBLIOITEMNUMBER :".$record->as_formatted;
+ my $field;
+ # if the field where biblionumber is already exist, just update it, otherwise create it
+ if ($record->field($biblioitemnumbertagfield)) {
+ $field = $record->field($biblioitemnumbertagfield);
+ if ($biblioitemnumbertagfield <10) {
+ $field->update($biblionumber);
+ } else {
+ $field->add_subfields($biblioitemnumbertagsubfield => $biblionumber);
+ }
+ } else {
+ my $newfield;
+ if ($biblioitemnumbertagfield <10) {
+ $newfield = MARC::Field->new( $biblioitemnumbertagfield, $biblionumber);
+ } else {
+ $newfield = MARC::Field->new( $biblioitemnumbertagfield,'','', $biblioitemnumbertagsubfield => $biblionumber);
+ }
+ $record->insert_grouped_field($newfield);
+ }
+ # warn "FIXED BIBLIOITEMNUMBER".$record->as_formatted;
+ }
+ my $leader=$record->leader;
+ substr($leader,0,5)=' ';
+ substr($leader,10,7)='22 ';
+ $record->leader(substr($leader,0,24));
+ print OUT $record->as_usmarc();
+ }
+ close (OUT);
+ } else {
$sth=$dbh->prepare("select biblionumber from biblioitems order by biblionumber $limit");
$sth->execute();
my $i=0;
# check that biblionumber & biblioitemnumber are stored in the MARC record, otherwise, add them & update the biblioitems.marcxml data.
my $record_correct=1;
next unless $record->field($biblionumbertagfield);
- if ($biblionumbertagfield eq '001') {
+ if ($biblionumbertagfield eq '001') {
unless ($record->field($biblionumbertagfield)->data()) {
$record_correct=0;
my $field;
print OUT $record->as_usmarc();
}
close(OUT);
+ }
}
#