CVS: koha/C4 Catalogue.pm,NONE,1.1
Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv31072 Added Files: Catalogue.pm Log Message: Cataloguing API. Very early draft at this point. --- NEW FILE --- package C4::Catalogue; #asummes C4/Acquisitions.pm use strict; require Exporter; use C4::Database; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # set the version for version checking $VERSION = 0.01; @ISA = qw(Exporter); @EXPORT = qw(&newBiblio &newBiblioItem &newItem); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], # your exported package globals go here, # as well as any optionally exported functions @EXPORT_OK = qw($Var1 %Hashit); # non-exported package globals go here use vars qw(@more $stuff); # initalize package globals, first exported ones my $Var1 = ''; my %Hashit = (); # then the others (which are still accessible as $Some::Module::stuff) my $stuff = ''; my @more = (); # all file-scoped lexicals must be created before # the functions below that use them. # file-private lexicals go here my $priv_var = ''; my %secret_hash = (); # here's a file-private function as a closure, # callable as &$priv_func; it cannot be prototyped. my $priv_func = sub { # stuff goes here. }; # make all your functions, whether exported or not; sub newBiblio { my ($env, $biblio) = @_; my $title=$biblio->{'title'}; my $author=$biblio->{'author'}; my $subtitle=$biblio->{'subtitle'}; my $title=$biblio->{'title'}; my $copyrightdate=$biblio->{'copyrightdate'}; my $serial=$biblio->{'serial'}; my $seriestitle=$biblio->{'seriestitle'}; my $unititle=$biblio->{'unititle'}; my $notes=$biblio->{'notes'}; } sub addTag { my ($env, $Record_ID, $tag, $Indicator1, $Indicator2, $subfields) = @_; my $dbh=&C4Connect; ($Indicator1) || ($Indicator1=' '); ($Indicator2) || ($Indicator2=' '); my $firstdigit=substr($tag,0,1); my $Subfield_ID; foreach (sort keys %$subfields) { my $Subfield_Mark=$subfields->{$_}->{'Subfield_Mark'}; my $Subfield_Value=$subfields->{$_}->{'Subfield_Value'}; my $q_Subfield_Value=$dbh->quote($Subfield_Value); if ($Subfield_ID) { my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '$Subfield_Mark', $q_Subfield_Value)"); $sth->execute; } else { my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_Mark, Subfield_Value) values ('$Subfield_Mark', $q_Subfield_Value)"); $sth->execute; my $Subfield_Key=$dbh->{'mysql_insertid'}; $Subfield_ID=$Subfield_Key; $sth=$dbh->prepare("update $firstdigit\XX_Subfield_Table set Subfield_ID=$Subfield_ID where Subfield_Key=$Subfield_Key"); $sth->execute; } } if (my $linkid=$env->{'linkid'}) { $env->{'linkage'}=0; my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '8', '$linkid')"); $sth->execute; } my $sth=$dbh->prepare("insert into $firstdigit\XX_Tag_Table (Indicator1, Indicator2, Tag, Subfield_ID) values ('$Indicator1', '$Indicator2', '$tag', $Subfield_ID)"); $sth->execute; my $Tag_Key=$dbh->{'mysql_insertid'}; my $Tag_ID=$Tag_Key; $sth=$dbh->prepare("update $firstdigit\XX_Tag_Table set Tag_ID=$Tag_ID where Tag_Key=$Tag_Key"); $sth->execute; $sth=$dbh->prepare("insert into Bib_Table (Record_ID, Tag_$firstdigit\XX_ID) values ($Record_ID, $Tag_ID)"); $sth->execute; if ($env->{'linkage'}) { my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '8', '$Tag_ID')"); $sth->execute; } $sth->finish; $dbh->disconnect; return ($env, $Tag_ID); } sub newBiblioItem { my ($env, $biblioitem) = @_; my $dbh=&C4Connect; my $biblionumber=$biblioitem->{'biblionumber'}; my $volume=$biblioitem->{'volume'}; my $number=$biblioitem->{'number'}; my $classification=$biblioitem->{'classification'}; my $itemtype=$biblioitem->{'itemtype'}; my $isbn=$biblioitem->{'isbn'}; my $issn=$biblioitem->{'issn'}; my $dewey=$biblioitem->{'dewey'}; $dewey=~s/\.*0*$//; ($dewey == 0) && ($dewey=''); my $subclass=$biblioitem->{'subclass'}; my $publicationyear=$biblioitem->{'publicationyear'}; my $publishercode=$biblioitem->{'publishercode'}; my $volumedate=$biblioitem->{'volumedate'}; my $illus=$biblioitem->{'illus'}; my $pages=$biblioitem->{'pages'}; my $notes=$biblioitem->{'notes'}; my $size=$biblioitem->{'size'}; my $place=$biblioitem->{'place'}; my $lccn=$biblioitem->{'lccn'}; # Should we check if there is already a biblioitem/marc with the # same isbn/lccn/issn? my $sth=$dbh->prepare("select title,unititle,seriestitle,copyrightdate,notes,author from biblio where biblionumber=$biblionumber"); $sth->execute; my ($title, $unititle,$seriestitle,$copyrightdate,$biblionotes,$author) = $sth->fetchrow; $sth=$dbh->prepare("select subtitle from bibliosubtitle where biblionumber=$biblionumber"); $sth->execute; my ($subtitle) = $sth->fetchrow; $sth=$dbh->prepare("select author from additionalauthors where biblionumber=$biblionumber"); $sth->execute; my @additionalauthors; while (my ($additionalauthor) = $sth->fetchrow) { push (@additionalauthors, $additionalauthor); } $sth=$dbh->prepare("select subject from bibliosubject where biblionumber=$biblionumber"); $sth->execute; my @subjects; while (my ($subject) = $sth->fetchrow) { push (@subjects, $subject); } # MARC SECTION $sth=$dbh->prepare("insert into Resource_Table (Record_ID) values (0)"); $sth->execute; my $Resource_ID=$dbh->{'mysql_insertid'}; my $Record_ID=$Resource_ID; $sth=$dbh->prepare("update Resource_Table set Record_ID=$Record_ID where Resource_ID=$Resource_ID"); $sth->execute; # Title { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$title; if ($subtitle) { $subfields->{2}->{'Subfield_Mark'}='b'; $subfields->{2}->{'Subfield_Value'}=$subtitle; } my $tag='245'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # author { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$author; my $tag='100'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Series Title if ($seriestitle) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$seriestitle; my $tag='440'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Biblio Note if ($biblionotes) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$biblionotes; $subfields->{2}->{'Subfield_Mark'}='3'; $subfields->{2}->{'Subfield_Value'}='biblio'; my $tag='440'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Additional Authors foreach (@additionalauthors) { my $author=$_; (next) unless ($author); my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$author; $subfields->{2}->{'Subfield_Mark'}='e'; $subfields->{2}->{'Subfield_Value'}='author'; my $tag='700'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Illustrator if ($illus) { (next) unless ($illus); my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$illus; $subfields->{2}->{'Subfield_Mark'}='e'; $subfields->{2}->{'Subfield_Value'}='illustrator'; my $tag='700'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Subjects foreach (@subjects) { my $subject=$_; (next) unless ($subject); my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$subject; my $tag='650'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # ISBN if ($isbn) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$isbn; my $tag='020'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # LCCN if ($lccn) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$lccn; my $tag='010'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # ISSN if ($issn) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$issn; my $tag='022'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # DEWEY if ($dewey) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$dewey; my $tag='082'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # DEWEY subclass and itemtype { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$itemtype; $subfields->{2}->{'Subfield_Mark'}='b'; $subfields->{2}->{'Subfield_Value'}=$subclass; my $tag='090'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # PUBLISHER { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$place; $subfields->{2}->{'Subfield_Mark'}='b'; $subfields->{2}->{'Subfield_Value'}=$publishercode; $subfields->{3}->{'Subfield_Mark'}='c'; $subfields->{3}->{'Subfield_Value'}=$publicationyear; if ($copyrightdate) { $subfields->{4}->{'Subfield_Mark'}='c'; $subfields->{4}->{'Subfield_Value'}="c$copyrightdate"; } my $tag='260'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # PHYSICAL if ($pages || $size) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$pages; $subfields->{2}->{'Subfield_Mark'}='c'; $subfields->{2}->{'Subfield_Value'}=$size; my $tag='300'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Volume/Number if ($volume || $number) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='v'; $subfields->{1}->{'Subfield_Value'}=$volume; $subfields->{2}->{'Subfield_Mark'}='n'; $subfields->{2}->{'Subfield_Value'}=$number; my $tag='440'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } # Biblioitem Note if ($notes) { my $subfields; $subfields->{1}->{'Subfield_Mark'}='a'; $subfields->{1}->{'Subfield_Value'}=$notes; $subfields->{2}->{'Subfield_Mark'}='3'; $subfields->{2}->{'Subfield_Value'}='biblioitem'; my $tag='500'; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); } $sth->finish; $dbh->disconnect; return ($env, $Record_ID); } sub newItem { my ($env, $Record_ID, $item) = @_; my $barcode=$item->{'barcode'}; my $dateaccessioned=$item->{'dateaccessioned'}; my $booksellerid=$item->{'booksellerid'}; my $homebranch=$item->{'homebranch'}; my $holdingbranch=$item->{'holdingbranch'}; my $price=$item->{'price'}; my $replacementprice=$item->{'replacementprice'}; my $replacementpricedate=$item->{'replacementpricedate'}; my $notforloan=$item->{'notforloan'}; my $itemlost=$item->{'itemlost'}; my $wthdrawn=$item->{'wthdrawn'}; my $restricted=$item->{'restricted'}; my $itemnotes=$item->{'itemnotes'}; my $itemtype=$item->{'itemtype'}; my $subclass=$item->{'subclass'}; my $subfields; $subfields->{1}->{'Subfield_Mark'}='p'; $subfields->{1}->{'Subfield_Value'}=$barcode; $subfields->{2}->{'Subfield_Mark'}='d'; $subfields->{2}->{'Subfield_Value'}=$dateaccessioned; $subfields->{3}->{'Subfield_Mark'}='e'; $subfields->{3}->{'Subfield_Value'}=$booksellerid; $subfields->{4}->{'Subfield_Mark'}='b'; $subfields->{4}->{'Subfield_Value'}=$homebranch; $subfields->{5}->{'Subfield_Mark'}='l'; $subfields->{5}->{'Subfield_Value'}=$holdingbranch; $subfields->{6}->{'Subfield_Mark'}='c'; $subfields->{6}->{'Subfield_Value'}=$price; $subfields->{7}->{'Subfield_Mark'}='c'; $subfields->{7}->{'Subfield_Value'}=$replacementprice; $subfields->{8}->{'Subfield_Mark'}='d'; $subfields->{8}->{'Subfield_Value'}=$replacementpricedate; if ($notforloan) { $subfields->{9}->{'Subfield_Mark'}='h'; $subfields->{9}->{'Subfield_Value'}='Not for loan'; } if ($notforloan) { $subfields->{10}->{'Subfield_Mark'}='j'; $subfields->{10}->{'Subfield_Value'}='Item lost'; } if ($notforloan) { $subfields->{11}->{'Subfield_Mark'}='j'; $subfields->{11}->{'Subfield_Value'}='Item withdrawn'; } if ($notforloan) { $subfields->{12}->{'Subfield_Mark'}='z'; $subfields->{12}->{'Subfield_Value'}=$itemnotes; } my $tag='876'; my $Tag_ID; $env->{'linkage'}=1; ($env, $Tag_ID) = addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); $env->{'linkage'}=0; $env->{'linkid'}=$Tag_ID; $tag='852'; my $subfields2; $subfields2->{1}->{'Subfield_Mark'}='a'; $subfields2->{1}->{'Subfield_Value'}='Coast Mountains School District'; $subfields2->{1}->{'Subfield_Mark'}='b'; $subfields2->{1}->{'Subfield_Value'}=$homebranch; $subfields2->{1}->{'Subfield_Mark'}='c'; $subfields2->{1}->{'Subfield_Value'}=$itemtype; $subfields2->{2}->{'Subfield_Mark'}='m'; $subfields2->{2}->{'Subfield_Value'}=$subclass; addTag($env, $Record_ID, $tag, ' ', ' ', $subfields2); $env->{'linkid'}=''; } END { } # module clean-up code here (global destructor)
participants (1)
-
Steve Tonnesen