From a9b32d47f4b42e074ce141e76c6a3b98a68fa798 Mon Sep 17 00:00:00 2001 From: tipaul Date: Thu, 23 Jan 2003 12:26:41 +0000 Subject: [PATCH] upgrading import in breeding farm (you can now search on ISBN or on title) AND character encoding. --- acqui.simple/addbiblio.pl | 105 ++---------------- acqui.simple/isbnsearch.pl | 17 ++- acqui.simple/marcimport.pl | 70 ++++++------ .../default/en/acqui.simple/addbooks.tmpl | 48 +++----- .../default/en/acqui.simple/isbnsearch.tmpl | 72 ++++++++---- 5 files changed, 131 insertions(+), 181 deletions(-) diff --git a/acqui.simple/addbiblio.pl b/acqui.simple/addbiblio.pl index 261bfd4374..e1769dcf0a 100755 --- a/acqui.simple/addbiblio.pl +++ b/acqui.simple/addbiblio.pl @@ -46,11 +46,10 @@ sub find_value { } sub MARCfindbreeding { - my ($dbh,$isbn) = @_; - my $sth = $dbh->prepare("select file,marc from marc_breeding where isbn=?"); - $sth->execute($isbn); + my ($dbh,$id) = @_; + my $sth = $dbh->prepare("select file,marc from marc_breeding where id=?"); + $sth->execute($id); my ($file,$marc) = $sth->fetchrow; -# $marc = char_decode($marc); if ($marc) { my $record = MARC::File::USMARC::decode($marc); if (ref($record) eq undef) { @@ -62,101 +61,11 @@ sub MARCfindbreeding { return -1; } -# some special chars in ISO 2709 (ISO 6630 and ISO 646 set) - -my $IS3 = '\x1d' ; # IS3 : record end -my $IS2 = '\x1e' ; # IS2 : field end -my $IS1 = '\x1f' ; # IS1 : begin subfield -my $NSB = '\x88' ; # NSB : begin Non Sorting Block -my $NSE = '\x89' ; # NSE : Non Sorting Block end - -sub char_decode { - # converts ISO 5426 coded string to ISO 8859-1 - # sloppy code : should be improved in next issue - my ($string) = @_ ; - $_ = $string ; - if(/[\xc1-\xff]/) { - 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($_) ; - return($string) ; -} - -sub nsb_clean { - # handles non sorting blocks - my ($string) = @_ ; - $_ = $string ; - s/$NSB/(/gm ; - s/[ ]{0,1}$NSE/) /gm ; - $string = $_ ; - return($string) ; -} my $input = new CGI; my $error = $input->param('error'); my $oldbiblionumber=$input->param('oldbiblionumber'); # if bib exists, it's a modif, not a new biblio. -my $isbn = $input->param('isbn'); +my $breedingid = $input->param('breedingid'); my $op = $input->param('op'); my $dbh = C4::Context->dbh; my $bibid; @@ -178,7 +87,7 @@ my $tagslib = &MARCgettagslib($dbh,1); my $record=-1; $record = MARCgetbiblio($dbh,$bibid) if ($bibid); #warn "1= ".$record->as_formatted; -$record = MARCfindbreeding($dbh,$isbn) if ($isbn); +$record = MARCfindbreeding($dbh,$breedingid) if ($breedingid); my $is_a_modif=0; my ($oldbiblionumtagfield,$oldbiblionumtagsubfield); my ($oldbiblioitemnumtagfield,$oldbiblioitemnumtagsubfield,$bibitem,$oldbiblioitemnumber); @@ -248,7 +157,7 @@ if ($op eq "addbiblio") { # if breeding is not empty if ($record ne -1) { my ($x,$value) = find_value($tag,$subfield,$record); - $value=char_decode($value); + $value=char_decode($value) unless ($is_a_modif); $indicator = $x if $x; if ($tagslib->{$tag}->{$subfield}->{authorised_value}) { my @authorised_values; @@ -303,7 +212,7 @@ if ($op eq "addbiblio") { } else { my ($x,$value); ($x,$value) = find_value($tag,$subfield,$record) if ($record ne -1); - $value=char_decode($value); + $value=char_decode($value) unless ($is_a_modif); if ($tagslib->{$tag}->{$subfield}->{authorised_value}) { my @authorised_values; my %authorised_lib; diff --git a/acqui.simple/isbnsearch.pl b/acqui.simple/isbnsearch.pl index 20c7d94cd4..790f9bdc44 100755 --- a/acqui.simple/isbnsearch.pl +++ b/acqui.simple/isbnsearch.pl @@ -30,6 +30,7 @@ use HTML::Template; my $input = new CGI; my $isbn = $input->param('isbn'); +my $title = $input->param('title'); my $offset = $input->param('offset'); my $num = $input->param('num'); my $showoffset = $offset + 1; @@ -44,9 +45,10 @@ my ($template, $loggedinuser, $cookie) flagsrequired => {catalogue => 1}, debug => 1, }); -if (! $isbn) { +if (! $isbn && !$title) { print $input->redirect('addbooks.pl'); } else { + # fill with books in ACTIVE DB (biblio) if (! $offset) { $offset = 0; $showoffset = 1; @@ -84,11 +86,24 @@ if (! $isbn) { $row_data{num} = $num; push (@loop_links,\%row_data); } # for + # fill with books in breeding farm + ($count, @results) = breedingsearch($title,$isbn); + my @breeding_loop = (); + for (my $i=0; $i <= $#results; $i++) { + my %row_data; + $row_data{id} = $results[$i]->{'id'}; + $row_data{isbn} = $results[$i]->{'isbn'}; + $row_data{file} = $results[$i]->{'file'}; + $row_data{title} = $results[$i]->{'title'}; + $row_data{author} = $results[$i]->{'author'}; + push (@breeding_loop, \%row_data); + } $template->param(isbn => $isbn, showoffset => $showoffset, total => $total, offset => $offset, loop => \@loop_data, + breeding_loop => \@breeding_loop, loop_links => \@loop_links); print $input->header( diff --git a/acqui.simple/marcimport.pl b/acqui.simple/marcimport.pl index 0570cfe23b..afaaf7e500 100755 --- a/acqui.simple/marcimport.pl +++ b/acqui.simple/marcimport.pl @@ -86,8 +86,9 @@ if ($uploadmarc && length($uploadmarc)>0) { my $dbh = C4::Context->dbh; my $searchisbn = $dbh->prepare("select biblioitemnumber from biblioitems where isbn=?"); my $searchissn = $dbh->prepare("select biblioitemnumber from biblioitems where issn=?"); - my $searchbreeding = $dbh->prepare("select isbn from marc_breeding where isbn=?"); - my $insertsql = $dbh->prepare("replace into marc_breeding (file,isbn,title,marc) values(?,?,?,?)"); + my $searchbreeding = $dbh->prepare("select id from marc_breeding where isbn=?"); + my $insertsql = $dbh->prepare("insert into marc_breeding (file,isbn,title,author,marc) values(?,?,?,?,?)"); + my $replacesql = $dbh->prepare("update marc_breeding set file=?,isbn=?,title=?,author=?,marc=? where id=?"); # fields used for import results my $imported=0; my $alreadyindb = 0; @@ -99,42 +100,44 @@ if ($uploadmarc && length($uploadmarc)>0) { $notmarcrecord++; } else { my $oldbiblio = MARCmarc2koha($dbh,$marcrecord); + $oldbiblio->{title} = char_decode($oldbiblio->{title}); + $oldbiblio->{author} = char_decode($oldbiblio->{author}); # if isbn found and biblio does not exist, add it. If isbn found and biblio exists, overwrite or ignore depending on user choice - if ($oldbiblio->{isbn} || $oldbiblio->{issn}) { - # drop every "special" char : spaces, - ... - $oldbiblio->{isbn} =~ s/ |-|\.//g, - # search if biblio exists - my $biblioitemnumber; + # drop every "special" char : spaces, - ... + $oldbiblio->{isbn} =~ s/ |-|\.//g, + # search if biblio exists + my $biblioitemnumber; + if ($oldbiblio->{isbn}) { + $searchisbn->execute($oldbiblio->{isbn}); + ($biblioitemnumber) = $searchisbn->fetchrow; + } else { + $searchissn->execute($oldbiblio->{issn}); + ($biblioitemnumber) = $searchissn->fetchrow; + } + if ($biblioitemnumber) { + $alreadyindb++; + } else { + # search in breeding farm + my $breedingid; if ($oldbiblio->{isbn}) { - $searchisbn->execute($oldbiblio->{isbn}); - ($biblioitemnumber) = $searchisbn->fetchrow; + $searchbreeding->execute($oldbiblio->{isbn}); + ($breedingid) = $searchbreeding->fetchrow; } else { - $searchissn->execute($oldbiblio->{issn}); - ($biblioitemnumber) = $searchissn->fetchrow; + $searchbreeding->execute($oldbiblio->{issn}); + ($breedingid) = $searchbreeding->fetchrow; } - if ($biblioitemnumber) { - $alreadyindb++; + if (!$breedingid || $overwrite_biblio) { + my $recoded; + $recoded = $marcrecord->as_usmarc(); + if ($breedingid) { + $replacesql ->execute($filename,$oldbiblio->{isbn}.$oldbiblio->{issn},$oldbiblio->{title},$oldbiblio->{author},$recoded,$breedingid); + } else { + $insertsql ->execute($filename,$oldbiblio->{isbn}.$oldbiblio->{issn},$oldbiblio->{title},$oldbiblio->{author},$recoded); + } + $imported++; } else { - # search in breeding farm - my $breedingresult; - if ($oldbiblio->{isbn}) { - $searchbreeding->execute($oldbiblio->{isbn}); - ($breedingresult) = $searchbreeding->fetchrow; - } else { - $searchbreeding->execute($oldbiblio->{issn}); - ($breedingresult) = $searchbreeding->fetchrow; - } - if (!$breedingresult || $overwrite_biblio) { - my $recoded; - $recoded = $marcrecord->as_usmarc(); - $insertsql ->execute($filename,$oldbiblio->{isbn}.$oldbiblio->{issn},$oldbiblio->{title},$recoded); - $imported++; - } else { - $alreadyinfarm++; - } + $alreadyinfarm++; } - } else { - $notmarcrecord++; } } } @@ -803,6 +806,9 @@ sub FormatMarcText { #--------------- # log cleared, as marcimport is (almost) rewritten from scratch. # $Log$ +# Revision 1.26 2003/01/23 12:26:41 tipaul +# upgrading import in breeding farm (you can now search on ISBN or on title) AND character encoding. +# # Revision 1.25 2003/01/21 08:13:50 tipaul # character encoding ISO646 => 8859-1, first draft # diff --git a/koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbooks.tmpl b/koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbooks.tmpl index acb15a2a94..903464f534 100644 --- a/koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbooks.tmpl +++ b/koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbooks.tmpl @@ -22,20 +22,23 @@ To add a new biblio/item, scan or type the ISBN/ISSN number: - - - - - - - - - - - -
ISBN:If the ISBN is found into the biblio table, it will be retrieved and can be modified.
- If the ISBN is found into the breeding farm, it will be retrieved. and a biblio added.
- Otherwise, a biblio can be added from scratch.
 Add biblio without ISBN/ISSN
+
+ + + + + + + + + + + + +
ISBN:If the ISBN is found into the biblio table, it will be retrieved and can be modified.
+ If the ISBN is found into the breeding farm, it will be retrieved. and a biblio added.
+ Otherwise, a biblio can be added from scratch.
Title
 Add biblio without ISBN/ISSN
+

@@ -83,22 +86,5 @@ - -

- - - - -
Help
-Koha stores data in three sections -

-

Biblio

-The first section records bibliographic data such as title, author and copyright for a particular work. -

-

Group

-The second records bibliographic data for a particular publication of that work, such as ISBN number, physical description, publisher information, etc -

-

Item

-The third section holds specific item information, such as the bar code number

diff --git a/koha-tmpl/intranet-tmpl/default/en/acqui.simple/isbnsearch.tmpl b/koha-tmpl/intranet-tmpl/default/en/acqui.simple/isbnsearch.tmpl index ee5a9858ac..4a23ce61b6 100644 --- a/koha-tmpl/intranet-tmpl/default/en/acqui.simple/isbnsearch.tmpl +++ b/koha-tmpl/intranet-tmpl/default/en/acqui.simple/isbnsearch.tmpl @@ -2,30 +2,64 @@ Biblio Search Results

-You searched on ISBN , results found
+You searched on ISBN title
+ results found
Results to displayed -

- - - - - - - - - - "> - - - +
TITLEAUTHOR©Items
- ">Edit...
+ + -
Biblios in koha
+ + + + + + + + + "> + + + + + +
TitleAuthor© 
+ ">Edit...
+
+ + + + +
Biblios in breeding farm
+ + + + + + + + + + + "> + + + + + + + + + + + + +
TitleAuthorISBNcoming from  
+ ">Add biblio
   ">Add New Biblio
+
&offset=&num="> -- 2.39.5