koha-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-devel] CVS: koha/acqui.simple marcimport.pl,NONE,1.1


From: Steve Tonnesen
Subject: [Koha-devel] CVS: koha/acqui.simple marcimport.pl,NONE,1.1
Date: Fri Oct 5 14:28:02 2001

Update of /cvsroot/koha/koha/acqui.simple
In directory usw-pr-cvs1:/tmp/cvs-serv17369

Added Files:
        marcimport.pl 
Log Message:
Added rudimentary marc importing tool.  Just takes a marc record and 
converts to koha database.  Does not keep data in marc format.


--- NEW FILE ---
#!/usr/bin/perl


my $lc1='#dddddd';
my $lc2='#ddaaaa';


use C4::Database;
use CGI;
use DBI;
#use strict;
use C4::Acquisitions;
use C4::Output;
my $dbh=C4Connect;
my $userid=$ENV{'REMOTE_USER'};
%tagtext = (
    '001' => 'Control number',
    '003' => 'Control number identifier',
    '005' => 'Date and time of latest transaction',
    '006' => 'Fixed-length data elements -- additional material 
characteristics',
    '007' => 'Physical description fixed field',
    '008' => 'Fixed length data elements',
    '010' => 'LCCN',
    '015' => 'LCCN Cdn',
    '020' => 'ISBN',
    '022' => 'ISSN',
    '037' => 'Source of acquisition',
    '040' => 'Cataloging source',
    '041' => 'Language code',
    '043' => 'Geographic area code',
    '050' => 'Library of Congress call number',
    '060' => 'National Library of Medicine call number',
    '082' => 'Dewey decimal call number',
    '100' => 'Main entry -- Personal name',
    '110' => 'Main entry -- Corporate name',
    '130' => 'Main entry -- Uniform title',
    '240' => 'Uniform title',
    '245' => 'Title statement',
    '246' => 'Varying form of title',
    '250' => 'Edition statement',
    '256' => 'Computer file characteristics',
    '260' => 'Publication, distribution, etc.',
    '263' => 'Projected publication date',
    '300' => 'Physical description',
    '306' => 'Playing time',
    '440' => 'Series statement / Added entry -- Title',
    '490' => 'Series statement',
    '500' => 'General note',
    '504' => 'Bibliography, etc. note',
    '505' => 'Formatted contents note',
    '508' => 'Creation/production credits note',
    '510' => 'Citation/references note',
    '511' => 'Participant or performer note',
    '520' => 'Summary, etc. note',
    '521' => 'Target audience note (ie age)',
    '530' => 'Additional physical form available note',
    '538' => 'System details note',
    '586' => 'Awards note',
    '600' => 'Subject added entry -- Personal name',
    '610' => 'Subject added entry -- Corporate name',
    '650' => 'Subject added entry -- Topical term',
    '651' => 'Subject added entry -- Geographic name',
    '656' => 'Index term -- Occupation',
    '700' => 'Added entry -- Personal name',
    '710' => 'Added entry -- Corporate name',
    '730' => 'Added entry -- Uniform title',
    '740' => 'Added entry -- Uncontrolled related/analytical title',
    '800' => 'Series added entry -- Personal name',
    '830' => 'Series added entry -- Uniform title',
    '852' => 'Location',
    '856' => 'Electronic location and access',
);


my $input = new CGI;
my $dbh=C4Connect;

print $input->header;
print startpage();
print startmenu('acquisitions');
my $file=$input->param('file');

