Bug 4994 - Net::LDAP returns lowercase names
[koha.git] / C4 / Labels / Layout.pm
index da2e26f..c1d749d 100644 (file)
@@ -3,417 +3,45 @@ package C4::Labels::Layout;
 use strict;
 use warnings;
 
-use DBI qw(neat);
+use base qw(C4::Creators::Layout);
 
-use C4::Context;
-use C4::Debug;
-use C4::Labels::PDF;
+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)) {
-                warn sprintf('(Multiple parameters) Unrecognized parameter type of "%s".', $key);
-                $exit_code = 1;
-            }
-        }
-    }
-    else {
-        if (!(grep m/$_/, @valtmpl_id_params)) {
-            warn sprintf('(Single parameter) Unrecognized parameter type of "%s".', $_);
-            $exit_code = 1;
-        }
-    }
-    return $exit_code;
-}
+__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;
-}
-
-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) {
-        warn sprintf('Database returned the following error: %s', $sth->errstr);
-        return -1;
-    }
-    my $self = $sth->fetchrow_hashref;
-    bless ($self, $type);
-    return $self;
-}
-
-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
-        warn sprintf('%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) {
-        warn sprintf('%s : Database returned the following error: %s', $call_type, $sth->errstr);
-        return -1;
-    }
-    return 0;
+    my $self = shift;
+    push @_, "creator", $me;
+    return $self->SUPER::new(@_);
 }
 
 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) {
-            warn sprintf('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) {
-            warn sprintf('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;
-    }
+    push @_, "creator", $me;
+    return $self->SUPER::save(@_);
 }
 
-sub get_attr {
+sub retrieve {
     my $self = shift;
-    if (_check_params(@_) eq 1) {
-        return -1;
-    }
-    my ($attr) = @_;
-    if (exists($self->{$attr})) {
-        return $self->{$attr};
-    }
-    else {
-        return -1;
-    }
-    return;
+    push @_, "creator", $me;
+    return $self->SUPER::retrieve(@_);
 }
 
-sub set_attr {
-    my $self = shift;
-    if (_check_params(@_) eq 1) {
-        return -1;
+sub delete {
+    if (ref($_[0])) {
+        my $self = shift;  # check to see if this is a method call
+        push @_, "creator", $me;
+        return $self->SUPER::delete(@_);
     }
-    my %attrs = @_;
-    foreach my $attrib (keys(%attrs)) {
-        $self->{$attrib} = $attrs{$attrib};
-    };
-    return 0;
-}
-
-sub get_text_wrap_cols {
-    my $self = shift;
-    my %params = @_;
-    my $string = '';
-    my $strwidth = 0;
-    my $col_count = 0;
-    my $textlimit = $params{'label_width'} - ( 3 * $params{'left_text_margin'});
-
-    while ($strwidth < $textlimit) {
-        $string .= '0';
-        $col_count++;
-        $strwidth = C4::Labels::PDF->StrWidth( $string, $self->{'font'}, $self->{'font_size'} );
+    else {
+        push @_, "creator", $me;
+        return __PACKAGE__->SUPER::delete(@_); # XXX: is this too hackish?
     }
-    return $col_count;
 }
 
 1;
-__END__
-
-=head1 NAME
-
-C4::Labels::Layout -A class for creating and manipulating layout objects in Koha
-
-=head1 ABSTRACT
-
-This module provides methods for creating, retrieving, and otherwise manipulating label layout objects used by Koha to create and export labels.
-
-=head1 METHODS
-
-=head2 new()
-
-    Invoking the I<new> method constructs a new layout object containing the default values for a layout.
-    The following parameters are optionally accepted as key => value pairs:
-
-        C<barcode_type>         Defines the barcode type to be used on labels. NOTE: At present only the following barcode types are supported in the label creator code:
-
-=over 9
-
-=item .
-            CODE39          = Code 3 of 9
-
-=item .
-            CODE39MOD       = Code 3 of 9 with modulo 43 checksum
-
-=item .
-            CODE39MOD10     = Code 3 of 9 with modulo 10 checksum
-
-=item .
-            COOP2OF5        = A varient of 2 of 5 barcode based on NEC's "Process 8000" code
-
-=item .
-            INDUSTRIAL2OF5  = The standard 2 of 5 barcode (a binary level bar code developed by Identicon Corp. and Computer Identics Corp. in 1970)
-
-=back
-
-        C<printing_type>        Defines the general layout to be used on labels. NOTE: At present there are only five printing types supported in the label creator code:
-
-=over 9
-
-=item .
-BIB     = Only the bibliographic data is printed
-
-=item .
-BARBIB  = Barcode proceeds bibliographic data
-
-=item .
-BIBBAR  = Bibliographic data proceeds barcode
-
-=item .
-ALT     = Barcode and bibliographic data are printed on alternating labels
-
-=item .
-BAR     = Only the barcode is printed
-
-=back
-
-        C<layout_name>          The descriptive name for this layout.
-        C<guidebox>             Setting this to '1' will result in a guide box being drawn around the labels marking the edge of each label
-        C<font>                 Defines the type of font to be used on labels. NOTE: The following fonts are available by default on most systems:
-
-=over 9
-
-=item .
-TR      = Times-Roman
-
-=item .
-TB      = Times Bold
-
-=item .
-TI      = Times Italic
-
-=item .
-TBI     = Times Bold Italic
-
-=item .
-C       = Courier
-
-=item .
-CB      = Courier Bold
-
-=item .
-CO      = Courier Oblique (Italic)
-
-=item .
-CBO     = Courier Bold Oblique
-
-=item .
-H       = Helvetica
-
-=item .
-HB      = Helvetica Bold
-
-=item .
-HBO     = Helvetical Bold Oblique
-
-=back
-
-        C<font_size>            Defines the size of the font in postscript points to be used on labels
-        C<callnum_split>        Setting this to '1' will enable call number splitting on labels
-        C<text_justify>         Defines the text justification to be used on labels. NOTE: The following justification styles are currently supported by label creator code:
-
-=over 9
-
-=item .
-L       = Left
-
-=item .
-C       = Center
-
-=item .
-R       = Right
-
-=back
-
-        C<format_string>        Defines what fields will be printed and in what order they will be printed on labels. These include any of the data fields that may be mapped
-                                to your MARC frameworks. Specify MARC subfields as a 4-character tag-subfield string: ie. 254a Enclose a whitespace-separated list of fields
-                                to concatenate on one line in double quotes. ie. "099a 099b" or "itemcallnumber barcode" Static text strings may be entered in single-quotes:
-                                ie. 'Some static text here.'
-
-    example:
-        C<my $layout = Layout->new(); # Creates and returns a new layout object>
-
-        C<my $layout = C4::Labels::Layout->new(barcode_type => 'CODE39', printing_type => 'BIBBAR', font => 'C', font_size => 6); # Creates and returns a new layout object using
-            the supplied values to override the defaults>
-
-    B<NOTE:> This layout is I<not> written to the database until save() is invoked. You have been warned!
-
-=head2 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 Apache log.
-
-    example:
-        C<my $layout = Layout->retrieve(layout_id => 1); # Retrieves layout record 1 and returns an object containing the record>
-
-=head2 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 Apache log.
-    NOTE: This method may also be called as a function and passed a key/value pair simply deleteing that template from the database. See the example below.
-
-    examples:
-        C<my $exitstat = $layout->delete(); # to delete the record behind the $layout object>
-        C<my $exitstat = Layout->delete(layout_id => 1); # to delete layout record 1>
-
-=head2 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 Apache log.
-
-    example:
-        C<my $exitstat = $layout->save(); # to save the record behind the $layout object>
-
-=head2 get_attr($attribute)
-
-    Invoking the I<get_attr> method will return the value of the requested attribute or -1 on errors.
-
-    example:
-        C<my $value = $layout->get_attr($attribute);>
-
-=head2 set_attr(attribute => value, attribute_2 => value)
-
-    Invoking the I<set_attr> method will set the value of the supplied attributes to the supplied values. The method accepts key/value pairs separated by
-    commas.
-
-    example:
-        C<$layout->set_attr(attribute => value);>
-
-=head2 get_text_wrap_cols()
-
-    Invoking the I<get_text_wrap_cols> method will return the number of columns that can be printed on the label before wrapping to the next line.
-
-    examples:
-        C<my $text_wrap_cols = $layout->get_text_wrap_cols();>
-
-=head1 AUTHOR
-
-Chris Nighswonger <cnighswonger AT foundations DOT edu>
-
-=head1 COPYRIGHT
-
-Copyright 2009 Foundations Bible College.
-
-=head1 LICENSE
-
-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.
-
-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
-
-=head1 DISCLAIMER OF WARRANTY
-
-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.
-
-=cut