- 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);
-}
-
-sub FindDuplicate {
- my ($record)=@_;
- my $dbh = C4::Context->dbh;
- my $result = MARCmarc2koha($dbh,$record,'');
- my $sth;
- my ($biblionumber,$bibid,$title);
- # search duplicate on ISBN, easy and fast...
- if ($result->{isbn}) {
- $sth = $dbh->prepare("select biblio.biblionumber,bibid,title from biblio,biblioitems,marc_biblio where biblio.biblionumber=biblioitems.biblionumber and marc_biblio.biblionumber=biblioitems.biblionumber and isbn=?");
- $sth->execute($result->{'isbn'});
- ($biblionumber,$bibid,$title) = $sth->fetchrow;
- return $biblionumber,$bibid,$title if ($biblionumber);
- }
- # a more complex search : build a request for SearchMarc::catalogsearch()
- my (@tags, @and_or, @excluding, @operator, @value, $offset,$length);
- # search on biblio.title
- my ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblio.title","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "contains";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for title, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
- # ... and on biblio.author
- ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblio.author","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "contains";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for author, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
- # ... and on publicationyear.
- ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblioitems.publicationyear","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "=";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for publicationyear, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
- # ... and on size.
- ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblioitems.size","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "=";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for size, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
- # ... and on publisher.
- ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblioitems.publishercode","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "=";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for publishercode, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
- # ... and on volume.
- ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblioitems.volume","");
- if ($record->field($tag)) {
- if ($record->field($tag)->subfields($subfield)) {
- push @tags, "'".$tag.$subfield."'";
- push @and_or, "and";
- push @excluding, "";
- push @operator, "=";
- push @value, $record->field($tag)->subfield($subfield);
-# warn "for volume, I add $tag / $subfield".$record->field($tag)->subfield($subfield);
- }
- }
-
- my ($finalresult,$nbresult) = C4::SearchMarc::catalogsearch($dbh,\@tags,\@and_or,\@excluding,\@operator,\@value,0,10);
- # there is at least 1 result => return the 1st one
- if ($nbresult) {
-# warn "$nbresult => ".@$finalresult[0]->{biblionumber},@$finalresult[0]->{bibid},@$finalresult[0]->{title};
- return @$finalresult[0]->{biblionumber},@$finalresult[0]->{bibid},@$finalresult[0]->{title};
- }
- # no result, returns nothing
- return;
-}
-
-sub DisplayISBN {
- my ($isbn)=@_;
- my $seg1;
- if(substr($isbn, 0, 1) <=7) {
- $seg1 = substr($isbn, 0, 1);
- } elsif(substr($isbn, 0, 2) <= 94) {
- $seg1 = substr($isbn, 0, 2);
- } elsif(substr($isbn, 0, 3) <= 995) {
- $seg1 = substr($isbn, 0, 3);
- } elsif(substr($isbn, 0, 4) <= 9989) {
- $seg1 = substr($isbn, 0, 4);
- } else {
- $seg1 = substr($isbn, 0, 5);
- }
- my $x = substr($isbn, length($seg1));
- my $seg2;
- if(substr($x, 0, 2) <= 19) {
-# if(sTmp2 < 10) sTmp2 = "0" sTmp2;
- $seg2 = substr($x, 0, 2);
- } elsif(substr($x, 0, 3) <= 699) {
- $seg2 = substr($x, 0, 3);
- } elsif(substr($x, 0, 4) <= 8399) {
- $seg2 = substr($x, 0, 4);
- } elsif(substr($x, 0, 5) <= 89999) {
- $seg2 = substr($x, 0, 5);
- } elsif(substr($x, 0, 6) <= 9499999) {
- $seg2 = substr($x, 0, 6);
- } else {
- $seg2 = substr($x, 0, 7);
- }
- my $seg3=substr($x,length($seg2));
- $seg3=substr($seg3,0,length($seg3)-1) ;
- my $seg4 = substr($x, -1, 1);
- return "$seg1-$seg2-$seg3-$seg4";