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 DBI qw(neat);
+use base qw(C4::Creators::Layout);
-use C4::Context;
-use C4::Debug;
-use Data::Dumper;
+use autouse 'Data::Dumper' => qw(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 $exit_code = 0;
- my @valtmpl_id_params = (
- 'barcode_type',
- 'printing_type',
- 'layout_name',
- 'guidebox',
- 'font',
- 'font_size',
- 'callnum_split',
- 'text_justify',
- 'format_string',
- );
- if (scalar(@_) >1) {
- my %given_params = @_;
- foreach my $key (keys %given_params) {
- if (!(grep m/$key/, @valtmpl_id_params)) {
- syslog("LOG_ERR", "C4::Labels::Layout : (Multiple parameters) Unrecognized parameter type of \"%s\".", $key);
- $exit_code = 1;
- }
- }
- }
- else {
- if (!(grep m/$_/, @valtmpl_id_params)) {
- syslog("LOG_ERR", "C4::Labels::Layout : (Single parameter) 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
+__PACKAGE__ =~ m/^C4::(.+)::.+$/;
+my $me = $1;
sub new {
- my $invocant = shift;
- if (_check_params(@_) eq 1) {
- return 1;
- }
- my $type = ref($invocant) || $invocant;
- my $self = {
- barcode_type => 'CODE39',
- printing_type => 'BAR',
- layout_name => 'DEFAULT',
- guidebox => 0,
- font => 'TR',
- font_size => 3,
- callnum_split => 0,
- text_justify => 'L',
- format_string => 'title, author, isbn, issn, itemtype, barcode, callnumber',
- @_,
- };
- bless ($self, $type);
- return $self;
+ my $self = shift;
+ push @_, "creator", $me;
+ return $self->SUPER::new(@_);
}
-=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 save {
+ my $self = shift;
+ push @_, "creator", $me;
+ return $self->SUPER::save(@_);
+}
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;
+ my $self = shift;
+ push @_, "creator", $me;
+ return $self->SUPER::retrieve(@_);
}
-=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'};
- }
- 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);
- $sth->execute($query_param);
- if ($sth->err) {
- 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 'layout_id';
- push (@params, $self->{$key});
- $query .= "$key=?, ";
- }
- $query = substr($query, 0, (length($query)-2));
- $query .= " WHERE layout_id=?;";
- push (@params, $self->{'layout_id'});
- my $sth = C4::Context->dbh->prepare($query);
- #local $sth->{TraceLevel} = "3"; # enable DBI trace and set level; outputs to STDERR
- $sth->execute(@params);
- if ($sth->err) {
- syslog("LOG_ERR", "C4::Labels::Layout : 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 .= ");";
- my $sth = C4::Context->dbh->prepare($query);
- $sth->execute(@params);
- if ($sth->err) {
- syslog("LOG_ERR", "C4::Labels::Layout : 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};
+ my $self = shift; # check to see if this is a method call
+ push @_, "creator", $me;
+ return $self->SUPER::delete(@_);
}
else {
- return -1;
+ push @_, "creator", $me;
+ return __PACKAGE__->SUPER::delete(@_); # XXX: is this too hackish?
}
- 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 %attrs = @_;
- foreach my $attrib (keys(%attrs)) {
- $self->{$attrib} = $attrs{$attrib};
- };
- return 0;
-}
1;
-__END__
-
-=head1 AUTHOR
-
-Chris Nighswonger <cnighswonger AT foundations DOT edu>
-
-=cut