15 my $userid=$ENV{'REMOTE_USER'};
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',
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',
71 '856' => 'Electronic location and access',
80 print startmenu('acquisitions');
81 my $file=$input->param('file');
83 if ($input->param('z3950queue')) {
84 my $query=$input->param('query');
85 my $type=$input->param('type');
87 foreach ($input->param) {
90 if ($server eq 'MAN') {
91 push @serverlist, "MAN/".$input->param('manualz3950server')."//";
93 my $sth=$dbh->prepare("select host,port,db,userid,password from z3950servers where id=$server");
95 my ($host, $port, $db, $userid, $password) = $sth->fetchrow;
96 push @serverlist, "$server/$host\:$port/$db/$userid/$password";
101 if ($type eq 'isbn') {
105 if (length($q)==10) {
106 my $checksum=substr($q,9,1);
107 my $isbn=substr($q,0,9);
110 for ($i=0; $i<9; $i++) {
111 my $digit=substr($q,$i,1);
114 $c=int(11-($c/11-int($c/11))*11+.1);
115 ($c==10) && ($c='X');
116 if ($c eq $checksum) {
118 print "<font color=red size=+1>$query is not a valid ISBN
123 print "<font color=red size=+1>$query is not a valid ISBN
128 unless ($isbnfailed) {
129 my $q_term=$dbh->quote($query);
131 foreach (@serverlist) {
135 my $q_serverlist=$dbh->quote($serverlist);
136 my $sth=$dbh->prepare("insert into z3950queue (term,type,servers) values ($q_term, '$type', $q_serverlist)");
141 if (my $data=$input->param('uploadmarc')) {
142 my $name=$input->param('name');
143 ($name) || ($name=$data);
145 if (length($data)>0) {
150 my $q_marcrecord=$dbh->quote($marcrecord);
151 my $q_name=$dbh->quote($name);
152 my $sth=$dbh->prepare("insert into uploadedmarc (marc,name) values ($q_marcrecord, $q_name)");
157 if ($input->param('insertnewrecord')) {
158 my $isbn=$input->param('isbn');
159 my $issn=$input->param('issn');
160 my $lccn=$input->param('lccn');
161 my $q_origisbn=$dbh->quote($input->param('origisbn'));
162 my $q_origissn=$dbh->quote($input->param('origissn'));
163 my $q_origlccn=$dbh->quote($input->param('origlccn'));
164 my $q_origcontrolnumber=$dbh->quote($input->param('origcontrolnumber'));
165 my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
166 my $q_issn=$dbh->quote((($issn) || ('NIL')));
167 my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
168 $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn, $q_origcontrolnumber)");
170 my $sth=$dbh->prepare("select biblionumber,biblioitemnumber from biblioitems where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn");
173 my $biblioitemnumber=0;
175 print "<a href=$ENV{'SCRIPT_NAME'}?file=$file>New Record</a> | <a href=marcimport.pl>New File</a><br>\n";
177 ($biblionumber, $biblioitemnumber) = $sth->fetchrow;
178 my $title=$input->param('title');
180 <table border=0 width=50% cellpadding=10 cellspacing=0>
181 <tr><th bgcolor=black><font color=white>Record already in database</font></th></tr>
182 <tr><td bgcolor=#dddddd>$title is already in the database with biblionumber $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
187 my $q_title=$dbh->quote($input->param('title'));
188 my $q_subtitle=$dbh->quote($input->param('subtitle'));
189 my $q_author=$dbh->quote($input->param('author'));
190 my $q_copyrightdate=$dbh->quote($input->param('copyrightdate'));
191 my $q_seriestitle=$dbh->quote($input->param('seriestitle'));
192 $sth=$dbh->prepare("select biblionumber from biblio where title=$q_title and author=$q_author and copyrightdate=$q_copyrightdate and seriestitle=$q_seriestitle");
195 ($biblionumber) = $sth->fetchrow;
197 $sth=$dbh->prepare("select max(biblionumber) from biblio");
199 ($biblionumber) = $sth->fetchrow;
201 $sth=$dbh->prepare("insert into biblio (biblionumber, title, author, copyrightdate, seriestitle) values ($biblionumber, $q_title, $q_author, $q_copyrightdate, $q_seriestitle)");
203 $sth=$dbh->prepare("insert into bibliosubtitle (biblionumber,subtitle) values ($biblionumber, $q_subtitle)");
206 $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems");
208 ($biblioitemnumber) = $sth->fetchrow;
210 my $q_isbn=$dbh->quote($isbn);
211 my $q_issn=$dbh->quote($issn);
212 my $q_lccn=$dbh->quote($lccn);
213 my $q_volume=$dbh->quote($input->param('volume'));
214 my $q_number=$dbh->quote($input->param('number'));
215 my $q_itemtype=$dbh->quote($input->param('itemtype'));
216 my $q_dewey=$dbh->quote($input->param('dewey'));
217 my $q_subclass=$dbh->quote($input->param('subclass'));
218 my $q_publicationyear=$dbh->quote($input->param('publicationyear'));
219 my $q_publishercode=$dbh->quote($input->param('publishercode'));
220 my $q_volumedate=$dbh->quote($input->param('volumedate'));
221 my $q_volumeddesc=$dbh->quote($input->param('volumeddesc'));
222 my $q_illus=$dbh->quote($input->param('illustrator'));
223 my $q_pages=$dbh->quote($input->param('pages'));
224 my $q_notes=$dbh->quote($input->param('note'));
225 my $q_size=$dbh->quote($input->param('size'));
226 my $q_place=$dbh->quote($input->param('place'));
227 my $q_marc=$dbh->quote($input->param('marc'));
229 $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)");
231 my $subjectheadings=$input->param('subject');
232 my $additionalauthors=$input->param('additionalauthors');
233 my @subjectheadings=split(/\n/,$subjectheadings);
235 foreach $subjectheading (@subjectheadings) {
236 # remove any line ending characters (Ctrl-J or M)
237 $subjectheading=~s/\013//g;
238 $subjectheading=~s/\010//g;
239 # convert to upper case
240 $subjectheading=uc($subjectheading);
241 chomp ($subjectheading);
242 while (ord(substr($subjectheading, length($subjectheading)-1, 1))<14) {
243 chop $subjectheading;
246 my $q_subjectheading=$dbh->quote($subjectheading);
247 $sth=$dbh->prepare("insert into bibliosubject (biblionumber,subject)
248 values ($biblionumber, $q_subjectheading)");
251 my @additionalauthors=split(/\n/,$additionalauthors);
252 my $additionalauthor;
253 foreach $additionalauthor (@additionalauthors) {
254 # remove any line ending characters (Ctrl-L or Ctrl-M)
255 $additionalauthor=~s/\013//g;
256 $additionalauthor=~s/\010//g;
257 # convert to upper case
258 $additionalauthor=uc($additionalauthor);
260 my $q_additionalauthor=$dbh->quote($additionalauthor);
261 $sth=$dbh->prepare("insert into additionalauthors (biblionumber,author) values ($biblionumber, $q_additionalauthor)");
265 my $title=$input->param('title');
267 <table cellpadding=10 cellspacing=0 border=0 width=50%>
268 <tr><th bgcolor=black><font color=white>Record entered into database</font></th></tr>
269 <tr><td bgcolor=#dddddd>$title has been entered into the database with biblionumber
270 $biblionumber and biblioitemnumber $biblioitemnumber</td></tr>
274 my $title=$input->param('title');
275 $sth=$dbh->prepare("select max(barcode) from items");
277 my ($barcode) = $sth->fetchrow;
280 $barcode=int(rand()*1000000);
283 <table border=0 cellpadding=10 cellspacing=0>
284 <tr><th bgcolor=black><font color=white>
285 Add a New Item for $title
288 <tr><td bgcolor=#dddddd>
290 <input type=hidden name=newitem value=1>
291 <input type=hidden name=biblionumber value=$biblionumber>
292 <input type=hidden name=biblioitemnumber value=$biblioitemnumber>
293 <input type=hidden name=file value=$file>
295 <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>
296 </tr><td>Replacement Price:</td><td><input name=replacementprice size=10></td></tr>
297 <tr><td>Notes</td><td><textarea name=notes rows=4 cols=40
298 wrap=physical></textarea></td></tr>
303 <input type=submit value="Add Item">
312 if ($input->param('newitem')) {
313 my $barcode=$input->param('barcode');
314 my $q_barcode=$dbh->quote($barcode);
315 my $q_notes=$dbh->quote($input->param('notes'));
316 my $q_homebranch=$dbh->quote($input->param('homebranch'));
317 my $biblionumber=$input->param('biblionumber');
318 my $biblioitemnumber=$input->param('biblioitemnumber');
319 my $replacementprice=($input->param('replacementprice') || 0);
320 my $sth=$dbh->prepare("select barcode from items where
321 barcode=$q_barcode");
324 print "<font color=red>Barcode '$barcode' has already been assigned.</font><p>\n";
326 $sth=$dbh->prepare("select max(itemnumber) from items");
328 my ($itemnumber) = $sth->fetchrow;
330 my @datearr=localtime(time);
331 my $date=(1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
332 $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)");
338 my $menu = $input->param('menu');
340 print "<a href=$ENV{'SCRIPT_NAME'}>Main Menu</a><hr>\n";
341 my $qisbn=$input->param('isbn');
342 my $qissn=$input->param('issn');
343 my $qlccn=$input->param('lccn');
344 my $qcontrolnumber=$input->param('controlnumber');
345 if ($qisbn || $qissn || $qlccn || $qcontrolnumber) {
346 print "<a href=$ENV{'SCRIPT_NAME'}>New File</a><hr>\n";
350 if ($file=~/Z-(\d+)/) {
352 my $resultsid=$input->param('resultsid');
353 my $sth=$dbh->prepare("select results from z3950results where id=$resultsid");
355 ($data) = $sth->fetchrow;
357 my $sth=$dbh->prepare("select marc from uploadedmarc where id=$file");
359 ($data) = $sth->fetchrow;
364 foreach $record (split(/$splitchar/, $data)) {
365 my $marctext="<table border=0 cellspacing=0>\n";
366 $marctext.="<tr><th colspan=3 bgcolor=black><font color=white>MARC RECORD</font></th></tr>\n";
367 $leader=substr($record,0,24);
368 $marctext.="<tr><td>Leader:</td><td colspan=2>$leader</td></tr>\n";
369 $record=substr($record,24);
375 foreach $field (split(/$splitchar2/, $record)) {
377 ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
378 unless ($directory) {
382 while ($item=substr($directory,0,12)) {
383 $tag=substr($directory,0,3);
384 $length=substr($directory,3,4);
385 $start=substr($directory,7,6);
386 $directory=substr($directory,12);
393 $tag=$tag{$tagcounter};
396 $marctext.="<tr><td bgcolor=$color valign=top>$tagtext{$tag}</td><td bgcolor=$color valign=top>$tag</td>";
398 my @subfields=split(/$splitchar3/, $field);
399 $indicator=$subfields[0];
400 $field{'indicator'}=$indicator;
402 if ($#subfields==0) {
403 $marctext.="<td bgcolor=$color valign=top>$indicator</td></tr>";
406 $marctext.="<td bgcolor=$color valign=top><table border=0 cellspacing=0>\n";
408 for ($i=1; $i<=$#subfields; $i++) {
409 ($color2 eq $lc1) ? ($color2=$lc2) : ($color2=$lc1);
410 my $text=$subfields[$i];
411 my $subfieldcode=substr($text,0,1);
412 my $subfield=substr($text,1);
413 $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";
414 if ($subfields{$subfieldcode}) {
415 my $subfieldlist=$subfields{$subfieldcode};
416 my @subfieldlist=@$subfieldlist;
417 if ($#subfieldlist>=0) {
418 push (@subfieldlist, $subfield);
420 @subfieldlist=($subfields{$subfieldcode}, $subfield);
422 $subfields{$subfieldcode}=\@subfieldlist;
424 $subfields{$subfieldcode}=$subfield;
427 $marctext.="</table></td></tr>\n";
428 $field{'subfields'}=\%subfields;
430 push (@record, \%field);
432 $marctext.="</table>\n";
433 $marctext{\@record}=$marctext;
434 $marc{\@record}=$record;
435 push (@records, \@record);
439 foreach $record (@records) {
440 my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $additionalauthors, $illustrator, $copyrightdate, $seriestitle);
441 my $marctext=$marctext{$record};
442 my $marc=$marc{$record};
443 foreach $field (@$record) {
444 if ($field->{'tag'} eq '001') {
445 $controlnumber=$field->{'indicator'};
447 if ($field->{'tag'} eq '010') {
448 $lccn=$field->{'subfields'}->{'a'};
450 ($lccn) = (split(/\s+/, $lccn))[0];
452 if ($field->{'tag'} eq '015') {
453 $lccn=$field->{'subfields'}->{'a'};
456 ($lccn) = (split(/\s+/, $lccn))[0];
458 if ($field->{'tag'} eq '020') {
459 $isbn=$field->{'subfields'}->{'a'};
460 ($isbn=~/^ARRAY/) && ($isbn=$$isbn[0]);
463 if ($field->{'tag'} eq '022') {
464 $issn=$field->{'subfields'}->{'a'};
466 ($issn) = (split(/\s+/, $issn))[0];
468 if ($field->{'tag'} eq '082') {
469 $dewey=$field->{'subfields'}->{'a'};
476 if ($field->{'tag'} eq '100') {
477 $author=$field->{'subfields'}->{'a'};
479 if ($field->{'tag'} eq '245') {
480 $title=$field->{'subfields'}->{'a'};
482 $subtitle=$field->{'subfields'}->{'b'};
485 if ($field->{'tag'} eq '260') {
486 $place=$field->{'subfields'}->{'a'};
491 $publisher=$field->{'subfields'}->{'b'};
493 $publisher=$$publisher[0];
495 $publisher=~s/\s*:$//g;
496 $publicationyear=$field->{'subfields'}->{'c'};
497 if ($publicationyear=~/c(\d\d\d\d)/) {
500 if ($publicationyear=~/[^c](\d\d\d\d)/) {
502 } elsif ($copyrightdate) {
503 $publicationyear=$copyrightdate;
505 $publicationyear=~/(\d\d\d\d)/;
509 if ($field->{'tag'} eq '300') {
510 $pages=$field->{'subfields'}->{'a'};
512 $size=$field->{'subfields'}->{'c'};
516 if ($field->{'tag'} eq '362') {
517 if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
522 if ($field->{'tag'} eq '440') {
523 $seriestitle=$field->{'subfields'}->{'a'};
524 if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
529 if ($field->{'tag'} eq '700') {
530 my $name=$field->{'subfields'}->{'a'};
531 if ($field->{'subfields'}->{'c'}=~/ill/) {
532 $additionalauthors.="$name\n";
537 if ($field->{'tag'} =~/^5/) {
538 $note.="$field->{'subfields'}->{'a'}\n";
540 if ($field->{'tag'} =~/65\d/) {
541 my $subject=$field->{'subfields'}->{'a'};
543 if ($gensubdivision=$field->{'subfields'}->{'x'}) {
544 my @sub=@$gensubdivision;
551 $gensubdivision=~s/\.$//;
552 $subject.=" -- $gensubdivision";
555 if ($chronsubdivision=$field->{'subfields'}->{'y'}) {
556 my @sub=@$chronsubdivision;
563 $chronsubdivision=~s/\.$//;
564 $subject.=" -- $chronsubdivision";
567 if ($geosubdivision=$field->{'subfields'}->{'z'}) {
568 my @sub=@$geosubdivision;
575 $geosubdivision=~s/\.$//;
576 $subject.=" -- $geosubdivision";
579 push @subjects, $subject;
582 $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40);
583 $marcinput=$input->hidden(-name=>'marc', -default=>$marc);
584 $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$subtitle, -size=>40);
585 $authorinput=$input->textfield(-name=>'author', -default=>$author);
586 $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator);
587 $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20);
589 foreach (@subjects) {
592 $subjectinput=$input->textarea(-name=>'subject', -default=>$subject, -rows=>4, -cols=>40);
593 $noteinput=$input->textarea(-name=>'note', -default=>$note, -rows=>4, -cols=>40, -wrap=>'physical');
594 $copyrightinput=$input->textfield(-name=>'copyrightdate', -default=>$copyrightdate);
595 $seriestitleinput=$input->textfield(-name=>'seriestitle', -default=>$seriestitle);
596 $volumeinput=$input->textfield(-name=>'volume', -default=>$volume);
597 $volumedateinput=$input->textfield(-name=>'volumedate', -default=>$volumedate);
598 $volumeddescinput=$input->textfield(-name=>'volumeddesc', -default=>$volumeddesc);
599 $numberinput=$input->textfield(-name=>'number', -default=>$number);
600 $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
601 $issninput=$input->textfield(-name=>'issn', -default=>$issn);
602 $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn);
603 $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn);
604 $deweyinput=$input->textfield(-name=>'dewey', -default=>$dewey);
605 $cleanauthor=$author;
606 $cleanauthor=~s/[^A-Za-z]//g;
607 $subclassinput=$input->textfield(-name=>'subclass', -default=>uc(substr($cleanauthor,0,3)));
608 $publisherinput=$input->textfield(-name=>'publishercode', -default=>$publisher);
609 $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear);
610 $placeinput=$input->textfield(-name=>'place', -default=>$place);
611 $pagesinput=$input->textfield(-name=>'pages', -default=>$pages);
612 $sizeinput=$input->textfield(-name=>'size', -default=>$size);
613 $fileinput=$input->hidden(-name=>'file', -default=>$file);
614 $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn);
615 $origissn=$input->hidden(-name=>'origissn', -default=>$issn);
616 $origlccn=$input->hidden(-name=>'origlccn', -default=>$lccn);
617 $origcontrolnumber=$input->hidden(-name=>'origcontrolnumber', -default=>$controlnumber);
619 my $itemtypeselect='';
620 $sth=$dbh->prepare("select itemtype,description from itemtypes");
622 while (my ($itemtype, $description) = $sth->fetchrow) {
623 $itemtypeselect.="<option value=$itemtype>$itemtype - $description\n";
625 ($qissn) || ($qissn='NIL');
626 ($qlccn) || ($qlccn='NIL');
627 ($qisbn) || ($qisbn='NIL');
628 ($qcontrolnumber) || ($qcontrolnumber='NIL');
629 $controlnumber=~s/\s+//g;
630 unless (($isbn eq $qisbn) || ($issn eq $qissn) || ($lccn eq $qlccn) || ($controlnumber eq $qcontrolnumber)) {
637 Full MARC Record available at bottom
640 <tr><td>Title</td><td>$titleinput</td></tr>
641 <tr><td>Subtitle</td><td>$subtitleinput</td></tr>
642 <tr><td>Author</td><td>$authorinput</td></tr>
643 <tr><td>Additional Authors</td><td>$additionalauthorsinput</td></tr>
644 <tr><td>Illustrator</td><td>$illustratorinput</td></tr>
645 <tr><td>Copyright</td><td>$copyrightinput</td></tr>
646 <tr><td>Series Title</td><td>$seriestitleinput</td></tr>
647 <tr><td>Volume</td><td>$volumeinput</td></tr>
648 <tr><td>Number</td><td>$numberinput</td></tr>
649 <tr><td>Volume Date</td><td>$volumedateinput</td></tr>
650 <tr><td>Volume Description</td><td>$volumeddescinput</td></tr>
651 <tr><td>Subject</td><td>$subjectinput</td></tr>
652 <tr><td>Notes</td><td>$noteinput</td></tr>
653 <tr><td>Item Type</td><td><select name=itemtype>$itemtypeselect</select></td></tr>
654 <tr><td>ISBN</td><td>$isbninput</td></tr>
655 <tr><td>ISSN</td><td>$issninput</td></tr>
656 <tr><td>LCCN</td><td>$lccninput</td></tr>
657 <tr><td>Dewey</td><td>$deweyinput</td></tr>
658 <tr><td>Subclass</td><td>$subclassinput</td></tr>
659 <tr><td>Publication Year</td><td>$pubyearinput</td></tr>
660 <tr><td>Publisher</td><td>$publisherinput</td></tr>
661 <tr><td>Place</td><td>$placeinput</td></tr>
662 <tr><td>Pages</td><td>$pagesinput</td></tr>
663 <tr><td>Size</td><td>$sizeinput</td></tr>
666 <input type=hidden name=insertnewrecord value=1>
683 if ($file=~/Z-(\d+)/) {
687 <a href=$ENV{'SCRIPT_NAME'}?menu=$menu>Select a New File</a>
689 <table border=0 cellpadding=10 cellspacing=0>
690 <tr><th bgcolor=black><font color=white>Select a Record to Import</font></th></tr>
691 <tr><td bgcolor=#dddddd>
694 my $sth=$dbh->prepare("select servers from z3950queue where id=$id");
696 my ($servers) = $sth->fetchrow;
698 foreach $serverstring (split(/\s+/, $servers)) {
699 my ($name, $server, $database, $auth) = split(/\//, $serverstring, 4);
700 if ($name eq 'MAN') {
701 print "$server/$database<br>\n";
702 } elsif ($name eq 'LOC') {
703 print "Library of Congress<br>\n";
704 } elsif ($name eq 'NLC') {
705 print "National Library of Canada<br>\n";
707 my $sti=$dbh->prepare("select name from
708 z3950servers where id=$name");
710 my ($longname)=$sti->fetchrow;
711 print "$longname<br>\n";
714 my $q_server=$dbh->quote($serverstring);
715 my $sti=$dbh->prepare("select numrecords,id,results,startdate,enddate from z3950results where queryid=$id and server=$q_server");
717 ($numrecords,$resultsid,$data,$startdate,$enddate) = $sti->fetchrow;
718 if ($sti->rows == 0) {
720 } elsif ($enddate == 0) {
722 my $elapsed=$now-$startdate;
725 $elapsedtime=sprintf "%d minutes",($elapsed/60);
727 $elapsedtime=sprintf "%d seconds",$elapsed;
729 print "<font color=red>processing... ($elapsedtime)</font>";
730 } elsif ($numrecords) {
731 my @records=parsemarcdata($data);
732 foreach $record (@records) {
733 my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $controlnumber);
734 foreach $field (@$record) {
735 if ($field->{'tag'} eq '001') {
736 $controlnumber=$field->{'indicator'};
738 if ($field->{'tag'} eq '010') {
739 $lccn=$field->{'subfields'}->{'a'};
741 ($lccn) = (split(/\s+/, $lccn))[0];
743 if ($field->{'tag'} eq '015') {
744 $lccn=$field->{'subfields'}->{'a'};
747 ($lccn) = (split(/\s+/, $lccn))[0];
749 if ($field->{'tag'} eq '020') {
750 $isbn=$field->{'subfields'}->{'a'};
751 ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]);
754 if ($field->{'tag'} eq '022') {
755 $issn=$field->{'subfields'}->{'a'};
757 ($issn) = (split(/\s+/, $issn))[0];
759 if ($field->{'tag'} eq '100') {
760 $author=$field->{'subfields'}->{'a'};
762 if ($field->{'tag'} eq '245') {
763 $title=$field->{'subfields'}->{'a'};
765 $subtitle=$field->{'subfields'}->{'b'};
769 my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
770 my $q_issn=$dbh->quote((($issn) || ('NIL')));
771 my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
772 my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL')));
773 my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber");
779 $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn");
784 ($author) && ($author="by $author");
786 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=$file&resultsid=$resultsid&isbn=$isbn>$title$subtitle $author</a> $donetext<br>\n";
788 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=$file&resultsid=$resultsid&lccn=$lccn>$title$subtitle $author</a> $donetext<br>\n";
790 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=$file&resultsid=$resultsid&issn=$issn>$title$subtitle $author</a><br> $donetext\n";
791 } elsif ($controlnumber) {
792 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=$file&resultsid=$resultsid&controlnumber=$controlnumber>$title $author</a><br> $donetext\n";
794 print "Error: Contact steve regarding $title by $author<br>\n";
799 print "No records returned.<p>\n";
804 my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file");
806 ($data, $name) = $sth->fetchrow;
810 <a href=$ENV{'SCRIPT_NAME'}?menu=$menu>Select a New File</a>
812 <table border=0 cellpadding=10 cellspacing=0>
813 <tr><th bgcolor=black><font color=white>Select a Record to Import<br>from $name</font></th></tr>
814 <tr><td bgcolor=#dddddd>
817 my @records=parsemarcdata($data);
818 foreach $record (@records) {
819 my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $controlnumber);
820 foreach $field (@$record) {
821 if ($field->{'tag'} eq '001') {
822 $controlnumber=$field->{'indicator'};
824 if ($field->{'tag'} eq '010') {
825 $lccn=$field->{'subfields'}->{'a'};
827 ($lccn) = (split(/\s+/, $lccn))[0];
829 if ($field->{'tag'} eq '015') {
830 $lccn=$field->{'subfields'}->{'a'};
833 ($lccn) = (split(/\s+/, $lccn))[0];
835 if ($field->{'tag'} eq '020') {
836 $isbn=$field->{'subfields'}->{'a'};
837 ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]);
840 if ($field->{'tag'} eq '022') {
841 $issn=$field->{'subfields'}->{'a'};
843 ($issn) = (split(/\s+/, $issn))[0];
845 if ($field->{'tag'} eq '100') {
846 $author=$field->{'subfields'}->{'a'};
848 if ($field->{'tag'} eq '245') {
849 $title=$field->{'subfields'}->{'a'};
851 $subtitle=$field->{'subfields'}->{'b'};
855 my $q_isbn=$dbh->quote((($isbn) || ('NIL')));
856 my $q_issn=$dbh->quote((($issn) || ('NIL')));
857 my $q_lccn=$dbh->quote((($lccn) || ('NIL')));
858 my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL')));
859 my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber");
865 $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn");
870 ($author) && ($author="by $author");
872 print "<a href=$ENV{'SCRIPT_NAME'}?file=$file&isbn=$isbn>$title$subtitle $author</a> $donetext<br>\n";
874 print "<a href=$ENV{'SCRIPT_NAME'}?file=$file&lccn=$lccn>$title$subtitle $author</a> $donetext<br>\n";
876 print "<a href=$ENV{'SCRIPT_NAME'}?file=$file&issn=$issn>$title$subtitle $author</a><br> $donetext\n";
877 } elsif ($controlnumber) {
878 print "<a href=$ENV{'SCRIPT_NAME'}?file=$file&controlnumber=$controlnumber>$title by $author</a><br> $donetext\n";
880 print "Error: Contact steve regarding $title by $author<br>\n";
884 print "</td></tr></table>\n";
890 if ($menu eq 'z3950') { z3950(); last SWITCH; }
891 if ($menu eq 'uploadmarc') { uploadmarc(); last SWITCH; }
892 if ($menu eq 'manual') { manual(); last SWITCH; }
900 $sth=$dbh->prepare("select id,term,type,done,numrecords,length(results),startdate,enddate,servers from z3950queue order by id desc limit 20");
902 print "<a href=$ENV{'SCRIPT_NAME'}>Main Menu</a><hr>\n";
903 print "<table border=0><tr><td valign=top>\n";
904 print "<h2>Results of Z39.50 searches</h2>\n";
905 print "<a href=$ENV{'SCRIPT_NAME'}?menu=z3950>Refresh</a><br>\n<ul>\n";
906 while (my ($id, $term, $type, $done, $numrecords, $length, $startdate, $enddate, $servers) = $sth->fetchrow) {
911 my $elapsed=$enddate-$startdate;
914 $elapsedtime=sprintf "%d minutes",($elapsed/60);
916 $elapsedtime=sprintf "%d seconds",$elapsed;
919 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=Z-$id&menu=$menu>$type=$term</a> <font size=-1>Done. $numrecords records found in $elapsedtime.</font><br>\n";
921 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=Z-$id&menu=$menu>$type=$term</a> <font size=-1>Done. No records found. Search took $elapsedtime.</font><br>\n";
923 } elsif ($done == -1) {
924 my $elapsed=time()-$startdate;
927 $elapsedtime=sprintf "%d minutes",($elapsed/60);
929 $elapsedtime=sprintf "%d seconds",$elapsed;
931 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=Z-$id&menu=$menu>$type=$term</a> <font color=red size=-1>Processing ($elapsedtime)</font><br>\n";
933 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=Z-$id&menu=$menu>$type=$term</a> $done <font size=-1>Pending</font><br>\n";
937 print "</td><td valign=top width=30%>\n";
938 my $sth=$dbh->prepare("select id,name,checked from z3950servers order by rank");
941 while (my ($id, $name, $checked) = $sth->fetchrow) {
942 ($checked) ? ($checked='checked') : ($checked='');
943 $serverlist.="<input type=checkbox name=S-$id $checked> $name<br>\n";
945 $serverlist.="<input type=checkbox name=S-MAN> <input name=manualz3950server size=25 value=otherserver:210/DATABASE>\n";
948 <form action=$ENV{'SCRIPT_NAME'} method=GET>
949 <input type=hidden name=z3950queue value=1>
950 <input type=hidden name=menu value=$menu>
952 <input type=hidden name=test value=testvalue>
953 <table border=1 bgcolor=#dddddd><tr><th bgcolor=#bbbbbb colspan=2>Search for MARC records</th></tr>
954 <tr><td>Query Term</td><td><input name=query></td></tr>
955 <tr><td colspan=2 align=center><input type=radio name=type value=isbn checked> ISBN <input type=radio name=type value=lccn> LCCN <input type=radio name=type value=title> Title</td></tr>
959 <tr><td colspan=2 align=center>
966 print "</td></tr></table>\n";
970 print "<a href=$ENV{'SCRIPT_NAME'}>Main Menu</a><hr>\n";
971 my $sth=$dbh->prepare("select id,name from uploadedmarc");
973 print "<h2>Select a set of MARC records</h2>\n<ul>";
974 while (my ($id, $name) = $sth->fetchrow) {
975 print "<li><a href=$ENV{'SCRIPT_NAME'}?file=$id&menu=$menu>$name</a><br>\n";
979 print "<table border=1 bgcolor=#dddddd><tr><th bgcolor=#bbbbbb
980 colspan=2>Upload a set of MARC records</th></tr>\n";
981 print "<tr><td>Upload a set of MARC records:</td><td>";
982 print $input->start_multipart_form();
983 print $input->filefield('uploadmarc');
987 <input type=hidden name=menu value=$menu>
988 Name this set of MARC records:</td><td><input type=text
990 <tr><td colspan=2 align=center>
1006 <li><a href=$ENV{'SCRIPT_NAME'}?menu=z3950>Z39.50 Search</a>
1007 <li><a href=$ENV{'SCRIPT_NAME'}?menu=uploadmarc>Upload MARC Records</a>
1014 #opendir(D, "/home/$userid/");
1015 #my @dirlist=readdir D;
1016 #foreach $file (@dirlist) {
1017 # (next) if ($file=~/^\./);
1018 # (next) if ($file=~/^nsmail$/);
1019 # (next) if ($file=~/^public_html$/);
1020 # ($file=~/\.mrc/) || ($filelist.="$file<br>\n");
1021 # (next) unless ($file=~/\.mrc$/);
1022 # $file=~s/ /\%20/g;
1023 # print "<a href=$ENV{'SCRIPT_NAME'}?file=/home/$userid/$file>$file</a><br>\n";
1027 #<form action=$ENV{'SCRIPT_NAME'} method=POST enctype=multipart/form-data>
1035 my $splitchar=chr(29);
1038 foreach $record (split(/$splitchar/, $data)) {
1039 my $leader=substr($record,0,24);
1040 #print "<tr><td>Leader:</td><td>$leader</td></tr>\n";
1041 $record=substr($record,24);
1042 my $splitchar2=chr(30);
1048 foreach $field (split(/$splitchar2/, $record)) {
1050 ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1);
1051 unless ($directory) {
1055 while ($item=substr($directory,0,12)) {
1056 $tag=substr($directory,0,3);
1057 $length=substr($directory,3,4);
1058 $start=substr($directory,7,6);
1059 $directory=substr($directory,12);
1060 $tag{$counter}=$tag;
1066 $tag=$tag{$tagcounter};
1069 $splitchar3=chr(31);
1070 my @subfields=split(/$splitchar3/, $field);
1071 $indicator=$subfields[0];
1072 $field{'indicator'}=$indicator;
1074 unless ($#subfields==0) {
1076 for ($i=1; $i<=$#subfields; $i++) {
1077 my $text=$subfields[$i];
1078 my $subfieldcode=substr($text,0,1);
1079 my $subfield=substr($text,1);
1080 if ($subfields{$subfieldcode}) {
1081 my $subfieldlist=$subfields{$subfieldcode};
1082 my @subfieldlist=@$subfieldlist;
1083 if ($#subfieldlist>=0) {
1084 # print "$tag Adding to array $subfieldcode -- $subfield<br>\n";
1085 push (@subfieldlist, $subfield);
1087 # print "$tag Arraying $subfieldcode -- $subfield<br>\n";
1088 @subfieldlist=($subfields{$subfieldcode}, $subfield);
1090 $subfields{$subfieldcode}=\@subfieldlist;
1092 $subfields{$subfieldcode}=$subfield;
1095 $field{'subfields'}=\%subfields;
1097 push (@record, \%field);
1099 push (@records, \@record);