Added rudimentary marc importing tool. Just takes a marc record and
[koha-ffzg.git] / acqui.simple / marcimport.pl
1 #!/usr/bin/perl
2
3
4 my $lc1='#dddddd';
5 my $lc2='#ddaaaa';
6
7
8 use C4::Database;
9 use CGI;
10 use DBI;
11 #use strict;
12 use C4::Acquisitions;
13 use C4::Output;
14 my $dbh=C4Connect;
15 my $userid=$ENV{'REMOTE_USER'};
16 %tagtext = (
17     '001' => 'Control number',
18     '003' => 'Control number identifier',
19     '005' => 'Date and time of latest transaction',
20     '006' => 'Fixed-length data elements -- additional material characteristics',
21     '007' => 'Physical description fixed field',
22     '008' => 'Fixed length data elements',
23     '010' => 'LCCN',
24     '015' => 'LCCN Cdn',
25     '020' => 'ISBN',
26     '022' => 'ISSN',
27     '037' => 'Source of acquisition',
28     '040' => 'Cataloging source',
29     '041' => 'Language code',
30     '043' => 'Geographic area code',
31     '050' => 'Library of Congress call number',
32     '060' => 'National Library of Medicine call number',
33     '082' => 'Dewey decimal call number',
34     '100' => 'Main entry -- Personal name',
35     '110' => 'Main entry -- Corporate name',
36     '130' => 'Main entry -- Uniform title',
37     '240' => 'Uniform title',
38     '245' => 'Title statement',
39     '246' => 'Varying form of title',
40     '250' => 'Edition statement',
41     '256' => 'Computer file characteristics',
42     '260' => 'Publication, distribution, etc.',
43     '263' => 'Projected publication date',
44     '300' => 'Physical description',
45     '306' => 'Playing time',
46     '440' => 'Series statement / Added entry -- Title',
47     '490' => 'Series statement',
48     '500' => 'General note',
49     '504' => 'Bibliography, etc. note',
50     '505' => 'Formatted contents note',
51     '508' => 'Creation/production credits note',
52     '510' => 'Citation/references note',
53     '511' => 'Participant or performer note',
54     '520' => 'Summary, etc. note',
55     '521' => 'Target audience note (ie age)',
56     '530' => 'Additional physical form available note',
57     '538' => 'System details note',
58     '586' => 'Awards note',
59     '600' => 'Subject added entry -- Personal name',
60     '610' => 'Subject added entry -- Corporate name',
61     '650' => 'Subject added entry -- Topical term',
62     '651' => 'Subject added entry -- Geographic name',
63     '656' => 'Index term -- Occupation',
64     '700' => 'Added entry -- Personal name',
65     '710' => 'Added entry -- Corporate name',
66     '730' => 'Added entry -- Uniform title',
67     '740' => 'Added entry -- Uncontrolled related/analytical title',
68     '800' => 'Series added entry -- Personal name',
69     '830' => 'Series added entry -- Uniform title',
70     '852' => 'Location',
71     '856' => 'Electronic location and access',
72 );
73
74
75 my $input = new CGI;
76 my $dbh=C4Connect;
77
78 print $input->header;
79 print startpage();
80 print startmenu('acquisitions');
81 my $file=$input->param('file');
82
83 if ($input->param('insertnewrecord')) {
84     my $isbn=$input->param('isbn');
85     my $issn=$input->param('issn');
86     my $lccn=$input->param('lccn');
87     my $q_origisbn=$dbh->quote($input->param('origisbn'));
88     my $q_origissn=$dbh->quote($input->param('origissn'));
89     my $q_origlccn=$dbh->quote($input->param('origlccn'));
90     my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
91     my $q_issn=$dbh->quote((($issn) || ('NIL')));
92     my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
93     $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn)");
94     $sth->execute;
95     my $sth=$dbh->prepare("select biblionumber,biblioitemnumber from biblioitems where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn");
96     $sth->execute;
97     my $biblionumber=0;
98     my $biblioitemnumber=0;
99     print "<center>\n";
100     print "<a href=marcimport.pl?file=$file>New Record</a> | <a href=marcimport.pl>New File</a><br>\n";
101     if ($sth->rows) {
102         ($biblionumber, $biblioitemnumber) = $sth->fetchrow;
103         my $title=$input->param('title');
104         print << "EOF";
105         <table border=0 width=50% cellpadding=10 cellspacing=0>
106         <tr><th bgcolor=black><font color=white>Record already in database</font></th></tr>
107         <tr><td bgcolor=#dddddd>$title is already in the database with biblionumber $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
108         </table>
109         <p>
110 EOF
111     } else {
112         my $q_title=$dbh->quote($input->param('title'));
113         my $q_subtitle=$dbh->quote($input->param('subtitle'));
114         my $q_author=$dbh->quote($input->param('author'));
115         my $q_copyrightdate=$dbh->quote($input->param('copyrightdate'));
116         my $q_seriestitle=$dbh->quote($input->param('seriestitle'));
117         $sth=$dbh->prepare("select biblionumber from biblio where title=$q_title and author=$q_author and copyrightdate=$q_copyrightdate and seriestitle=$q_seriestitle");
118         $sth->execute;
119         if ($sth->rows) {
120             ($biblionumber) = $sth->fetchrow;
121         } else {
122             $sth=$dbh->prepare("select max(biblionumber) from biblio");
123             $sth->execute;
124             ($biblionumber) = $sth->fetchrow;
125             $biblionumber++;
126             $sth=$dbh->prepare("insert into biblio (biblionumber, title, author, copyrightdate, seriestitle) values ($biblionumber, $q_title, $q_author, $q_copyrightdate, $q_seriestitle)");
127             $sth->execute;
128             $sth=$dbh->prepare("insert into bibliosubtitle (biblionumber,subtitle) values ($biblionumber, $q_subtitle)");
129             $sth->execute;
130         }
131         $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems");
132         $sth->execute;
133         ($biblioitemnumber) = $sth->fetchrow;
134         $biblioitemnumber++;
135         my $q_isbn=$dbh->quote($isbn);
136         my $q_issn=$dbh->quote($issn);
137         my $q_lccn=$dbh->quote($lccn);
138         my $q_volume=$dbh->quote($input->param('volume'));
139         my $q_number=$dbh->quote($input->param('number'));
140         my $q_itemtype=$dbh->quote($input->param('itemtype'));
141         my $q_dewey=$dbh->quote($input->param('dewey'));
142         my $q_subclass=$dbh->quote($input->param('subclass'));
143         my $q_publicationyear=$dbh->quote($input->param('publicationyear'));
144         my $q_publishercode=$dbh->quote($input->param('publishercode'));
145         my $q_volumedate=$dbh->quote($input->param('volumedate'));
146         my $q_volumeddesc=$dbh->quote($input->param('volumeddesc'));
147         my $q_illus=$dbh->quote($input->param('illustrator'));
148         my $q_pages=$dbh->quote($input->param('pages'));
149         my $q_notes=$dbh->quote($input->param('note'));
150         my $q_size=$dbh->quote($input->param('size'));
151         my $q_place=$dbh->quote($input->param('place'));
152         my $q_marc=$dbh->quote($input->param('marc'));
153
154         $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)");
155         $sth->execute;
156         my $subjectheadings=$input->param('subject');
157         my $additionalauthors=$input->param('additionalauthors');
158         my @subjectheadings=split(/\n/,$subjectheadings);
159         my $subjectheading;
160         foreach $subjectheading (@subjectheadings) {
161             # remove any line ending characters (Ctrl-J or M)
162             $subjectheading=~s/\013//g;
163             $subjectheading=~s/\010//g;
164             # convert to upper case
165             $subjectheading=uc($subjectheading);
166             chomp ($subjectheading);
167             while (ord(substr($subjectheading, length($subjectheading)-1, 1))<14) {
168                 chop $subjectheading;
169             }
170             # quote value
171             my $q_subjectheading=$dbh->quote($subjectheading);
172             $sth=$dbh->prepare("insert into bibliosubject (biblionumber,subject)
173                 values ($biblionumber, $q_subjectheading)");
174             $sth->execute;
175         }
176         my @additionalauthors=split(/\n/,$additionalauthors);
177         my $additionalauthor;
178         foreach $additionalauthor (@additionalauthors) {
179             # remove any line ending characters (Ctrl-L or Ctrl-M)
180             $additionalauthor=~s/\013//g;
181             $additionalauthor=~s/\010//g;
182             # convert to upper case
183             $additionalauthor=uc($additionalauthor);
184             # quote value
185             my $q_additionalauthor=$dbh->quote($additionalauthor);
186             $sth=$dbh->prepare("insert into additionalauthors (biblionumber,author) values ($biblionumber, $q_additionalauthor)");
187             $sth->execute;
188         }
189
190         my $title=$input->param('title');
191         print << "EOF";
192         <table cellpadding=10 cellspacing=0 border=0 width=50%>
193         <tr><th bgcolor=black><font color=white>Record entered into database</font></th></tr>
194         <tr><td bgcolor=#dddddd>$title has been entered into the database with biblionumber
195         $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
196         </table>
197 EOF
198     }
199     my $title=$input->param('title');
200     $sth=$dbh->prepare("select max(barcode) from items");
201     $sth->execute;
202     my ($barcode) = $sth->fetchrow;
203     $barcode++;
204     print << "EOF";
205     <table border=0 cellpadding=10 cellspacing=0>
206     <tr><th bgcolor=black><font color=white>
207 Add a New Item for $title
208 </font>
209 </th></tr>
210 <tr><td bgcolor=#dddddd>
211 <form>
212 <input type=hidden name=newitem value=1>
213 <input type=hidden name=biblionumber value=$biblionumber>
214 <input type=hidden name=biblioitemnumber value=$biblioitemnumber>
215 <input type=hidden name=file value=$file>
216 <table border=0>
217 <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>
218 </tr><td>Replacement Price:</td><td><input name=replacementprice size=10></td></tr>
219 <tr><td>Notes</td><td><textarea name=notes rows=4 cols=40
220 wrap=physical></textarea></td></tr>
221 </table>
222 </td></tr>
223 </table>
224 <p>
225 <input type=submit value="Add Item">
226 </form>
227 EOF
228 print endmenu();
229 print endpage();
230
231 exit;
232 }
233
234 if ($input->param('newitem')) {
235     my $barcode=$input->param('barcode');
236     my $q_barcode=$dbh->quote($barcode);
237     my $q_notes=$dbh->quote($input->param('notes'));
238     my $q_homebranch=$dbh->quote($input->param('homebranch'));
239     my $biblionumber=$input->param('biblionumber');
240     my $biblioitemnumber=$input->param('biblioitemnumber');
241     my $replacementprice=($input->param('replacementprice') || 0);
242     my $sth=$dbh->prepare("select max(itemnumber) from items");
243     $sth->execute;
244     my ($itemnumber) = $sth->fetchrow;
245     $itemnumber++;
246     my @datearr=localtime(time);
247     my $date=(1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
248     $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)");
249     $sth->execute;
250 }
251
252
253 if ($file) {
254     my $qisbn=$input->param('isbn');
255     my $qissn=$input->param('issn');
256     my $qlccn=$input->param('lccn');
257     my $qcontrolnumber=$input->param('controlnumber');
258     if ($qisbn || $qissn || $qlccn || $qcontrolnumber) {
259         print "<a href=marcimport.pl>New File</a><hr>\n";
260         open (F, "$file");
261         my $data=<F>;
262
263         $splitchar=chr(29);
264         my @records;
265         foreach $record (split(/$splitchar/, $data)) {
266             my $marctext="<table border=0 cellspacing=0>\n";
267             $marctext.="<tr><th colspan=3 bgcolor=black><font color=white>MARC RECORD</font></th></tr>\n";
268             $leader=substr($record,0,24);
269             $marctext.="<tr><td>Leader:</td><td colspan=2>$leader</td></tr>\n";
270             $record=substr($record,24);
271             $splitchar2=chr(30);
272             my $directory=0;
273             my $tagcounter=0;
274             my %tag;
275             my @record;
276             foreach $field (split(/$splitchar2/, $record)) {
277                 my %field;
278                 ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
279                 unless ($directory) {
280                     $directory=$field;
281                     my $itemcounter=1;
282                     $counter=0;
283                     while ($item=substr($directory,0,12)) {
284                         $tag=substr($directory,0,3);
285                         $length=substr($directory,3,4);
286                         $start=substr($directory,7,6);
287                         $directory=substr($directory,12);
288                         $tag{$counter}=$tag;
289                         $counter++;
290                     }
291                     $directory=1;
292                     next;
293                 }
294                 $tag=$tag{$tagcounter};
295                 $tagcounter++;
296                 $field{'tag'}=$tag;
297                 $marctext.="<tr><td bgcolor=$color valign=top>$tagtext{$tag}</td><td bgcolor=$color valign=top>$tag</td>";
298                 $splitchar3=chr(31);
299                 my @subfields=split(/$splitchar3/, $field);
300                 $indicator=$subfields[0];
301                 $field{'indicator'}=$indicator;
302                 my $firstline=1;
303                 if ($#subfields==0) {
304                     $marctext.="<td bgcolor=$color valign=top>$indicator</td></tr>";
305                 } else {
306                     my %subfields;
307                     $marctext.="<td bgcolor=$color valign=top><table border=0 cellspacing=0>\n";
308                     my $color2=$color;
309                     for ($i=1; $i<=$#subfields; $i++) {
310                         ($color2 eq $lc1) ? ($color2=$lc2) : ($color2=$lc1);
311                         my $text=$subfields[$i];
312                         my $subfieldcode=substr($text,0,1);
313                         my $subfield=substr($text,1);
314                         $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";
315                         if ($subfields{$subfieldcode}) {
316                             my $subfieldlist=$subfields{$subfieldcode};
317                             my @subfieldlist=@$subfieldlist;
318                             if ($#subfieldlist>=0) {
319                                 push (@subfieldlist, $subfield);
320                             } else {
321                                 @subfieldlist=($subfields{$subfieldcode}, $subfield);
322                             }
323                             $subfields{$subfieldcode}=\@subfieldlist;
324                         } else {
325                             $subfields{$subfieldcode}=$subfield;
326                         }
327                     }
328                     $marctext.="</table></td></tr>\n";
329                     $field{'subfields'}=\%subfields;
330                 }
331                 push (@record, \%field);
332             }
333             $marctext.="</table>\n";
334             $marctext{\@record}=$marctext;
335             $marc{\@record}=$record;
336             push (@records, \@record);
337             $counter++;
338         }
339 RECORD:
340         foreach $record (@records) {
341             my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $additionalauthors, $illustrator, $copyrightdate, $seriestitle);
342             my $marctext=$marctext{$record};
343             my $marc=$marc{$record};
344             foreach $field (@$record) {
345                 if ($field->{'tag'} eq '001') {
346                     $controlnumber=$field->{'indicator'};
347                 }
348                 if ($field->{'tag'} eq '010') {
349                     $lccn=$field->{'subfields'}->{'a'};
350                     $lccn=~s/^\s*//;
351                     ($lccn) = (split(/\s+/, $lccn))[0];
352                 }
353                 if ($field->{'tag'} eq '015') {
354                     $lccn=$field->{'subfields'}->{'a'};
355                     $lccn=~s/^\s*//;
356                     $lccn=~s/^C//;
357                     ($lccn) = (split(/\s+/, $lccn))[0];
358                 }
359                 if ($field->{'tag'} eq '020') {
360                     $isbn=$field->{'subfields'}->{'a'};
361                     ($isbn=~/^ARRAY/) && ($isbn=$$isbn[0]);
362                     $isbn=~s/[^\d]*//g;
363                 }
364                 if ($field->{'tag'} eq '022') {
365                     $issn=$field->{'subfields'}->{'a'};
366                     $issn=~s/^\s*//;
367                     ($issn) = (split(/\s+/, $issn))[0];
368                 }
369                 if ($field->{'tag'} eq '082') {
370                     $dewey=$field->{'subfields'}->{'a'};
371                     $dewey=~s/\///g;
372                     if (@$dewey) {
373                         $dewey=$$dewey[0];
374                     }
375                     #$dewey=~s/\///g;
376                 }
377                 if ($field->{'tag'} eq '100') {
378                     $author=$field->{'subfields'}->{'a'};
379                 }
380                 if ($field->{'tag'} eq '245') {
381                     $title=$field->{'subfields'}->{'a'};
382                     $title=~s/ \/$//;
383                     $subtitle=$field->{'subfields'}->{'b'};
384                     $subtitle=~s/ \/$//;
385                 }
386                 if ($field->{'tag'} eq '260') {
387                     $place=$field->{'subfields'}->{'a'};
388                     if (@$place) {
389                         $place=$$place[0];
390                     }
391                     $place=~s/\s*:$//g;
392                     $publisher=$field->{'subfields'}->{'b'};
393                     if (@$publisher) {
394                         $publisher=$$publisher[0];
395                     }
396                     $publisher=~s/\s*:$//g;
397                     $publicationyear=$field->{'subfields'}->{'c'};
398                     if ($publicationyear=~/c(\d\d\d\d)/) {
399                         $copyrightdate=$1;
400                     }
401                     if ($publicationyear=~/[^c](\d\d\d\d)/) {
402                         $publicationyear=$1;
403                     } elsif ($copyrightdate) {
404                         $publicationyear=$copyrightdate;
405                     } else {
406                         $publicationyear=~/(\d\d\d\d)/;
407                         $publicationyear=$1;
408                     }
409                 }
410                 if ($field->{'tag'} eq '300') {
411                     $pages=$field->{'subfields'}->{'a'};
412                     $pages=~s/ \;$//;
413                     $size=$field->{'subfields'}->{'c'};
414                     $pages=~s/\s*:$//g;
415                     $size=~s/\s*:$//g;
416                 }
417                 if ($field->{'tag'} eq '362') {
418                     if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
419                         $volume=$1;
420                         $number=$2;
421                     }
422                 }
423                 if ($field->{'tag'} eq '440') {
424                     $seriestitle=$field->{'subfields'}->{'a'};
425                     if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
426                         $volume=$1;
427                         $number=$2;
428                     }
429                 }
430                 if ($field->{'tag'} eq '700') {
431                     my $name=$field->{'subfields'}->{'a'};
432                     if ($field->{'subfields'}->{'c'}=~/ill/) {
433                         $additionalauthors.="$name\n";
434                     } else {
435                         $illustrator=$name;
436                     }
437                 }
438                 if ($field->{'tag'} =~/^5/) {
439                     $note.="$field->{'subfields'}->{'a'}\n";
440                 }
441                 if ($field->{'tag'} =~/65\d/) {
442                     my $subject=$field->{'subfields'}->{'a'};
443                     $subject=~s/\.$//;
444                     if ($gensubdivision=$field->{'subfields'}->{'x'}) {
445                         my @sub=@$gensubdivision;
446                         if ($#sub>=0) {
447                             foreach $s (@sub) {
448                                 $s=~s/\.$//;
449                                 $subject.=" -- $s";
450                             }
451                         } else {
452                             $gensubdivision=~s/\.$//;
453                             $subject.=" -- $gensubdivision";
454                         }
455                     }
456                     if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
457                         my @sub=@$chronsubdivision;
458                         if ($#sub>=0) {
459                             foreach $s (@sub) {
460                                 $s=~s/\.$//;
461                                 $subject.=" -- $s";
462                             }
463                         } else {
464                             $chronsubdivision=~s/\.$//;
465                             $subject.=" -- $chronsubdivision";
466                         }
467                     }
468                     if ($geosubdivision=$field->{'subfields'}->{'z'}) {
469                         my @sub=@$geosubdivision;
470                         if ($#sub>=0) {
471                             foreach $s (@sub) {
472                                 $s=~s/\.$//;
473                                 $subject.=" -- $s";
474                             }
475                         } else {
476                             $geosubdivision=~s/\.$//;
477                             $subject.=" -- $geosubdivision";
478                         }
479                     }
480                     push @subjects, $subject;
481                 }
482             }
483             $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40);
484             $marcinput=$input->hidden(-name=>'marc', -default=>$marc);
485             $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$subtitle, -size=>40);
486             $authorinput=$input->textfield(-name=>'author', -default=>$author);
487             $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator);
488             $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20);
489             my $subject='';
490             foreach (@subjects) {
491                 $subject.="$_\n";
492             }
493             $subjectinput=$input->textarea(-name=>'subject', -default=>$subject, -rows=>4, -cols=>40);
494             $noteinput=$input->textarea(-name=>'note', -default=>$note, -rows=>4, -cols=>40, -wrap=>'physical');
495             $copyrightinput=$input->textfield(-name=>'copyrightdate', -default=>$copyrightdate);
496             $seriestitleinput=$input->textfield(-name=>'seriestitle', -default=>$seriestitle);
497             $volumeinput=$input->textfield(-name=>'volume', -default=>$volume);
498             $volumedateinput=$input->textfield(-name=>'volumedate', -default=>$volumedate);
499             $volumeddescinput=$input->textfield(-name=>'volumeddesc', -default=>$volumeddesc);
500             $numberinput=$input->textfield(-name=>'number', -default=>$number);
501             $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
502             $issninput=$input->textfield(-name=>'issn', -default=>$issn);
503             $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn);
504             $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
505             $deweyinput=$input->textfield(-name=>'dewey', -default=>$dewey);
506             $cleanauthor=$author;
507             $cleanauthor=~s/[^A-Za-z]//g;
508             $subclassinput=$input->textfield(-name=>'subclass', -default=>uc(substr($cleanauthor,0,3)));
509             $publisherinput=$input->textfield(-name=>'publishercode', -default=>$publisher);
510             $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear);
511             $placeinput=$input->textfield(-name=>'place', -default=>$place);
512             $pagesinput=$input->textfield(-name=>'pages', -default=>$pages);
513             $sizeinput=$input->textfield(-name=>'size', -default=>$size);
514             $fileinput=$input->hidden(-name=>'file', -default=>$file);
515             $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn);
516             $origissn=$input->hidden(-name=>'origissn', -default=>$issn);
517             $origlccn=$input->hidden(-name=>'origlccn', -default=>$lccn);
518             $origcontrolnumber=$input->hidden(-name=>'origcontrolnumber', -default=>$controlnumber);
519
520             my $itemtypeselect='';
521             $sth=$dbh->prepare("select itemtype,description from itemtypes");
522             $sth->execute;
523             while (my ($itemtype, $description) = $sth->fetchrow) {
524                 $itemtypeselect.="<option value=$itemtype>$itemtype - $description\n";
525             }
526             ($qissn) || ($qissn='NIL');
527             ($qlccn) || ($qlccn='NIL');
528             ($qisbn) || ($qisbn='NIL');
529             ($qcontrolnumber) || ($qcontrolnumber='NIL');
530             unless (($isbn eq $qisbn) || ($issn eq $qissn) || ($lccn eq $qlccn) || ($controlnumber eq $qcontrolnumber)) {
531                 next RECORD;
532             }
533
534             print << "EOF";
535             <center>
536             <h1>New Record</h1>
537             Full MARC Record available at bottom
538             <form method=post>
539             <table border=1>
540             <tr><td>Title</td><td>$titleinput</td></tr>
541             <tr><td>Subtitle</td><td>$subtitleinput</td></tr>
542             <tr><td>Author</td><td>$authorinput</td></tr>
543             <tr><td>Additional Authors</td><td>$additionalauthorsinput</td></tr>
544             <tr><td>Illustrator</td><td>$illustratorinput</td></tr>
545             <tr><td>Copyright</td><td>$copyrightinput</td></tr>
546             <tr><td>Series Title</td><td>$seriestitleinput</td></tr>
547             <tr><td>Volume</td><td>$volumeinput</td></tr>
548             <tr><td>Number</td><td>$numberinput</td></tr>
549             <tr><td>Volume Date</td><td>$volumedateinput</td></tr>
550             <tr><td>Volume Description</td><td>$volumeddescinput</td></tr>
551             <tr><td>Subject</td><td>$subjectinput</td></tr>
552             <tr><td>Notes</td><td>$noteinput</td></tr>
553             <tr><td>Item Type</td><td><select name=itemtype>$itemtypeselect</select></td></tr>
554             <tr><td>ISBN</td><td>$isbninput</td></tr>
555             <tr><td>ISSN</td><td>$issninput</td></tr>
556             <tr><td>LCCN</td><td>$lccninput</td></tr>
557             <tr><td>Dewey</td><td>$deweyinput</td></tr>
558             <tr><td>Subclass</td><td>$subclassinput</td></tr>
559             <tr><td>Publication Year</td><td>$pubyearinput</td></tr>
560             <tr><td>Publisher</td><td>$publisherinput</td></tr>
561             <tr><td>Place</td><td>$placeinput</td></tr>
562             <tr><td>Pages</td><td>$pagesinput</td></tr>
563             <tr><td>Size</td><td>$sizeinput</td></tr>
564             </table>
565             <input type=submit>
566             <input type=hidden name=insertnewrecord value=1>
567             $fileinput
568             $marcinput
569             $origisbn
570             $origissn
571             $origlccn
572             $origcontrolnumber
573             </form>
574             $marctext
575 EOF
576         }
577     } else {
578         open (F, "$file");
579         my $data=<F>;
580
581         $splitchar=chr(29);
582         my @records;
583         foreach $record (split(/$splitchar/, $data)) {
584             $leader=substr($record,0,24);
585             #print "<tr><td>Leader:</td><td>$leader</td></tr>\n";
586             $record=substr($record,24);
587             $splitchar2=chr(30);
588             my $directory=0;
589             my $tagcounter=0;
590             my %tag;
591             my @record;
592             foreach $field (split(/$splitchar2/, $record)) {
593                 my %field;
594                 ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
595                 unless ($directory) {
596                     $directory=$field;
597                     my $itemcounter=1;
598                     $counter=0;
599                     while ($item=substr($directory,0,12)) {
600                         $tag=substr($directory,0,3);
601                         $length=substr($directory,3,4);
602                         $start=substr($directory,7,6);
603                         $directory=substr($directory,12);
604                         $tag{$counter}=$tag;
605                         $counter++;
606                     }
607                     $directory=1;
608                     next;
609                 }
610                 $tag=$tag{$tagcounter};
611                 $tagcounter++;
612                 $field{'tag'}=$tag;
613                 $splitchar3=chr(31);
614                 my @subfields=split(/$splitchar3/, $field);
615                 $indicator=$subfields[0];
616                 $field{'indicator'}=$indicator;
617                 my $firstline=1;
618                 unless ($#subfields==0) {
619                     my %subfields;
620                     for ($i=1; $i<=$#subfields; $i++) {
621                         my $text=$subfields[$i];
622                         my $subfieldcode=substr($text,0,1);
623                         my $subfield=substr($text,1);
624                         if ($subfields{$subfieldcode}) {
625                             my $subfieldlist=$subfields{$subfieldcode};
626                             my @subfieldlist=@$subfieldlist;
627                             if ($#subfieldlist>=0) {
628 #                       print "$tag Adding to array $subfieldcode -- $subfield<br>\n";
629                                 push (@subfieldlist, $subfield);
630                             } else {
631 #                       print "$tag Arraying $subfieldcode -- $subfield<br>\n";
632                                 @subfieldlist=($subfields{$subfieldcode}, $subfield);
633                             }
634                             $subfields{$subfieldcode}=\@subfieldlist;
635                         } else {
636                             $subfields{$subfieldcode}=$subfield;
637                         }
638                     }
639                     $field{'subfields'}=\%subfields;
640                 }
641                 push (@record, \%field);
642             }
643             push (@records, \@record);
644             $counter++;
645         }
646         print << "EOF";
647         <center>
648         <p>
649         <a href=marcimport.pl>Select a New File</a>
650         <p>
651         <table border=0 cellpadding=10 cellspacing=0>
652         <tr><th bgcolor=black><font color=white>Select a Record to Import</font></th></tr>
653         <tr><td bgcolor=#dddddd>
654 EOF
655         my $text='';
656         foreach $record (@records) {
657             my @subjects=();
658             my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $controlnumber);
659             foreach $field (@$record) {
660                 $text.=$field->{'tag'}."\n";
661                 foreach (keys %{$field->{'subfields'}}) {
662                     my $value=$field->{'subfields'}->{$_};
663                     $text.="  $_: $value\n";
664                 }
665                 if ($field->{'tag'} eq '001') {
666                     $controlnumber=$field->{'indicator'};
667                 }
668                 if ($field->{'tag'} eq '010') {
669                     $lccn=$field->{'subfields'}->{'a'};
670                     $lccn=~s/^\s*//;
671                     ($lccn) = (split(/\s+/, $lccn))[0];
672                 }
673                 if ($field->{'tag'} eq '015') {
674                     $lccn=$field->{'subfields'}->{'a'};
675                     $lccn=~s/^\s*//;
676                     $lccn=~s/^C//;
677                     ($lccn) = (split(/\s+/, $lccn))[0];
678                 }
679                 if ($field->{'tag'} eq '020') {
680                     $isbn=$field->{'subfields'}->{'a'};
681                     ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]);
682                     $isbn=~s/[^\d]*//g;
683                 }
684                 if ($field->{'tag'} eq '022') {
685                     $issn=$field->{'subfields'}->{'a'};
686                     $issn=~s/^\s*//;
687                     ($issn) = (split(/\s+/, $issn))[0];
688                 }
689                 if ($field->{'tag'} eq '082') {
690                     $dewey=$field->{'subfields'}->{'a'};
691                     $dewey=~s/\///g;
692                     if (@$dewey) {
693                         $dewey=$$dewey[0];
694                     }
695                     #$dewey=~s/\///g;
696                 }
697                 if ($field->{'tag'} eq '100') {
698                     $author=$field->{'subfields'}->{'a'};
699                 }
700                 if ($field->{'tag'} eq '245') {
701                     $title=$field->{'subfields'}->{'a'};
702                     $title=~s/ \/$//;
703                     $subtitle=$field->{'subfields'}->{'b'};
704                     $subtitle=~s/ \/$//;
705                 }
706                 if ($field->{'tag'} eq '260') {
707                     $place=$field->{'subfields'}->{'a'};
708                     if (@$place) {
709                         $place=$$place[0];
710                     }
711                     $place=~s/\s*:$//g;
712                     $publisher=$field->{'subfields'}->{'b'};
713                     if (@$publisher) {
714                         $publisher=$$publisher[0];
715                     }
716                     $publisher=~s/\s*:$//g;
717                     $publicationyear=$field->{'subfields'}->{'c'};
718                     if ($publicationyear=~/c(\d\d\d\d)/) {
719                         $copyrightdate=$1;
720                     }
721                     if ($publicationyear=~/[^c](\d\d\d\d)/) {
722                         $publicationyear=$1;
723                     } elsif ($copyrightdate) {
724                         $publicationyear=$copyrightdate;
725                     } else {
726                         $publicationyear=~/(\d\d\d\d)/;
727                         $publicationyear=$1;
728                     }
729                 }
730                 if ($field->{'tag'} eq '300') {
731                     $pages=$field->{'subfields'}->{'a'};
732                     $pages=~s/ \;$//;
733                     $size=$field->{'subfields'}->{'c'};
734                     $pages=~s/\s*:$//g;
735                     $size=~s/\s*:$//g;
736                 }
737                 if ($field->{'tag'} eq '362') {
738                     if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
739                         $volume=$1;
740                         $number=$2;
741                     }
742                 }
743                 if ($field->{'tag'} eq '440') {
744                     $seriestitle=$field->{'subfields'}->{'a'};
745                     if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
746                         $volume=$1;
747                         $number=$2;
748                     }
749                 }
750                 if ($field->{'tag'} =~/^5/) {
751                     $note.="$field->{'subfields'}->{'a'}\n";
752                 }
753                 if ($field->{'tag'} =~/65\d/) {
754                     my $subject=$field->{'subfields'}->{'a'};
755                     $subject=~s/\.$//;
756                     if ($gensubdivision=$field->{'subfields'}->{'x'}) {
757                         my @sub=@$gensubdivision;
758                         if ($#sub>=0) {
759                             foreach $s (@sub) {
760                                 $s=~s/\.$//;
761                                 $subject.=" -- $s";
762                             }
763                         } else {
764                             $gensubdivision=~s/\.$//;
765                             $subject.=" -- $gensubdivision";
766                         }
767                     }
768                     if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
769                         my @sub=@$chronsubdivision;
770                         if ($#sub>=0) {
771                             foreach $s (@sub) {
772                                 $s=~s/\.$//;
773                                 $subject.=" -- $s";
774                             }
775                         } else {
776                             $chronsubdivision=~s/\.$//;
777                             $subject.=" -- $chronsubdivision";
778                         }
779                     }
780                     if ($geosubdivision=$field->{'subfields'}->{'z'}) {
781                         my @sub=@$geosubdivision;
782                         if ($#sub>=0) {
783                             foreach $s (@sub) {
784                                 $s=~s/\.$//;
785                                 $subject.=" -- $s";
786                             }
787                         } else {
788                             $geosubdivision=~s/\.$//;
789                             $subject.=" -- $geosubdivision";
790                         }
791                     }
792                     push @subjects, $subject;
793                 }
794             }
795             my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
796             my $q_issn=$dbh->quote((($issn) || ('NIL')));
797             my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
798             my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL')));
799             my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber");
800             $sth->execute;
801             my $donetext='';
802             if ($sth->rows) {
803                 $donetext="DONE";
804             }
805             $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn");
806             $sth->execute;
807             if ($sth->rows) {
808                 $donetext="DONE";
809             }
810             if ($isbn) {
811                 print "<a href=marcimport.pl?file=$file&isbn=$isbn>$title by $author</a> $donetext<br>\n";
812             } elsif ($lccn) {
813                 print "<a href=marcimport.pl?file=$file&lccn=$lccn>$title by $author</a> $donetext<br>\n";
814             } elsif ($issn) {
815                 print "<a href=marcimport.pl?file=$file&issn=$issn>$title by $author</a><br> $donetext\n";
816             } elsif ($controlnumber) {
817                 print "<a href=marcimport.pl?file=$file&controlnumber=$controlnumber>$title by $author</a><br> $donetext\n";
818             } else {
819                 print "Error: Contact steve regarding $title by $author<br>\n";
820             }
821         }
822         print "</td></tr></table>\n";
823     }
824 } else {
825     opendir(D, "/home/$userid/");
826     my @dirlist=readdir D;
827     foreach $file (@dirlist) {
828         (next) if ($file=~/^\./);
829         (next) if ($file=~/^nsmail$/);
830         (next) if ($file=~/^public_html$/);
831         ($file=~/\.mrc/) || ($filelist.="$file<br>\n");
832         (next) unless ($file=~/\.mrc$/);
833         $file=~s/ /\%20/g;
834         print "<a href=marcimport.pl?file=/home/$userid/$file>$file</a><br>\n";
835     }
836     print << "EOF";
837     <form method=get>
838     File to read MARC records from: <input name=file size=30>
839     <p>
840     Other files in home directory:<p>
841     $filelist
842     </form>
843 EOF
844 }
845 print endmenu();
846 print endpage();
847