From: Chris Nighswonger Date: Mon, 11 Jan 2010 15:14:29 +0000 (-0500) Subject: [3/30] Adding a test script for C4::Patroncards::Patroncard X-Git-Tag: v3.02.00-alpha~45^2~13^2~33 X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=278007e8476e439fea384073f14c7a758ab6d7eb;p=koha.git [3/30] Adding a test script for C4::Patroncards::Patroncard To be used for development initially and then can be modified for use as a test. NOTE: This does not work in its present form. --- diff --git a/t/db_dependent/Patroncards/t_Patroncards.t b/t/db_dependent/Patroncards/t_Patroncards.t new file mode 100644 index 0000000000..4fe77402e8 --- /dev/null +++ b/t/db_dependent/Patroncards/t_Patroncards.t @@ -0,0 +1,194 @@ +#!/usr/bin/perl +# +# Copyright 2009 Foundations Bible College. +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +## NOTE: This is really broken at this point and needs updating... -chris_n + +use strict; +use warnings; + +#use Test::More; +use Graphics::Magick; +use XML::Simple; +use autouse 'Data::Dumper' => qw(Dumper); + +use C4::Context; +use autouse 'C4::Members' => qw(GetPatronImage); +use C4::Creators::PDF 1.000000; +use C4::Patroncards::Patroncard 1.000000; + +#BEGIN { +# use_ok('C4::Patroncards::Patroncard'); +#} + +my $borrower_number = 3; +my $pdf = C4::Creators::PDF->new(InitVars => 0); + +# All units are in PostScript points in this script +$pdf->Mbox(0, 0, 612, 792); + +# Convert layout to XML and insert into db +#my $query = "INSERT INTO creator_layouts (layout_id,layout_xml) VALUES (1,?) ON DUPLICATE KEY UPDATE layout_xml=?;"; +#my $sth = C4::Context->dbh->prepare($query); +my $layout = +{ + barcode => { + type => 'CODE39', + llx => 26, + lly => 4.5, + data => '0002120108', + text => 1, # controls text_under_barcode display: 1 => visible, 0 => not visible + }, + text => [ + 'John Doe' => { + font => 'TB', + font_size => 13, + llx => 63, # llx & lly are relative to the llx & lly of the card NOT the page + lly => 103.5, + alignment => 'C', + }, + 'Anytown Public Library' => { + font => 'TR', + font_size => 8, + llx => 63, + lly => 85.5, + alignment => 'C', + }, + 'Line 3 Text' => { + font => 'TB', + font_size => 10, + llx => 63, + lly => 76.5, + alignment => 'C', + }, + ], + images => { + patron_image => { + data_source => {'db' => 'patronimages', + 'card_number' => '0002120108', + }, + Sx => 0, + Sy => 0, + Ox => 0, # Ox,Oy should be set to 0 unless you want special effects see http://www.adobe.com/devnet/pdf/pdf_reference.html ISO 32000-1 + Oy => 0, + Tx => 4.5, # Lower left corner of image relative to the lower left corner of the card + Ty => 63, + Dx => 72, # point height of display image + }, + image_1 => { + data_source => {'db' => 'pcards_images', + 'image_id' => 1, + }, + Sx => 0, + Sy => 0, + Ox => 0, # Ox,Oy should be set to 0 unless you want special effects see http://www.adobe.com/devnet/pdf/pdf_reference.html ISO 32000-1 + Oy => 0, + Tx => 100, # Lower left corner of image + Ty => 50, + Dx => 81, + }, + }, +}; + +#$sth->execute(XMLout($layout),XMLout($layout)); + +# Retrieve XML from database +my$query = "SELECT layout_xml FROM creator_layouts WHERE layout_id=20;"; +my $xml = C4::Context->dbh->selectrow_array($query); + +# Convert back to hash +$layout = XMLin($xml); + +# Do image foo and place binary image data into layout hash +my $image_data = {}; +my $alt_image_data = {}; +my $error = undef; +foreach (keys %{$layout->{'images'}}) { + warn "Processing key: $_\n"; + if (grep{m/db/} keys(%{$layout->{'images'}->{$_}->{'data_source'}})) { + warn $layout->{'images'}->{$_}->{'data_source'}->{'db'}; + if ($layout->{'images'}->{$_}->{'data_source'}->{'db'} eq 'patronimages') { + warn "Processing patron image data.\n"; + ($image_data, $error) = GetPatronImage($layout->{'images'}->{$_}->{'data_source'}->{'card_number'}); + warn sprintf('No image exists for borrower number %s.', $borrower_number) if !$image_data; + next if !$image_data; + } + elsif ($layout->{'images'}->{$_}->{'data_source'}->{'db'} eq 'pcards_images') { + warn "Processing pcards image data for image_id " . $$layout{'images'}{$_}{'data_source'}{'image_id'} . ".\n"; + my $dbh = C4::Context->dbh(); + $dbh->{LongReadLen} = 1000000; # allows us to read approx 1MB + $image_data = $dbh->selectrow_hashref("SELECT imagefile FROM pcards_images WHERE image_id = \'$$layout{'images'}{$_}{'data_source'}{'image_id'}\'"); + warn sprintf('Image does not exists in db table %s.', $$layout{'images'}{$_}{'data_source'}{'db'}) if !$image_data; + next if !$image_data; + # $string =~ s/(.)/sprintf("%x",ord($1))/eg; + } + else { + warn sprintf('No retrieval method for table %s.', $$layout{'images'}{$_}{'data_source'}{'db'}) if !$image_data; + } + warn sprintf('Database returned the following error: %s.', $error) if $error; + } + elsif (grep{m/foo/} keys(%{$layout->{'images'}->{$_}->{'data_source'}})) { + # some other image storage/retrieval method + } + +my $binary_data = $image_data->{'imagefile'}; +my $image = Graphics::Magick->new; +$image->BlobToImage($binary_data); +my $alt_image = Graphics::Magick->new; +$alt_image->BlobToImage($binary_data); +$alt_image->Set(magick => 'jpg', quality => 100); + +warn "Print Image Dimensions: " . $image->Get('width') . " X " . $image->Get('height') . "\n"; + +my $alt_width = $image->Get('width'); +my $alt_height = $image->Get('height'); +my $ratio = $alt_width / $alt_height; +my $display_height = $layout->{'images'}->{$_}->{'Dx'}; +my $display_width = $ratio * $display_height; +$image->Resize(width => $display_width, height => $display_height); +$image->Set(magick => 'jpg', quality => 100); + +warn "Display Image dimensions: " . $image->Get('width') . " X " . $image->Get('height') . "\n"; + +# Write params for alt image... + $layout->{'images'}->{$_}->{'alt'}->{'Sx'} = $alt_width; + $layout->{'images'}->{$_}->{'alt'}->{'Sy'} = $alt_height; + $layout->{'images'}->{$_}->{'alt'}->{'data'} = $alt_image->ImageToBlob(); +## Write params for display image... + $layout->{'images'}->{$_}->{'Sx'} = $display_width; + $layout->{'images'}->{$_}->{'Sy'} = $display_height; + $layout->{'images'}->{$_}->{'data'} = $image->ImageToBlob(); +} +die "BREAKPOINT..."; +# Create a new patroncard object +my $patron_card = C4::Patroncards::Patroncard->new( + batch_id => 1, + borrower_number => $borrower_number, + llx => 36,#13.5 # lower left corner of the card + lly => 639, + height => 139.5, # of the card + width => 229.5, + layout => $layout, + text_wrap_cols => 30, +); +$patron_card->draw_guide_box($pdf); +$patron_card->draw_barcode($pdf); +my $err = $patron_card->draw_image($pdf); +$patron_card->draw_text($pdf); +$pdf->End; +exit(1);