[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Koha-cvs] koha/cards createcards.pl [dev_week]
From: |
Kyle Hall |
Subject: |
[Koha-cvs] koha/cards createcards.pl [dev_week] |
Date: |
Wed, 16 Apr 2008 11:43:17 +0000 |
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Kyle Hall <kylemhall> 08/04/16 11:43:17
Modified files:
cards : createcards.pl
Log message:
Updated catalog card printer
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/cards/createcards.pl?cvsroot=koha&only_with_tag=dev_week&r1=1.1.2.1&r2=1.1.2.2
Patches:
Index: createcards.pl
===================================================================
RCS file: /sources/koha/koha/cards/Attic/createcards.pl,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -b -r1.1.2.1 -r1.1.2.2
--- createcards.pl 11 Apr 2008 13:15:11 -0000 1.1.2.1
+++ createcards.pl 16 Apr 2008 11:43:17 -0000 1.1.2.2
@@ -17,215 +17,352 @@
use constant X_CENTER => 325;
use constant X_RIGHT => 455;
-use constant INDENT => 5;
+use constant INDENT => 15;
use constant FH => 12; ## Font Height
-use constant MAX_STRING_WIDTH => 60;
+use constant MAX_LINES => 15;
+use constant STARTING_LINE => 2;
+
+use constant MAX_STRING_WIDTH => 50;
use constant MAX_CALLNUMBER_WIDTH => 5;
my $dbh = C4::Context->dbh;
-
my $input = new CGI;
my $barcodeStart = $input->param('barcodeStart');
my $barcodeEnd = $input->param('barcodeEnd');
-
prInitVars();
$| = 1;
print STDOUT "Content-Disposition: attachment;filename=\"cards.pdf\"\n";
print STDOUT "Content-Type: application/pdf \r\n\r\n";
prFile();
-my $currentCard = 0;
-for ( my $barcode = $barcodeStart; $barcode <= $barcodeEnd; $barcode++ ) {
- my $sth = $dbh->prepare("SELECT * FROM items, biblio, biblioitems
+my $currentCard = 1;
+for ( my $barcode = $barcodeStart ; $barcode <= $barcodeEnd ; $barcode++ ) {
+ my $sth = $dbh->prepare(
+ "SELECT * FROM items, biblio, biblioitems
WHERE items.biblionumber = biblio.biblionumber
AND items.biblionumber = biblioitems.biblionumber
- AND items.barcode = ?");
- $sth->execute( $barcode );
+ AND items.barcode = ?"
+ );
+ $sth->execute($barcode);
my $item = $sth->fetchrow_hashref;
- createMainEntryCard( $item, $currentCard = getNextCardNum( $currentCard ) );
- createTitleCard( $item, $currentCard = getNextCardNum( $currentCard ) );
+ my @subjects = getSubjects($item);
+
+ my $cardsList;
+ my $i = 1;
+ foreach my $subject (@subjects) {
+ $cardsList .= "$i. $subject ";
+ $i++;
+ }
+ $cardsList .= "I. Title";
+
+ ## Main Entry Card
+ $currentCard = createCard( $item, $currentCard,
+ $cardsList );
+
+ $currentCard = createShelfCard( $item, $currentCard, $cardsList );
- my @subjects = getSubjects( $item );
- foreach my $subject ( @subjects ) {
- createSubjectCard( $item, $currentCard = getNextCardNum( $currentCard ),
$subject );
+ if ( $item->{'author'} ) { ## If we have an author, we need a Title Card
+ $currentCard = createCard( $item, $currentCard, $cardsList,
$item->{'title'} );
}
+ ## Need a Subject Card for each subject
+ foreach my $subject (@subjects) {
+ $currentCard = createCard( $item, $currentCard,
+ $cardsList, $subject );
+ }
+
+ ## Additional Author Cards
+ my $marc = MARC::Record->new_from_usmarc( $item->{'marc'} );
+ my @authors = $marc->field('700');
+ foreach my $author ( @authors ) {
+ $currentCard = createCard( $item, $currentCard, $cardsList,
$author->subfield('a') );
+ }
}
prEnd();
-sub createTitleCard {
- my ( $item, $cardNumber ) = @_;
+sub getBibData {
+ my ($item) = @_;
+ my $marc = MARC::Record->new_from_usmarc( $item->{'marc'} );
+
+ my @lines;
+
+ my $line;
+
+ $line = '';
+
+ ## Title
+ if ( $item->{'title'} ) {
+ $line .= $item->{'title'}; ## Title
+ }
+
+ ## Statement of responsibility, etc.
+ if ( $marc->field('245') && $marc->field('245')->subfield("c") ) {
+ $line .= " / "; ## Separator
+ $line .=
+ $marc->field('245')->subfield("c")
+ ; ## Statement of responsibility, etc.
+ }
+
+ ## Edition
+ if ( $marc->field('250') && $marc->field('250')->subfield("a") ) {
+ $line .= " -- "; ## Separator
+ $line .= $marc->field('250')->subfield("a");
+ }
+
+ ## Publisher
+ $line .= " -- "; ##
Separator
+ $line .= $item->{'place'} . " : " . $item->{'publishercode'};
+
+ ## Copyright
+ if ( $marc->field('260') && $marc->field('260')->subfield("c") ) {
+ $line .= ", ";
+ $line .= "c" . $marc->field('260')->subfield("c") . ".";
+ }
+
+ push( @lines, $line );
+ $line = '';
- createMainEntryCard( $item, $cardNumber );
+ ## Pages i.e. Physical Extent
+ if ( $marc->field('300') && $marc->field('300')->subfield("a") ) {
+ $line = $marc->field('300')->subfield("a") . " ";
+ }
+
+ ## Series
+ if ( $item->{'seriestitle'} ) {
+ $line .= "( " . $item->{'seriestitle'} . " ) ";
+ }
- printCardHeaderLine( $item, $cardNumber, $item->{'title'} );
+ push( @lines, $line );
+
+ return @lines;
}
-sub createSubjectCard {
- my ( $item, $cardNumber, $subject ) = @_;
+sub getShelfData {
+ my ( $item ) = @_;
+
+ my @lines;
+ my $line;
+
+ if ( $item->{'price'} ) {
+ $line .= '$' . $item->{'price'} . ' ';
+ }
+ $line .='BC#' . $item->{'barcode'};
+ push( @lines, $line );
- createMainEntryCard( $item, $cardNumber );
+ my $line = $item->{'dateaccessioned'};
+ push( @lines, $line );
- printCardHeaderLine( $item, $cardNumber, $subject );
+ return @lines;
}
-sub createMainEntryCard {
- my ( $item, $cardNumber ) = @_;
+sub createCard {
+ my ( $item, $cardNumber, $cardsList, $header ) = @_;
my $yo = Y_OFFSET * ( $cardNumber - 1 );
- my $line = 2;
+ if ($header) {
+ printHeader( $cardNumber, $header );
+ }
+
+ my $line = STARTING_LINE;
printCallnumber( $item, $cardNumber );
-# prText( X_LEFT, Y_TOP - Y_OFFSET * ( $cardNumber - 1 ) - FH * $line++,
$item->{'itemcallnumber'} );
- $line += printAuthorLine( $item, $cardNumber, $line );
- $line += printTitleLine( $item, $cardNumber, $line );
- $line += printPublisherLine( $item, $cardNumber, $line );
- $line += printCopyrightLine( $item, $cardNumber, $line );
- $line += printSeriesTitleLine( $item, $cardNumber, $line );
- $line++;
- $line += printAbstractLine( $item, $cardNumber, $line );
- $line += printIsbnLine( $item, $cardNumber, $line );
+ ## Main Author
+ if ( $item->{'author'} ) {
+ ( $cardNumber, $line ) =
+ printLine( $item->{'author'}, $cardNumber, $line, my $indent = 0,
$item, $header );
+ }
+
+ my $indentStyle = 'standard';
+ if ( !$item->{'author'} ) {
+ $indentStyle = 'hanging';
+ }
+
+ my (@bibLines) = getBibData($item);
+ ( $cardNumber, $line ) = printLines( $cardNumber, $line, $indentStyle,
$item, $header, @bibLines );
+
$line++;
- $line += printSubjectsLine( $item, $cardNumber, $line );
-}
+ my @abstract;
+ push( @abstract, $item->{'abstract'} );
+ ( $cardNumber, $line ) = printLines( $cardNumber, $line, $indentStyle =
'none', $item, $header, @abstract );
+
+ ( $cardNumber, $line ) = printLine( 'ISBN: ' . $item->{'isbn'},
$cardNumber, $line, my $indent = 1, $item, $header );
-sub printCardHeaderLine {
- my ( $item, $cardNumber, $header ) = @_;
+ $line++;
+ my @cardsList;
+ push( @cardsList, $cardsList );
+ ( $cardNumber, $line ) =
+ printLines( $cardNumber, $line, $indentStyle = 'standard', $item,
$header, @cardsList );
- prText( X_INDENTED + ( INDENT * 2 ), Y_TOP - Y_OFFSET * ( $cardNumber - 1 )
- ( FH / 2 ), $header );
+ return getNextCardNum( $cardNumber )
}
-sub printCallnumber {
- my ( $item, $cardNumber ) = @_;
- my @lines = split( / /, $item->{'itemcallnumber'} );
+sub createShelfCard {
+ my ( $item, $cardNumber, $cardsList, $header ) = @_;
- my $l = 0;
- foreach my $line ( @lines ) {
- my @lines;
- while ( length( $line ) > 0 ) {
- push( @lines, substr( $line, 0, MAX_CALLNUMBER_WIDTH, '' ) );
+ my $yo = Y_OFFSET * ( $cardNumber - 1 );
+
+ if ($header) {
+ printHeader( $cardNumber, $header );
}
- foreach my $line ( @lines ) {
- prText( X_LEFT, Y_TOP - Y_OFFSET * ( $cardNumber - 1 ) - FH * $l++,
$line );
+ my $line = STARTING_LINE;
+
+ printCallnumber( $item, $cardNumber );
+
+ ## Main Author
+ if ( $item->{'author'} ) {
+ ( $cardNumber, $line ) =
+ printLine( $item->{'author'}, $cardNumber, $line, my $indent = 0,
$item, $header );
}
+
+ my $indentStyle = 'standard';
+ if ( !$item->{'author'} ) {
+ $indentStyle = 'hanging';
}
-}
-sub printAuthorLine {
- my ( $item, $cardNumber, $line ) = @_;
- return printLine( $item->{'author'}, $cardNumber, $line, 0 );
-}
+ my (@bibLines) = getBibData($item);
+ ( $cardNumber, $line ) = printLines( $cardNumber, $line, $indentStyle,
$item, $header, @bibLines );
-sub printTitleLine {
- my ( $item, $cardNumber, $line ) = @_;
- my $marc = MARC::Record->new_from_usmarc( $item->{'marc'} );
+ my @shelfData = getShelfData( $item );
+ ( $cardNumber, $line ) = printLines( $cardNumber, $line, $indentStyle,
$item, $header, @shelfData );
- my $text = $item->{'title'} . " / " . $marc->field('245')->subfield("c");
- return printLine( $text, $cardNumber, $line, my $indent = 1 );
-}
+ ( $cardNumber, $line ) = printLine( 'ISBN: ' . $item->{'isbn'},
$cardNumber, $line, my $indent = 1, $item, $header );
-sub printPublisherLine {
- my ( $item, $cardNumber, $line ) = @_;
- my $text = $item->{'place'} . " : " . $item->{'publishercode'};
- return printLine( $text, $cardNumber, $line );
+ $line++;
+ my @cardsList;
+ push( @cardsList, $cardsList );
+ ( $cardNumber, $line ) =
+ printLines( $cardNumber, $line, $indentStyle = 'standard', $item,
$header, @cardsList );
+
+ return getNextCardNum( $cardNumber )
}
-sub printCopyrightLine {
- my ( $item, $cardNumber, $line ) = @_;
- my $marc = MARC::Record->new_from_usmarc( $item->{'marc'} );
- if ( $marc->field('260') && $marc->field('260')->subfield("c") ) {
- my $text = "c" . $marc->field('260')->subfield("c") . ".";
- return printLine( $text, $cardNumber, $line );
- } else {
- return 0;
- }
-}
+sub printLines {
+ my ( $cardNumber, $line, $indentStyle, $item, $header, @text ) = @_;
-sub printSeriesTitleLine {
- my ( $item, $cardNumber, $line ) = @_;
- if ( $item->{'seriestitle'} ) {
- my $text = "( " . $item->{'seriestitle'} . " ) ";
- return printLine( $text, $cardNumber, $line, my $indent = 2 );
- } else {
- return 0;
+ ## Prime the special indenting for first line
+ my $x_indents = 0;
+ if ( $indentStyle eq 'standard' ) {
+ $x_indents = 1;
}
-}
-sub printAbstractLine {
- my ( $item, $cardNumber, $line ) = @_;
- my $abstract = $item->{'abstract'};
+ foreach my $textLine (@text) {
+ my @words = split( / /, $textLine );
+ my $currentLine;
- my @lines;
- while ( length( $abstract ) > 0 ) {
- push( @lines, substr( $abstract, 0, MAX_STRING_WIDTH, '' ) );
+ my $words = @words;
+ while ($words) {
+ while (
+ length($currentLine) <=
+ MAX_STRING_WIDTH - ( INDENT * $x_indents ) )
+ {
+ $currentLine .= shift(@words) . " ";
+ $words = @words;
}
+ ( $cardNumber, $line ) = printLine( $currentLine, $cardNumber,
$line, $x_indents, $item, $header );
- my $fh = FH - ( FH / 4 );
- prFontSize( $fh );
+ $currentLine = '';
+ ## After first line, all indenting is the same
+ if ( $indentStyle eq 'standard' ) {
+ $x_indents = 0;
+ }
+ elsif ( $indentStyle eq 'hanging' ) {
+ $x_indents = 1;
+ }
- my $l = $line;
- foreach my $line ( @lines ) {
- $l += printLine( $line, $cardNumber, $l );
}
- prFontSize( FH );
+ ## Special indenting for first line
+ $x_indents = 0;
+ if ( $indentStyle eq 'standard' ) {
+ $x_indents = 1;
+ }
- return $l - $line;
-}
+ }
-sub printIsbnLine {
- my ( $item, $cardNumber, $line ) = @_;
- my $text = "ISBN " . $item->{'isbn'};
- return printLine( $text, $cardNumber, $line, my $indent = 2 );
+ return ( $cardNumber, $line );
}
-sub printSubjectsLine {
- my ( $item, $cardNumber, $line ) = @_;
-
- my @subjects = getSubjects( $item );
+sub printLine {
+ my ( $text, $cardNumber, $line, $x_indents, $item, $header ) = @_;
- my $l = $line;
- foreach my $subject ( @subjects ) {
- $l += printLine( $subject, $cardNumber, $l, my $indent = 2 );
+ if ( $line < MAX_LINES ) {
+ prText( X_INDENTED + ( INDENT * $x_indents ), Y_TOP - Y_OFFSET * (
$cardNumber - 1 ) - FH * $line, $text );
+ } else {
+ prText( X_INDENTED , Y_TOP - Y_OFFSET * ( $cardNumber - 1 ) - FH *
$line, 'CONTINUED ON NEXT CARD' );
+ $cardNumber = getNextCardNum( $cardNumber, $item, $header );
+ $line = STARTING_LINE;
+ ( $cardNumber, $line ) = printLine( $text, $cardNumber, $line,
$x_indents, $item, $header )
}
- return $l - $line;
+ return ( $cardNumber, $line + 1 );
}
-sub printLine {
- my ( $text, $cardNumber, $line, $x_indents ) = @_;
- prText( X_INDENTED + ( INDENT * $x_indents ), Y_TOP - Y_OFFSET * (
$cardNumber - 1 ) - FH * $line, $text );
- return 1;
+sub printHeader {
+ my ( $cardNumber, $header ) = @_;
+
+ prText( X_INDENTED + ( INDENT * 2 ),
+ Y_TOP - Y_OFFSET * ( $cardNumber - 1 ) - ( FH / 2 ), $header );
+}
+
+sub printCallnumber {
+ my ( $item, $cardNumber ) = @_;
+ my @lines = split( / /, $item->{'itemcallnumber'} );
+
+ my $l = 0;
+ foreach my $line (@lines) {
+ my @lines;
+ while ( length($line) > 0 ) {
+ push( @lines, substr( $line, 0, MAX_CALLNUMBER_WIDTH, '' ) );
+ }
+
+ foreach my $line (@lines) {
+ prText( X_LEFT, Y_TOP - Y_OFFSET * ( $cardNumber - 1 ) - FH * $l++,
+ $line );
+ }
+ }
}
+## If we are continuing an entry that needs more than one card, we must write
the
+## callnumber and header again, that is why they are optional arguments.
sub getNextCardNum {
- my ( $currentCard ) = @_;
+ my ( $cardNumber, $item, $header ) = @_;
- $currentCard++;
+ $cardNumber++;
- if ( $currentCard > 3 ) {
- $currentCard = 1;
+ if ( $cardNumber > 3 ) {
+ $cardNumber = 1;
prPage();
}
- return $currentCard
+ if ( $item ) {
+ printCallnumber( $item, $cardNumber );
+ }
+
+ if ($header) {
+ printHeader( $cardNumber, $header );
+ }
+
+ return $cardNumber;
}
sub getSubjects {
- my ( $item ) = @_;
+ my ($item) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("SELECT subject FROM bibliosubject WHERE
biblionumber = ? ORDER BY subject");
+ my $sth =
+ $dbh->prepare(
+"SELECT subject FROM bibliosubject WHERE biblionumber = ? ORDER BY subject"
+ );
$sth->execute( $item->{'biblionumber'} );
my @subjects;
while ( my $subject = $sth->fetchrow_hashref ) {
@@ -234,44 +371,6 @@
return @subjects;
}
-=pod
-print "<h1>Shelf</h1>";
-print "<p>Callnumber: " . $item->{'itemcallnumber'};
-print "<p>Author: " . $item->{'author'};
-print "<p>Title: " . $item->{'title'};
-print "<p>Statement of responsibility, etc: " .
$marc->field('245')->subfield("c");
-print "<p>Place: " . $item->{'place'};
-print "<p>Publisher Code: " . $item->{'publishercode'};
-print "<p>Price: " . $item->{'price'};
-print "<p>Barcode: " . $item->{'barcode'};
-print "<p>Series Title: " . $item->{'seriestitle'};
-print "<p>ISBN: " . $item->{'isbn'};
-print "<p>Date Accessioned: " . $item->{'dateaccessioned'};
-foreach my $subject ( @subjects ) {
- print "<p>Subject: $subject";
-}
-
-foreach my $subject ( @subjects ) {
- print "<h1>Subject: $subject</h1>";
- print "<p>Subject: $subject";
- print "<p>Callnumber: " . $item->{'itemcallnumber'};
- print "<p>Author: " . $item->{'author'};
- print "<p>Title: " . $item->{'title'};
- print "<p>Statement of responsibility, etc: " .
$marc->field('245')->subfield("c");
- print "<p>Place: " . $item->{'place'};
- print "<p>Publisher Code: " . $item->{'publishercode'};
- print "<p>Price: " . $item->{'price'};
- print "<p>Barcode: " . $item->{'barcode'};
- print "<p>Series Title: " . $item->{'seriestitle'};
- print "<p>Abstract: " . $item->{'abstract'};
- print "<p>ISBN: " . $item->{'isbn'};
- foreach my $subject ( @subjects ) {
- print "<p>Subject: $subject";
- }
-
-}
-=cut
-
# Perl trim function to remove whitespace from the start and end of the string
sub trim($) {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Koha-cvs] koha/cards createcards.pl [dev_week],
Kyle Hall <=