diff --git a/C4/Labels/Lib.pm b/C4/Labels/Lib.pm index 2d996aba83..cd09e86f7e 100644 --- a/C4/Labels/Lib.pm +++ b/C4/Labels/Lib.pm @@ -106,13 +106,15 @@ my $unit_values = [ =cut sub get_all_templates { + my %params = @_; my @templates = (); - my $query = "SELECT * FROM labels_templates;"; + my $query = "SELECT " . ($params{'field_list'} ? $params{'field_list'} : '*') . " FROM labels_templates"; + $query .= ($params{'filter'} ? " WHERE $params{'filter'};" : ';'); my $sth = C4::Context->dbh->prepare($query); $sth->execute(); if ($sth->err) { syslog("LOG_ERR", "C4::Labels::Lib::get_all_templates : Database returned the following error: %s", $sth->errstr); - return 1; + return -1; } ADD_TEMPLATES: while (my $template = $sth->fetchrow_hashref) { @@ -138,7 +140,7 @@ sub get_all_layouts { $sth->execute(); if ($sth->err) { syslog("LOG_ERR", "C4::Labels::Lib::get_all_layouts : Database returned the following error: %s", $sth->errstr); - return 1; + return -1; } ADD_LAYOUTS: while (my $layout = $sth->fetchrow_hashref) { @@ -171,7 +173,7 @@ sub get_all_profiles { $sth->execute(); if ($sth->err) { syslog("LOG_ERR", "C4::Labels::Lib::get_all_profiles : Database returned the following error: %s", $sth->errstr); - return 1; + return -1; } ADD_LAYOUTS: while (my $profile = $sth->fetchrow_hashref) { diff --git a/C4/Labels/Profile.pm b/C4/Labels/Profile.pm index 2d54b97d90..faa90084ed 100644 --- a/C4/Labels/Profile.pm +++ b/C4/Labels/Profile.pm @@ -35,7 +35,7 @@ sub _check_params { my $exit_code = 0; my @valid_profile_params = ( 'printer_name', - 'tmpl_id', + 'template_id', 'paper_bin', 'offset_horz', 'offset_vert', @@ -93,13 +93,13 @@ C4::Labels::Profile - A class for creating and manipulating profile objects in K sub new { my $invocant = shift; if (_check_params(@_) eq 1) { - return 1; + return -1; } my $type = ref($invocant) || $invocant; my $self = { - printer_name => '', - tmpl_id => '', - paper_bin => '', + printer_name => 'Default Printer', + template_id => '', + paper_bin => 'Tray 1', offset_horz => 0, offset_vert => 0, creep_horz => 0, @@ -135,7 +135,7 @@ sub retrieve { $sth->execute($opts{profile_id}); if ($sth->err) { syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr); - return 1; + return -1; } my $self = $sth->fetchrow_hashref; $self = _conv_points($self) if ($opts{convert} && $opts{convert} == 1); @@ -143,26 +143,40 @@ sub retrieve { return $self; } -=head2 C4::Labels::Profile->delete(profile_id => profile_id) | $profile->delete() +=head2 C4::Labels::Profile::delete(profile_id => profile_id) | $profile->delete() Invoking the delete method attempts to delete the profile from the database. The method returns 0 upon success and 1 upon failure. Errors are logged to the syslog. examples: my $exitstat = $profile->delete(); # to delete the record behind the $profile object - my $exitstat = C4::Labels::Profile->delete(profile_id => 1); # to delete profile record 1 + my $exitstat = C4::Labels::Profile::delete(profile_id => 1); # to delete profile record 1 =cut sub delete { - my $self = shift; - if (!$self->{'profile_id'}) { # If there is no profile profile_id then we cannot delete it - syslog("LOG_ERR", "Cannot delete profile as it has not been saved."); - return 1; + 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::Profile->delete'; + $query_param = $self->{'profile_id'}; + } + else { + %opts = @_; + $call_type = 'C4::Labels::Profile::delete'; + $query_param = $opts{'profile_id'}; + } + if ($query_param eq '') { # If there is no profile id then we cannot delete it + syslog("LOG_ERR", "%s : Cannot delete layout as the profile id is invalid or non-existant.", $call_type); + return -1; } my $query = "DELETE FROM printers_profile WHERE profile_id = ?"; my $sth = C4::Context->dbh->prepare($query); - $sth->execute($self->{'profile_id'}); +# $sth->{'TraceLevel'} = 3; + $sth->execute($query_param); return 0; } @@ -190,11 +204,11 @@ sub save { $query = substr($query, 0, (length($query)-2)); push (@params, $self->{'profile_id'}); $query .= " WHERE profile_id=?;"; - warn "DEBUG: Updating: $query\n" if $debug; my $sth = C4::Context->dbh->prepare($query); +# $sth->{'TraceLevel'} = 3; $sth->execute(@params); if ($sth->err) { - syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error: %s", $sth->errstr); + syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted UPDATE: %s", $sth->errstr); return -1; } return $self->{'profile_id'}; @@ -213,11 +227,10 @@ sub save { } $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", "C4::Labels::Profile : Database returned the following error: %s", $sth->errstr); + syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted INSERT: %s", $sth->errstr); return -1; } my $sth1 = C4::Context->dbh->prepare("SELECT MAX(profile_id) FROM printers_profile;"); @@ -239,7 +252,7 @@ sub save { sub get_attr { my $self = shift; if (_check_params(@_) eq 1) { - return 1; + return -1; } my ($attr) = @_; if (exists($self->{$attr})) { @@ -247,7 +260,7 @@ sub get_attr { } else { syslog("LOG_ERR", "C4::Labels::Profile : %s is currently undefined.", $attr); - return 1; + return -1; } } @@ -263,10 +276,12 @@ sub get_attr { sub set_attr { my $self = shift; if (_check_params(@_) eq 1) { - return 1; + return -1; } - my ($attr, $value) = @_; - $self->{$attr} = $value; + my %attrs = @_; + foreach my $attrib (keys(%attrs)) { + $self->{$attrib} = $attrs{$attrib}; + }; return 0; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-profile.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-profile.tmpl index c0ce14a211..d4cbdbe7cf 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-profile.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-profile.tmpl @@ -1,74 +1,98 @@ -Koha › Tools › Labels - + i + Koha › Tools › Labels + - - - - - -
- -
-
-
-
- -
-

Edit Printer Profile

-
-
Profile Settings - -
    -
  1. - -
  2. -
  3. - -
  4. -
  5. - -
  6. -
  7. - -
  8. -
  9. - " /> -
  10. -
  11. - " /> -
  12. -
  13. - -
  14. -
  15. - " /> -
  16. -
  17. - " /> -
  18. -
  19. -
  20. -" /> -
-
-
- -
-
-
- -
-
- -
-
- + + + +
+
+
+
+
+
+

Edit Printer Profile

+
+
Profile Settings +
    +
  1. + + + + + + +
  2. +
  3. + + + + + + +
  4. +
  5. + + + + + Profile Unassigned + +
  6. + +
  7. + +
  8. +
  9. + " /> +
  10. +
  11. + " /> +
  12. +
  13. + +
  14. +
  15. + " /> +
  16. +
  17. + " /> +
  18. +
  19. + + +
  20. +
+
+
+ Cancel + + " /> +
+
+
+
+ +
+
+ +
+
+ diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manage.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manage.tmpl index d434495e3c..ece572e558 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manage.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manage.tmpl @@ -6,7 +6,7 @@ function DeleteConfirm() { var element_id = selected_layout(); if (element_id>-1) { - var msg = "Are you sure you want to delete template " + element_id + "?" + var msg = "Are you sure you want to delete " + element_id + "?" var answer = confirm(msg); if (answer) { window.location = "/cgi-bin/koha/labels/label-manage.pl?op=delete&label_element=&element_id=" + element_id; diff --git a/labels/label-edit-profile.pl b/labels/label-edit-profile.pl index 4643b1c9b2..e5d8bddb93 100755 --- a/labels/label-edit-profile.pl +++ b/labels/label-edit-profile.pl @@ -1,88 +1,107 @@ #!/usr/bin/perl +# +# Copyright 2006 Katipo Communications. +# Parts 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 CGI; -use C4::Auth; -use C4::Context; -use C4::Output; -use C4::Labels; use HTML::Template::Pro; -use POSIX; +use Data::Dumper; -my $DEBUG = 0; -my $dbh = C4::Context->dbh; -my $query = new CGI; - -my $op = $query->param('op'); -my $prof_id = $query->param('prof_id'); -my $offset_horz = $query->param('offset_horz'); -my $offset_vert = $query->param('offset_vert'); -my $creep_horz = $query->param('creep_horz'); -my $creep_vert = $query->param('creep_vert'); -my $units = $query->param('unit'); +use C4::Auth; +use C4::Output; +use C4::Context; +use C4::Debug; +use C4::Labels::Lib 1.000000 qw(get_all_templates get_unit_values); +use C4::Labels::Profile 1.000000; +my $cgi = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "labels/label-edit-profile.tmpl", - query => $query, + query => $cgi, type => "intranet", - authnotrequired => 1, + authnotrequired => 0, flagsrequired => { catalogue => 1 }, debug => 1, } ); +my $op = $cgi->param('op') || $ARGV[0] || ''; +my $profile_id = $cgi->param('profile_id') || $cgi->param('element_id') || $ARGV[1] || ''; +my $profile = ''; +my $template_list = ''; +my @label_template = (); +my $units = get_unit_values(); -if ($op eq '' || undef) { - my $prof = GetSinglePrinterProfile($prof_id); - - my $tmpl = GetSingleLabelTemplate($prof->{'tmpl_id'}); - - if ( $DEBUG ) { - use Data::Dumper; - warn Dumper($prof); - warn Dumper($tmpl); - } - - my @units = ( - { unit => 'INCH', desc => 'Inches' }, - { unit => 'CM', desc => 'Centimeters' }, - { unit => 'MM', desc => 'Millimeters' }, - { unit => 'POINT', desc => 'Postscript Points' }, +if ($op eq 'edit') { + $profile = C4::Labels::Profile->retrieve(profile_id => $profile_id); + $template_list = get_all_templates(field_list => 'template_id,template_code, profile_id'); +} +elsif ($op eq 'save') { + my @params = ( + printer_name => $cgi->param('printer_name'), + paper_bin => $cgi->param('paper_bin'), + offset_horz => $cgi->param('offset_horz'), + offset_vert => $cgi->param('offset_vert'), + creep_horz => $cgi->param('creep_horz'), + creep_vert => $cgi->param('creep_vert'), + units => $cgi->param('units'), ); - - foreach my $unit (@units) { - if ( $unit->{'unit'} eq $prof->{'unit'} ) { - $unit->{'selected'} = 1; - } + if ($profile_id) { # if a label_id was passed in, this is an update to an existing layout + $profile = C4::Labels::Profile->retrieve(profile_id => $profile_id); + $profile->set_attr(@params); + $profile->save(); } - - $template->param( - - units => \@units, - - prof_id => $prof->{'prof_id'}, - printername => $prof->{'printername'}, - paper_bin => $prof->{'paper_bin'}, - tmpl_code => $tmpl->{'tmpl_code'}, - prof_code => $prof->{'prof_code'}, - offset_horz => $prof->{'offset_horz'}, - offset_vert => $prof->{'offset_vert'}, - creep_horz => $prof->{'creep_horz'}, - creep_vert => $prof->{'creep_vert'}, - ); -} - -elsif ($op eq 'Save') { - warn "Units are now $units"; - - SaveProfile( $prof_id, $offset_horz, $offset_vert, $creep_horz, $creep_vert, $units ); - print $query->redirect("./label-profiles.pl"); + else { # if no label_id, this is a new layout so insert it + $profile = C4::Labels::Profile->new(@params); + $profile->save(); + } + print $cgi->redirect("label-manage.pl?label_element=profile"); exit; } - -elsif ($op eq 'Cancel') { - print $query->redirect("./label-profiles.pl"); - exit; +else { # if we get here, this is a new layout + $profile = C4::Labels::Profile->new(); } -output_html_with_http_headers $query, $cookie, $template->output; +if ($profile_id) { + @label_template = grep{($_->{'profile_id'} == $profile->get_attr('profile_id')) && ($_->{'template_id'} == $profile->get_attr('template_id'))} @$template_list; +} + +foreach my $unit (@$units) { + if ($unit->{'type'} eq $profile->get_attr('units')) { + $unit->{'selected'} = 1; + } +} + +$template->param(profile_id => $profile->get_attr('profile_id')) if $profile->get_attr('profile_id') > 0; + +$template->param( + label_template => $label_template[0]->{'template_code'} || '', + printer_name => $profile->get_attr('printer_name'), + paper_bin => $profile->get_attr('paper_bin'), + offset_horz => $profile->get_attr('offset_horz'), + offset_vert => $profile->get_attr('offset_vert'), + creep_horz => $profile->get_attr('creep_horz'), + creep_vert => $profile->get_attr('creep_vert'), + units => $units, + op => $op, +); + +output_html_with_http_headers $cgi, $cookie, $template->output;