1c39484c4b
This commit also contains some work on C4::Labels::Layout as well
299 lines
8.6 KiB
Perl
299 lines
8.6 KiB
Perl
package C4::Labels::Layout;
|
|
|
|
# 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
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Sys::Syslog qw(syslog);
|
|
|
|
use C4::Context;
|
|
use C4::Debug;
|
|
use Data::Dumper;
|
|
|
|
BEGIN {
|
|
use version; our $VERSION = qv('1.0.0_1');
|
|
}
|
|
|
|
# FIXME: Consider this style parameter verification instead...
|
|
# my %param = @_;
|
|
# for (keys %param)
|
|
# { my $lc = lc($_);
|
|
# if (exists $default{$lc})
|
|
# { $default{$lc} = $param{$_};
|
|
# }
|
|
# else
|
|
# { print STDERR "Unknown parameter $_ , not used \n";
|
|
# }
|
|
# }
|
|
|
|
sub _check_params {
|
|
my $given_params = {};
|
|
my $exit_code = 0;
|
|
my @valtmpl_id_params = (
|
|
'barcode_type',
|
|
'start_label', #remove...pass in as a cgi->param
|
|
'printing_type',
|
|
'layout_name',
|
|
'guidebox',
|
|
'font_type',
|
|
'ccode', #remove...depricated...
|
|
'callnum_split',
|
|
'text_justify',
|
|
'format_string',
|
|
);
|
|
if (scalar(@_) >1) {
|
|
$given_params = {@_};
|
|
foreach my $key (keys %{$given_params}) {
|
|
if (!(grep m/$key/, @valtmpl_id_params)) {
|
|
syslog("LOG_ERR", "C4::Labels::Template : Unrecognized parameter type of \"%s\".", $key);
|
|
$exit_code = 1;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (!(grep m/$_/, @valtmpl_id_params)) {
|
|
syslog("LOG_ERR", "C4::Labels::Template : Unrecognized parameter type of \"%s\".", $_);
|
|
$exit_code = 1;
|
|
}
|
|
}
|
|
return $exit_code;
|
|
}
|
|
|
|
=head1 NAME
|
|
|
|
C4::Labels::Layout -A class for creating and manipulating layout objects in Koha
|
|
|
|
=cut
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 C4::Labels::Layout->new()
|
|
|
|
Invoking the I<new> method constructs a new layout object containing the default values for a layout.
|
|
|
|
example:
|
|
my $layout = Layout->new(); # Creates and returns a new layout object
|
|
|
|
B<NOTE:> This layout is I<not> written to the database untill $layout->save() is invoked. You have been warned!
|
|
|
|
=cut
|
|
|
|
sub new {
|
|
my $invocant = shift;
|
|
if (_check_params(@_) eq 1) {
|
|
return 1;
|
|
}
|
|
my $type = ref($invocant) || $invocant;
|
|
my $self = {
|
|
barcode_type => '',
|
|
start_label => 1,
|
|
printing_type => '',
|
|
layout_name => '',
|
|
guidebox => 0,
|
|
font_type => '',
|
|
ccode => '',
|
|
callnum_split => 0,
|
|
text_justify => '',
|
|
format_string => '',
|
|
@_,
|
|
};
|
|
bless ($self, $type);
|
|
return $self;
|
|
}
|
|
|
|
=head2 Layout->retrieve(layout_id => layout_id)
|
|
|
|
Invoking the I<retrieve> method constructs a new layout object containing the current values for layout_id. The method returns
|
|
a new object upon success and 1 upon failure. Errors are logged to the syslog.
|
|
|
|
example:
|
|
my $layout = Layout->retrieve(layout_id => 1); # Retrieves layout record 1 and returns an object containing the record
|
|
|
|
=cut
|
|
|
|
sub retrieve {
|
|
my $invocant = shift;
|
|
my %opts = @_;
|
|
my $type = ref($invocant) || $invocant;
|
|
my $query = "SELECT * FROM labels_layouts WHERE layout_id = ?";
|
|
my $sth = C4::Context->dbh->prepare($query);
|
|
$sth->execute($opts{'layout_id'});
|
|
if ($sth->err) {
|
|
syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr);
|
|
return 1;
|
|
}
|
|
my $self = $sth->fetchrow_hashref;
|
|
bless ($self, $type);
|
|
return $self;
|
|
}
|
|
|
|
=head2 Layout->delete(layout_id => layout_id) | $layout->delete()
|
|
|
|
Invoking the delete method attempts to delete the layout from the database. The method returns 0 upon success
|
|
and 1 upon failure. Errors are logged to the syslog.
|
|
|
|
examples:
|
|
my $exitstat = $layout->delete(); # to delete the record behind the $layout object
|
|
my $exitstat = Layout->delete(layout_id => 1); # to delete layout record 1
|
|
|
|
=cut
|
|
|
|
sub delete {
|
|
my $self = {};
|
|
my %opts = ();
|
|
my $call_type = '';
|
|
my $query_param = '';
|
|
if (ref($_[0])) {
|
|
$self = shift; # check to see if this is a method call
|
|
$call_type = 'C4::Labels::Layout->delete';
|
|
$query_param = $self->{'layout_id'};
|
|
}
|
|
else {
|
|
%opts = @_;
|
|
$call_type = 'C4::Labels::Layout::delete';
|
|
$query_param = $opts{'layout_id'};
|
|
}
|
|
warn Dumper(\%opts);
|
|
if ($query_param eq '') { # If there is no layout id then we cannot delete it
|
|
syslog("LOG_ERR", "%s : Cannot delete layout as the layout id is invalid or non-existant.", $call_type);
|
|
return 1;
|
|
}
|
|
my $query = "DELETE FROM labels_layouts WHERE layout_id = ?";
|
|
my $sth = C4::Context->dbh->prepare($query);
|
|
warn "$query : ?= $query_param\n";
|
|
$sth->execute($query_param);
|
|
if ($sth->err) {
|
|
warn "DB error: $sth->errstr\n";
|
|
syslog("LOG_ERR", "%s : Database returned the following error: %s", $call_type, $sth->errstr);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
=head2 $layout->save()
|
|
|
|
Invoking the I<save> method attempts to insert the layout into the database if the layout is new and
|
|
update the existing layout record if the layout exists. The method returns the new record id upon
|
|
success and -1 upon failure (This avoids conflicting with a record id of 1). Errors are logged to the syslog.
|
|
|
|
example:
|
|
my $exitstat = $layout->save(); # to save the record behind the $layout object
|
|
|
|
=cut
|
|
|
|
sub save {
|
|
my $self = shift;
|
|
if ($self->{'layout_id'}) { # if we have an id, the record exists and needs UPDATE
|
|
my @params;
|
|
my $query = "UPDATE labels_layouts SET ";
|
|
foreach my $key (keys %{$self}) {
|
|
next if $key eq 'id';
|
|
push (@params, $self->{$key});
|
|
$query .= "$key=?, ";
|
|
}
|
|
$query = substr($query, 0, (length($query)-2));
|
|
push (@params, $self->{'id'});
|
|
$query .= " WHERE layout_id=?;";
|
|
warn "DEBUG: Updating: $query\n" if $debug;
|
|
my $sth = C4::Context->dbh->prepare($query);
|
|
$sth->execute(@params);
|
|
if ($sth->err) {
|
|
syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr);
|
|
return -1;
|
|
}
|
|
return $self->{'layout_id'};
|
|
}
|
|
else { # otherwise create a new record
|
|
my @params;
|
|
my $query = "INSERT INTO labels_layouts (";
|
|
foreach my $key (keys %{$self}) {
|
|
push (@params, $self->{$key});
|
|
$query .= "$key, ";
|
|
}
|
|
$query = substr($query, 0, (length($query)-2));
|
|
$query .= ") VALUES (";
|
|
for (my $i=1; $i<=(scalar keys %$self); $i++) {
|
|
$query .= "?,";
|
|
}
|
|
$query = substr($query, 0, (length($query)-1));
|
|
$query .= ");";
|
|
warn "DEBUG: Saving: $query\n" if $debug;
|
|
my $sth = C4::Context->dbh->prepare($query);
|
|
$sth->execute(@params);
|
|
if ($sth->err) {
|
|
syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr);
|
|
return -1;
|
|
}
|
|
my $sth1 = C4::Context->dbh->prepare("SELECT MAX(layout_id) FROM labels_layouts;");
|
|
$sth1->execute();
|
|
my $id = $sth1->fetchrow_array;
|
|
return $id;
|
|
}
|
|
}
|
|
|
|
=head2 $layout->get_attr("attr")
|
|
|
|
Invoking the I<get_attr> method will return the value of the requested attribute or 1 on errors.
|
|
|
|
example:
|
|
my $value = $layout->get_attr("attr");
|
|
|
|
=cut
|
|
|
|
sub get_attr {
|
|
my $self = shift;
|
|
if (_check_params(@_) eq 1) {
|
|
return 1;
|
|
}
|
|
my ($attr) = @_;
|
|
if (exists($self->{$attr})) {
|
|
return $self->{$attr};
|
|
}
|
|
else {
|
|
return 1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
=head2 $layout->set_attr(attr => value)
|
|
|
|
Invoking the I<set_attr> method will set the value of the supplied attribute to the supplied value.
|
|
|
|
example:
|
|
$layout->set_attr(attr => value);
|
|
|
|
=cut
|
|
|
|
sub set_attr {
|
|
my $self = shift;
|
|
if (_check_params(@_) eq 1) {
|
|
return 1;
|
|
}
|
|
my ($attr, $value) = @_;
|
|
$self->{$attr} = $value;
|
|
return 0;
|
|
}
|
|
1;
|
|
__END__
|
|
|
|
=head1 AUTHOR
|
|
|
|
Chris Nighswonger <cnighswonger AT foundations DOT edu>
|
|
|
|
=cut
|