if ($input->param('insertnewrecord')) {
    my $isbn=$input->param('isbn');
    my $issn=$input->param('issn');
    my $lccn=$input->param('lccn');
    my $q_origisbn=$dbh->quote($input->param('origisbn'));
    my $q_origissn=$dbh->quote($input->param('origissn'));
    my $q_origlccn=$dbh->quote($input->param('origlccn'));
    my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
    my $q_issn=$dbh->quote((($issn) || ('NIL')));
    my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
    $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, 
$q_origissn, $q_origlccn)");
    $sth->execute;
    my $sth=$dbh->prepare("select biblionumber,biblioitemnumber from 
biblioitems where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn");
    $sth->execute;
    my $biblionumber=0;
    my $biblioitemnumber=0;
    print "<center>\n";
    print "<a href=marcimport.pl?file=$file>New Record</a> | <a 
href=marcimport.pl>New File</a><br>\n";
    if ($sth->rows) {
        ($biblionumber, $biblioitemnumber) = $sth->fetchrow;
        my $title=$input->param('title');
        print << "EOF";
        <table border=0 width=50% cellpadding=10 cellspacing=0>
        <tr><th bgcolor=black><font color=white>Record already in 
database</font></th></tr>
        <tr><td bgcolor=#dddddd>$title is already in the database with 
biblionumber $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
        </table>
        <p>
EOF
    } else {
        my $q_title=$dbh->quote($input->param('title'));
        my $q_subtitle=$dbh->quote($input->param('subtitle'));
        my $q_author=$dbh->quote($input->param('author'));
        my $q_copyrightdate=$dbh->quote($input->param('copyrightdate'));
        my $q_seriestitle=$dbh->quote($input->param('seriestitle'));
        $sth=$dbh->prepare("select biblionumber from biblio where 
title=$q_title and author=$q_author and copyrightdate=$q_copyrightdate and 
seriestitle=$q_seriestitle");
        $sth->execute;
        if ($sth->rows) {
            ($biblionumber) = $sth->fetchrow;
        } else {
            $sth=$dbh->prepare("select max(biblionumber) from biblio");
            $sth->execute;
            ($biblionumber) = $sth->fetchrow;
            $biblionumber++;
            $sth=$dbh->prepare("insert into biblio (biblionumber, title, 
author, copyrightdate, seriestitle) values ($biblionumber, $q_title, $q_author, 
$q_copyrightdate, $q_seriestitle)");
            $sth->execute;
            $sth=$dbh->prepare("insert into bibliosubtitle 
(biblionumber,subtitle) values ($biblionumber, $q_subtitle)");
            $sth->execute;
        }
        $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems");
        $sth->execute;
        ($biblioitemnumber) = $sth->fetchrow;
        $biblioitemnumber++;
        my $q_isbn=$dbh->quote($isbn);
        my $q_issn=$dbh->quote($issn);
        my $q_lccn=$dbh->quote($lccn);
        my $q_volume=$dbh->quote($input->param('volume'));
        my $q_number=$dbh->quote($input->param('number'));
        my $q_itemtype=$dbh->quote($input->param('itemtype'));
        my $q_dewey=$dbh->quote($input->param('dewey'));
        my $q_subclass=$dbh->quote($input->param('subclass'));
        my $q_publicationyear=$dbh->quote($input->param('publicationyear'));
        my $q_publishercode=$dbh->quote($input->param('publishercode'));
        my $q_volumedate=$dbh->quote($input->param('volumedate'));
        my $q_volumeddesc=$dbh->quote($input->param('volumeddesc'));
        my $q_illus=$dbh->quote($input->param('illustrator'));
        my $q_pages=$dbh->quote($input->param('pages'));
        my $q_notes=$dbh->quote($input->param('note'));
        my $q_size=$dbh->quote($input->param('size'));
        my $q_place=$dbh->quote($input->param('place'));
        my $q_marc=$dbh->quote($input->param('marc'));

        $sth=$dbh->prepare("insert into biblioitems (biblioitemnumber, 
biblionumber, volume, number, itemtype, isbn, issn, dewey, subclass, 
publicationyear, publishercode, volumedate, volumeddesc, illus, pages, notes, 
size, place, lccn, marc) values ($biblioitemnumber, $biblionumber, $q_volume, 
$q_number, $q_itemtype, $q_isbn, $q_issn, $q_dewey, $q_subclass, 
$q_publicationyear, $q_publishercode, $q_volumedate, $q_volumeddesc, $q_illus, 
$q_pages, $q_notes, $q_size, $q_place, $q_lccn, $q_marc)");
        $sth->execute;
        my $subjectheadings=$input->param('subject');
        my $additionalauthors=$input->param('additionalauthors');
        my @subjectheadings=split(/\n/,$subjectheadings);
        my $subjectheading;
        foreach $subjectheading (@subjectheadings) {
            # remove any line ending characters (Ctrl-J or M)
            $subjectheading=~s/\013//g;
            $subjectheading=~s/\010//g;
            # convert to upper case
            $subjectheading=uc($subjectheading);
            chomp ($subjectheading);
            while (ord(substr($subjectheading, length($subjectheading)-1, 
1))<14) {
                chop $subjectheading;
            }
            # quote value
            my $q_subjectheading=$dbh->quote($subjectheading);
            $sth=$dbh->prepare("insert into bibliosubject (biblionumber,subject)
                values ($biblionumber, $q_subjectheading)");
            $sth->execute;
        }
        my @additionalauthors=split(/\n/,$additionalauthors);
        my $additionalauthor;
        foreach $additionalauthor (@additionalauthors) {
            # remove any line ending characters (Ctrl-L or Ctrl-M)
            $additionalauthor=~s/\013//g;
            $additionalauthor=~s/\010//g;
            # convert to upper case
            $additionalauthor=uc($additionalauthor);
            # quote value
            my $q_additionalauthor=$dbh->quote($additionalauthor);
            $sth=$dbh->prepare("insert into additionalauthors 
(biblionumber,author) values ($biblionumber, $q_additionalauthor)");
            $sth->execute;
        }

        my $title=$input->param('title');
        print << "EOF";
        <table cellpadding=10 cellspacing=0 border=0 width=50%>
        <tr><th bgcolor=black><font color=white>Record entered into 
database</font></th></tr>
        <tr><td bgcolor=#dddddd>$title has been entered into the database with 
biblionumber
        $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
        </table>
EOF
    }
    my $title=$input->param('title');
    $sth=$dbh->prepare("select max(barcode) from items");
    $sth->execute;
    my ($barcode) = $sth->fetchrow;
    $barcode++;
    print << "EOF";
    <table border=0 cellpadding=10 cellspacing=0>
    <tr><th bgcolor=black><font color=white>
Add a New Item for $title
</font>
</th></tr>
<tr><td bgcolor=#dddddd>
<form>
<input type=hidden name=newitem value=1>
<input type=hidden name=biblionumber value=$biblionumber>
<input type=hidden name=biblioitemnumber value=$biblioitemnumber>
<input type=hidden name=file value=$file>
<table border=0>
<tr><td>BARCODE</td><td><input name=barcode size=10 value=$barcode> Home 
Branch: <select name=homebranch><option value='STWE'>Stewart Elementary<option 
value='MEZ'>Meziadin Elementary</select></td></tr>
</tr><td>Replacement Price:</td><td><input name=replacementprice 
size=10></td></tr>
<tr><td>Notes</td><td><textarea name=notes rows=4 cols=40
wrap=physical></textarea></td></tr>
</table>
</td></tr>
</table>
<p>
<input type=submit value="Add Item">
</form>
EOF
print endmenu();
print endpage();

exit;
}

if ($input->param('newitem')) {
    my $barcode=$input->param('barcode');
    my $q_barcode=$dbh->quote($barcode);
    my $q_notes=$dbh->quote($input->param('notes'));
    my $q_homebranch=$dbh->quote($input->param('homebranch'));
    my $biblionumber=$input->param('biblionumber');
    my $biblioitemnumber=$input->param('biblioitemnumber');
    my $replacementprice=($input->param('replacementprice') || 0);
    my $sth=$dbh->prepare("select max(itemnumber) from items");
    $sth->execute;
    my ($itemnumber) = $sth->fetchrow;
    $itemnumber++;
    my @datearr=localtime(time);
    my $date=(1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
    $sth=$dbh->prepare("insert into items (itemnumber, biblionumber, 
biblioitemnumber, barcode, itemnotes, homebranch, holdingbranch, 
dateaccessioned, replacementprice) values ($itemnumber, $biblionumber, 
$biblioitemnumber, $q_barcode, $q_notes, $q_homebranch, 'STWE', '$date', 
$replacementprice)");
    $sth->execute;
}


if ($file) {
    my $qisbn=$input->param('isbn');
    my $qissn=$input->param('issn');
    my $qlccn=$input->param('lccn');
    my $qcontrolnumber=$input->param('controlnumber');
    if ($qisbn || $qissn || $qlccn || $qcontrolnumber) {
        print "<a href=marcimport.pl>New File</a><hr>\n";
        open (F, "$file");
        my $data=<F>;

        $splitchar=chr(29);
        my @records;
        foreach $record (split(/$splitchar/, $data)) {
            my $marctext="<table border=0 cellspacing=0>\n";
            $marctext.="<tr><th colspan=3 bgcolor=black><font color=white>MARC 
RECORD</font></th></tr>\n";
            $leader=substr($record,0,24);
            $marctext.="<tr><td>Leader:</td><td colspan=2>$leader</td></tr>\n";
            $record=substr($record,24);
            $splitchar2=chr(30);
            my $directory=0;
            my $tagcounter=0;
            my %tag;
            my @record;
            foreach $field (split(/$splitchar2/, $record)) {
                my %field;
                ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
                unless ($directory) {
                    $directory=$field;
                    my $itemcounter=1;
                    $counter=0;
                    while ($item=substr($directory,0,12)) {
                        $tag=substr($directory,0,3);
                        $length=substr($directory,3,4);
                        $start=substr($directory,7,6);
                        $directory=substr($directory,12);
                        $tag{$counter}=$tag;
                        $counter++;
                    }
                    $directory=1;
                    next;
                }
                $tag=$tag{$tagcounter};
                $tagcounter++;
                $field{'tag'}=$tag;
                $marctext.="<tr><td bgcolor=$color 
valign=top>$tagtext{$tag}</td><td bgcolor=$color valign=top>$tag</td>";
                $splitchar3=chr(31);
                my @subfields=split(/$splitchar3/, $field);
                $indicator=$subfields[0];
                $field{'indicator'}=$indicator;
                my $firstline=1;
                if ($#subfields==0) {
                    $marctext.="<td bgcolor=$color 
valign=top>$indicator</td></tr>";
                } else {
                    my %subfields;
                    $marctext.="<td bgcolor=$color valign=top><table border=0 
cellspacing=0>\n";
                    my $color2=$color;
                    for ($i=1; $i<=$#subfields; $i++) {
                        ($color2 eq $lc1) ? ($color2=$lc2) : ($color2=$lc1);
                        my $text=$subfields[$i];
                        my $subfieldcode=substr($text,0,1);
                        my $subfield=substr($text,1);
                        $marctext.="<tr><td colour=$color2><table border=0 
cellpadding=0 cellspacing=0><tr><td>$subfieldcode </td></tr></table></td><td 
colour=$color2>$subfield</td></tr>\n";
                        if ($subfields{$subfieldcode}) {
                            my $subfieldlist=$subfields{$subfieldcode};
                            my @address@hidden;
                            if ($#subfieldlist>=0) {
                                push (@subfieldlist, $subfield);
                            } else {
                                @subfieldlist=($subfields{$subfieldcode}, 
$subfield);
                            }
                            address@hidden;
                        } else {
                            $subfields{$subfieldcode}=$subfield;
                        }
                    }
                    $marctext.="</table></td></tr>\n";
                    $field{'subfields'}=\%subfields;
                }
                push (@record, \%field);
            }
            $marctext.="</table>\n";
            address@hidden;
            address@hidden;
            push (@records, address@hidden);
            $counter++;
        }
RECORD:
        foreach $record (@records) {
            my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, 
$publisher, $publicationyear, $volume, $number, @subjects, $note, 
$additionalauthors, $illustrator, $copyrightdate, $seriestitle);
            my $marctext=$marctext{$record};
            my $marc=$marc{$record};
            foreach $field (@$record) {
                if ($field->{'tag'} eq '001') {
                    $controlnumber=$field->{'indicator'};
                }
                if ($field->{'tag'} eq '010') {
                    $lccn=$field->{'subfields'}->{'a'};
                    $lccn=~s/^\s*//;
                    ($lccn) = (split(/\s+/, $lccn))[0];
                }
                if ($field->{'tag'} eq '015') {
                    $lccn=$field->{'subfields'}->{'a'};
                    $lccn=~s/^\s*//;
                    $lccn=~s/^C//;
                    ($lccn) = (split(/\s+/, $lccn))[0];
                }
                if ($field->{'tag'} eq '020') {
                    $isbn=$field->{'subfields'}->{'a'};
                    ($isbn=~/^ARRAY/) && ($isbn=$$isbn[0]);
                    $isbn=~s/[^\d]*//g;
                }
                if ($field->{'tag'} eq '022') {
                    $issn=$field->{'subfields'}->{'a'};
                    $issn=~s/^\s*//;
                    ($issn) = (split(/\s+/, $issn))[0];
                }
                if ($field->{'tag'} eq '082') {
                    $dewey=$field->{'subfields'}->{'a'};
                    $dewey=~s/\///g;
                    if (@$dewey) {
                        $dewey=$$dewey[0];
                    }
                    #$dewey=~s/\///g;
                }
                if ($field->{'tag'} eq '100') {
                    $author=$field->{'subfields'}->{'a'};
                }
                if ($field->{'tag'} eq '245') {
                    $title=$field->{'subfields'}->{'a'};
                    $title=~s/ \/$//;
                    $subtitle=$field->{'subfields'}->{'b'};
                    $subtitle=~s/ \/$//;
                }
                if ($field->{'tag'} eq '260') {
                    $place=$field->{'subfields'}->{'a'};
                    if (@$place) {
                        $place=$$place[0];
                    }
                    $place=~s/\s*:$//g;
                    $publisher=$field->{'subfields'}->{'b'};
                    if (@$publisher) {
                        $publisher=$$publisher[0];
                    }
                    $publisher=~s/\s*:$//g;
                    $publicationyear=$field->{'subfields'}->{'c'};
                    if ($publicationyear=~/c(\d\d\d\d)/) {
                        $copyrightdate=$1;
                    }
                    if ($publicationyear=~/[^c](\d\d\d\d)/) {
                        $publicationyear=$1;
                    } elsif ($copyrightdate) {
                        $publicationyear=$copyrightdate;
                    } else {
                        $publicationyear=~/(\d\d\d\d)/;
                        $publicationyear=$1;
                    }
                }
                if ($field->{'tag'} eq '300') {
                    $pages=$field->{'subfields'}->{'a'};
                    $pages=~s/ \;$//;
                    $size=$field->{'subfields'}->{'c'};
                    $pages=~s/\s*:$//g;
                    $size=~s/\s*:$//g;
                }
                if ($field->{'tag'} eq '362') {
                    if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
                        $volume=$1;
                        $number=$2;
                    }
                }
                if ($field->{'tag'} eq '440') {
                    $seriestitle=$field->{'subfields'}->{'a'};
                    if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
                        $volume=$1;
                        $number=$2;
                    }
                }
                if ($field->{'tag'} eq '700') {
                    my $name=$field->{'subfields'}->{'a'};
                    if ($field->{'subfields'}->{'c'}=~/ill/) {
                        $additionalauthors.="$name\n";
                    } else {
                        $illustrator=$name;
                    }
                }
                if ($field->{'tag'} =~/^5/) {
                    $note.="$field->{'subfields'}->{'a'}\n";
                }
                if ($field->{'tag'} =~/65\d/) {
                    my $subject=$field->{'subfields'}->{'a'};
                    $subject=~s/\.$//;
                    if ($gensubdivision=$field->{'subfields'}->{'x'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $gensubdivision=~s/\.$//;
                            $subject.=" -- $gensubdivision";
                        }
                    }
                    if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $chronsubdivision=~s/\.$//;
                            $subject.=" -- $chronsubdivision";
                        }
                    }
                    if ($geosubdivision=$field->{'subfields'}->{'z'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $geosubdivision=~s/\.$//;
                            $subject.=" -- $geosubdivision";
                        }
                    }
                    push @subjects, $subject;
                }
            }
            $titleinput=$input->textfield(-name=>'title', -default=>$title, 
-size=>40);
            $marcinput=$input->hidden(-name=>'marc', -default=>$marc);
            $subtitleinput=$input->textfield(-name=>'subtitle', 
-default=>$subtitle, -size=>40);
            $authorinput=$input->textfield(-name=>'author', -default=>$author);
            $illustratorinput=$input->textfield(-name=>'illustrator', 
-default=>$illustrator);
            
$additionalauthorsinput=$input->textarea(-name=>'additionalauthors', 
-default=>$additionalauthors, -rows=>4, -cols=>20);
            my $subject='';
            foreach (@subjects) {
                $subject.="$_\n";
            }
            $subjectinput=$input->textarea(-name=>'subject', 
-default=>$subject, -rows=>4, -cols=>40);
            $noteinput=$input->textarea(-name=>'note', -default=>$note, 
-rows=>4, -cols=>40, -wrap=>'physical');
            $copyrightinput=$input->textfield(-name=>'copyrightdate', 
-default=>$copyrightdate);
            $seriestitleinput=$input->textfield(-name=>'seriestitle', 
-default=>$seriestitle);
            $volumeinput=$input->textfield(-name=>'volume', -default=>$volume);
            $volumedateinput=$input->textfield(-name=>'volumedate', 
-default=>$volumedate);
            $volumeddescinput=$input->textfield(-name=>'volumeddesc', 
-default=>$volumeddesc);
            $numberinput=$input->textfield(-name=>'number', -default=>$number);
            $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
            $issninput=$input->textfield(-name=>'issn', -default=>$issn);
            $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn);
            $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
            $deweyinput=$input->textfield(-name=>'dewey', -default=>$dewey);
            $cleanauthor=$author;
            $cleanauthor=~s/[^A-Za-z]//g;
            $subclassinput=$input->textfield(-name=>'subclass', 
-default=>uc(substr($cleanauthor,0,3)));
            $publisherinput=$input->textfield(-name=>'publishercode', 
-default=>$publisher);
            $pubyearinput=$input->textfield(-name=>'publicationyear', 
-default=>$publicationyear);
            $placeinput=$input->textfield(-name=>'place', -default=>$place);
            $pagesinput=$input->textfield(-name=>'pages', -default=>$pages);
            $sizeinput=$input->textfield(-name=>'size', -default=>$size);
            $fileinput=$input->hidden(-name=>'file', -default=>$file);
            $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn);
            $origissn=$input->hidden(-name=>'origissn', -default=>$issn);
            $origlccn=$input->hidden(-name=>'origlccn', -default=>$lccn);
            $origcontrolnumber=$input->hidden(-name=>'origcontrolnumber', 
-default=>$controlnumber);

            my $itemtypeselect='';
            $sth=$dbh->prepare("select itemtype,description from itemtypes");
            $sth->execute;
            while (my ($itemtype, $description) = $sth->fetchrow) {
                $itemtypeselect.="<option value=$itemtype>$itemtype - 
$description\n";
            }
            ($qissn) || ($qissn='NIL');
            ($qlccn) || ($qlccn='NIL');
            ($qisbn) || ($qisbn='NIL');
            ($qcontrolnumber) || ($qcontrolnumber='NIL');
            unless (($isbn eq $qisbn) || ($issn eq $qissn) || ($lccn eq $qlccn) 
|| ($controlnumber eq $qcontrolnumber)) {
                next RECORD;
            }

            print << "EOF";
            <center>
            <h1>New Record</h1>
            Full MARC Record available at bottom
            <form method=post>
            <table border=1>
            <tr><td>Title</td><td>$titleinput</td></tr>
            <tr><td>Subtitle</td><td>$subtitleinput</td></tr>
            <tr><td>Author</td><td>$authorinput</td></tr>
            <tr><td>Additional Authors</td><td>$additionalauthorsinput</td></tr>
            <tr><td>Illustrator</td><td>$illustratorinput</td></tr>
            <tr><td>Copyright</td><td>$copyrightinput</td></tr>
            <tr><td>Series Title</td><td>$seriestitleinput</td></tr>
            <tr><td>Volume</td><td>$volumeinput</td></tr>
            <tr><td>Number</td><td>$numberinput</td></tr>
            <tr><td>Volume Date</td><td>$volumedateinput</td></tr>
            <tr><td>Volume Description</td><td>$volumeddescinput</td></tr>
            <tr><td>Subject</td><td>$subjectinput</td></tr>
            <tr><td>Notes</td><td>$noteinput</td></tr>
            <tr><td>Item Type</td><td><select 
name=itemtype>$itemtypeselect</select></td></tr>
            <tr><td>ISBN</td><td>$isbninput</td></tr>
            <tr><td>ISSN</td><td>$issninput</td></tr>
            <tr><td>LCCN</td><td>$lccninput</td></tr>
            <tr><td>Dewey</td><td>$deweyinput</td></tr>
            <tr><td>Subclass</td><td>$subclassinput</td></tr>
            <tr><td>Publication Year</td><td>$pubyearinput</td></tr>
            <tr><td>Publisher</td><td>$publisherinput</td></tr>
            <tr><td>Place</td><td>$placeinput</td></tr>
            <tr><td>Pages</td><td>$pagesinput</td></tr>
            <tr><td>Size</td><td>$sizeinput</td></tr>
            </table>
            <input type=submit>
            <input type=hidden name=insertnewrecord value=1>
            $fileinput
            $marcinput
            $origisbn
            $origissn
            $origlccn
            $origcontrolnumber
            </form>
            $marctext
EOF
        }
    } else {
        open (F, "$file");
        my $data=<F>;

        $splitchar=chr(29);
        my @records;
        foreach $record (split(/$splitchar/, $data)) {
            $leader=substr($record,0,24);
            #print "<tr><td>Leader:</td><td>$leader</td></tr>\n";
            $record=substr($record,24);
            $splitchar2=chr(30);
            my $directory=0;
            my $tagcounter=0;
            my %tag;
            my @record;
            foreach $field (split(/$splitchar2/, $record)) {
                my %field;
                ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
                unless ($directory) {
                    $directory=$field;
                    my $itemcounter=1;
                    $counter=0;
                    while ($item=substr($directory,0,12)) {
                        $tag=substr($directory,0,3);
                        $length=substr($directory,3,4);
                        $start=substr($directory,7,6);
                        $directory=substr($directory,12);
                        $tag{$counter}=$tag;
                        $counter++;
                    }
                    $directory=1;
                    next;
                }
                $tag=$tag{$tagcounter};
                $tagcounter++;
                $field{'tag'}=$tag;
                $splitchar3=chr(31);
                my @subfields=split(/$splitchar3/, $field);
                $indicator=$subfields[0];
                $field{'indicator'}=$indicator;
                my $firstline=1;
                unless ($#subfields==0) {
                    my %subfields;
                    for ($i=1; $i<=$#subfields; $i++) {
                        my $text=$subfields[$i];
                        my $subfieldcode=substr($text,0,1);
                        my $subfield=substr($text,1);
                        if ($subfields{$subfieldcode}) {
                            my $subfieldlist=$subfields{$subfieldcode};
                            my @address@hidden;
                            if ($#subfieldlist>=0) {
#                       print "$tag Adding to array $subfieldcode -- 
$subfield<br>\n";
                                push (@subfieldlist, $subfield);
                            } else {
#                       print "$tag Arraying $subfieldcode -- $subfield<br>\n";
                                @subfieldlist=($subfields{$subfieldcode}, 
$subfield);
                            }
                            address@hidden;
                        } else {
                            $subfields{$subfieldcode}=$subfield;
                        }
                    }
                    $field{'subfields'}=\%subfields;
                }
                push (@record, \%field);
            }
            push (@records, address@hidden);
            $counter++;
        }
        print << "EOF";
        <center>
        <p>
        <a href=marcimport.pl>Select a New File</a>
        <p>
        <table border=0 cellpadding=10 cellspacing=0>
        <tr><th bgcolor=black><font color=white>Select a Record to 
Import</font></th></tr>
        <tr><td bgcolor=#dddddd>
EOF
        my $text='';
        foreach $record (@records) {
            my @subjects=();
            my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, 
$publisher, $publicationyear, $volume, $number, @subjects, $note, 
$controlnumber);
            foreach $field (@$record) {
                $text.=$field->{'tag'}."\n";
                foreach (keys %{$field->{'subfields'}}) {
                    my $value=$field->{'subfields'}->{$_};
                    $text.="  $_: $value\n";
                }
                if ($field->{'tag'} eq '001') {
                    $controlnumber=$field->{'indicator'};
                }
                if ($field->{'tag'} eq '010') {
                    $lccn=$field->{'subfields'}->{'a'};
                    $lccn=~s/^\s*//;
                    ($lccn) = (split(/\s+/, $lccn))[0];
                }
                if ($field->{'tag'} eq '015') {
                    $lccn=$field->{'subfields'}->{'a'};
                    $lccn=~s/^\s*//;
                    $lccn=~s/^C//;
                    ($lccn) = (split(/\s+/, $lccn))[0];
                }
                if ($field->{'tag'} eq '020') {
                    $isbn=$field->{'subfields'}->{'a'};
                    ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]);
                    $isbn=~s/[^\d]*//g;
                }
                if ($field->{'tag'} eq '022') {
                    $issn=$field->{'subfields'}->{'a'};
                    $issn=~s/^\s*//;
                    ($issn) = (split(/\s+/, $issn))[0];
                }
                if ($field->{'tag'} eq '082') {
                    $dewey=$field->{'subfields'}->{'a'};
                    $dewey=~s/\///g;
                    if (@$dewey) {
                        $dewey=$$dewey[0];
                    }
                    #$dewey=~s/\///g;
                }
                if ($field->{'tag'} eq '100') {
                    $author=$field->{'subfields'}->{'a'};
                }
                if ($field->{'tag'} eq '245') {
                    $title=$field->{'subfields'}->{'a'};
                    $title=~s/ \/$//;
                    $subtitle=$field->{'subfields'}->{'b'};
                    $subtitle=~s/ \/$//;
                }
                if ($field->{'tag'} eq '260') {
                    $place=$field->{'subfields'}->{'a'};
                    if (@$place) {
                        $place=$$place[0];
                    }
                    $place=~s/\s*:$//g;
                    $publisher=$field->{'subfields'}->{'b'};
                    if (@$publisher) {
                        $publisher=$$publisher[0];
                    }
                    $publisher=~s/\s*:$//g;
                    $publicationyear=$field->{'subfields'}->{'c'};
                    if ($publicationyear=~/c(\d\d\d\d)/) {
                        $copyrightdate=$1;
                    }
                    if ($publicationyear=~/[^c](\d\d\d\d)/) {
                        $publicationyear=$1;
                    } elsif ($copyrightdate) {
                        $publicationyear=$copyrightdate;
                    } else {
                        $publicationyear=~/(\d\d\d\d)/;
                        $publicationyear=$1;
                    }
                }
                if ($field->{'tag'} eq '300') {
                    $pages=$field->{'subfields'}->{'a'};
                    $pages=~s/ \;$//;
                    $size=$field->{'subfields'}->{'c'};
                    $pages=~s/\s*:$//g;
                    $size=~s/\s*:$//g;
                }
                if ($field->{'tag'} eq '362') {
                    if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
                        $volume=$1;
                        $number=$2;
                    }
                }
                if ($field->{'tag'} eq '440') {
                    $seriestitle=$field->{'subfields'}->{'a'};
                    if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
                        $volume=$1;
                        $number=$2;
                    }
                }
                if ($field->{'tag'} =~/^5/) {
                    $note.="$field->{'subfields'}->{'a'}\n";
                }
                if ($field->{'tag'} =~/65\d/) {
                    my $subject=$field->{'subfields'}->{'a'};
                    $subject=~s/\.$//;
                    if ($gensubdivision=$field->{'subfields'}->{'x'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $gensubdivision=~s/\.$//;
                            $subject.=" -- $gensubdivision";
                        }
                    }
                    if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $chronsubdivision=~s/\.$//;
                            $subject.=" -- $chronsubdivision";
                        }
                    }
                    if ($geosubdivision=$field->{'subfields'}->{'z'}) {
                        my @address@hidden;
                        if ($#sub>=0) {
                            foreach $s (@sub) {
                                $s=~s/\.$//;
                                $subject.=" -- $s";
                            }
                        } else {
                            $geosubdivision=~s/\.$//;
                            $subject.=" -- $geosubdivision";
                        }
                    }
                    push @subjects, $subject;
                }
            }
            my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
            my $q_issn=$dbh->quote((($issn) || ('NIL')));
            my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
            my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL')));
            my $sth=$dbh->prepare("select * from marcrecorddone where 
isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or 
controlnumber=$q_controlnumber");
            $sth->execute;
            my $donetext='';
            if ($sth->rows) {
                $donetext="DONE";
            }
            $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or 
issn=$q_issn or lccn=$q_lccn");
            $sth->execute;
            if ($sth->rows) {
                $donetext="DONE";
            }
            if ($isbn) {
                print "<a href=marcimport.pl?file=$file&isbn=$isbn>$title by 
$author</a> $donetext<br>\n";
            } elsif ($lccn) {
                print "<a href=marcimport.pl?file=$file&lccn=$lccn>$title by 
$author</a> $donetext<br>\n";
            } elsif ($issn) {
                print "<a href=marcimport.pl?file=$file&issn=$issn>$title by 
$author</a><br> $donetext\n";
            } elsif ($controlnumber) {
                print "<a 
href=marcimport.pl?file=$file&controlnumber=$controlnumber>$title by 
$author</a><br> $donetext\n";
            } else {
                print "Error: Contact steve regarding $title by $author<br>\n";
            }
        }
        print "</td></tr></table>\n";
    }
} else {
    opendir(D, "/home/$userid/");
    my @dirlist=readdir D;
    foreach $file (@dirlist) {
        (next) if ($file=~/^\./);
        (next) if ($file=~/^nsmail$/);
        (next) if ($file=~/^public_html$/);
        ($file=~/\.mrc/) || ($filelist.="$file<br>\n");
        (next) unless ($file=~/\.mrc$/);
        $file=~s/ /\%20/g;
        print "<a href=marcimport.pl?file=/home/$userid/$file>$file</a><br>\n";
    }
    print << "EOF";
    <form method=get>
    File to read MARC records from: <input name=file size=30>
    <p>
    Other files in home directory:<p>
    $filelist
    </form>
EOF
}
print endmenu();
print endpage();





reply via email to

[Prev in Thread] Current Thread [Next in Thread]