1 package C4::Labels::Profile;
3 # Copyright 2009 Foundations Bible College.
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA 02111-1307 USA
22 use Sys::Syslog qw(syslog);
27 use C4::Labels::Lib 1.000000 qw(get_unit_values);
30 use version; our $VERSION = qv('1.0.0_1');
34 my $given_params = {};
36 my @valid_profile_params = (
48 foreach my $key (keys %{$given_params}) {
49 if (!(grep m/$key/, @valid_profile_params)) {
50 syslog("LOG_ERR", "C4::Labels::Profile : Unrecognized parameter type of \"%s\".", $key);
56 if (!(grep m/$_/, @valid_profile_params)) {
57 syslog("LOG_ERR", "C4::Labels::Profile : Unrecognized parameter type of \"%s\".", $_);
66 my @unit_value = grep {$_->{'type'} eq $self->{units}} get_unit_values();
67 $self->{offset_horz} = $self->{offset_horz} * $unit_value[0]->{'value'};
68 $self->{offset_vert} = $self->{offset_vert} * $unit_value[0]->{'value'};
69 $self->{creep_horz} = $self->{creep_horz} * $unit_value[0]->{'value'};
70 $self->{creep_vert} = $self->{creep_vert} * $unit_value[0]->{'value'};
76 C4::Labels::Profile - A class for creating and manipulating profile objects in Koha
82 =head2 C4::Labels::Profile->new()
84 Invoking the I<new> method constructs a new profile object containing the default values for a template.
87 my $profile = Profile->new(); # Creates and returns a new profile object
89 B<NOTE:> This profile is I<not> written to the database untill $profile->save() is invoked. You have been warned!
95 if (_check_params(@_) eq 1) {
98 my $type = ref($invocant) || $invocant;
100 printer_name => 'Default Printer',
102 paper_bin => 'Tray 1',
110 bless ($self, $type);
114 =head2 C4::Labels::Profile->retrieve(profile_id => profile_id, convert => 1)
116 Invoking the I<retrieve> method constructs a new profile object containing the current values for profile_id. The method returns
117 a new object upon success and 1 upon failure. Errors are logged to the syslog. One further option maybe accessed. See the examples
118 below for further description.
122 my $profile = C4::Labels::Profile->retrieve(profile_id => 1); # Retrieves profile record 1 and returns an object containing the record
124 my $profile = C4::Labels::Profile->retrieve(profile_id => 1, convert => 1); # Retrieves profile record 1, converts the units to points,
125 and returns an object containing the record
130 my $invocant = shift;
132 my $type = ref($invocant) || $invocant;
133 my $query = "SELECT * FROM printers_profile WHERE profile_id = ?";
134 my $sth = C4::Context->dbh->prepare($query);
135 $sth->execute($opts{profile_id});
137 syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr);
140 my $self = $sth->fetchrow_hashref;
141 $self = _conv_points($self) if ($opts{convert} && $opts{convert} == 1);
142 bless ($self, $type);
146 =head2 C4::Labels::Profile::delete(profile_id => profile_id) | $profile->delete()
148 Invoking the delete method attempts to delete the profile from the database. The method returns 0 upon success
149 and 1 upon failure. Errors are logged to the syslog.
152 my $exitstat = $profile->delete(); # to delete the record behind the $profile object
153 my $exitstat = C4::Labels::Profile::delete(profile_id => 1); # to delete profile record 1
161 my $query_param = '';
163 $self = shift; # check to see if this is a method call
164 $call_type = 'C4::Labels::Profile->delete';
165 $query_param = $self->{'profile_id'};
169 $call_type = 'C4::Labels::Profile::delete';
170 $query_param = $opts{'profile_id'};
172 if ($query_param eq '') { # If there is no profile id then we cannot delete it
173 syslog("LOG_ERR", "%s : Cannot delete layout as the profile id is invalid or non-existant.", $call_type);
176 my $query = "DELETE FROM printers_profile WHERE profile_id = ?";
177 my $sth = C4::Context->dbh->prepare($query);
178 # $sth->{'TraceLevel'} = 3;
179 $sth->execute($query_param);
183 =head2 $profile->save()
185 Invoking the I<save> method attempts to insert the profile into the database if the profile is new and
186 update the existing profile record if the profile exists. The method returns the new record profile_id upon
187 success and -1 upon failure (This avoids conflicting with a record profile_id of 1). Errors are logged to the syslog.
190 my $exitstat = $profile->save(); # to save the record behind the $profile object
196 if ($self->{'profile_id'}) { # if we have an profile_id, the record exists and needs UPDATE
198 my $query = "UPDATE printers_profile SET ";
199 foreach my $key (keys %{$self}) {
200 next if $key eq 'profile_id';
201 push (@params, $self->{$key});
202 $query .= "$key=?, ";
204 $query = substr($query, 0, (length($query)-2));
205 push (@params, $self->{'profile_id'});
206 $query .= " WHERE profile_id=?;";
207 my $sth = C4::Context->dbh->prepare($query);
208 # $sth->{'TraceLevel'} = 3;
209 $sth->execute(@params);
211 syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted UPDATE: %s", $sth->errstr);
214 return $self->{'profile_id'};
216 else { # otherwise create a new record
218 my $query = "INSERT INTO printers_profile (";
219 foreach my $key (keys %{$self}) {
220 push (@params, $self->{$key});
223 $query = substr($query, 0, (length($query)-2));
224 $query .= ") VALUES (";
225 for (my $i=1; $i<=(scalar keys %$self); $i++) {
228 $query = substr($query, 0, (length($query)-1));
230 my $sth = C4::Context->dbh->prepare($query);
231 $sth->execute(@params);
233 syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted INSERT: %s", $sth->errstr);
236 my $sth1 = C4::Context->dbh->prepare("SELECT MAX(profile_id) FROM printers_profile;");
238 my $tmpl_id = $sth1->fetchrow_array;
243 =head2 $profile->get_attr(attr)
245 Invoking the I<get_attr> method will return the value of the requested attribute or 1 on errors.
248 my $value = $profile->get_attr(attr);
254 if (_check_params(@_) eq 1) {
258 if (exists($self->{$attr})) {
259 return $self->{$attr};
262 syslog("LOG_ERR", "C4::Labels::Profile : %s is currently undefined.", $attr);
267 =head2 $profile->set_attr(attr => value)
269 Invoking the I<set_attr> method will set the value of the supplied attribute to the supplied value.
272 $profile->set_attr(attr => value);
278 if (_check_params(@_) eq 1) {
282 foreach my $attrib (keys(%attrs)) {
283 $self->{$attrib} = $attrs{$attrib};
294 Chris Nighswonger <cnighswonger AT foundations DOT edu>
300 drawbox( ($left_margin), ($top_margin), ($page_width-(2*$left_margin)), ($page_height-(2*$top_margin)) ); # FIXME: Breakout code to print alignment page for printer profile setup
304 sub draw_boundaries ($llx_spine, $llx_circ1, $llx_circ2,
305 $lly, $spine_width, $label_height, $circ_width)
307 This sub draws boundary lines where the label outlines are, to aid in printer testing, and debugging.
311 # FIXME: Template use for profile adjustment...
312 #sub draw_boundaries {
315 # $llx_spine, $llx_circ1, $llx_circ2, $lly,
316 # $spine_width, $label_height, $circ_width
319 # my $lly_initial = ( ( 792 - 36 ) - 90 );
320 # $lly = $lly_initial; # FIXME - why are we ignoring the y_pos parameter by redefining it?
323 # for ( $i = 1 ; $i <= 8 ; $i++ ) {
325 # _draw_box( $llx_spine, $lly, ($spine_width), ($label_height) );
327 # #warn "OLD BOXES x=$llx_spine, y=$lly, w=$spine_width, h=$label_height";
328 # _draw_box( $llx_circ1, $lly, ($circ_width), ($label_height) );
329 # _draw_box( $llx_circ2, $lly, ($circ_width), ($label_height) );
331 # $lly = ( $lly - $label_height );