diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index efb49e3715..911812253a 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -1,4 +1,5 @@
package C4::Biblio;
+
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
@@ -28,44 +29,45 @@ use vars qw($VERSION @ISA @EXPORT);
$VERSION = 0.01;
@ISA = qw(Exporter);
+
#
# don't forget MARCxxx subs are exported only for testing purposes. Should not be used
# as the old-style API and the NEW one are the only public functions.
#
@EXPORT = qw(
- &updateBiblio &updateBiblioItem &updateItem
- &itemcount &newbiblio &newbiblioitem
- &modnote &newsubject &newsubtitle
- &modbiblio &checkitems
- &newitems &modbibitem
- &modsubtitle &modsubject &modaddauthor &moditem &countitems
- &delitem &deletebiblioitem &delbiblio
- &getbiblio
- &getbiblioitembybiblionumber
- &getbiblioitem &getitemsbybiblioitem
- &skip
- &newcompletebiblioitem
+ &updateBiblio &updateBiblioItem &updateItem
+ &itemcount &newbiblio &newbiblioitem
+ &modnote &newsubject &newsubtitle
+ &modbiblio &checkitems
+ &newitems &modbibitem
+ &modsubtitle &modsubject &modaddauthor &moditem &countitems
+ &delitem &deletebiblioitem &delbiblio
+ &getbiblio
+ &getbiblioitembybiblionumber
+ &getbiblioitem &getitemsbybiblioitem
+ &skip &getitemtypes
+ &newcompletebiblioitem
- &MARCfind_oldbiblionumber_from_MARCbibid
- &MARCfind_MARCbibid_from_oldbiblionumber
- &MARCfind_marc_from_kohafield
- &MARCfindsubfield
- &MARCfind_frameworkcode
- &MARCgettagslib
+ &MARCfind_oldbiblionumber_from_MARCbibid
+ &MARCfind_MARCbibid_from_oldbiblionumber
+ &MARCfind_marc_from_kohafield
+ &MARCfindsubfield
+ &MARCfind_frameworkcode
+ &MARCgettagslib
- &NEWnewbiblio &NEWnewitem
- &NEWmodbiblio &NEWmoditem
- &NEWdelbiblio &NEWdelitem
+ &NEWnewbiblio &NEWnewitem
+ &NEWmodbiblio &NEWmoditem
+ &NEWdelbiblio &NEWdelitem
- &MARCaddbiblio &MARCadditem
- &MARCmodsubfield &MARCaddsubfield
- &MARCmodbiblio &MARCmoditem
- &MARCkoha2marcBiblio &MARCmarc2koha
- &MARCkoha2marcItem &MARChtml2marc
- &MARCgetbiblio &MARCgetitem
- &MARCaddword &MARCdelword
- &char_decode
- );
+ &MARCaddbiblio &MARCadditem
+ &MARCmodsubfield &MARCaddsubfield
+ &MARCmodbiblio &MARCmoditem
+ &MARCkoha2marcBiblio &MARCmarc2koha
+ &MARCkoha2marcItem &MARChtml2marc
+ &MARCgetbiblio &MARCgetitem
+ &MARCaddword &MARCdelword
+ &char_decode
+);
#
#
@@ -221,750 +223,1036 @@ used to manage MARC_word table and should not be useful elsewhere
=cut
sub MARCgettagslib {
- my ($dbh,$forlibrarian,$frameworkcode)= @_;
- $frameworkcode="" unless $frameworkcode;
- my $sth;
- my $libfield = ($forlibrarian eq 1)? 'liblibrarian' : 'libopac';
- # check that framework exists
- $sth=$dbh->prepare("select count(*) from marc_tag_structure where frameworkcode=?");
- $sth->execute($frameworkcode);
- my ($total) = $sth->fetchrow;
- $frameworkcode="" unless ($total >0);
- $sth=$dbh->prepare("select tagfield,$libfield as lib,mandatory,repeatable from marc_tag_structure where frameworkcode=? order by tagfield");
- $sth->execute($frameworkcode);
- my ($lib,$tag,$res,$tab,$mandatory,$repeatable);
- while ( ($tag,$lib,$mandatory,$repeatable) = $sth->fetchrow) {
- $res->{$tag}->{lib}=$lib;
- $res->{$tab}->{tab}=""; # XXX
- $res->{$tag}->{mandatory}=$mandatory;
- $res->{$tag}->{repeatable}=$repeatable;
- }
+ my ( $dbh, $forlibrarian, $frameworkcode ) = @_;
+ $frameworkcode = "" unless $frameworkcode;
+ my $sth;
+ my $libfield = ( $forlibrarian eq 1 ) ? 'liblibrarian' : 'libopac';
- $sth=$dbh->prepare("select tagfield,tagsubfield,$libfield as lib,tab, mandatory, repeatable,authorised_value,authtypecode,value_builder,kohafield,seealso,hidden,isurl from marc_subfield_structure where frameworkcode=? order by tagfield,tagsubfield");
- $sth->execute($frameworkcode);
+ # check that framework exists
+ $sth =
+ $dbh->prepare(
+ "select count(*) from marc_tag_structure where frameworkcode=?");
+ $sth->execute($frameworkcode);
+ my ($total) = $sth->fetchrow;
+ $frameworkcode = "" unless ( $total > 0 );
+ $sth =
+ $dbh->prepare(
+"select tagfield,$libfield as lib,mandatory,repeatable from marc_tag_structure where frameworkcode=? order by tagfield"
+ );
+ $sth->execute($frameworkcode);
+ my ( $lib, $tag, $res, $tab, $mandatory, $repeatable );
- my $subfield;
- my $authorised_value;
- my $authtypecode;
- my $value_builder;
- my $kohafield;
- my $seealso;
- my $hidden;
- my $isurl;
- while ( ($tag, $subfield, $lib, $tab, $mandatory, $repeatable,$authorised_value,$authtypecode,$value_builder,$kohafield,$seealso,$hidden,$isurl) = $sth->fetchrow) {
- $res->{$tag}->{$subfield}->{lib}=$lib;
- $res->{$tag}->{$subfield}->{tab}=$tab;
- $res->{$tag}->{$subfield}->{mandatory}=$mandatory;
- $res->{$tag}->{$subfield}->{repeatable}=$repeatable;
- $res->{$tag}->{$subfield}->{authorised_value}=$authorised_value;
- $res->{$tag}->{$subfield}->{authtypecode}=$authtypecode;
- $res->{$tag}->{$subfield}->{value_builder}=$value_builder;
- $res->{$tag}->{$subfield}->{kohafield}=$kohafield;
- $res->{$tag}->{$subfield}->{seealso}=$seealso;
- $res->{$tag}->{$subfield}->{hidden}=$hidden;
- $res->{$tag}->{$subfield}->{isurl}=$isurl;
- }
- return $res;
+ while ( ( $tag, $lib, $mandatory, $repeatable ) = $sth->fetchrow ) {
+ $res->{$tag}->{lib} = $lib;
+ $res->{$tab}->{tab} = ""; # XXX
+ $res->{$tag}->{mandatory} = $mandatory;
+ $res->{$tag}->{repeatable} = $repeatable;
+ }
+
+ $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield,$libfield as lib,tab, mandatory, repeatable,authorised_value,authtypecode,value_builder,kohafield,seealso,hidden,isurl from marc_subfield_structure where frameworkcode=? order by tagfield,tagsubfield"
+ );
+ $sth->execute($frameworkcode);
+
+ my $subfield;
+ my $authorised_value;
+ my $authtypecode;
+ my $value_builder;
+ my $kohafield;
+ my $seealso;
+ my $hidden;
+ my $isurl;
+
+ while (
+ ( $tag, $subfield, $lib, $tab,
+ $mandatory, $repeatable, $authorised_value, $authtypecode,
+ $value_builder, $kohafield, $seealso, $hidden,
+ $isurl )
+ = $sth->fetchrow
+ )
+ {
+ $res->{$tag}->{$subfield}->{lib} = $lib;
+ $res->{$tag}->{$subfield}->{tab} = $tab;
+ $res->{$tag}->{$subfield}->{mandatory} = $mandatory;
+ $res->{$tag}->{$subfield}->{repeatable} = $repeatable;
+ $res->{$tag}->{$subfield}->{authorised_value} = $authorised_value;
+ $res->{$tag}->{$subfield}->{authtypecode} = $authtypecode;
+ $res->{$tag}->{$subfield}->{value_builder} = $value_builder;
+ $res->{$tag}->{$subfield}->{kohafield} = $kohafield;
+ $res->{$tag}->{$subfield}->{seealso} = $seealso;
+ $res->{$tag}->{$subfield}->{hidden} = $hidden;
+ $res->{$tag}->{$subfield}->{isurl} = $isurl;
+ }
+ return $res;
}
sub MARCfind_marc_from_kohafield {
- my ($dbh,$kohafield) = @_;
- return 0,0 unless $kohafield;
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
+ my ( $dbh, $kohafield ) = @_;
+ return 0, 0 unless $kohafield;
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
$sth->execute($kohafield);
- my ($tagfield,$tagsubfield) = $sth->fetchrow;
- return ($tagfield,$tagsubfield);
+ my ( $tagfield, $tagsubfield ) = $sth->fetchrow;
+ return ( $tagfield, $tagsubfield );
}
sub MARCfind_oldbiblionumber_from_MARCbibid {
- my ($dbh,$MARCbibid) = @_;
- my $sth=$dbh->prepare("select biblionumber from marc_biblio where bibid=?");
+ my ( $dbh, $MARCbibid ) = @_;
+ my $sth =
+ $dbh->prepare("select biblionumber from marc_biblio where bibid=?");
$sth->execute($MARCbibid);
my ($biblionumber) = $sth->fetchrow;
return $biblionumber;
}
sub MARCfind_MARCbibid_from_oldbiblionumber {
- my ($dbh,$oldbiblionumber) = @_;
- my $sth=$dbh->prepare("select bibid from marc_biblio where biblionumber=?");
+ my ( $dbh, $oldbiblionumber ) = @_;
+ my $sth =
+ $dbh->prepare("select bibid from marc_biblio where biblionumber=?");
$sth->execute($oldbiblionumber);
my ($bibid) = $sth->fetchrow;
return $bibid;
}
sub MARCaddbiblio {
+
# pass the MARC::Record to this function, and it will create the records in the marc tables
- my ($dbh,$record,$biblionumber,$frameworkcode,$bibid) = @_;
- my @fields=$record->fields();
-# warn "IN MARCaddbiblio $bibid => ".$record->as_formatted;
-# my $bibid;
-# adding main table, and retrieving bibid
+ my ( $dbh, $record, $biblionumber, $frameworkcode, $bibid ) = @_;
+ my @fields = $record->fields();
+
+ # warn "IN MARCaddbiblio $bibid => ".$record->as_formatted;
+ # my $bibid;
+ # adding main table, and retrieving bibid
# if bibid is sent, then it's not a true add, it's only a re-add, after a delete (ie, a mod)
-# if bibid empty => true add, find a new bibid number
- unless ($bibid) {
- $dbh->do("lock tables marc_biblio WRITE,marc_subfield_table WRITE, marc_word WRITE, marc_blob_subfield WRITE, stopwords READ");
- my $sth=$dbh->prepare("insert into marc_biblio (datecreated,biblionumber,frameworkcode) values (now(),?,?)");
- $sth->execute($biblionumber,$frameworkcode);
- $sth=$dbh->prepare("select max(bibid) from marc_biblio");
- $sth->execute;
- ($bibid)=$sth->fetchrow;
- $sth->finish;
- }
- my $fieldcount=0;
- # now, add subfields...
- foreach my $field (@fields) {
- $fieldcount++;
- if ($field->tag() <10) {
- &MARCaddsubfield($dbh,$bibid,
- $field->tag(),
- '',
- $fieldcount,
- '',
- 1,
- $field->data()
- );
- } else {
- my @subfields=$field->subfields();
- foreach my $subfieldcount (0..$#subfields) {
- &MARCaddsubfield($dbh,$bibid,
- $field->tag(),
- $field->indicator(1).$field->indicator(2),
- $fieldcount,
- $subfields[$subfieldcount][0],
- $subfieldcount+1,
- $subfields[$subfieldcount][1]
- );
- }
- }
- }
- $dbh->do("unlock tables");
- return $bibid;
+ # if bibid empty => true add, find a new bibid number
+ unless ($bibid) {
+ $dbh->do(
+"lock tables marc_biblio WRITE,marc_subfield_table WRITE, marc_word WRITE, marc_blob_subfield WRITE, stopwords READ"
+ );
+ my $sth =
+ $dbh->prepare(
+"insert into marc_biblio (datecreated,biblionumber,frameworkcode) values (now(),?,?)"
+ );
+ $sth->execute( $biblionumber, $frameworkcode );
+ $sth = $dbh->prepare("select max(bibid) from marc_biblio");
+ $sth->execute;
+ ($bibid) = $sth->fetchrow;
+ $sth->finish;
+ }
+ my $fieldcount = 0;
+
+ # now, add subfields...
+ foreach my $field (@fields) {
+ $fieldcount++;
+ if ( $field->tag() < 10 ) {
+ &MARCaddsubfield( $dbh, $bibid, $field->tag(), '', $fieldcount, '',
+ 1, $field->data() );
+ }
+ else {
+ my @subfields = $field->subfields();
+ foreach my $subfieldcount ( 0 .. $#subfields ) {
+ &MARCaddsubfield(
+ $dbh,
+ $bibid,
+ $field->tag(),
+ $field->indicator(1) . $field->indicator(2),
+ $fieldcount,
+ $subfields[$subfieldcount][0],
+ $subfieldcount + 1,
+ $subfields[$subfieldcount][1]
+ );
+ }
+ }
+ }
+ $dbh->do("unlock tables");
+ return $bibid;
}
sub MARCadditem {
+
# pass the MARC::Record to this function, and it will create the records in the marc tables
- my ($dbh,$record,$biblionumber) = @_;
-# warn "adding : ".$record->as_formatted();
-# search for MARC biblionumber
- $dbh->do("lock tables marc_biblio WRITE,marc_subfield_table WRITE, marc_word WRITE, marc_blob_subfield WRITE, stopwords READ");
- my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$biblionumber);
- my @fields=$record->fields();
- my $sth = $dbh->prepare("select max(tagorder) from marc_subfield_table where bibid=?");
+ my ( $dbh, $record, $biblionumber ) = @_;
+
+ # warn "adding : ".$record->as_formatted();
+ # search for MARC biblionumber
+ $dbh->do(
+"lock tables marc_biblio WRITE,marc_subfield_table WRITE, marc_word WRITE, marc_blob_subfield WRITE, stopwords READ"
+ );
+ my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber( $dbh, $biblionumber );
+ my @fields = $record->fields();
+ my $sth =
+ $dbh->prepare(
+ "select max(tagorder) from marc_subfield_table where bibid=?");
$sth->execute($bibid);
my ($fieldcount) = $sth->fetchrow;
+
# now, add subfields...
foreach my $field (@fields) {
- my @subfields=$field->subfields();
- $fieldcount++;
- foreach my $subfieldcount (0..$#subfields) {
- &MARCaddsubfield($dbh,$bibid,
- $field->tag(),
- $field->indicator(1).$field->indicator(2),
- $fieldcount,
- $subfields[$subfieldcount][0],
- $subfieldcount+1,
- $subfields[$subfieldcount][1]
- );
- }
+ my @subfields = $field->subfields();
+ $fieldcount++;
+ foreach my $subfieldcount ( 0 .. $#subfields ) {
+ &MARCaddsubfield(
+ $dbh,
+ $bibid,
+ $field->tag(),
+ $field->indicator(1) . $field->indicator(2),
+ $fieldcount,
+ $subfields[$subfieldcount][0],
+ $subfieldcount + 1,
+ $subfields[$subfieldcount][1]
+ );
+ }
}
$dbh->do("unlock tables");
return $bibid;
}
sub MARCaddsubfield {
-# Add a new subfield to a tag into the DB.
- my ($dbh,$bibid,$tagid,$tag_indicator,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalues) = @_;
- # if not value, end of job, we do nothing
- if (length($subfieldvalues) ==0) {
- return;
- }
- if (not($subfieldcode)) {
- $subfieldcode=' ';
- }
- my @subfieldvalues = split /\|/,$subfieldvalues;
- foreach my $subfieldvalue (@subfieldvalues) {
- if (length($subfieldvalue)>255) {
- $dbh->do("lock tables marc_blob_subfield WRITE, marc_subfield_table WRITE");
- my $sth=$dbh->prepare("insert into marc_blob_subfield (subfieldvalue) values (?)");
- $sth->execute($subfieldvalue);
- $sth=$dbh->prepare("select max(blobidlink)from marc_blob_subfield");
- $sth->execute;
- my ($res)=$sth->fetchrow;
- $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?,?)");
- $sth->execute($bibid,(sprintf "%03s",$tagid),$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$res);
- if ($sth->errstr) {
- warn "ERROR ==> insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values ($bibid,$tagid,$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$subfieldvalue)\n";
- }
- $dbh->do("unlock tables");
- } else {
- my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values (?,?,?,?,?,?,?)");
- $sth->execute($bibid,(sprintf "%03s",$tagid),$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$subfieldvalue);
- if ($sth->errstr) {
- warn "ERROR ==> insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values ($bibid,$tagid,$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$subfieldvalue)\n";
- }
- }
- &MARCaddword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue);
- }
+
+ # Add a new subfield to a tag into the DB.
+ my (
+ $dbh, $bibid, $tagid, $tag_indicator,
+ $tagorder, $subfieldcode, $subfieldorder, $subfieldvalues
+ )
+ = @_;
+
+ # if not value, end of job, we do nothing
+ if ( length($subfieldvalues) == 0 ) {
+ return;
+ }
+ if ( not($subfieldcode) ) {
+ $subfieldcode = ' ';
+ }
+ my @subfieldvalues = split /\|/, $subfieldvalues;
+ foreach my $subfieldvalue (@subfieldvalues) {
+ if ( length($subfieldvalue) > 255 ) {
+ $dbh->do(
+"lock tables marc_blob_subfield WRITE, marc_subfield_table WRITE"
+ );
+ my $sth =
+ $dbh->prepare(
+ "insert into marc_blob_subfield (subfieldvalue) values (?)");
+ $sth->execute($subfieldvalue);
+ $sth =
+ $dbh->prepare("select max(blobidlink)from marc_blob_subfield");
+ $sth->execute;
+ my ($res) = $sth->fetchrow;
+ $sth =
+ $dbh->prepare(
+"insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?,?)"
+ );
+ $sth->execute( $bibid, ( sprintf "%03s", $tagid ), $tagorder,
+ $tag_indicator, $subfieldcode, $subfieldorder, $res );
+
+ if ( $sth->errstr ) {
+ warn
+"ERROR ==> insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values ($bibid,$tagid,$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$subfieldvalue)\n";
+ }
+ $dbh->do("unlock tables");
+ }
+ else {
+ my $sth =
+ $dbh->prepare(
+"insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values (?,?,?,?,?,?,?)"
+ );
+ $sth->execute(
+ $bibid, ( sprintf "%03s", $tagid ),
+ $tagorder, $tag_indicator,
+ $subfieldcode, $subfieldorder,
+ $subfieldvalue
+ );
+ if ( $sth->errstr ) {
+ warn
+"ERROR ==> insert into marc_subfield_table (bibid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue) values ($bibid,$tagid,$tagorder,$tag_indicator,$subfieldcode,$subfieldorder,$subfieldvalue)\n";
+ }
+ }
+ &MARCaddword(
+ $dbh, $bibid, $tagid, $tagorder,
+ $subfieldcode, $subfieldorder, $subfieldvalue
+ );
+ }
}
sub MARCgetbiblio {
-# Returns MARC::Record of the biblio passed in parameter.
- my ($dbh,$bibid)=@_;
+
+ # Returns MARC::Record of the biblio passed in parameter.
+ my ( $dbh, $bibid ) = @_;
my $record = MARC::Record->new();
-#---- TODO : the leader is missing
- $record->leader(' ');
- my $sth=$dbh->prepare("select bibid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue,valuebloblink
+
+ #---- TODO : the leader is missing
+ $record->leader(' ');
+ my $sth =
+ $dbh->prepare(
+"select bibid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue,valuebloblink
from marc_subfield_table
where bibid=? order by tag,tagorder,subfieldcode
- ");
- my $sth2=$dbh->prepare("select subfieldvalue from marc_blob_subfield where blobidlink=?");
- $sth->execute($bibid);
- my $prevtagorder=1;
- my $prevtag='XXX';
- my $previndicator;
- my $field; # for >=10 tags
- my $prevvalue; # for <10 tags
- while (my $row=$sth->fetchrow_hashref) {
- if ($row->{'valuebloblink'}) { #---- search blob if there is one
- $sth2->execute($row->{'valuebloblink'});
- my $row2=$sth2->fetchrow_hashref;
- $sth2->finish;
- $row->{'subfieldvalue'}=$row2->{'subfieldvalue'};
- }
- if ($row->{tagorder} ne $prevtagorder || $row->{tag} ne $prevtag) {
- $previndicator.=" ";
- if ($prevtag <10) {
- $record->add_fields((sprintf "%03s",$prevtag),$prevvalue) unless $prevtag eq "XXX"; # ignore the 1st loop
- } else {
- $record->add_fields($field) unless $prevtag eq "XXX";
- }
- undef $field;
- $prevtagorder=$row->{tagorder};
- $prevtag = $row->{tag};
- $previndicator=$row->{tag_indicator};
- if ($row->{tag}<10) {
- $prevvalue = $row->{subfieldvalue};
- } else {
- $field = MARC::Field->new((sprintf "%03s",$prevtag), substr($row->{tag_indicator}.' ',0,1), substr($row->{tag_indicator}.' ',1,1), $row->{'subfieldcode'}, $row->{'subfieldvalue'} );
- }
- } else {
- if ($row->{tag} <10) {
- $record->add_fields((sprintf "%03s",$row->{tag}), $row->{'subfieldvalue'});
- } else {
- $field->add_subfields($row->{'subfieldcode'}, $row->{'subfieldvalue'} );
- }
- $prevtag= $row->{tag};
- $previndicator=$row->{tag_indicator};
- }
- }
- # the last has not been included inside the loop... do it now !
- if ($prevtag ne "XXX") { # check that we have found something. Otherwise, prevtag is still XXX and we
- # must return an empty record, not make MARC::Record fail because we try to
- # create a record with XXX as field :-(
- if ($prevtag <10) {
- $record->add_fields($prevtag,$prevvalue);
- } else {
- # my $field = MARC::Field->new( $prevtag, "", "", %subfieldlist);
- $record->add_fields($field);
- }
- }
- return $record;
+ "
+ );
+ my $sth2 =
+ $dbh->prepare(
+ "select subfieldvalue from marc_blob_subfield where blobidlink=?");
+ $sth->execute($bibid);
+ my $prevtagorder = 1;
+ my $prevtag = 'XXX';
+ my $previndicator;
+ my $field; # for >=10 tags
+ my $prevvalue; # for <10 tags
+ while ( my $row = $sth->fetchrow_hashref ) {
+
+ if ( $row->{'valuebloblink'} ) { #---- search blob if there is one
+ $sth2->execute( $row->{'valuebloblink'} );
+ my $row2 = $sth2->fetchrow_hashref;
+ $sth2->finish;
+ $row->{'subfieldvalue'} = $row2->{'subfieldvalue'};
+ }
+ if ( $row->{tagorder} ne $prevtagorder || $row->{tag} ne $prevtag ) {
+ $previndicator .= " ";
+ if ( $prevtag < 10 ) {
+ $record->add_fields( ( sprintf "%03s", $prevtag ), $prevvalue )
+ unless $prevtag eq "XXX"; # ignore the 1st loop
+ }
+ else {
+ $record->add_fields($field) unless $prevtag eq "XXX";
+ }
+ undef $field;
+ $prevtagorder = $row->{tagorder};
+ $prevtag = $row->{tag};
+ $previndicator = $row->{tag_indicator};
+ if ( $row->{tag} < 10 ) {
+ $prevvalue = $row->{subfieldvalue};
+ }
+ else {
+ $field = MARC::Field->new(
+ ( sprintf "%03s", $prevtag ),
+ substr( $row->{tag_indicator} . ' ', 0, 1 ),
+ substr( $row->{tag_indicator} . ' ', 1, 1 ),
+ $row->{'subfieldcode'},
+ $row->{'subfieldvalue'}
+ );
+ }
+ }
+ else {
+ if ( $row->{tag} < 10 ) {
+ $record->add_fields( ( sprintf "%03s", $row->{tag} ),
+ $row->{'subfieldvalue'} );
+ }
+ else {
+ $field->add_subfields( $row->{'subfieldcode'},
+ $row->{'subfieldvalue'} );
+ }
+ $prevtag = $row->{tag};
+ $previndicator = $row->{tag_indicator};
+ }
+ }
+
+ # the last has not been included inside the loop... do it now !
+ if ( $prevtag ne "XXX" )
+ { # check that we have found something. Otherwise, prevtag is still XXX and we
+ # must return an empty record, not make MARC::Record fail because we try to
+ # create a record with XXX as field :-(
+ if ( $prevtag < 10 ) {
+ $record->add_fields( $prevtag, $prevvalue );
+ }
+ else {
+
+ # my $field = MARC::Field->new( $prevtag, "", "", %subfieldlist);
+ $record->add_fields($field);
+ }
+ }
+ return $record;
}
+
sub MARCgetitem {
-# Returns MARC::Record of the biblio passed in parameter.
- my ($dbh,$bibid,$itemnumber)=@_;
+
+ # Returns MARC::Record of the biblio passed in parameter.
+ my ( $dbh, $bibid, $itemnumber ) = @_;
my $record = MARC::Record->new();
-# search MARC tagorder
- my $sth2 = $dbh->prepare("select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?");
- $sth2->execute($bibid,$itemnumber);
+
+ # search MARC tagorder
+ my $sth2 =
+ $dbh->prepare(
+"select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?"
+ );
+ $sth2->execute( $bibid, $itemnumber );
my ($tagorder) = $sth2->fetchrow_array();
-#---- TODO : the leader is missing
- my $sth=$dbh->prepare("select bibid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue,valuebloblink
+
+ #---- TODO : the leader is missing
+ my $sth =
+ $dbh->prepare(
+"select bibid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue,valuebloblink
from marc_subfield_table
where bibid=? and tagorder=? order by subfieldcode,subfieldorder
- ");
- $sth2=$dbh->prepare("select subfieldvalue from marc_blob_subfield where blobidlink=?");
- $sth->execute($bibid,$tagorder);
- while (my $row=$sth->fetchrow_hashref) {
- if ($row->{'valuebloblink'}) { #---- search blob if there is one
- $sth2->execute($row->{'valuebloblink'});
- my $row2=$sth2->fetchrow_hashref;
- $sth2->finish;
- $row->{'subfieldvalue'}=$row2->{'subfieldvalue'};
- }
- if ($record->field($row->{'tag'})) {
- my $field;
+ "
+ );
+ $sth2 =
+ $dbh->prepare(
+ "select subfieldvalue from marc_blob_subfield where blobidlink=?");
+ $sth->execute( $bibid, $tagorder );
+ while ( my $row = $sth->fetchrow_hashref ) {
+ if ( $row->{'valuebloblink'} ) { #---- search blob if there is one
+ $sth2->execute( $row->{'valuebloblink'} );
+ my $row2 = $sth2->fetchrow_hashref;
+ $sth2->finish;
+ $row->{'subfieldvalue'} = $row2->{'subfieldvalue'};
+ }
+ if ( $record->field( $row->{'tag'} ) ) {
+ my $field;
+
#--- this test must stay as this, because of strange behaviour of mySQL/Perl DBI with char var containing a number...
-#--- sometimes, eliminates 0 at beginning, sometimes no ;-\\\
- if (length($row->{'tag'}) <3) {
- $row->{'tag'} = "0".$row->{'tag'};
- }
- $field =$record->field($row->{'tag'});
- if ($field) {
- my $x = $field->add_subfields($row->{'subfieldcode'},$row->{'subfieldvalue'});
- $record->delete_field($field);
- $record->add_fields($field);
- }
- } else {
- if (length($row->{'tag'}) < 3) {
- $row->{'tag'} = "0".$row->{'tag'};
- }
- my $temp = MARC::Field->new($row->{'tag'}," "," ", $row->{'subfieldcode'} => $row->{'subfieldvalue'});
- $record->add_fields($temp);
- }
+ #--- sometimes, eliminates 0 at beginning, sometimes no ;-\\\
+ if ( length( $row->{'tag'} ) < 3 ) {
+ $row->{'tag'} = "0" . $row->{'tag'};
+ }
+ $field = $record->field( $row->{'tag'} );
+ if ($field) {
+ my $x =
+ $field->add_subfields( $row->{'subfieldcode'},
+ $row->{'subfieldvalue'} );
+ $record->delete_field($field);
+ $record->add_fields($field);
+ }
+ }
+ else {
+ if ( length( $row->{'tag'} ) < 3 ) {
+ $row->{'tag'} = "0" . $row->{'tag'};
+ }
+ my $temp =
+ MARC::Field->new( $row->{'tag'}, " ", " ",
+ $row->{'subfieldcode'} => $row->{'subfieldvalue'} );
+ $record->add_fields($temp);
+ }
}
return $record;
}
sub MARCmodbiblio {
- my ($dbh,$bibid,$record,$delete)=@_;
- my $oldrecord=&MARCgetbiblio($dbh,$bibid);
- if ($oldrecord eq $record) {
- return;
- }
-# 1st delete the biblio,
-# 2nd recreate it
- my $biblionumber = MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
- &MARCdelbiblio($dbh,$bibid,1);
- &MARCaddbiblio($dbh,$record,$biblionumber,$bibid);
+ my ( $dbh, $bibid, $record, $delete ) = @_;
+ my $oldrecord = &MARCgetbiblio( $dbh, $bibid );
+ if ( $oldrecord eq $record ) {
+ return;
+ }
+
+ # 1st delete the biblio,
+ # 2nd recreate it
+ my $biblionumber = MARCfind_oldbiblionumber_from_MARCbibid( $dbh, $bibid );
+ &MARCdelbiblio( $dbh, $bibid, 1 );
+ &MARCaddbiblio( $dbh, $record, $biblionumber, $bibid );
}
sub MARCdelbiblio {
- my ($dbh,$bibid,$keep_items) = @_;
-# if the keep_item is set to 1, then all items are preserved.
-# This flag is set when the delbiblio is called by modbiblio
-# due to a too complex structure of MARC (repeatable fields and subfields),
-# the best solution for a modif is to delete / recreate the record.
+ my ( $dbh, $bibid, $keep_items ) = @_;
+
+ # if the keep_item is set to 1, then all items are preserved.
+ # This flag is set when the delbiblio is called by modbiblio
+ # due to a too complex structure of MARC (repeatable fields and subfields),
+ # the best solution for a modif is to delete / recreate the record.
# 1st of all, copy the MARC::Record to deletedbiblio table => if a true deletion, MARC data will be kept.
# if deletion called before MARCmodbiblio => won't do anything, as the oldbiblionumber doesn't
-# exist in deletedbiblio table
- my $record = MARCgetbiblio($dbh,$bibid);
- my $oldbiblionumber = MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
- my $copy2deleted=$dbh->prepare("update deletedbiblio set marc=? where biblionumber=?");
- $copy2deleted->execute($record->as_usmarc(),$oldbiblionumber);
-# now, delete in MARC tables.
- if ($keep_items eq 1) {
- #search item field code
- my $sth = $dbh->prepare("select tagfield from marc_subfield_structure where kohafield like 'items.%'");
- $sth->execute;
- my $itemtag = $sth->fetchrow_hashref->{tagfield};
- $dbh->do("delete from marc_subfield_table where bibid=$bibid and tag<>$itemtag");
- $dbh->do("delete from marc_word where bibid=$bibid and not (tagsubfield like \"$itemtag%\")");
- } else {
- $dbh->do("delete from marc_biblio where bibid=$bibid");
- $dbh->do("delete from marc_subfield_table where bibid=$bibid");
- $dbh->do("delete from marc_word where bibid=$bibid");
- }
+ # exist in deletedbiblio table
+ my $record = MARCgetbiblio( $dbh, $bibid );
+ my $oldbiblionumber =
+ MARCfind_oldbiblionumber_from_MARCbibid( $dbh, $bibid );
+ my $copy2deleted =
+ $dbh->prepare("update deletedbiblio set marc=? where biblionumber=?");
+ $copy2deleted->execute( $record->as_usmarc(), $oldbiblionumber );
+
+ # now, delete in MARC tables.
+ if ( $keep_items eq 1 ) {
+
+ #search item field code
+ my $sth =
+ $dbh->prepare(
+"select tagfield from marc_subfield_structure where kohafield like 'items.%'"
+ );
+ $sth->execute;
+ my $itemtag = $sth->fetchrow_hashref->{tagfield};
+ $dbh->do(
+"delete from marc_subfield_table where bibid=$bibid and tag<>$itemtag"
+ );
+ $dbh->do(
+"delete from marc_word where bibid=$bibid and not (tagsubfield like \"$itemtag%\")"
+ );
+ }
+ else {
+ $dbh->do("delete from marc_biblio where bibid=$bibid");
+ $dbh->do("delete from marc_subfield_table where bibid=$bibid");
+ $dbh->do("delete from marc_word where bibid=$bibid");
+ }
}
sub MARCdelitem {
-# delete the item passed in parameter in MARC tables.
- my ($dbh,$bibid,$itemnumber)=@_;
- # my $record = MARC::Record->new();
- # search MARC tagorder
- my $record = MARCgetitem($dbh,$bibid,$itemnumber);
- my $copy2deleted=$dbh->prepare("update deleteditems set marc=? where itemnumber=?");
- $copy2deleted->execute($record->as_usmarc(),$itemnumber);
- my $sth2 = $dbh->prepare("select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?");
- $sth2->execute($bibid,$itemnumber);
- my ($tagorder) = $sth2->fetchrow_array();
- my $sth=$dbh->prepare("delete from marc_subfield_table where bibid=? and tagorder=?");
- $sth->execute($bibid,$tagorder);
+ # delete the item passed in parameter in MARC tables.
+ my ( $dbh, $bibid, $itemnumber ) = @_;
+
+ # my $record = MARC::Record->new();
+ # search MARC tagorder
+ my $record = MARCgetitem( $dbh, $bibid, $itemnumber );
+ my $copy2deleted =
+ $dbh->prepare("update deleteditems set marc=? where itemnumber=?");
+ $copy2deleted->execute( $record->as_usmarc(), $itemnumber );
+
+ my $sth2 =
+ $dbh->prepare(
+"select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?"
+ );
+ $sth2->execute( $bibid, $itemnumber );
+ my ($tagorder) = $sth2->fetchrow_array();
+ my $sth =
+ $dbh->prepare(
+ "delete from marc_subfield_table where bibid=? and tagorder=?");
+ $sth->execute( $bibid, $tagorder );
}
sub MARCmoditem {
- my ($dbh,$record,$bibid,$itemnumber,$delete)=@_;
- my $oldrecord=&MARCgetitem($dbh,$bibid,$itemnumber);
- # if nothing to change, don't waste time...
- if ($oldrecord eq $record) {
- return;
- }
- # otherwise, skip through each subfield...
- my @fields = $record->fields();
- # search old MARC item
- my $sth2 = $dbh->prepare("select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?");
- $sth2->execute($bibid,$itemnumber);
- my ($tagorder) = $sth2->fetchrow_array();
- foreach my $field (@fields) {
- my $oldfield = $oldrecord->field($field->tag());
- my @subfields=$field->subfields();
- my $subfieldorder=0;
- foreach my $subfield (@subfields) {
- $subfieldorder++;
-# warn "compare : $oldfield".$oldfield->subfield(@$subfield[0]);
- if ($oldfield eq 0 or (length($oldfield->subfield(@$subfield[0])) ==0) ) {
- # just adding datas...
+ my ( $dbh, $record, $bibid, $itemnumber, $delete ) = @_;
+ my $oldrecord = &MARCgetitem( $dbh, $bibid, $itemnumber );
+
+ # if nothing to change, don't waste time...
+ if ( $oldrecord eq $record ) {
+ return;
+ }
+
+ # otherwise, skip through each subfield...
+ my @fields = $record->fields();
+
+ # search old MARC item
+ my $sth2 =
+ $dbh->prepare(
+"select tagorder from marc_subfield_table,marc_subfield_structure where marc_subfield_table.tag=marc_subfield_structure.tagfield and marc_subfield_table.subfieldcode=marc_subfield_structure.tagsubfield and bibid=? and kohafield='items.itemnumber' and subfieldvalue=?"
+ );
+ $sth2->execute( $bibid, $itemnumber );
+ my ($tagorder) = $sth2->fetchrow_array();
+ foreach my $field (@fields) {
+ my $oldfield = $oldrecord->field( $field->tag() );
+ my @subfields = $field->subfields();
+ my $subfieldorder = 0;
+ foreach my $subfield (@subfields) {
+ $subfieldorder++;
+
+ # warn "compare : $oldfield".$oldfield->subfield(@$subfield[0]);
+ if ( $oldfield eq 0
+ or ( length( $oldfield->subfield( @$subfield[0] ) ) == 0 ) )
+ {
+
+ # just adding datas...
# warn "addfield : / $subfieldorder / @$subfield[0] - @$subfield[1]";
# warn "NEW subfield : $bibid,".$field->tag().",".$tagorder.",".@$subfield[0].",".$subfieldorder.",".@$subfield[1].")";
- &MARCaddsubfield($dbh,$bibid,$field->tag(),$field->indicator(1).$field->indicator(2),
- $tagorder,@$subfield[0],$subfieldorder,@$subfield[1]);
- } else {
+ &MARCaddsubfield(
+ $dbh,
+ $bibid,
+ $field->tag(),
+ $field->indicator(1) . $field->indicator(2),
+ $tagorder,
+ @$subfield[0],
+ $subfieldorder,
+ @$subfield[1]
+ );
+ }
+ else {
+
# warn "modfield : / $subfieldorder / @$subfield[0] - @$subfield[1]";
- # modify he subfield if it's a different string
- if ($oldfield->subfield(@$subfield[0]) ne @$subfield[1] ) {
- my $subfieldid=&MARCfindsubfieldid($dbh,$bibid,$field->tag(),$tagorder,@$subfield[0],$subfieldorder);
+ # modify he subfield if it's a different string
+ if ( $oldfield->subfield( @$subfield[0] ) ne @$subfield[1] ) {
+ my $subfieldid = &MARCfindsubfieldid(
+ $dbh, $bibid,
+ $field->tag(), $tagorder,
+ @$subfield[0], $subfieldorder
+ );
+
# warn "changing : $subfieldid, $bibid,".$field->tag(),",$tagorder,@$subfield[0],@$subfield[1],$subfieldorder";
- &MARCmodsubfield($dbh,$subfieldid,@$subfield[1]);
- }
- }
- }
- }
+ &MARCmodsubfield( $dbh, $subfieldid, @$subfield[1] );
+ }
+ }
+ }
+ }
}
-
sub MARCmodsubfield {
-# Subroutine changes a subfield value given a subfieldid.
- my ($dbh, $subfieldid, $subfieldvalue )=@_;
+
+ # Subroutine changes a subfield value given a subfieldid.
+ my ( $dbh, $subfieldid, $subfieldvalue ) = @_;
$dbh->do("lock tables marc_blob_subfield WRITE,marc_subfield_table WRITE");
- my $sth1=$dbh->prepare("select valuebloblink from marc_subfield_table where subfieldid=?");
+ my $sth1 =
+ $dbh->prepare(
+ "select valuebloblink from marc_subfield_table where subfieldid=?");
$sth1->execute($subfieldid);
- my ($oldvaluebloblink)=$sth1->fetchrow;
+ my ($oldvaluebloblink) = $sth1->fetchrow;
$sth1->finish;
my $sth;
+
# if too long, use a bloblink
- if (length($subfieldvalue)>255 ) {
- # if already a bloblink, update it, otherwise, insert a new one.
- if ($oldvaluebloblink) {
- $sth=$dbh->prepare("update marc_blob_subfield set subfieldvalue=? where blobidlink=?");
- $sth->execute($subfieldvalue,$oldvaluebloblink);
- } else {
- $sth=$dbh->prepare("insert into marc_blob_subfield (subfieldvalue) values (?)");
- $sth->execute($subfieldvalue);
- $sth=$dbh->prepare("select max(blobidlink) from marc_blob_subfield");
- $sth->execute;
- my ($res)=$sth->fetchrow;
- $sth=$dbh->prepare("update marc_subfield_table set subfieldvalue=null, valuebloblink=? where subfieldid=?");
- $sth->execute($res,$subfieldid);
- }
- } else {
- # note this can leave orphan bloblink. Not a big problem, but we should build somewhere a orphan deleting script...
- $sth=$dbh->prepare("update marc_subfield_table set subfieldvalue=?,valuebloblink=null where subfieldid=?");
- $sth->execute($subfieldvalue, $subfieldid);
+ if ( length($subfieldvalue) > 255 ) {
+
+ # if already a bloblink, update it, otherwise, insert a new one.
+ if ($oldvaluebloblink) {
+ $sth =
+ $dbh->prepare(
+"update marc_blob_subfield set subfieldvalue=? where blobidlink=?"
+ );
+ $sth->execute( $subfieldvalue, $oldvaluebloblink );
+ }
+ else {
+ $sth =
+ $dbh->prepare(
+ "insert into marc_blob_subfield (subfieldvalue) values (?)");
+ $sth->execute($subfieldvalue);
+ $sth =
+ $dbh->prepare("select max(blobidlink) from marc_blob_subfield");
+ $sth->execute;
+ my ($res) = $sth->fetchrow;
+ $sth =
+ $dbh->prepare(
+"update marc_subfield_table set subfieldvalue=null, valuebloblink=? where subfieldid=?"
+ );
+ $sth->execute( $res, $subfieldid );
+ }
+ }
+ else {
+
+# note this can leave orphan bloblink. Not a big problem, but we should build somewhere a orphan deleting script...
+ $sth =
+ $dbh->prepare(
+"update marc_subfield_table set subfieldvalue=?,valuebloblink=null where subfieldid=?"
+ );
+ $sth->execute( $subfieldvalue, $subfieldid );
}
$dbh->do("unlock tables");
$sth->finish;
- $sth=$dbh->prepare("select bibid,tag,tagorder,subfieldcode,subfieldid,subfieldorder from marc_subfield_table where subfieldid=?");
+ $sth =
+ $dbh->prepare(
+"select bibid,tag,tagorder,subfieldcode,subfieldid,subfieldorder from marc_subfield_table where subfieldid=?"
+ );
$sth->execute($subfieldid);
- my ($bibid,$tagid,$tagorder,$subfieldcode,$x,$subfieldorder) = $sth->fetchrow;
- $subfieldid=$x;
- &MARCdelword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder);
- &MARCaddword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue);
- return($subfieldid, $subfieldvalue);
+ my ( $bibid, $tagid, $tagorder, $subfieldcode, $x, $subfieldorder ) =
+ $sth->fetchrow;
+ $subfieldid = $x;
+ &MARCdelword( $dbh, $bibid, $tagid, $tagorder, $subfieldcode,
+ $subfieldorder );
+ &MARCaddword(
+ $dbh, $bibid, $tagid, $tagorder,
+ $subfieldcode, $subfieldorder, $subfieldvalue
+ );
+ return ( $subfieldid, $subfieldvalue );
}
sub MARCfindsubfield {
- my ($dbh,$bibid,$tag,$subfieldcode,$subfieldorder,$subfieldvalue) = @_;
- my $resultcounter=0;
+ my ( $dbh, $bibid, $tag, $subfieldcode, $subfieldorder, $subfieldvalue ) =
+ @_;
+ my $resultcounter = 0;
my $subfieldid;
my $lastsubfieldid;
- my $query="select subfieldid from marc_subfield_table where bibid=? and tag=? and subfieldcode=?";
- my @bind_values = ($bibid,$tag, $subfieldcode);
+ my $query =
+"select subfieldid from marc_subfield_table where bibid=? and tag=? and subfieldcode=?";
+ my @bind_values = ( $bibid, $tag, $subfieldcode );
if ($subfieldvalue) {
- $query .= " and subfieldvalue=?";
- push(@bind_values,$subfieldvalue);
- } else {
- if ($subfieldorder<1) {
- $subfieldorder=1;
- }
- $query .= " and subfieldorder=?";
- push(@bind_values,$subfieldorder);
+ $query .= " and subfieldvalue=?";
+ push ( @bind_values, $subfieldvalue );
}
- my $sti=$dbh->prepare($query);
+ else {
+ if ( $subfieldorder < 1 ) {
+ $subfieldorder = 1;
+ }
+ $query .= " and subfieldorder=?";
+ push ( @bind_values, $subfieldorder );
+ }
+ my $sti = $dbh->prepare($query);
$sti->execute(@bind_values);
- while (($subfieldid) = $sti->fetchrow) {
- $resultcounter++;
- $lastsubfieldid=$subfieldid;
+ while ( ($subfieldid) = $sti->fetchrow ) {
+ $resultcounter++;
+ $lastsubfieldid = $subfieldid;
}
- if ($resultcounter>1) {
- # Error condition. Values given did not resolve into a unique record. Don't know what to edit
- # should rarely occur (only if we use subfieldvalue with a value that exists twice, which is strange)
- return -1;
- } else {
- return $lastsubfieldid;
+ if ( $resultcounter > 1 ) {
+
+# Error condition. Values given did not resolve into a unique record. Don't know what to edit
+# should rarely occur (only if we use subfieldvalue with a value that exists twice, which is strange)
+ return -1;
+ }
+ else {
+ return $lastsubfieldid;
}
}
sub MARCfindsubfieldid {
- my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_;
- my $sth=$dbh->prepare("select subfieldid from marc_subfield_table
+ my ( $dbh, $bibid, $tag, $tagorder, $subfield, $subfieldorder ) = @_;
+ my $sth = $dbh->prepare( "select subfieldid from marc_subfield_table
where bibid=? and tag=? and tagorder=?
- and subfieldcode=? and subfieldorder=?");
- $sth->execute($bibid,$tag,$tagorder,$subfield,$subfieldorder);
- my ($res) = $sth->fetchrow;
- unless ($res) {
- $sth=$dbh->prepare("select subfieldid from marc_subfield_table
+ and subfieldcode=? and subfieldorder=?"
+ );
+ $sth->execute( $bibid, $tag, $tagorder, $subfield, $subfieldorder );
+ my ($res) = $sth->fetchrow;
+ unless ($res) {
+ $sth = $dbh->prepare( "select subfieldid from marc_subfield_table
where bibid=? and tag=? and tagorder=?
- and subfieldcode=?");
- $sth->execute($bibid,$tag,$tagorder,$subfield);
- ($res) = $sth->fetchrow;
- }
+ and subfieldcode=?"
+ );
+ $sth->execute( $bibid, $tag, $tagorder, $subfield );
+ ($res) = $sth->fetchrow;
+ }
return $res;
}
sub MARCfind_frameworkcode {
- my ($dbh,$bibid) = @_;
- my $sth = $dbh->prepare("select frameworkcode from marc_biblio where bibid=?");
- $sth->execute($bibid);
- my ($frameworkcode) = $sth->fetchrow;
- return $frameworkcode;
+ my ( $dbh, $bibid ) = @_;
+ my $sth =
+ $dbh->prepare("select frameworkcode from marc_biblio where bibid=?");
+ $sth->execute($bibid);
+ my ($frameworkcode) = $sth->fetchrow;
+ return $frameworkcode;
}
+
sub MARCdelsubfield {
-# delete a subfield for $bibid / tag / tagorder / subfield / subfieldorder
- my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_;
- $dbh->do("delete from marc_subfield_table where bibid='$bibid' and
+
+ # delete a subfield for $bibid / tag / tagorder / subfield / subfieldorder
+ my ( $dbh, $bibid, $tag, $tagorder, $subfield, $subfieldorder ) = @_;
+ $dbh->do( "delete from marc_subfield_table where bibid='$bibid' and
tag='$tag' and tagorder='$tagorder'
and subfieldcode='$subfield' and subfieldorder='$subfieldorder'
- ");
+ "
+ );
}
sub MARCkoha2marcBiblio {
-# this function builds partial MARC::Record from the old koha-DB fields
- my ($dbh,$biblionumber,$biblioitemnumber) = @_;
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
+
+ # this function builds partial MARC::Record from the old koha-DB fields
+ my ( $dbh, $biblionumber, $biblioitemnumber ) = @_;
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
my $record = MARC::Record->new();
-#--- if bibid, then retrieve old-style koha data
- if ($biblionumber>0) {
- my $sth2=$dbh->prepare("select biblionumber,author,title,unititle,notes,abstract,serial,seriestitle,copyrightdate,timestamp
- from biblio where biblionumber=?");
- $sth2->execute($biblionumber);
- my $row=$sth2->fetchrow_hashref;
- my $code;
- foreach $code (keys %$row) {
- if ($row->{$code}) {
- &MARCkoha2marcOnefield($sth,$record,"biblio.".$code,$row->{$code});
- }
- }
+
+ #--- if bibid, then retrieve old-style koha data
+ if ( $biblionumber > 0 ) {
+ my $sth2 =
+ $dbh->prepare(
+"select biblionumber,author,title,unititle,notes,abstract,serial,seriestitle,copyrightdate,timestamp
+ from biblio where biblionumber=?"
+ );
+ $sth2->execute($biblionumber);
+ my $row = $sth2->fetchrow_hashref;
+ my $code;
+ foreach $code ( keys %$row ) {
+ if ( $row->{$code} ) {
+ &MARCkoha2marcOnefield( $sth, $record, "biblio." . $code,
+ $row->{$code} );
+ }
+ }
}
-#--- if biblioitem, then retrieve old-style koha data
- if ($biblioitemnumber>0) {
- my $sth2=$dbh->prepare(" SELECT biblioitemnumber,biblionumber,volume,number,classification,
+
+ #--- if biblioitem, then retrieve old-style koha data
+ if ( $biblioitemnumber > 0 ) {
+ my $sth2 =
+ $dbh->prepare(
+ " SELECT biblioitemnumber,biblionumber,volume,number,classification,
itemtype,url,isbn,issn,dewey,subclass,publicationyear,publishercode,
volumedate,volumeddesc,timestamp,illus,pages,notes AS bnotes,size,place
FROM biblioitems
WHERE biblioitemnumber=?
- ");
- $sth2->execute($biblioitemnumber);
- my $row=$sth2->fetchrow_hashref;
- my $code;
- foreach $code (keys %$row) {
- if ($row->{$code}) {
- &MARCkoha2marcOnefield($sth,$record,"biblioitems.".$code,$row->{$code});
- }
- }
+ "
+ );
+ $sth2->execute($biblioitemnumber);
+ my $row = $sth2->fetchrow_hashref;
+ my $code;
+ foreach $code ( keys %$row ) {
+ if ( $row->{$code} ) {
+ &MARCkoha2marcOnefield( $sth, $record, "biblioitems." . $code,
+ $row->{$code} );
+ }
+ }
+ }
+
+ # other fields => additional authors, subjects, subtitles
+ my $sth2 =
+ $dbh->prepare(
+ " SELECT author FROM additionalauthors WHERE biblionumber=?");
+ $sth2->execute($biblionumber);
+ while ( my $row = $sth2->fetchrow_hashref ) {
+ &MARCkoha2marcOnefield( $sth, $record, "additionalauthors.author",
+ $row->{'author'} );
+ }
+ my $sth2 =
+ $dbh->prepare(" SELECT subject FROM bibliosubject WHERE biblionumber=?");
+ $sth2->execute($biblionumber);
+ while ( my $row = $sth2->fetchrow_hashref ) {
+ &MARCkoha2marcOnefield( $sth, $record, "bibliosubject.subject",
+ $row->{'subject'} );
+ }
+ my $sth2 =
+ $dbh->prepare(
+ " SELECT subtitle FROM bibliosubtitle WHERE biblionumber=?");
+ $sth2->execute($biblionumber);
+ while ( my $row = $sth2->fetchrow_hashref ) {
+ &MARCkoha2marcOnefield( $sth, $record, "bibliosubtitle.title",
+ $row->{'subtitle'} );
}
- # other fields => additional authors, subjects, subtitles
- my $sth2=$dbh->prepare(" SELECT author FROM additionalauthors WHERE biblionumber=?");
- $sth2->execute($biblionumber);
- while (my $row=$sth2->fetchrow_hashref) {
- &MARCkoha2marcOnefield($sth,$record,"additionalauthors.author",$row->{'author'});
- }
- my $sth2=$dbh->prepare(" SELECT subject FROM bibliosubject WHERE biblionumber=?");
- $sth2->execute($biblionumber);
- while (my $row=$sth2->fetchrow_hashref) {
- &MARCkoha2marcOnefield($sth,$record,"bibliosubject.subject",$row->{'subject'});
- }
- my $sth2=$dbh->prepare(" SELECT subtitle FROM bibliosubtitle WHERE biblionumber=?");
- $sth2->execute($biblionumber);
- while (my $row=$sth2->fetchrow_hashref) {
- &MARCkoha2marcOnefield($sth,$record,"bibliosubtitle.title",$row->{'subtitle'});
- }
return $record;
}
sub MARCkoha2marcItem {
-# this function builds partial MARC::Record from the old koha-DB fields
- my ($dbh,$biblionumber,$itemnumber) = @_;
-# my $dbh=&C4Connect;
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
+
+ # this function builds partial MARC::Record from the old koha-DB fields
+ my ( $dbh, $biblionumber, $itemnumber ) = @_;
+
+ # my $dbh=&C4Connect;
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
my $record = MARC::Record->new();
-#--- if item, then retrieve old-style koha data
- if ($itemnumber>0) {
-# print STDERR "prepare $biblionumber,$itemnumber\n";
- my $sth2=$dbh->prepare("SELECT itemnumber,biblionumber,multivolumepart,biblioitemnumber,barcode,dateaccessioned,
+
+ #--- if item, then retrieve old-style koha data
+ if ( $itemnumber > 0 ) {
+
+ # print STDERR "prepare $biblionumber,$itemnumber\n";
+ my $sth2 =
+ $dbh->prepare(
+"SELECT itemnumber,biblionumber,multivolumepart,biblioitemnumber,barcode,dateaccessioned,
booksellerid,homebranch,price,replacementprice,replacementpricedate,datelastborrowed,
datelastseen,multivolume,stack,notforloan,itemlost,wthdrawn,itemcallnumber,issues,renewals,
reserves,restricted,binding,itemnotes,holdingbranch,timestamp
FROM items
- WHERE itemnumber=?");
- $sth2->execute($itemnumber);
- my $row=$sth2->fetchrow_hashref;
- my $code;
- foreach $code (keys %$row) {
- if ($row->{$code}) {
- &MARCkoha2marcOnefield($sth,$record,"items.".$code,$row->{$code});
- }
- }
+ WHERE itemnumber=?"
+ );
+ $sth2->execute($itemnumber);
+ my $row = $sth2->fetchrow_hashref;
+ my $code;
+ foreach $code ( keys %$row ) {
+ if ( $row->{$code} ) {
+ &MARCkoha2marcOnefield( $sth, $record, "items." . $code,
+ $row->{$code} );
+ }
+ }
}
return $record;
}
sub MARCkoha2marcSubtitle {
-# this function builds partial MARC::Record from the old koha-DB fields
- my ($dbh,$bibnum,$subtitle) = @_;
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
+
+ # this function builds partial MARC::Record from the old koha-DB fields
+ my ( $dbh, $bibnum, $subtitle ) = @_;
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
my $record = MARC::Record->new();
- &MARCkoha2marcOnefield($sth,$record,"bibliosubtitle.subtitle",$subtitle);
+ &MARCkoha2marcOnefield( $sth, $record, "bibliosubtitle.subtitle",
+ $subtitle );
return $record;
}
sub MARCkoha2marcOnefield {
- my ($sth,$record,$kohafieldname,$value)=@_;
+ my ( $sth, $record, $kohafieldname, $value ) = @_;
my $tagfield;
my $tagsubfield;
$sth->execute($kohafieldname);
- if (($tagfield,$tagsubfield)=$sth->fetchrow) {
- if ($record->field($tagfield)) {
- my $tag =$record->field($tagfield);
- if ($tag) {
- $tag->add_subfields($tagsubfield,$value);
- $record->delete_field($tag);
- $record->add_fields($tag);
- }
- } else {
- $record->add_fields($tagfield," "," ",$tagsubfield => $value);
- }
+ if ( ( $tagfield, $tagsubfield ) = $sth->fetchrow ) {
+ if ( $record->field($tagfield) ) {
+ my $tag = $record->field($tagfield);
+ if ($tag) {
+ $tag->add_subfields( $tagsubfield, $value );
+ $record->delete_field($tag);
+ $record->add_fields($tag);
+ }
+ }
+ else {
+ $record->add_fields( $tagfield, " ", " ", $tagsubfield => $value );
+ }
}
return $record;
}
sub MARChtml2marc {
- my ($dbh,$rtags,$rsubfields,$rvalues,%indicators) = @_;
- my $prevtag = -1;
- my $record = MARC::Record->new();
-# my %subfieldlist=();
- my $prevvalue; # if tag <10
- my $field; # if tag >=10
- for (my $i=0; $i< @$rtags; $i++) {
- # rebuild MARC::Record
- if (@$rtags[$i] ne $prevtag) {
- if ($prevtag < 10) {
- if ($prevvalue) {
- $record->add_fields((sprintf "%03s",$prevtag),$prevvalue);
- }
- } else {
- if ($field) {
- $record->add_fields($field);
- }
- }
- $indicators{@$rtags[$i]}.=' ';
- if (@$rtags[$i] <10) {
- $prevvalue= @$rvalues[$i];
- } else {
- $field = MARC::Field->new( (sprintf "%03s",@$rtags[$i]), substr($indicators{@$rtags[$i]},0,1),substr($indicators{@$rtags[$i]},1,1), @$rsubfields[$i] => @$rvalues[$i]);
- }
- $prevtag = @$rtags[$i];
- } else {
- if (@$rtags[$i] <10) {
- $prevvalue=@$rvalues[$i];
- } else {
- if (@$rvalues[$i]) {
- $field->add_subfields(@$rsubfields[$i] => @$rvalues[$i]);
- }
- }
- $prevtag= @$rtags[$i];
- }
- }
- # the last has not been included inside the loop... do it now !
- $record->add_fields($field);
-# warn $record->as_formatted;
- return $record;
+ my ( $dbh, $rtags, $rsubfields, $rvalues, %indicators ) = @_;
+ my $prevtag = -1;
+ my $record = MARC::Record->new();
+
+ # my %subfieldlist=();
+ my $prevvalue; # if tag <10
+ my $field; # if tag >=10
+ for ( my $i = 0 ; $i < @$rtags ; $i++ ) {
+
+ # rebuild MARC::Record
+ if ( @$rtags[$i] ne $prevtag ) {
+ if ( $prevtag < 10 ) {
+ if ($prevvalue) {
+ $record->add_fields( ( sprintf "%03s", $prevtag ),
+ $prevvalue );
+ }
+ }
+ else {
+ if ($field) {
+ $record->add_fields($field);
+ }
+ }
+ $indicators{ @$rtags[$i] } .= ' ';
+ if ( @$rtags[$i] < 10 ) {
+ $prevvalue = @$rvalues[$i];
+ }
+ else {
+ $field = MARC::Field->new(
+ ( sprintf "%03s", @$rtags[$i] ),
+ substr( $indicators{ @$rtags[$i] }, 0, 1 ),
+ substr( $indicators{ @$rtags[$i] }, 1, 1 ),
+ @$rsubfields[$i] => @$rvalues[$i]
+ );
+ }
+ $prevtag = @$rtags[$i];
+ }
+ else {
+ if ( @$rtags[$i] < 10 ) {
+ $prevvalue = @$rvalues[$i];
+ }
+ else {
+ if ( @$rvalues[$i] ) {
+ $field->add_subfields( @$rsubfields[$i] => @$rvalues[$i] );
+ }
+ }
+ $prevtag = @$rtags[$i];
+ }
+ }
+
+ # the last has not been included inside the loop... do it now !
+ $record->add_fields($field);
+
+ # warn $record->as_formatted;
+ return $record;
}
sub MARCmarc2koha {
- my ($dbh,$record) = @_;
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
- my $result;
- my $sth2=$dbh->prepare("SHOW COLUMNS from biblio");
- $sth2->execute;
- my $field;
- # print STDERR $record->as_formatted;
- while (($field)=$sth2->fetchrow) {
- $result=&MARCmarc2kohaOneField($sth,"biblio",$field,$record,$result);
- }
- $sth2=$dbh->prepare("SHOW COLUMNS from biblioitems");
- $sth2->execute;
- while (($field)=$sth2->fetchrow) {
- if ($field eq 'notes') { $field = 'bnotes'; }
- $result=&MARCmarc2kohaOneField($sth,"biblioitems",$field,$record,$result);
- }
- $sth2=$dbh->prepare("SHOW COLUMNS from items");
- $sth2->execute;
- while (($field)=$sth2->fetchrow) {
- $result = &MARCmarc2kohaOneField($sth,"items",$field,$record,$result);
- }
- # additional authors : specific
- $result = &MARCmarc2kohaOneField($sth,"bibliosubtitle","subtitle",$record,$result);
- $result = &MARCmarc2kohaOneField($sth,"additionalauthors","additionalauthors",$record,$result);
-# modify copyrightdate to keep only the 1st year found
- my $temp = $result->{'copyrightdate'};
- $temp =~ m/c(\d\d\d\d)/; # search cYYYY first
- if ($1>0) {
- $result->{'copyrightdate'} = $1;
- } else { # if no cYYYY, get the 1st date.
- $temp =~ m/(\d\d\d\d)/;
- $result->{'copyrightdate'} = $1;
- }
-# modify publicationyear to keep only the 1st year found
- my $temp = $result->{'publicationyear'};
- $temp =~ m/c(\d\d\d\d)/; # search cYYYY first
- if ($1>0) {
- $result->{'publicationyear'} = $1;
- } else { # if no cYYYY, get the 1st date.
- $temp =~ m/(\d\d\d\d)/;
- $result->{'publicationyear'} = $1;
- }
- return $result;
+ my ( $dbh, $record ) = @_;
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
+ my $result;
+ my $sth2 = $dbh->prepare("SHOW COLUMNS from biblio");
+ $sth2->execute;
+ my $field;
+
+ # print STDERR $record->as_formatted;
+ while ( ($field) = $sth2->fetchrow ) {
+ $result =
+ &MARCmarc2kohaOneField( $sth, "biblio", $field, $record, $result );
+ }
+ $sth2 = $dbh->prepare("SHOW COLUMNS from biblioitems");
+ $sth2->execute;
+ while ( ($field) = $sth2->fetchrow ) {
+ if ( $field eq 'notes' ) { $field = 'bnotes'; }
+ $result =
+ &MARCmarc2kohaOneField( $sth, "biblioitems", $field, $record,
+ $result );
+ }
+ $sth2 = $dbh->prepare("SHOW COLUMNS from items");
+ $sth2->execute;
+ while ( ($field) = $sth2->fetchrow ) {
+ $result =
+ &MARCmarc2kohaOneField( $sth, "items", $field, $record, $result );
+ }
+
+ # additional authors : specific
+ $result =
+ &MARCmarc2kohaOneField( $sth, "bibliosubtitle", "subtitle", $record,
+ $result );
+ $result =
+ &MARCmarc2kohaOneField( $sth, "additionalauthors", "additionalauthors",
+ $record, $result );
+
+ # modify copyrightdate to keep only the 1st year found
+ my $temp = $result->{'copyrightdate'};
+ $temp =~ m/c(\d\d\d\d)/; # search cYYYY first
+ if ( $1 > 0 ) {
+ $result->{'copyrightdate'} = $1;
+ }
+ else { # if no cYYYY, get the 1st date.
+ $temp =~ m/(\d\d\d\d)/;
+ $result->{'copyrightdate'} = $1;
+ }
+
+ # modify publicationyear to keep only the 1st year found
+ my $temp = $result->{'publicationyear'};
+ $temp =~ m/c(\d\d\d\d)/; # search cYYYY first
+ if ( $1 > 0 ) {
+ $result->{'publicationyear'} = $1;
+ }
+ else { # if no cYYYY, get the 1st date.
+ $temp =~ m/(\d\d\d\d)/;
+ $result->{'publicationyear'} = $1;
+ }
+ return $result;
}
sub MARCmarc2kohaOneField {
+
# FIXME ? if a field has a repeatable subfield that is used in old-db, only the 1st will be retrieved...
- my ($sth,$kohatable,$kohafield,$record,$result)= @_;
-# warn "kohatable / $kohafield / $result / ";
- my $res="";
- my $tagfield;
- my $subfield;
- $sth->execute($kohatable.".".$kohafield);
- ($tagfield,$subfield) = $sth->fetchrow;
- foreach my $field ($record->field($tagfield)) {
- if ($field->subfield($subfield)) {
- if ($result->{$kohafield}) {
- $result->{$kohafield} .= " | ".$field->subfield($subfield);
- } else {
- $result->{$kohafield}=$field->subfield($subfield);
- }
- }
- }
- return $result;
+ my ( $sth, $kohatable, $kohafield, $record, $result ) = @_;
+
+ # warn "kohatable / $kohafield / $result / ";
+ my $res = "";
+ my $tagfield;
+ my $subfield;
+ $sth->execute( $kohatable . "." . $kohafield );
+ ( $tagfield, $subfield ) = $sth->fetchrow;
+ foreach my $field ( $record->field($tagfield) ) {
+ if ( $field->subfield($subfield) ) {
+ if ( $result->{$kohafield} ) {
+ $result->{$kohafield} .= " | " . $field->subfield($subfield);
+ }
+ else {
+ $result->{$kohafield} = $field->subfield($subfield);
+ }
+ }
+ }
+ return $result;
}
sub MARCaddword {
-# split a subfield string and adds it into the word table.
-# removes stopwords
- my ($dbh,$bibid,$tag,$tagorder,$subfieldid,$subfieldorder,$sentence) =@_;
+
+ # split a subfield string and adds it into the word table.
+ # removes stopwords
+ my (
+ $dbh, $bibid, $tag, $tagorder,
+ $subfieldid, $subfieldorder, $sentence
+ )
+ = @_;
$sentence =~ s/(\.|\?|\:|\!|\'|,|\-|\"|\(|\)|\[|\]|\{|\})/ /g;
- my @words = split / /,$sentence;
- my $stopwords= C4::Context->stopwords;
- my $sth=$dbh->prepare("insert into marc_word (bibid, tagsubfield, tagorder, subfieldorder, word, sndx_word)
- values (?,concat(?,?),?,?,?,soundex(?))");
+ my @words = split / /, $sentence;
+ my $stopwords = C4::Context->stopwords;
+ my $sth =
+ $dbh->prepare(
+"insert into marc_word (bibid, tagsubfield, tagorder, subfieldorder, word, sndx_word)
+ values (?,concat(?,?),?,?,?,soundex(?))"
+ );
foreach my $word (@words) {
-# we record only words one char long and not in stopwords hash
- if (length($word)>=1 and !($stopwords->{uc($word)})) {
- $sth->execute($bibid,$tag,$tagorder,$subfieldid,$subfieldorder,$word,$word);
- if ($sth->err()) {
- warn "ERROR ==> insert into marc_word (bibid, tagsubfield, tagorder, subfieldorder, word, sndx_word) values ($bibid,concat($tag,$subfieldid),$tagorder,$subfieldorder,$word,soundex($word))\n";
- }
- }
+
+ # we record only words one char long and not in stopwords hash
+ if ( length($word) >= 1 and !( $stopwords->{ uc($word) } ) ) {
+ $sth->execute(
+ $bibid, $tag, $tagorder, $subfieldid,
+ $subfieldorder, $word, $word
+ );
+ if ( $sth->err() ) {
+ warn
+"ERROR ==> insert into marc_word (bibid, tagsubfield, tagorder, subfieldorder, word, sndx_word) values ($bibid,concat($tag,$subfieldid),$tagorder,$subfieldorder,$word,soundex($word))\n";
+ }
+ }
}
}
sub MARCdelword {
+
# delete words. this sub deletes all the words from a sentence. a subfield modif is done by a delete then a add
- my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_;
- my $sth=$dbh->prepare("delete from marc_word where bibid=? and tagsubfield=concat(?,?) and tagorder=? and subfieldorder=?");
- $sth->execute($bibid,$tag,$subfield,$tagorder,$subfieldorder);
+ my ( $dbh, $bibid, $tag, $tagorder, $subfield, $subfieldorder ) = @_;
+ my $sth =
+ $dbh->prepare(
+"delete from marc_word where bibid=? and tagsubfield=concat(?,?) and tagorder=? and subfieldorder=?"
+ );
+ $sth->execute( $bibid, $tag, $subfield, $tagorder, $subfieldorder );
}
#
@@ -976,7 +1264,6 @@ sub MARCdelword {
# it's used with marcimport, and marc management tools
#
-
=item ($bibid,$oldbibnum,$oldbibitemnum) = NEWnewbibilio($dbh,$MARCRecord,$oldbiblio,$oldbiblioitem);
creates a new biblio from a MARC::Record. The 3rd and 4th parameter are hashes and may be ignored. If only 2 params are passed to the sub, the old-db hashes
@@ -989,146 +1276,177 @@ adds an item in the db.
=cut
sub NEWnewbiblio {
- my ($dbh, $record, $frameworkcode) = @_;
- my $oldbibnum;
- my $oldbibitemnum;
- my $olddata = MARCmarc2koha($dbh,$record);
- $oldbibnum = OLDnewbiblio($dbh,$olddata);
- $olddata->{'biblionumber'} = $oldbibnum;
- $oldbibitemnum = OLDnewbiblioitem($dbh,$olddata);
- # search subtiles, addiauthors and subjects
- my ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"additionalauthors.author");
- my @addiauthfields = $record->field($tagfield);
- foreach my $addiauthfield (@addiauthfields) {
- my @addiauthsubfields = $addiauthfield->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#addiauthsubfields) {
- OLDmodaddauthor($dbh,$oldbibnum,$addiauthsubfields[$subfieldcount]);
- }
- }
- ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubtitle.title");
- my @subtitlefields = $record->field($tagfield);
- foreach my $subtitlefield (@subtitlefields) {
- my @subtitlesubfields = $subtitlefield->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#subtitlesubfields) {
- OLDnewsubtitle($dbh,$oldbibnum,$subtitlesubfields[$subfieldcount]);
- }
- }
- ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubject.subject");
- my @subj = $record->field($tagfield);
- my @subjects;
- foreach my $subject (@subj) {
- my @subjsubfield = $subject->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#subjsubfield) {
- push @subjects,$subjsubfield[$subfieldcount];
- }
- }
- OLDmodsubject($dbh,$oldbibnum,1,@subjects);
- # we must add bibnum and bibitemnum in MARC::Record...
- # we build the new field with biblionumber and biblioitemnumber
- # we drop the original field
- # we add the new builded field.
- # NOTE : Works only if the field is ONLY for biblionumber and biblioitemnumber
- # (steve and paul : thinks 090 is a good choice)
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
- $sth->execute("biblio.biblionumber");
- (my $tagfield1, my $tagsubfield1) = $sth->fetchrow;
- $sth->execute("biblioitems.biblioitemnumber");
- (my $tagfield2, my $tagsubfield2) = $sth->fetchrow;
- if ($tagfield1 != $tagfield2) {
- warn "Error in NEWnewbiblio : biblio.biblionumber and biblioitems.biblioitemnumber MUST have the same field number";
- print "Content-Type: text/html\n\nError in NEWnewbiblio : biblio.biblionumber and biblioitems.biblioitemnumber MUST have the same field number";
- die;
- }
- my $newfield = MARC::Field->new( $tagfield1,'','',
- "$tagsubfield1" => $oldbibnum,
- "$tagsubfield2" => $oldbibitemnum);
- # drop old field and create new one...
- my $old_field = $record->field($tagfield1);
- $record->delete_field($old_field);
- $record->add_fields($newfield);
- my $bibid = MARCaddbiblio($dbh,$record,$oldbibnum,$frameworkcode);
- return ($bibid,$oldbibnum,$oldbibitemnum );
+ my ( $dbh, $record, $frameworkcode ) = @_;
+ my $oldbibnum;
+ my $oldbibitemnum;
+ my $olddata = MARCmarc2koha( $dbh, $record );
+ $oldbibnum = OLDnewbiblio( $dbh, $olddata );
+ $olddata->{'biblionumber'} = $oldbibnum;
+ $oldbibitemnum = OLDnewbiblioitem( $dbh, $olddata );
+
+ # search subtiles, addiauthors and subjects
+ my ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "additionalauthors.author" );
+ my @addiauthfields = $record->field($tagfield);
+ foreach my $addiauthfield (@addiauthfields) {
+ my @addiauthsubfields = $addiauthfield->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#addiauthsubfields ) {
+ OLDmodaddauthor( $dbh, $oldbibnum,
+ $addiauthsubfields[$subfieldcount] );
+ }
+ }
+ ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "bibliosubtitle.title" );
+ my @subtitlefields = $record->field($tagfield);
+ foreach my $subtitlefield (@subtitlefields) {
+ my @subtitlesubfields = $subtitlefield->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#subtitlesubfields ) {
+ OLDnewsubtitle( $dbh, $oldbibnum,
+ $subtitlesubfields[$subfieldcount] );
+ }
+ }
+ ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "bibliosubject.subject" );
+ my @subj = $record->field($tagfield);
+ my @subjects;
+ foreach my $subject (@subj) {
+ my @subjsubfield = $subject->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#subjsubfield ) {
+ push @subjects, $subjsubfield[$subfieldcount];
+ }
+ }
+ OLDmodsubject( $dbh, $oldbibnum, 1, @subjects );
+
+ # we must add bibnum and bibitemnum in MARC::Record...
+ # we build the new field with biblionumber and biblioitemnumber
+ # we drop the original field
+ # we add the new builded field.
+# NOTE : Works only if the field is ONLY for biblionumber and biblioitemnumber
+ # (steve and paul : thinks 090 is a good choice)
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
+ $sth->execute("biblio.biblionumber");
+ ( my $tagfield1, my $tagsubfield1 ) = $sth->fetchrow;
+ $sth->execute("biblioitems.biblioitemnumber");
+ ( my $tagfield2, my $tagsubfield2 ) = $sth->fetchrow;
+ if ( $tagfield1 != $tagfield2 ) {
+ warn
+"Error in NEWnewbiblio : biblio.biblionumber and biblioitems.biblioitemnumber MUST have the same field number";
+ print
+"Content-Type: text/html\n\nError in NEWnewbiblio : biblio.biblionumber and biblioitems.biblioitemnumber MUST have the same field number";
+ die;
+ }
+ my $newfield = MARC::Field->new(
+ $tagfield1, '', '', "$tagsubfield1" => $oldbibnum,
+ "$tagsubfield2" => $oldbibitemnum
+ );
+
+ # drop old field and create new one...
+ my $old_field = $record->field($tagfield1);
+ $record->delete_field($old_field);
+ $record->add_fields($newfield);
+ my $bibid = MARCaddbiblio( $dbh, $record, $oldbibnum, $frameworkcode );
+ return ( $bibid, $oldbibnum, $oldbibitemnum );
}
sub NEWmodbiblio {
- my ($dbh,$record,$bibid,$frameworkcode) =@_;
- $frameworkcode="" unless $frameworkcode;
- &MARCmodbiblio($dbh,$bibid,$record,0);
- my $oldbiblio = MARCmarc2koha($dbh,$record);
- my $oldbiblionumber = OLDmodbiblio($dbh,$oldbiblio);
- OLDmodbibitem($dbh,$oldbiblio);
- # now, modify addi authors, subject, addititles.
- my ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"additionalauthors.author");
- my @addiauthfields = $record->field($tagfield);
- foreach my $addiauthfield (@addiauthfields) {
- my @addiauthsubfields = $addiauthfield->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#addiauthsubfields) {
- OLDmodaddauthor($dbh,$oldbiblionumber,$addiauthsubfields[$subfieldcount]);
- }
- }
- ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubtitle.subtitle");
- my @subtitlefields = $record->field($tagfield);
- foreach my $subtitlefield (@subtitlefields) {
- my @subtitlesubfields = $subtitlefield->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#subtitlesubfields) {
- OLDmodsubtitle($dbh,$oldbiblionumber,$subtitlesubfields[$subfieldcount]);
- }
- }
- ($tagfield,$tagsubfield) = MARCfind_marc_from_kohafield($dbh,"bibliosubject.subject");
- my @subj = $record->field($tagfield);
- my @subjects;
- foreach my $subject (@subj) {
- my @subjsubfield = $subject->subfield($tagsubfield);
- foreach my $subfieldcount (0..$#subjsubfield) {
- push @subjects,$subjsubfield[$subfieldcount];
- }
- }
- OLDmodsubject($dbh,$oldbiblionumber,1,@subjects);
- return 1;
+ my ( $dbh, $record, $bibid, $frameworkcode ) = @_;
+ $frameworkcode = "" unless $frameworkcode;
+ &MARCmodbiblio( $dbh, $bibid, $record, 0 );
+ my $oldbiblio = MARCmarc2koha( $dbh, $record );
+ my $oldbiblionumber = OLDmodbiblio( $dbh, $oldbiblio );
+ OLDmodbibitem( $dbh, $oldbiblio );
+
+ # now, modify addi authors, subject, addititles.
+ my ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "additionalauthors.author" );
+ my @addiauthfields = $record->field($tagfield);
+ foreach my $addiauthfield (@addiauthfields) {
+ my @addiauthsubfields = $addiauthfield->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#addiauthsubfields ) {
+ OLDmodaddauthor( $dbh, $oldbiblionumber,
+ $addiauthsubfields[$subfieldcount] );
+ }
+ }
+ ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "bibliosubtitle.subtitle" );
+ my @subtitlefields = $record->field($tagfield);
+ foreach my $subtitlefield (@subtitlefields) {
+ my @subtitlesubfields = $subtitlefield->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#subtitlesubfields ) {
+ OLDmodsubtitle( $dbh, $oldbiblionumber,
+ $subtitlesubfields[$subfieldcount] );
+ }
+ }
+ ( $tagfield, $tagsubfield ) =
+ MARCfind_marc_from_kohafield( $dbh, "bibliosubject.subject" );
+ my @subj = $record->field($tagfield);
+ my @subjects;
+ foreach my $subject (@subj) {
+ my @subjsubfield = $subject->subfield($tagsubfield);
+ foreach my $subfieldcount ( 0 .. $#subjsubfield ) {
+ push @subjects, $subjsubfield[$subfieldcount];
+ }
+ }
+ OLDmodsubject( $dbh, $oldbiblionumber, 1, @subjects );
+ return 1;
}
sub NEWdelbiblio {
- my ($dbh,$bibid)=@_;
- my $biblio = &MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
- &OLDdelbiblio($dbh,$biblio);
- my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?");
- $sth->execute($biblio);
- while(my ($biblioitemnumber) = $sth->fetchrow) {
- OLDdeletebiblioitem($dbh,$biblioitemnumber);
- }
- &MARCdelbiblio($dbh,$bibid,0);
+ my ( $dbh, $bibid ) = @_;
+ my $biblio = &MARCfind_oldbiblionumber_from_MARCbibid( $dbh, $bibid );
+ &OLDdelbiblio( $dbh, $biblio );
+ my $sth =
+ $dbh->prepare(
+ "select biblioitemnumber from biblioitems where biblionumber=?");
+ $sth->execute($biblio);
+ while ( my ($biblioitemnumber) = $sth->fetchrow ) {
+ OLDdeletebiblioitem( $dbh, $biblioitemnumber );
+ }
+ &MARCdelbiblio( $dbh, $bibid, 0 );
}
-
sub NEWnewitem {
- my ($dbh, $record,$bibid) = @_;
- # add item in old-DB
- my $item = &MARCmarc2koha($dbh,$record);
- # needs old biblionumber and biblioitemnumber
- $item->{'biblionumber'} = MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
- my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?");
- $sth->execute($item->{'biblionumber'});
- ($item->{'biblioitemnumber'}) = $sth->fetchrow;
- my ($itemnumber,$error) = &OLDnewitems($dbh,$item,$item->{barcode});
- # add itemnumber to MARC::Record before adding the item.
- my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
- &MARCkoha2marcOnefield($sth,$record,"items.itemnumber",$itemnumber);
- # add the item
- my $bib = &MARCadditem($dbh,$record,$item->{'biblionumber'});
+ my ( $dbh, $record, $bibid ) = @_;
+
+ # add item in old-DB
+ my $item = &MARCmarc2koha( $dbh, $record );
+
+ # needs old biblionumber and biblioitemnumber
+ $item->{'biblionumber'} =
+ MARCfind_oldbiblionumber_from_MARCbibid( $dbh, $bibid );
+ my $sth =
+ $dbh->prepare(
+ "select biblioitemnumber from biblioitems where biblionumber=?");
+ $sth->execute( $item->{'biblionumber'} );
+ ( $item->{'biblioitemnumber'} ) = $sth->fetchrow;
+ my ( $itemnumber, $error ) = &OLDnewitems( $dbh, $item, $item->{barcode} );
+
+ # add itemnumber to MARC::Record before adding the item.
+ my $sth =
+ $dbh->prepare(
+"select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"
+ );
+ &MARCkoha2marcOnefield( $sth, $record, "items.itemnumber", $itemnumber );
+
+ # add the item
+ my $bib = &MARCadditem( $dbh, $record, $item->{'biblionumber'} );
}
sub NEWmoditem {
- my ($dbh,$record,$bibid,$itemnumber,$delete) = @_;
- &MARCmoditem($dbh,$record,$bibid,$itemnumber,$delete);
- my $olditem = MARCmarc2koha($dbh,$record);
- OLDmoditem($dbh,$olditem);
+ my ( $dbh, $record, $bibid, $itemnumber, $delete ) = @_;
+ &MARCmoditem( $dbh, $record, $bibid, $itemnumber, $delete );
+ my $olditem = MARCmarc2koha( $dbh, $record );
+ OLDmoditem( $dbh, $olditem );
}
sub NEWdelitem {
- my ($dbh,$bibid,$itemnumber)=@_;
- my $biblio = &MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
- &OLDdelitem($dbh,$itemnumber);
- &MARCdelitem($dbh,$bibid,$itemnumber);
+ my ( $dbh, $bibid, $itemnumber ) = @_;
+ my $biblio = &MARCfind_oldbiblionumber_from_MARCbibid( $dbh, $bibid );
+ &OLDdelitem( $dbh, $itemnumber );
+ &MARCdelitem( $dbh, $bibid, $itemnumber );
}
#
@@ -1202,131 +1520,179 @@ delete a biblio
=cut
sub OLDnewbiblio {
- my ($dbh,$biblio) = @_;
-# my $dbh = &C4Connect;
- my $sth = $dbh->prepare("Select max(biblionumber) from biblio");
- $sth->execute;
- my $data = $sth->fetchrow_arrayref;
- my $bibnum = $$data[0] + 1;
- my $series = 0;
+ my ( $dbh, $biblio ) = @_;
- if ($biblio->{'seriestitle'}) { $series = 1 };
- $sth->finish;
- $sth = $dbh->prepare("insert into biblio set biblionumber = ?, title = ?, author = ?, copyrightdate = ?, serial = ?, seriestitle = ?, notes = ?, abstract = ?");
- $sth->execute($bibnum,$biblio->{'title'},$biblio->{'author'},$biblio->{'copyrightdate'},$series,$biblio->{'seriestitle'},$biblio->{'notes'},$biblio->{'abstract'});
+ # my $dbh = &C4Connect;
+ my $sth = $dbh->prepare("Select max(biblionumber) from biblio");
+ $sth->execute;
+ my $data = $sth->fetchrow_arrayref;
+ my $bibnum = $$data[0] + 1;
+ my $series = 0;
- $sth->finish;
-# $dbh->disconnect;
- return($bibnum);
+ if ( $biblio->{'seriestitle'} ) { $series = 1 }
+ $sth->finish;
+ $sth =
+ $dbh->prepare(
+"insert into biblio set biblionumber = ?, title = ?, author = ?, copyrightdate = ?, serial = ?, seriestitle = ?, notes = ?, abstract = ?"
+ );
+ $sth->execute(
+ $bibnum, $biblio->{'title'},
+ $biblio->{'author'}, $biblio->{'copyrightdate'},
+ $series, $biblio->{'seriestitle'},
+ $biblio->{'notes'}, $biblio->{'abstract'}
+ );
+
+ $sth->finish;
+
+ # $dbh->disconnect;
+ return ($bibnum);
}
sub OLDmodbiblio {
- my ($dbh,$biblio) = @_;
- # my $dbh = C4Connect;
- my $query;
- my $sth;
+ my ( $dbh, $biblio ) = @_;
- $query = "";
- $sth = $dbh->prepare("Update biblio set title = ?, author = ?, abstract = ?, copyrightdate = ?, seriestitle = ?, serial = ?, unititle = ?, notes = ? where biblionumber = ?");
- $sth->execute($biblio->{'title'},$biblio->{'author'},$biblio->{'abstract'},$biblio->{'copyrightdate'}, $biblio->{'seriestitle'},$biblio->{'serial'},$biblio->{'unititle'},$biblio->{'notes'},$biblio->{'biblionumber'});
+ # my $dbh = C4Connect;
+ my $query;
+ my $sth;
- $sth->finish;
- return($biblio->{'biblionumber'});
-} # sub modbiblio
+ $query = "";
+ $sth =
+ $dbh->prepare(
+"Update biblio set title = ?, author = ?, abstract = ?, copyrightdate = ?, seriestitle = ?, serial = ?, unititle = ?, notes = ? where biblionumber = ?"
+ );
+ $sth->execute(
+ $biblio->{'title'}, $biblio->{'author'},
+ $biblio->{'abstract'}, $biblio->{'copyrightdate'},
+ $biblio->{'seriestitle'}, $biblio->{'serial'},
+ $biblio->{'unititle'}, $biblio->{'notes'},
+ $biblio->{'biblionumber'}
+ );
+
+ $sth->finish;
+ return ( $biblio->{'biblionumber'} );
+} # sub modbiblio
sub OLDmodsubtitle {
- my ($dbh,$bibnum, $subtitle) = @_;
- my $sth = $dbh->prepare("update bibliosubtitle set subtitle = ? where biblionumber = ?");
- $sth->execute($subtitle,$bibnum);
- $sth->finish;
-} # sub modsubtitle
-
+ my ( $dbh, $bibnum, $subtitle ) = @_;
+ my $sth =
+ $dbh->prepare(
+ "update bibliosubtitle set subtitle = ? where biblionumber = ?");
+ $sth->execute( $subtitle, $bibnum );
+ $sth->finish;
+} # sub modsubtitle
sub OLDmodaddauthor {
- my ($dbh,$bibnum, $author) = @_;
-# my $dbh = C4Connect;
- my $sth = $dbh->prepare("Delete from additionalauthors where biblionumber = ?");
+ my ( $dbh, $bibnum, @authors ) = @_;
+
+ # my $dbh = C4Connect;
+ my $sth =
+ $dbh->prepare("Delete from additionalauthors where biblionumber = ?");
$sth->execute($bibnum);
$sth->finish;
+ foreach my $author (@authors) {
+ if ( $author ne '' ) {
+ $sth =
+ $dbh->prepare(
+ "Insert into additionalauthors set author = ?, biblionumber = ?"
+ );
- if ($author ne '') {
- $sth = $dbh->prepare("Insert into additionalauthors set author = ?, biblionumber = ?");
-
- $sth->execute($author,$bibnum);
-
- $sth->finish;
- } # if
-} # sub modaddauthor
+ $sth->execute( $author, $bibnum );
+ $sth->finish;
+ } # if
+ }
+} # sub modaddauthor
sub OLDmodsubject {
- my ($dbh,$bibnum, $force, @subject) = @_;
- # my $dbh = C4Connect;
- my $count = @subject;
- my $error;
- for (my $i = 0; $i < $count; $i++) {
- $subject[$i] =~ s/^ //g;
- $subject[$i] =~ s/ $//g;
- my $sth = $dbh->prepare("select * from catalogueentry where entrytype = 's' and catalogueentry = ?");
- $sth->execute($subject[$i]);
+ my ( $dbh, $bibnum, $force, @subject ) = @_;
- if (my $data = $sth->fetchrow_hashref) {
- } else {
- if ($force eq $subject[$i] || $force == 1) {
- # subject not in aut, chosen to force anway
- # so insert into cataloguentry so its in auth file
- my $sth2 = $dbh->prepare("Insert into catalogueentry (entrytype,catalogueentry) values ('s',?)");
+ # my $dbh = C4Connect;
+ my $count = @subject;
+ my $error;
+ for ( my $i = 0 ; $i < $count ; $i++ ) {
+ $subject[$i] =~ s/^ //g;
+ $subject[$i] =~ s/ $//g;
+ my $sth =
+ $dbh->prepare(
+"select * from catalogueentry where entrytype = 's' and catalogueentry = ?"
+ );
+ $sth->execute( $subject[$i] );
- $sth2->execute($subject[$i]) if ($subject[$i]);
- $sth2->finish;
- } else {
- $error = "$subject[$i]\n does not exist in the subject authority file";
- my $sth2 = $dbh->prepare("Select * from catalogueentry where entrytype = 's' and (catalogueentry like ? or catalogueentry like ? or catalogueentry like ?)");
- $sth2->execute("$subject[$i] %","% $subject[$i] %","% $subject[$i]");
- while (my $data = $sth2->fetchrow_hashref) {
- $error .= "
$data->{'catalogueentry'}";
- } # while
- $sth2->finish;
- } # else
- } # else
- $sth->finish;
- } # else
- if ($error eq '') {
- my $sth = $dbh->prepare("Delete from bibliosubject where biblionumber = ?");
- $sth->execute($bibnum);
- $sth->finish;
- $sth = $dbh->prepare("Insert into bibliosubject (subject,biblionumber) values (?,?)");
- my $query;
- foreach $query (@subject) {
- $sth->execute($query,$bibnum) if ($query && $bibnum);
- } # foreach
- $sth->finish;
- } # if
+ if ( my $data = $sth->fetchrow_hashref ) {
+ }
+ else {
+ if ( $force eq $subject[$i] || $force == 1 ) {
- # $dbh->disconnect;
- return($error);
-} # sub modsubject
+ # subject not in aut, chosen to force anway
+ # so insert into cataloguentry so its in auth file
+ my $sth2 =
+ $dbh->prepare(
+"Insert into catalogueentry (entrytype,catalogueentry) values ('s',?)"
+ );
+
+ $sth2->execute( $subject[$i] ) if ( $subject[$i] );
+ $sth2->finish;
+ }
+ else {
+ $error =
+ "$subject[$i]\n does not exist in the subject authority file";
+ my $sth2 =
+ $dbh->prepare(
+"Select * from catalogueentry where entrytype = 's' and (catalogueentry like ? or catalogueentry like ? or catalogueentry like ?)"
+ );
+ $sth2->execute( "$subject[$i] %", "% $subject[$i] %",
+ "% $subject[$i]" );
+ while ( my $data = $sth2->fetchrow_hashref ) {
+ $error .= "
$data->{'catalogueentry'}";
+ } # while
+ $sth2->finish;
+ } # else
+ } # else
+ $sth->finish;
+ } # else
+ if ( $error eq '' ) {
+ my $sth =
+ $dbh->prepare("Delete from bibliosubject where biblionumber = ?");
+ $sth->execute($bibnum);
+ $sth->finish;
+ $sth =
+ $dbh->prepare(
+ "Insert into bibliosubject (subject,biblionumber) values (?,?)");
+ my $query;
+ foreach $query (@subject) {
+ $sth->execute( $query, $bibnum ) if ( $query && $bibnum );
+ } # foreach
+ $sth->finish;
+ } # if
+
+ # $dbh->disconnect;
+ return ($error);
+} # sub modsubject
sub OLDmodbibitem {
- my ($dbh,$biblioitem) = @_;
-# my $dbh = C4Connect;
+ my ( $dbh, $biblioitem ) = @_;
+
+ # my $dbh = C4Connect;
my $query;
- $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
- $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
- $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
- $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
- $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
- $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
- $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
- $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
- $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
- $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
- $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'});
- $biblioitem->{'bnotes'} = $dbh->quote($biblioitem->{'bnotes'});
- $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
- $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
+ $biblioitem->{'itemtype'} = $dbh->quote( $biblioitem->{'itemtype'} );
+ $biblioitem->{'url'} = $dbh->quote( $biblioitem->{'url'} );
+ $biblioitem->{'isbn'} = $dbh->quote( $biblioitem->{'isbn'} );
+ $biblioitem->{'publishercode'} =
+ $dbh->quote( $biblioitem->{'publishercode'} );
+ $biblioitem->{'publicationyear'} =
+ $dbh->quote( $biblioitem->{'publicationyear'} );
+ $biblioitem->{'classification'} =
+ $dbh->quote( $biblioitem->{'classification'} );
+ $biblioitem->{'dewey'} = $dbh->quote( $biblioitem->{'dewey'} );
+ $biblioitem->{'subclass'} = $dbh->quote( $biblioitem->{'subclass'} );
+ $biblioitem->{'illus'} = $dbh->quote( $biblioitem->{'illus'} );
+ $biblioitem->{'pages'} = $dbh->quote( $biblioitem->{'pages'} );
+ $biblioitem->{'volumeddesc'} = $dbh->quote( $biblioitem->{'volumeddesc'} );
+ $biblioitem->{'bnotes'} = $dbh->quote( $biblioitem->{'bnotes'} );
+ $biblioitem->{'size'} = $dbh->quote( $biblioitem->{'size'} );
+ $biblioitem->{'place'} = $dbh->quote( $biblioitem->{'place'} );
$query = "Update biblioitems set
itemtype = $biblioitem->{'itemtype'},
@@ -1345,38 +1711,42 @@ size = $biblioitem->{'size'},
place = $biblioitem->{'place'}
where biblioitemnumber = $biblioitem->{'biblioitemnumber'}";
-$dbh->do($query);
-if ($dbh->errstr) {
- warn "$query";
-}
-# $dbh->disconnect;
-} # sub modbibitem
+ $dbh->do($query);
+ if ( $dbh->errstr ) {
+ warn "$query";
+ }
+
+ # $dbh->disconnect;
+} # sub modbibitem
sub OLDmodnote {
- my ($dbh,$bibitemnum,$note)=@_;
-# my $dbh=C4Connect;
- my $query="update biblioitems set notes='$note' where
+ my ( $dbh, $bibitemnum, $note ) = @_;
+
+ # my $dbh=C4Connect;
+ my $query = "update biblioitems set notes='$note' where
biblioitemnumber='$bibitemnum'";
- my $sth=$dbh->prepare($query);
- $sth->execute;
- $sth->finish;
-# $dbh->disconnect;
+ my $sth = $dbh->prepare($query);
+ $sth->execute;
+ $sth->finish;
+
+ # $dbh->disconnect;
}
sub OLDnewbiblioitem {
- my ($dbh,$biblioitem) = @_;
- # my $dbh = C4Connect;
- my $sth = $dbh->prepare("Select max(biblioitemnumber) from biblioitems");
- my $data;
- my $bibitemnum;
+ my ( $dbh, $biblioitem ) = @_;
- $sth->execute;
- $data = $sth->fetchrow_arrayref;
- $bibitemnum = $$data[0] + 1;
+ # my $dbh = C4Connect;
+ my $sth = $dbh->prepare("Select max(biblioitemnumber) from biblioitems");
+ my $data;
+ my $bibitemnum;
- $sth->finish;
+ $sth->execute;
+ $data = $sth->fetchrow_arrayref;
+ $bibitemnum = $$data[0] + 1;
- $sth = $dbh->prepare("insert into biblioitems set
+ $sth->finish;
+
+ $sth = $dbh->prepare( "insert into biblioitems set
biblioitemnumber = ?, biblionumber = ?,
volume = ?, number = ?,
classification = ?, itemtype = ?,
@@ -1387,57 +1757,66 @@ sub OLDnewbiblioitem {
volumeddesc = ?, illus = ?,
pages = ?, notes = ?,
size = ?, lccn = ?,
- marc = ?, place = ?");
- $sth->execute($bibitemnum, $biblioitem->{'biblionumber'},
- $biblioitem->{'volume'}, $biblioitem->{'number'},
- $biblioitem->{'classification'}, $biblioitem->{'itemtype'},
- $biblioitem->{'url'}, $biblioitem->{'isbn'},
- $biblioitem->{'issn'}, $biblioitem->{'dewey'},
- $biblioitem->{'subclass'}, $biblioitem->{'publicationyear'},
- $biblioitem->{'publishercode'}, $biblioitem->{'volumedate'},
- $biblioitem->{'volumeddesc'}, $biblioitem->{'illus'},
- $biblioitem->{'pages'}, $biblioitem->{'bnotes'},
- $biblioitem->{'size'}, $biblioitem->{'lccn'},
- $biblioitem->{'marc'}, $biblioitem->{'place'});
- $sth->finish;
- # $dbh->disconnect;
- return($bibitemnum);
+ marc = ?, place = ?"
+ );
+ $sth->execute(
+ $bibitemnum, $biblioitem->{'biblionumber'},
+ $biblioitem->{'volume'}, $biblioitem->{'number'},
+ $biblioitem->{'classification'}, $biblioitem->{'itemtype'},
+ $biblioitem->{'url'}, $biblioitem->{'isbn'},
+ $biblioitem->{'issn'}, $biblioitem->{'dewey'},
+ $biblioitem->{'subclass'}, $biblioitem->{'publicationyear'},
+ $biblioitem->{'publishercode'}, $biblioitem->{'volumedate'},
+ $biblioitem->{'volumeddesc'}, $biblioitem->{'illus'},
+ $biblioitem->{'pages'}, $biblioitem->{'bnotes'},
+ $biblioitem->{'size'}, $biblioitem->{'lccn'},
+ $biblioitem->{'marc'}, $biblioitem->{'place'}
+ );
+ $sth->finish;
+
+ # $dbh->disconnect;
+ return ($bibitemnum);
}
sub OLDnewsubject {
- my ($dbh,$bibnum)=@_;
- my $sth=$dbh->prepare("insert into bibliosubject (biblionumber) values (?)");
- $sth->execute($bibnum);
- $sth->finish;
-}
-
-sub OLDnewsubtitle {
- my ($dbh,$bibnum, $subtitle) = @_;
- my $sth = $dbh->prepare("insert into bibliosubtitle set biblionumber = ?, subtitle = ?");
- $sth->execute($bibnum,$subtitle);
+ my ( $dbh, $bibnum ) = @_;
+ my $sth =
+ $dbh->prepare("insert into bibliosubject (biblionumber) values (?)");
+ $sth->execute($bibnum);
$sth->finish;
}
+sub OLDnewsubtitle {
+ my ( $dbh, $bibnum, $subtitle ) = @_;
+ my $sth =
+ $dbh->prepare(
+ "insert into bibliosubtitle set biblionumber = ?, subtitle = ?");
+ $sth->execute( $bibnum, $subtitle );
+ $sth->finish;
+}
sub OLDnewitems {
- my ($dbh,$item, $barcode) = @_;
- # my $dbh = C4Connect;
- my $sth = $dbh->prepare("Select max(itemnumber) from items");
- my $data;
- my $itemnumber;
- my $error = "";
+ my ( $dbh, $item, $barcode ) = @_;
+
+ # my $dbh = C4Connect;
+ my $sth = $dbh->prepare("Select max(itemnumber) from items");
+ my $data;
+ my $itemnumber;
+ my $error = "";
+
+ $sth->execute;
+ $data = $sth->fetchrow_hashref;
+ $itemnumber = $data->{'max(itemnumber)'} + 1;
+ $sth->finish;
- $sth->execute;
- $data = $sth->fetchrow_hashref;
- $itemnumber = $data->{'max(itemnumber)'} + 1;
- $sth->finish;
# FIXME the "notforloan" field seems to be named "loan" in some places. workaround bugfix.
- if ($item->{'loan'}) {
- $item->{'notforloan'} = $item->{'loan'};
- }
-# if dateaccessioned is provided, use it. Otherwise, set to NOW()
- if ($item->{'dateaccessioned'}) {
- $sth=$dbh->prepare("Insert into items set
+ if ( $item->{'loan'} ) {
+ $item->{'notforloan'} = $item->{'loan'};
+ }
+
+ # if dateaccessioned is provided, use it. Otherwise, set to NOW()
+ if ( $item->{'dateaccessioned'} ) {
+ $sth = $dbh->prepare( "Insert into items set
itemnumber = ?, biblionumber = ?,
biblioitemnumber = ?, barcode = ?,
booksellerid = ?, dateaccessioned = ?,
@@ -1445,15 +1824,20 @@ sub OLDnewitems {
price = ?, replacementprice = ?,
replacementpricedate = NOW(), itemnotes = ?,
itemcallnumber =?, notforloan = ?
- ");
- $sth->execute($itemnumber, $item->{'biblionumber'},
- $item->{'biblioitemnumber'},$barcode,
- $item->{'booksellerid'},$item->{'dateaccessioned'},
- $item->{'homebranch'},$item->{'holdingbranch'},
- $item->{'price'},$item->{'replacementprice'},
- $item->{'itemnotes'},$item->{'itemcallnumber'},$item->{'notforloan'});
- } else {
- $sth=$dbh->prepare("Insert into items set
+ "
+ );
+ $sth->execute(
+ $itemnumber, $item->{'biblionumber'},
+ $item->{'biblioitemnumber'}, $barcode,
+ $item->{'booksellerid'}, $item->{'dateaccessioned'},
+ $item->{'homebranch'}, $item->{'holdingbranch'},
+ $item->{'price'}, $item->{'replacementprice'},
+ $item->{'itemnotes'}, $item->{'itemcallnumber'},
+ $item->{'notforloan'}
+ );
+ }
+ else {
+ $sth = $dbh->prepare( "Insert into items set
itemnumber = ?, biblionumber = ?,
biblioitemnumber = ?, barcode = ?,
booksellerid = ?, dateaccessioned = NOW(),
@@ -1461,35 +1845,44 @@ sub OLDnewitems {
price = ?, replacementprice = ?,
replacementpricedate = NOW(), itemnotes = ?,
itemcallnumber = ? , notforloan = ?
- ");
- $sth->execute($itemnumber, $item->{'biblionumber'},
- $item->{'biblioitemnumber'},$barcode,
- $item->{'booksellerid'},
- $item->{'homebranch'},$item->{'holdingbranch'},
- $item->{'price'},$item->{'replacementprice'},
- $item->{'itemnotes'},$item->{'itemcallnumber'},$item->{'notforloan'});
- }
- if (defined $sth->errstr) {
- $error .= $sth->errstr;
- }
- $sth->finish;
- return($itemnumber,$error);
+ "
+ );
+ $sth->execute(
+ $itemnumber, $item->{'biblionumber'},
+ $item->{'biblioitemnumber'}, $barcode,
+ $item->{'booksellerid'}, $item->{'homebranch'},
+ $item->{'holdingbranch'}, $item->{'price'},
+ $item->{'replacementprice'}, $item->{'itemnotes'},
+ $item->{'itemcallnumber'}, $item->{'notforloan'}
+ );
+ }
+ if ( defined $sth->errstr ) {
+ $error .= $sth->errstr;
+ }
+ $sth->finish;
+ return ( $itemnumber, $error );
}
sub OLDmoditem {
- my ($dbh,$item) = @_;
+ my ( $dbh, $item ) = @_;
+
# my ($dbh,$loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
-# my $dbh=C4Connect;
-$item->{'itemnum'}=$item->{'itemnumber'} unless $item->{'itemnum'};
- my $query="update items set barcode=?,itemnotes=?,itemcallnumber=?,notforloan=? where itemnumber=?";
- my @bind = ($item->{'barcode'},$item->{'notes'},$item->{'itemcallnumber'},$item->{'notforloan'},$item->{'itemnum'});
- if ($item->{'barcode'} eq ''){
- $item->{'notforloan'}=0 unless $item->{'notforloan'};
- $query="update items set notforloan=? where itemnumber=?";
- @bind = ($item->{'notforloan'},$item->{'itemnum'});
- }
- if ($item->{'lost'} ne ''){
- $query="update items set biblioitemnumber=?,
+ # my $dbh=C4Connect;
+ $item->{'itemnum'} = $item->{'itemnumber'} unless $item->{'itemnum'};
+ my $query =
+"update items set barcode=?,itemnotes=?,itemcallnumber=?,notforloan=? where itemnumber=?";
+ my @bind = (
+ $item->{'barcode'}, $item->{'notes'},
+ $item->{'itemcallnumber'}, $item->{'notforloan'},
+ $item->{'itemnum'}
+ );
+ if ( $item->{'barcode'} eq '' ) {
+ $item->{'notforloan'} = 0 unless $item->{'notforloan'};
+ $query = "update items set notforloan=? where itemnumber=?";
+ @bind = ( $item->{'notforloan'}, $item->{'itemnum'} );
+ }
+ if ( $item->{'lost'} ne '' ) {
+ $query = "update items set biblioitemnumber=?,
barcode=?,
itemnotes=?,
homebranch=?,
@@ -1498,108 +1891,137 @@ $item->{'itemnum'}=$item->{'itemnumber'} unless $item->{'itemnum'};
itemcallnumber=?,
notforloan=?,
where itemnumber=?";
- @bind = ($item->{'bibitemnum'},$item->{'barcode'},$item->{'notes'},$item->{'homebranch'},$item->{'lost'},$item->{'wthdrawn'},$item->{'itemcallnumber'},$item->{'notforloan'},$item->{'itemnum'});
- }
- if ($item->{'replacement'} ne ''){
- $query=~ s/ where/,replacementprice='$item->{'replacement'}' where/;
- }
- my $sth=$dbh->prepare($query);
- $sth->execute(@bind);
- $sth->finish;
-# $dbh->disconnect;
+ @bind = (
+ $item->{'bibitemnum'}, $item->{'barcode'},
+ $item->{'notes'}, $item->{'homebranch'},
+ $item->{'lost'}, $item->{'wthdrawn'},
+ $item->{'itemcallnumber'}, $item->{'notforloan'},
+ $item->{'itemnum'}
+ );
+ }
+ if ( $item->{'replacement'} ne '' ) {
+ $query =~ s/ where/,replacementprice='$item->{'replacement'}' where/;
+ }
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@bind);
+ $sth->finish;
+
+ # $dbh->disconnect;
}
-sub OLDdelitem{
- my ($dbh,$itemnum)=@_;
- # my $dbh=C4Connect;
- my $sth=$dbh->prepare("select * from items where itemnumber=?");
- $sth->execute($itemnum);
- my $data=$sth->fetchrow_hashref;
- $sth->finish;
- my $query="Insert into deleteditems set ";
- my @bind = ();
- foreach my $temp (keys %$data){
- $query .= "$temp = ?,";
- push(@bind,$data->{$temp});
- }
- $query =~ s/\,$//;
-# print $query;
- $sth=$dbh->prepare($query);
- $sth->execute(@bind);
- $sth->finish;
- $sth=$dbh->prepare("Delete from items where itemnumber=?");
- $sth->execute($itemnum);
- $sth->finish;
-# $dbh->disconnect;
+sub OLDdelitem {
+ my ( $dbh, $itemnum ) = @_;
+
+ # my $dbh=C4Connect;
+ my $sth = $dbh->prepare("select * from items where itemnumber=?");
+ $sth->execute($itemnum);
+ my $data = $sth->fetchrow_hashref;
+ $sth->finish;
+ my $query = "Insert into deleteditems set ";
+ my @bind = ();
+ foreach my $temp ( keys %$data ) {
+ $query .= "$temp = ?,";
+ push ( @bind, $data->{$temp} );
+ }
+ $query =~ s/\,$//;
+
+ # print $query;
+ $sth = $dbh->prepare($query);
+ $sth->execute(@bind);
+ $sth->finish;
+ $sth = $dbh->prepare("Delete from items where itemnumber=?");
+ $sth->execute($itemnum);
+ $sth->finish;
+
+ # $dbh->disconnect;
}
sub OLDdeletebiblioitem {
- my ($dbh,$biblioitemnumber) = @_;
-# my $dbh = C4Connect;
- my $sth = $dbh->prepare("Select * from biblioitems
-where biblioitemnumber = ?");
+ my ( $dbh, $biblioitemnumber ) = @_;
+
+ # my $dbh = C4Connect;
+ my $sth = $dbh->prepare( "Select * from biblioitems
+where biblioitemnumber = ?"
+ );
my $results;
$sth->execute($biblioitemnumber);
- if ($results = $sth->fetchrow_hashref) {
- $sth->finish;
- $sth=$dbh->prepare("Insert into deletedbiblioitems (biblioitemnumber, biblionumber, volume, number, classification, itemtype,
+ if ( $results = $sth->fetchrow_hashref ) {
+ $sth->finish;
+ $sth =
+ $dbh->prepare(
+"Insert into deletedbiblioitems (biblioitemnumber, biblionumber, volume, number, classification, itemtype,
isbn, issn ,dewey ,subclass ,publicationyear ,publishercode ,volumedate ,volumeddesc ,timestamp ,illus ,
- pages ,notes ,size ,url ,lccn ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+ pages ,notes ,size ,url ,lccn ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
+ );
- $sth->execute($results->{biblioitemnumber}, $results->{biblionumber}, $results->{volume}, $results->{number}, $results->{classification}, $results->{itemtype},
- $results->{isbn}, $results->{issn} ,$results->{dewey} ,$results->{subclass} ,$results->{publicationyear} ,$results->{publishercode} ,$results->{volumedate} ,$results->{volumeddesc} ,$results->{timestamp} ,$results->{illus} ,
- $results->{pages} ,$results->{notes} ,$results->{size} ,$results->{url} ,$results->{lccn} );
- my $sth2 = $dbh->prepare("Delete from biblioitems where biblioitemnumber = ?");
+ $sth->execute(
+ $results->{biblioitemnumber}, $results->{biblionumber},
+ $results->{volume}, $results->{number},
+ $results->{classification}, $results->{itemtype},
+ $results->{isbn}, $results->{issn},
+ $results->{dewey}, $results->{subclass},
+ $results->{publicationyear}, $results->{publishercode},
+ $results->{volumedate}, $results->{volumeddesc},
+ $results->{timestamp}, $results->{illus},
+ $results->{pages}, $results->{notes},
+ $results->{size}, $results->{url},
+ $results->{lccn}
+ );
+ my $sth2 =
+ $dbh->prepare("Delete from biblioitems where biblioitemnumber = ?");
$sth2->execute($biblioitemnumber);
$sth2->finish();
- } # if
+ } # if
$sth->finish;
-# Now delete all the items attached to the biblioitem
- $sth = $dbh->prepare("Select * from items where biblioitemnumber = ?");
- $sth->execute($biblioitemnumber);
- my @results;
- while (my $data = $sth->fetchrow_hashref) {
- my $query="Insert into deleteditems set ";
- my @bind = ();
- foreach my $temp (keys %$data){
- $query .= "$temp = ?,";
- push(@bind,$data->{$temp});
- }
- $query =~ s/\,$//;
- my $sth2=$dbh->prepare($query);
- $sth2->execute(@bind);
- } # while
- $sth->finish;
- $sth = $dbh->prepare("Delete from items where biblioitemnumber = ?");
- $sth->execute($biblioitemnumber);
- $sth->finish();
-# $dbh->disconnect;
-} # sub deletebiblioitem
-sub OLDdelbiblio{
- my ($dbh,$biblio)=@_;
- my $sth=$dbh->prepare("select * from biblio where biblionumber=?");
- $sth->execute($biblio);
- if (my $data=$sth->fetchrow_hashref){
- $sth->finish;
- my $query="Insert into deletedbiblio set ";
- my @bind =();
- foreach my $temp (keys %$data){
- $query .= "$temp = ?,";
- push(@bind,$data->{$temp});
- }
- #replacing the last , by ",?)"
- $query=~ s/\,$//;
- $sth=$dbh->prepare($query);
- $sth->execute(@bind);
- $sth->finish;
- $sth=$dbh->prepare("Delete from biblio where biblionumber=?");
- $sth->execute($biblio);
- $sth->finish;
- }
- $sth->finish;
+ # Now delete all the items attached to the biblioitem
+ $sth = $dbh->prepare("Select * from items where biblioitemnumber = ?");
+ $sth->execute($biblioitemnumber);
+ my @results;
+ while ( my $data = $sth->fetchrow_hashref ) {
+ my $query = "Insert into deleteditems set ";
+ my @bind = ();
+ foreach my $temp ( keys %$data ) {
+ $query .= "$temp = ?,";
+ push ( @bind, $data->{$temp} );
+ }
+ $query =~ s/\,$//;
+ my $sth2 = $dbh->prepare($query);
+ $sth2->execute(@bind);
+ } # while
+ $sth->finish;
+ $sth = $dbh->prepare("Delete from items where biblioitemnumber = ?");
+ $sth->execute($biblioitemnumber);
+ $sth->finish();
+
+ # $dbh->disconnect;
+} # sub deletebiblioitem
+
+sub OLDdelbiblio {
+ my ( $dbh, $biblio ) = @_;
+ my $sth = $dbh->prepare("select * from biblio where biblionumber=?");
+ $sth->execute($biblio);
+ if ( my $data = $sth->fetchrow_hashref ) {
+ $sth->finish;
+ my $query = "Insert into deletedbiblio set ";
+ my @bind = ();
+ foreach my $temp ( keys %$data ) {
+ $query .= "$temp = ?,";
+ push ( @bind, $data->{$temp} );
+ }
+
+ #replacing the last , by ",?)"
+ $query =~ s/\,$//;
+ $sth = $dbh->prepare($query);
+ $sth->execute(@bind);
+ $sth->finish;
+ $sth = $dbh->prepare("Delete from biblio where biblionumber=?");
+ $sth->execute($biblio);
+ $sth->finish;
+ }
+ $sth->finish;
}
#
@@ -1608,15 +2030,16 @@ sub OLDdelbiblio{
#
#
-sub itemcount{
- my ($biblio)=@_;
- my $dbh = C4::Context->dbh;
-# print $query;
- my $sth=$dbh->prepare("Select count(*) from items where biblionumber=?");
- $sth->execute($biblio);
- my $data=$sth->fetchrow_hashref;
- $sth->finish;
- return($data->{'count(*)'});
+sub itemcount {
+ my ($biblio) = @_;
+ my $dbh = C4::Context->dbh;
+
+ # print $query;
+ my $sth = $dbh->prepare("Select count(*) from items where biblionumber=?");
+ $sth->execute($biblio);
+ my $data = $sth->fetchrow_hashref;
+ $sth->finish;
+ return ( $data->{'count(*)'} );
}
=item getorder
@@ -1631,22 +2054,25 @@ fields from the biblio, biblioitems, aqorders, and aqorderbreakdown
tables of the Koha database.
=cut
+
#'
# FIXME - This is effectively identical to &C4::Catalogue::getorder.
# Pick one and stick with it.
-sub getorder{
- my ($bi,$bib)=@_;
- my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare("Select ordernumber
+sub getorder {
+ my ( $bi, $bib ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( "Select ordernumber
from aqorders
- where biblionumber=? and biblioitemnumber=?");
- $sth->execute($bib,$bi);
- # FIXME - Use fetchrow_array(), since we're only interested in the one
- # value.
- my $ordnum=$sth->fetchrow_hashref;
- $sth->finish;
- my $order=getsingleorder($ordnum->{'ordernumber'});
- return ($order,$ordnum->{'ordernumber'});
+ where biblionumber=? and biblioitemnumber=?"
+ );
+ $sth->execute( $bib, $bi );
+
+ # FIXME - Use fetchrow_array(), since we're only interested in the one
+ # value.
+ my $ordnum = $sth->fetchrow_hashref;
+ $sth->finish;
+ my $order = getsingleorder( $ordnum->{'ordernumber'} );
+ return ( $order, $ordnum->{'ordernumber'} );
}
=item getsingleorder
@@ -1660,33 +2086,38 @@ C<$order> are fields from the biblio, biblioitems, aqorders, and
aqorderbreakdown tables of the Koha database.
=cut
+
#'
# FIXME - This is effectively identical to
# &C4::Catalogue::getsingleorder.
# Pick one and stick with it.
sub getsingleorder {
- my ($ordnum)=@_;
- my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare("Select * from biblio,biblioitems,aqorders left join aqorderbreakdown
+ my ($ordnum) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth =
+ $dbh->prepare(
+ "Select * from biblio,biblioitems,aqorders left join aqorderbreakdown
on aqorders.ordernumber=aqorderbreakdown.ordernumber
where aqorders.ordernumber=?
and biblio.biblionumber=aqorders.biblionumber
- and biblioitems.biblioitemnumber=aqorders.biblioitemnumber");
- $sth->execute($ordnum);
- my $data=$sth->fetchrow_hashref;
- $sth->finish;
- return($data);
+ and biblioitems.biblioitemnumber=aqorders.biblioitemnumber"
+ );
+ $sth->execute($ordnum);
+ my $data = $sth->fetchrow_hashref;
+ $sth->finish;
+ return ($data);
}
sub newbiblio {
- my ($biblio) = @_;
- my $dbh = C4::Context->dbh;
- my $bibnum=OLDnewbiblio($dbh,$biblio);
- # finds new (MARC bibid
-# my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$bibnum);
- my $record = &MARCkoha2marcBiblio($dbh,$bibnum);
- MARCaddbiblio($dbh,$record,$bibnum);
- return($bibnum);
+ my ($biblio) = @_;
+ my $dbh = C4::Context->dbh;
+ my $bibnum = OLDnewbiblio( $dbh, $biblio );
+
+ # finds new (MARC bibid
+ # my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$bibnum);
+ my $record = &MARCkoha2marcBiblio( $dbh, $bibnum );
+ MARCaddbiblio( $dbh, $record, $bibnum );
+ return ($bibnum);
}
=item modbiblio
@@ -1708,15 +2139,16 @@ successful or not.
=cut
sub modbiblio {
- my ($biblio) = @_;
- my $dbh = C4::Context->dbh;
- my $biblionumber=OLDmodbiblio($dbh,$biblio);
- my $record = MARCkoha2marcBiblio($dbh,$biblionumber,$biblionumber);
- # finds new (MARC bibid
- my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$biblionumber);
- MARCmodbiblio($dbh,$bibid,$record,0);
- return($biblionumber);
-} # sub modbiblio
+ my ($biblio) = @_;
+ my $dbh = C4::Context->dbh;
+ my $biblionumber = OLDmodbiblio( $dbh, $biblio );
+ my $record = MARCkoha2marcBiblio( $dbh, $biblionumber, $biblionumber );
+
+ # finds new (MARC bibid
+ my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber( $dbh, $biblionumber );
+ MARCmodbiblio( $dbh, $bibid, $record, 0 );
+ return ($biblionumber);
+} # sub modbiblio
=item modsubtitle
@@ -1731,10 +2163,10 @@ C<$subtitle> is the new subtitle.
=cut
sub modsubtitle {
- my ($bibnum, $subtitle) = @_;
- my $dbh = C4::Context->dbh;
- &OLDmodsubtitle($dbh,$bibnum,$subtitle);
-} # sub modsubtitle
+ my ( $bibnum, $subtitle ) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDmodsubtitle( $dbh, $bibnum, $subtitle );
+} # sub modsubtitle
=item modaddauthor
@@ -1747,10 +2179,10 @@ C<&modaddauthor> deletes all additional authors.
=cut
sub modaddauthor {
- my ($bibnum, $author) = @_;
- my $dbh = C4::Context->dbh;
- &OLDmodaddauthor($dbh,$bibnum,$author);
-} # sub modaddauthor
+ my ( $bibnum, @authors ) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDmodaddauthor( $dbh, $bibnum, @authors );
+} # sub modaddauthor
=item modsubject
@@ -1763,421 +2195,471 @@ $error - Error message, or undef if successful.
=cut
sub modsubject {
- my ($bibnum, $force, @subject) = @_;
- my $dbh = C4::Context->dbh;
- my $error= &OLDmodsubject($dbh,$bibnum,$force, @subject);
- return($error);
-} # sub modsubject
+ my ( $bibnum, $force, @subject ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $error = &OLDmodsubject( $dbh, $bibnum, $force, @subject );
+ return ($error);
+} # sub modsubject
sub modbibitem {
my ($biblioitem) = @_;
- my $dbh = C4::Context->dbh;
- &OLDmodbibitem($dbh,$biblioitem);
-} # sub modbibitem
+ my $dbh = C4::Context->dbh;
+ &OLDmodbibitem( $dbh, $biblioitem );
+} # sub modbibitem
sub modnote {
- my ($bibitemnum,$note)=@_;
- my $dbh = C4::Context->dbh;
- &OLDmodnote($dbh,$bibitemnum,$note);
+ my ( $bibitemnum, $note ) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDmodnote( $dbh, $bibitemnum, $note );
}
sub newbiblioitem {
- my ($biblioitem) = @_;
- my $dbh = C4::Context->dbh;
- my $bibitemnum = &OLDnewbiblioitem($dbh,$biblioitem);
+ my ($biblioitem) = @_;
+ my $dbh = C4::Context->dbh;
+ my $bibitemnum = &OLDnewbiblioitem( $dbh, $biblioitem );
+
################################################################
## Fix template and shift this to newbiblio
- my @subjects=split(/\n/,$biblioitem->{'subjectheadings'});
- modsubject($biblioitem->{'biblionumber'},1,@subjects);
+ my @subjects = split ( /\n/, $biblioitem->{'subjectheadings'} );
+ modsubject( $biblioitem->{'biblionumber'}, 1, @subjects );
+
################################################################
- my $MARCbiblio= MARCkoha2marcBiblio($dbh,0,$bibitemnum); # the 0 means "do NOT retrieve biblio, only biblioitem, in the MARC record
- my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$biblioitem->{biblionumber});
- &MARCaddbiblio($dbh,$MARCbiblio,$biblioitem->{biblionumber},$bibid);
- return($bibitemnum);
+ my $MARCbiblio =
+ MARCkoha2marcBiblio( $dbh, 0, $bibitemnum )
+ ; # the 0 means "do NOT retrieve biblio, only biblioitem, in the MARC record
+ my $bibid =
+ &MARCfind_MARCbibid_from_oldbiblionumber( $dbh,
+ $biblioitem->{biblionumber} );
+ &MARCaddbiblio( $dbh, $MARCbiblio, $biblioitem->{biblionumber}, $bibid );
+ return ($bibitemnum);
}
sub newsubject {
- my ($bibnum)=@_;
- my $dbh = C4::Context->dbh;
- &OLDnewsubject($dbh,$bibnum);
+ my ($bibnum) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDnewsubject( $dbh, $bibnum );
}
sub newsubtitle {
- my ($bibnum, $subtitle) = @_;
- my $dbh = C4::Context->dbh;
- &OLDnewsubtitle($dbh,$bibnum,$subtitle);
+ my ( $bibnum, $subtitle ) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDnewsubtitle( $dbh, $bibnum, $subtitle );
}
sub newitems {
- my ($item, @barcodes) = @_;
- my $dbh = C4::Context->dbh;
- my $errors;
- my $itemnumber;
- my $error;
- foreach my $barcode (@barcodes) {
- ($itemnumber,$error)=&OLDnewitems($dbh,$item,uc($barcode));
- $errors .=$error;
- my $MARCitem = &MARCkoha2marcItem($dbh,$item->{biblionumber},$itemnumber);
- &MARCadditem($dbh,$MARCitem,$item->{biblionumber});
- }
- return($errors);
+ my ( $item, @barcodes ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $errors;
+ my $itemnumber;
+ my $error;
+ foreach my $barcode (@barcodes) {
+ ( $itemnumber, $error ) = &OLDnewitems( $dbh, $item, uc($barcode) );
+ $errors .= $error;
+ my $MARCitem =
+ &MARCkoha2marcItem( $dbh, $item->{biblionumber}, $itemnumber );
+ &MARCadditem( $dbh, $MARCitem, $item->{biblionumber} );
+ }
+ return ($errors);
}
sub moditem {
my ($item) = @_;
my $dbh = C4::Context->dbh;
- &OLDmoditem($dbh,$item);
- my $MARCitem = &MARCkoha2marcItem($dbh,$item->{'biblionumber'},$item->{'itemnum'});
- my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$item->{biblionumber});
- &MARCmoditem($dbh,$MARCitem,$bibid,$item->{itemnum},0);
+ &OLDmoditem( $dbh, $item );
+ my $MARCitem =
+ &MARCkoha2marcItem( $dbh, $item->{'biblionumber'}, $item->{'itemnum'} );
+ my $bibid =
+ &MARCfind_MARCbibid_from_oldbiblionumber( $dbh, $item->{biblionumber} );
+ &MARCmoditem( $dbh, $MARCitem, $bibid, $item->{itemnum}, 0 );
}
-sub checkitems{
- my ($count,@barcodes)=@_;
- my $dbh = C4::Context->dbh;
- my $error;
- my $sth=$dbh->prepare("Select * from items where barcode=?");
- for (my $i=0;$i<$count;$i++){
- $barcodes[$i]=uc $barcodes[$i];
- $sth->execute($barcodes[$i]);
- if (my $data=$sth->fetchrow_hashref){
- $error.=" Duplicate Barcode: $barcodes[$i]";
+sub checkitems {
+ my ( $count, @barcodes ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $error;
+ my $sth = $dbh->prepare("Select * from items where barcode=?");
+ for ( my $i = 0 ; $i < $count ; $i++ ) {
+ $barcodes[$i] = uc $barcodes[$i];
+ $sth->execute( $barcodes[$i] );
+ if ( my $data = $sth->fetchrow_hashref ) {
+ $error .= " Duplicate Barcode: $barcodes[$i]";
+ }
}
- }
- $sth->finish;
- return($error);
+ $sth->finish;
+ return ($error);
}
-sub countitems{
- my ($bibitemnum)=@_;
- my $dbh = C4::Context->dbh;
- my $query="";
- my $sth=$dbh->prepare("Select count(*) from items where biblioitemnumber=?");
- $sth->execute($bibitemnum);
- my $data=$sth->fetchrow_hashref;
- $sth->finish;
- return($data->{'count(*)'});
+sub countitems {
+ my ($bibitemnum) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "";
+ my $sth =
+ $dbh->prepare("Select count(*) from items where biblioitemnumber=?");
+ $sth->execute($bibitemnum);
+ my $data = $sth->fetchrow_hashref;
+ $sth->finish;
+ return ( $data->{'count(*)'} );
}
-sub delitem{
- my ($itemnum)=@_;
- my $dbh = C4::Context->dbh;
- &OLDdelitem($dbh,$itemnum);
+sub delitem {
+ my ($itemnum) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDdelitem( $dbh, $itemnum );
}
sub deletebiblioitem {
my ($biblioitemnumber) = @_;
- my $dbh = C4::Context->dbh;
- &OLDdeletebiblioitem($dbh,$biblioitemnumber);
-} # sub deletebiblioitem
-
+ my $dbh = C4::Context->dbh;
+ &OLDdeletebiblioitem( $dbh, $biblioitemnumber );
+} # sub deletebiblioitem
sub delbiblio {
- my ($biblio)=@_;
- my $dbh = C4::Context->dbh;
- &OLDdelbiblio($dbh,$biblio);
- my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber($dbh,$biblio);
- &MARCdelbiblio($dbh,$bibid,0);
+ my ($biblio) = @_;
+ my $dbh = C4::Context->dbh;
+ &OLDdelbiblio( $dbh, $biblio );
+ my $bibid = &MARCfind_MARCbibid_from_oldbiblionumber( $dbh, $biblio );
+ &MARCdelbiblio( $dbh, $bibid, 0 );
}
sub getbiblio {
my ($biblionumber) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("Select * from biblio where biblionumber = ?");
- # || die "Cannot prepare $query\n" . $dbh->errstr;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare("Select * from biblio where biblionumber = ?");
+
+ # || die "Cannot prepare $query\n" . $dbh->errstr;
my $count = 0;
my @results;
$sth->execute($biblionumber);
- # || die "Cannot execute $query\n" . $sth->errstr;
- while (my $data = $sth->fetchrow_hashref) {
- $results[$count] = $data;
- $count++;
- } # while
+
+ # || die "Cannot execute $query\n" . $sth->errstr;
+ while ( my $data = $sth->fetchrow_hashref ) {
+ $results[$count] = $data;
+ $count++;
+ } # while
$sth->finish;
- return($count, @results);
-} # sub getbiblio
+ return ( $count, @results );
+} # sub getbiblio
sub getbiblioitem {
my ($biblioitemnum) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("Select * from biblioitems where
-biblioitemnumber = ?");
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( "Select * from biblioitems where
+biblioitemnumber = ?"
+ );
my $count = 0;
my @results;
$sth->execute($biblioitemnum);
- while (my $data = $sth->fetchrow_hashref) {
+ while ( my $data = $sth->fetchrow_hashref ) {
$results[$count] = $data;
- $count++;
- } # while
+ $count++;
+ } # while
$sth->finish;
- return($count, @results);
-} # sub getbiblioitem
+ return ( $count, @results );
+} # sub getbiblioitem
sub getbiblioitembybiblionumber {
my ($biblionumber) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("Select * from biblioitems where biblionumber = ?");
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare("Select * from biblioitems where biblionumber = ?");
my $count = 0;
my @results;
$sth->execute($biblionumber);
- while (my $data = $sth->fetchrow_hashref) {
+ while ( my $data = $sth->fetchrow_hashref ) {
$results[$count] = $data;
- $count++;
- } # while
+ $count++;
+ } # while
$sth->finish;
- return($count, @results);
-} # sub
+ return ( $count, @results );
+} # sub
+
+sub getitemtypes {
+ my $dbh = C4::Context->dbh;
+ my $query = "select * from itemtypes order by description";
+ my $sth = $dbh->prepare($query);
+
+ # || die "Cannot prepare $query" . $dbh->errstr;
+ my $count = 0;
+ my @results;
+
+ $sth->execute;
+
+ # || die "Cannot execute $query\n" . $sth->errstr;
+ while ( my $data = $sth->fetchrow_hashref ) {
+ $results[$count] = $data;
+ $count++;
+ } # while
+
+ $sth->finish;
+ return ( $count, @results );
+} # sub getitemtypes
sub getitemsbybiblioitem {
my ($biblioitemnum) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("Select * from items, biblio where
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( "Select * from items, biblio where
biblio.biblionumber = items.biblionumber and biblioitemnumber
-= ?");
- # || die "Cannot prepare $query\n" . $dbh->errstr;
+= ?"
+ );
+
+ # || die "Cannot prepare $query\n" . $dbh->errstr;
my $count = 0;
my @results;
$sth->execute($biblioitemnum);
- # || die "Cannot execute $query\n" . $sth->errstr;
- while (my $data = $sth->fetchrow_hashref) {
- $results[$count] = $data;
- $count++;
- } # while
+
+ # || die "Cannot execute $query\n" . $sth->errstr;
+ while ( my $data = $sth->fetchrow_hashref ) {
+ $results[$count] = $data;
+ $count++;
+ } # while
$sth->finish;
- return($count, @results);
-} # sub getitemsbybiblioitem
-
+ return ( $count, @results );
+} # sub getitemsbybiblioitem
sub logchange {
-# Subroutine to log changes to databases
+
+ # Subroutine to log changes to databases
# Eventually, this subroutine will be used to create a log of all changes made,
-# with the possibility of "undo"ing some changes
- my $database=shift;
- if ($database eq 'kohadb') {
- my $type=shift;
- my $section=shift;
- my $item=shift;
- my $original=shift;
- my $new=shift;
-# print STDERR "KOHA: $type $section $item $original $new\n";
- } elsif ($database eq 'marc') {
- my $type=shift;
- my $Record_ID=shift;
- my $tag=shift;
- my $mark=shift;
- my $subfield_ID=shift;
- my $original=shift;
- my $new=shift;
+ # with the possibility of "undo"ing some changes
+ my $database = shift;
+ if ( $database eq 'kohadb' ) {
+ my $type = shift;
+ my $section = shift;
+ my $item = shift;
+ my $original = shift;
+ my $new = shift;
+
+ # print STDERR "KOHA: $type $section $item $original $new\n";
+ }
+ elsif ( $database eq 'marc' ) {
+ my $type = shift;
+ my $Record_ID = shift;
+ my $tag = shift;
+ my $mark = shift;
+ my $subfield_ID = shift;
+ my $original = shift;
+ my $new = shift;
+
# print STDERR "MARC: $type $Record_ID $tag $mark $subfield_ID $original $new\n";
}
}
#------------------------------------------------
-
#---------------------------------------
# Find a biblio entry, or create a new one if it doesn't exist.
# If a "subtitle" entry is in hash, add it to subtitle table
sub getoraddbiblio {
- # input params
- my (
- $dbh, # db handle
- # FIXME - Unused argument
- $biblio, # hash ref to fields
- )=@_;
- # return
- my $biblionumber;
+ # input params
+ my (
+ $dbh, # db handle
+ # FIXME - Unused argument
+ $biblio, # hash ref to fields
+ ) = @_;
- my $debug=0;
- my $sth;
- my $error;
+ # return
+ my $biblionumber;
- #-----
- $dbh = C4::Context->dbh;
+ my $debug = 0;
+ my $sth;
+ my $error;
- print "
Looking for biblio\n" if $debug; - $sth=$dbh->prepare("select biblionumber + #----- + $dbh = C4::Context->dbh; + + print "
Looking for biblio\n" if $debug; + $sth = $dbh->prepare( "select biblionumber from biblio where title=? and author=? - and copyrightdate=? and seriestitle=?"); - $sth->execute( - $biblio->{title}, $biblio->{author}, - $biblio->{copyright}, $biblio->{seriestitle} ); - if ($sth->rows) { - ($biblionumber) = $sth->fetchrow; - print "
Biblio exists with number $biblionumber\n" if $debug; - } else { - # Doesn't exist. Add new one. - print "
Adding biblio\n" if $debug; - ($biblionumber,$error)=&newbiblio($biblio); - if ( $biblionumber ) { - print "
Added with biblio number=$biblionumber\n" if $debug; - if ( $biblio->{subtitle} ) { - &newsubtitle($biblionumber,$biblio->{subtitle} ); - } # if subtitle - } else { - print "
Couldn't add biblio: $error\n" if $debug; - } # if added - } + and copyrightdate=? and seriestitle=?" + ); + $sth->execute( + $biblio->{title}, $biblio->{author}, + $biblio->{copyright}, $biblio->{seriestitle} + ); + if ( $sth->rows ) { + ($biblionumber) = $sth->fetchrow; + print "
Biblio exists with number $biblionumber\n" if $debug; + } + else { - return $biblionumber,$error; + # Doesn't exist. Add new one. + print "
Adding biblio\n" if $debug; + ( $biblionumber, $error ) = &newbiblio($biblio); + if ($biblionumber) { + print "
Added with biblio number=$biblionumber\n" + if $debug; + if ( $biblio->{subtitle} ) { + &newsubtitle( $biblionumber, $biblio->{subtitle} ); + } # if subtitle + } + else { + print "
Couldn't add biblio: $error\n" if $debug; + } # if added + } -} # sub getoraddbiblio + return $biblionumber, $error; + +} # sub getoraddbiblio sub char_decode { - # converts ISO 5426 coded string to ISO 8859-1 - # sloppy code : should be improved in next issue - my ($string,$encoding) = @_ ; - $_ = $string ; -# $encoding = C4::Context->preference("marcflavour") unless $encoding; - if ($encoding eq "UNIMARC") { - s/\xe1/Æ/gm ; - s/\xe2/Ð/gm ; - s/\xe9/Ø/gm ; - s/\xec/þ/gm ; - s/\xf1/æ/gm ; - s/\xf3/ð/gm ; - s/\xf9/ø/gm ; - s/\xfb/ß/gm ; - s/\xc1\x61/à/gm ; - s/\xc1\x65/è/gm ; - s/\xc1\x69/ì/gm ; - s/\xc1\x6f/ò/gm ; - s/\xc1\x75/ù/gm ; - s/\xc1\x41/À/gm ; - s/\xc1\x45/È/gm ; - s/\xc1\x49/Ì/gm ; - s/\xc1\x4f/Ò/gm ; - s/\xc1\x55/Ù/gm ; - s/\xc2\x41/Á/gm ; - s/\xc2\x45/É/gm ; - s/\xc2\x49/Í/gm ; - s/\xc2\x4f/Ó/gm ; - s/\xc2\x55/Ú/gm ; - s/\xc2\x59/Ý/gm ; - s/\xc2\x61/á/gm ; - s/\xc2\x65/é/gm ; - s/\xc2\x69/í/gm ; - s/\xc2\x6f/ó/gm ; - s/\xc2\x75/ú/gm ; - s/\xc2\x79/ý/gm ; - s/\xc3\x41/Â/gm ; - s/\xc3\x45/Ê/gm ; - s/\xc3\x49/Î/gm ; - s/\xc3\x4f/Ô/gm ; - s/\xc3\x55/Û/gm ; - s/\xc3\x61/â/gm ; - s/\xc3\x65/ê/gm ; - s/\xc3\x69/î/gm ; - s/\xc3\x6f/ô/gm ; - s/\xc3\x75/û/gm ; - s/\xc4\x41/Ã/gm ; - s/\xc4\x4e/Ñ/gm ; - s/\xc4\x4f/Õ/gm ; - s/\xc4\x61/ã/gm ; - s/\xc4\x6e/ñ/gm ; - s/\xc4\x6f/õ/gm ; - s/\xc8\x45/Ë/gm ; - s/\xc8\x49/Ï/gm ; - s/\xc8\x65/ë/gm ; - s/\xc8\x69/ï/gm ; - s/\xc8\x76/ÿ/gm ; - s/\xc9\x41/Ä/gm ; - s/\xc9\x4f/Ö/gm ; - s/\xc9\x55/Ü/gm ; - s/\xc9\x61/ä/gm ; - s/\xc9\x6f/ö/gm ; - s/\xc9\x75/ü/gm ; - s/\xca\x41/Å/gm ; - s/\xca\x61/å/gm ; - s/\xd0\x43/Ç/gm ; - s/\xd0\x63/ç/gm ; - # this handles non-sorting blocks (if implementation requires this) - $string = nsb_clean($_) ; - } elsif ($encoding eq "USMARC" || $encoding eq "MARC21") { - if(/[\xc1-\xff]/) { - s/\xe1\x61/à/gm ; - s/\xe1\x65/è/gm ; - s/\xe1\x69/ì/gm ; - s/\xe1\x6f/ò/gm ; - s/\xe1\x75/ù/gm ; - s/\xe1\x41/À/gm ; - s/\xe1\x45/È/gm ; - s/\xe1\x49/Ì/gm ; - s/\xe1\x4f/Ò/gm ; - s/\xe1\x55/Ù/gm ; - s/\xe2\x41/Á/gm ; - s/\xe2\x45/É/gm ; - s/\xe2\x49/Í/gm ; - s/\xe2\x4f/Ó/gm ; - s/\xe2\x55/Ú/gm ; - s/\xe2\x59/Ý/gm ; - s/\xe2\x61/á/gm ; - s/\xe2\x65/é/gm ; - s/\xe2\x69/í/gm ; - s/\xe2\x6f/ó/gm ; - s/\xe2\x75/ú/gm ; - s/\xe2\x79/ý/gm ; - s/\xe3\x41/Â/gm ; - s/\xe3\x45/Ê/gm ; - s/\xe3\x49/Î/gm ; - s/\xe3\x4f/Ô/gm ; - s/\xe3\x55/Û/gm ; - s/\xe3\x61/â/gm ; - s/\xe3\x65/ê/gm ; - s/\xe3\x69/î/gm ; - s/\xe3\x6f/ô/gm ; - s/\xe3\x75/û/gm ; - s/\xe4\x41/Ã/gm ; - s/\xe4\x4e/Ñ/gm ; - s/\xe4\x4f/Õ/gm ; - s/\xe4\x61/ã/gm ; - s/\xe4\x6e/ñ/gm ; - s/\xe4\x6f/õ/gm ; - s/\xe8\x45/Ë/gm ; - s/\xe8\x49/Ï/gm ; - s/\xe8\x65/ë/gm ; - s/\xe8\x69/ï/gm ; - s/\xe8\x76/ÿ/gm ; - s/\xe9\x41/Ä/gm ; - s/\xe9\x4f/Ö/gm ; - s/\xe9\x55/Ü/gm ; - s/\xe9\x61/ä/gm ; - s/\xe9\x6f/ö/gm ; - s/\xe9\x75/ü/gm ; - s/\xea\x41/Å/gm ; - s/\xea\x61/å/gm ; - # this handles non-sorting blocks (if implementation requires this) - $string = nsb_clean($_) ; - } - } - return($string) ; + + # converts ISO 5426 coded string to ISO 8859-1 + # sloppy code : should be improved in next issue + my ( $string, $encoding ) = @_; + $_ = $string; + + # $encoding = C4::Context->preference("marcflavour") unless $encoding; + if ( $encoding eq "UNIMARC" ) { + s/\xe1/Æ/gm; + s/\xe2/Ð/gm; + s/\xe9/Ø/gm; + s/\xec/þ/gm; + s/\xf1/æ/gm; + s/\xf3/ð/gm; + s/\xf9/ø/gm; + s/\xfb/ß/gm; + s/\xc1\x61/à/gm; + s/\xc1\x65/è/gm; + s/\xc1\x69/ì/gm; + s/\xc1\x6f/ò/gm; + s/\xc1\x75/ù/gm; + s/\xc1\x41/À/gm; + s/\xc1\x45/È/gm; + s/\xc1\x49/Ì/gm; + s/\xc1\x4f/Ò/gm; + s/\xc1\x55/Ù/gm; + s/\xc2\x41/Á/gm; + s/\xc2\x45/É/gm; + s/\xc2\x49/Í/gm; + s/\xc2\x4f/Ó/gm; + s/\xc2\x55/Ú/gm; + s/\xc2\x59/Ý/gm; + s/\xc2\x61/á/gm; + s/\xc2\x65/é/gm; + s/\xc2\x69/í/gm; + s/\xc2\x6f/ó/gm; + s/\xc2\x75/ú/gm; + s/\xc2\x79/ý/gm; + s/\xc3\x41/Â/gm; + s/\xc3\x45/Ê/gm; + s/\xc3\x49/Î/gm; + s/\xc3\x4f/Ô/gm; + s/\xc3\x55/Û/gm; + s/\xc3\x61/â/gm; + s/\xc3\x65/ê/gm; + s/\xc3\x69/î/gm; + s/\xc3\x6f/ô/gm; + s/\xc3\x75/û/gm; + s/\xc4\x41/Ã/gm; + s/\xc4\x4e/Ñ/gm; + s/\xc4\x4f/Õ/gm; + s/\xc4\x61/ã/gm; + s/\xc4\x6e/ñ/gm; + s/\xc4\x6f/õ/gm; + s/\xc8\x45/Ë/gm; + s/\xc8\x49/Ï/gm; + s/\xc8\x65/ë/gm; + s/\xc8\x69/ï/gm; + s/\xc8\x76/ÿ/gm; + s/\xc9\x41/Ä/gm; + s/\xc9\x4f/Ö/gm; + s/\xc9\x55/Ü/gm; + s/\xc9\x61/ä/gm; + s/\xc9\x6f/ö/gm; + s/\xc9\x75/ü/gm; + s/\xca\x41/Å/gm; + s/\xca\x61/å/gm; + s/\xd0\x43/Ç/gm; + s/\xd0\x63/ç/gm; + + # this handles non-sorting blocks (if implementation requires this) + $string = nsb_clean($_); + } + elsif ( $encoding eq "USMARC" || $encoding eq "MARC21" ) { + if (/[\xc1-\xff]/) { + s/\xe1\x61/à/gm; + s/\xe1\x65/è/gm; + s/\xe1\x69/ì/gm; + s/\xe1\x6f/ò/gm; + s/\xe1\x75/ù/gm; + s/\xe1\x41/À/gm; + s/\xe1\x45/È/gm; + s/\xe1\x49/Ì/gm; + s/\xe1\x4f/Ò/gm; + s/\xe1\x55/Ù/gm; + s/\xe2\x41/Á/gm; + s/\xe2\x45/É/gm; + s/\xe2\x49/Í/gm; + s/\xe2\x4f/Ó/gm; + s/\xe2\x55/Ú/gm; + s/\xe2\x59/Ý/gm; + s/\xe2\x61/á/gm; + s/\xe2\x65/é/gm; + s/\xe2\x69/í/gm; + s/\xe2\x6f/ó/gm; + s/\xe2\x75/ú/gm; + s/\xe2\x79/ý/gm; + s/\xe3\x41/Â/gm; + s/\xe3\x45/Ê/gm; + s/\xe3\x49/Î/gm; + s/\xe3\x4f/Ô/gm; + s/\xe3\x55/Û/gm; + s/\xe3\x61/â/gm; + s/\xe3\x65/ê/gm; + s/\xe3\x69/î/gm; + s/\xe3\x6f/ô/gm; + s/\xe3\x75/û/gm; + s/\xe4\x41/Ã/gm; + s/\xe4\x4e/Ñ/gm; + s/\xe4\x4f/Õ/gm; + s/\xe4\x61/ã/gm; + s/\xe4\x6e/ñ/gm; + s/\xe4\x6f/õ/gm; + s/\xe8\x45/Ë/gm; + s/\xe8\x49/Ï/gm; + s/\xe8\x65/ë/gm; + s/\xe8\x69/ï/gm; + s/\xe8\x76/ÿ/gm; + s/\xe9\x41/Ä/gm; + s/\xe9\x4f/Ö/gm; + s/\xe9\x55/Ü/gm; + s/\xe9\x61/ä/gm; + s/\xe9\x6f/ö/gm; + s/\xe9\x75/ü/gm; + s/\xea\x41/Å/gm; + s/\xea\x61/å/gm; + + # this handles non-sorting blocks (if implementation requires this) + $string = nsb_clean($_); + } + } + return ($string); } sub nsb_clean { - my $NSB = '\x88' ; # NSB : begin Non Sorting Block - my $NSE = '\x89' ; # NSE : Non Sorting Block end - # handles non sorting blocks - my ($string) = @_ ; - $_ = $string ; - s/$NSB/(/gm ; - s/[ ]{0,1}$NSE/) /gm ; - $string = $_ ; - return($string) ; + my $NSB = '\x88'; # NSB : begin Non Sorting Block + my $NSE = '\x89'; # NSE : Non Sorting Block end + # handles non sorting blocks + my ($string) = @_; + $_ = $string; + s/$NSB/(/gm; + s/[ ]{0,1}$NSE/) /gm; + $string = $_; + return ($string); } -END { } # module clean-up code here (global destructor) +END { } # module clean-up code here (global destructor) =back @@ -2191,6 +2673,10 @@ Paul POULAIN paul.poulain@free.fr # $Id$ # $Log$ +# Revision 1.95 2004/06/26 23:19:59 rangi +# Fixing modaddauthor, and adding getitemtypes. +# Also tidying up formatting of code +# # Revision 1.94 2004/06/17 08:16:32 tipaul # merging tag & subfield in marc_word for better perfs #