File: | C4/Creators/Profile.pm |
Coverage: | 14.6% |
line | stmt | bran | cond | sub | time | code |
---|---|---|---|---|---|---|
1 | package C4::Creators::Profile; | |||||
2 | ||||||
3 | 5 5 5 | 875 37 163 | use strict; | |||
4 | 5 5 5 | 30 15 262 | use warnings; | |||
5 | ||||||
6 | 5 5 5 | 821 831 60 | use autouse 'Data::Dumper' => qw(Dumper); | |||
7 | ||||||
8 | 5 5 5 | 624 25 76 | use C4::Context; | |||
9 | 5 5 5 | 32 14 535 | use C4::Debug; | |||
10 | 5 5 5 | 796 485 448 | use C4::Creators::Lib 1.000000 qw(get_unit_values); | |||
11 | ||||||
12 | BEGIN { | |||||
13 | 5 5 5 5 | 37 28 82 424 | use version; our $VERSION = qv('1.0.0_1'); | |||
14 | } | |||||
15 | ||||||
16 | sub _check_params { | |||||
17 | 0 | my $given_params = {}; | ||||
18 | 0 | my $exit_code = 0; | ||||
19 | 0 | my @valid_profile_params = ( | ||||
20 | 'printer_name', | |||||
21 | 'template_id', | |||||
22 | 'paper_bin', | |||||
23 | 'offset_horz', | |||||
24 | 'offset_vert', | |||||
25 | 'creep_horz', | |||||
26 | 'creep_vert', | |||||
27 | 'units', | |||||
28 | 'creator', | |||||
29 | ); | |||||
30 | 0 | if (scalar(@_) >1) { | ||||
31 | 0 | $given_params = {@_}; | ||||
32 | 0 0 | foreach my $key (keys %{$given_params}) { | ||||
33 | 0 | if (!(grep m/$key/, @valid_profile_params)) { | ||||
34 | 0 | warn sprintf('Unrecognized parameter type of "%s".', $key); | ||||
35 | 0 | $exit_code = 1; | ||||
36 | } | |||||
37 | } | |||||
38 | } | |||||
39 | else { | |||||
40 | 0 | if (!(grep m/$_/, @valid_profile_params)) { | ||||
41 | 0 | warn sprintf('Unrecognized parameter type of "%s".', $_); | ||||
42 | 0 | $exit_code = 1; | ||||
43 | } | |||||
44 | } | |||||
45 | 0 | return $exit_code; | ||||
46 | } | |||||
47 | ||||||
48 | sub _conv_points { | |||||
49 | 0 | my $self = shift; | ||||
50 | 0 0 0 | my @unit_value = grep {$_->{'type'} eq $self->{units}} @{get_unit_values()}; | ||||
51 | 0 | $self->{offset_horz} = $self->{offset_horz} * $unit_value[0]->{'value'}; | ||||
52 | 0 | $self->{offset_vert} = $self->{offset_vert} * $unit_value[0]->{'value'}; | ||||
53 | 0 | $self->{creep_horz} = $self->{creep_horz} * $unit_value[0]->{'value'}; | ||||
54 | 0 | $self->{creep_vert} = $self->{creep_vert} * $unit_value[0]->{'value'}; | ||||
55 | 0 | return $self; | ||||
56 | } | |||||
57 | ||||||
58 | sub new { | |||||
59 | 0 | my $invocant = shift; | ||||
60 | 0 | if (_check_params(@_) eq 1) { | ||||
61 | 0 | return -1; | ||||
62 | } | |||||
63 | 0 | my $type = ref($invocant) || $invocant; | ||||
64 | 0 | my $self = { | ||||
65 | printer_name => 'Default Printer', | |||||
66 | template_id => '', | |||||
67 | paper_bin => 'Tray 1', | |||||
68 | offset_horz => 0, | |||||
69 | offset_vert => 0, | |||||
70 | creep_horz => 0, | |||||
71 | creep_vert => 0, | |||||
72 | units => 'POINT', | |||||
73 | @_, | |||||
74 | }; | |||||
75 | 0 | bless ($self, $type); | ||||
76 | 0 | return $self; | ||||
77 | } | |||||
78 | ||||||
79 | sub retrieve { | |||||
80 | 0 | my $invocant = shift; | ||||
81 | 0 | my %opts = @_; | ||||
82 | 0 | my $type = ref($invocant) || $invocant; | ||||
83 | 0 | my $query = "SELECT * FROM printers_profile WHERE profile_id = ? AND creator = ?"; | ||||
84 | 0 | my $sth = C4::Context->dbh->prepare($query); | ||||
85 | 0 | $sth->execute($opts{'profile_id'}, $opts{'creator'}); | ||||
86 | 0 | if ($sth->err) { | ||||
87 | 0 | warn sprintf('Database returned the following error: %s', $sth->errstr); | ||||
88 | 0 | return -1; | ||||
89 | } | |||||
90 | 0 | my $self = $sth->fetchrow_hashref; | ||||
91 | 0 | $self = _conv_points($self) if ($opts{convert} && $opts{convert} == 1); | ||||
92 | 0 | bless ($self, $type); | ||||
93 | 0 | return $self; | ||||
94 | } | |||||
95 | ||||||
96 | sub delete { | |||||
97 | 0 | my $self = {}; | ||||
98 | 0 | my %opts = (); | ||||
99 | 0 | my $call_type = ''; | ||||
100 | 0 | my @params = (); | ||||
101 | 0 | if (ref($_[0])) { | ||||
102 | 0 | $self = shift; # check to see if this is a method call | ||||
103 | 0 | $call_type = 'C4::'. $self->{'creator'} .'::Profile->delete'; | ||||
104 | 0 | push @params, $self->{'profile_id'}, $self->{'creator'}; | ||||
105 | } | |||||
106 | else { | |||||
107 | 0 | my $class = shift; #XXX: is this too hackish? | ||||
108 | 0 | %opts = @_; | ||||
109 | 0 | $call_type = $class . "::delete"; | ||||
110 | 0 | push @params, $opts{'profile_id'}, $opts{'creator'}; | ||||
111 | } | |||||
112 | 0 | if (scalar(@params) < 2) { # If there is no profile id or creator type then we cannot delete it | ||||
113 | 0 | warn sprintf('%s : Cannot delete profile as the profile id is invalid or non-existant.', $call_type) if !$params[0]; | ||||
114 | 0 | warn sprintf('%s : Cannot delete profile as the creator type is invalid or non-existant.', $call_type) if !$params[1]; | ||||
115 | 0 | return -1; | ||||
116 | } | |||||
117 | 0 | my $query = "DELETE FROM printers_profile WHERE profile_id = ? AND creator = ?"; | ||||
118 | 0 | my $sth = C4::Context->dbh->prepare($query); | ||||
119 | # $sth->{'TraceLevel'} = 3; | |||||
120 | 0 | $sth->execute(@params); | ||||
121 | 0 | if ($sth->err) { | ||||
122 | 0 | warn sprintf('Database returned the following error on attempted DELETE: %s', $sth->errstr); | ||||
123 | 0 | return -1; | ||||
124 | } | |||||
125 | 0 | return 0; | ||||
126 | } | |||||
127 | ||||||
128 | sub save { | |||||
129 | 0 | my $self = shift; | ||||
130 | 0 | if ($self->{'profile_id'}) { # if we have an profile_id, the record exists and needs UPDATE | ||||
131 | 0 | my @params; | ||||
132 | 0 | my $query = "UPDATE printers_profile SET "; | ||||
133 | 0 0 | foreach my $key (keys %{$self}) { | ||||
134 | 0 | next if ($key eq 'profile_id') || ($key eq 'creator'); | ||||
135 | 0 | push (@params, $self->{$key}); | ||||
136 | 0 | $query .= "$key=?, "; | ||||
137 | } | |||||
138 | 0 | $query = substr($query, 0, (length($query)-2)); | ||||
139 | 0 | push (@params, $self->{'profile_id'}, $self->{'creator'}); | ||||
140 | 0 | $query .= " WHERE profile_id=? AND creator=?;"; | ||||
141 | 0 | my $sth = C4::Context->dbh->prepare($query); | ||||
142 | # $sth->{'TraceLevel'} = 3; | |||||
143 | 0 | $sth->execute(@params); | ||||
144 | 0 | if ($sth->err) { | ||||
145 | 0 | warn sprintf('Database returned the following error on attempted UPDATE: %s', $sth->errstr); | ||||
146 | 0 | return -1; | ||||
147 | } | |||||
148 | 0 | return $self->{'profile_id'}; | ||||
149 | } | |||||
150 | else { # otherwise create a new record | |||||
151 | 0 | my @params; | ||||
152 | 0 | my $query = "INSERT INTO printers_profile ("; | ||||
153 | 0 0 | foreach my $key (keys %{$self}) { | ||||
154 | 0 | push (@params, $self->{$key}); | ||||
155 | 0 | $query .= "$key, "; | ||||
156 | } | |||||
157 | 0 | $query = substr($query, 0, (length($query)-2)); | ||||
158 | 0 | $query .= ") VALUES ("; | ||||
159 | for (my $i=1; $i<=(scalar keys %$self); $i++) { | |||||
160 | 0 | $query .= "?,"; | ||||
161 | 0 | } | ||||
162 | 0 | $query = substr($query, 0, (length($query)-1)); | ||||
163 | 0 | $query .= ");"; | ||||
164 | 0 | my $sth = C4::Context->dbh->prepare($query); | ||||
165 | 0 | $sth->execute(@params); | ||||
166 | 0 | if ($sth->err) { | ||||
167 | 0 | warn sprintf('Database returned the following error on attempted INSERT: %s', $sth->errstr); | ||||
168 | 0 | return -1; | ||||
169 | } | |||||
170 | 0 | my $sth1 = C4::Context->dbh->prepare("SELECT MAX(profile_id) FROM printers_profile;"); | ||||
171 | 0 | $sth1->execute(); | ||||
172 | 0 | my $tmpl_id = $sth1->fetchrow_array; | ||||
173 | 0 | return $tmpl_id; | ||||
174 | } | |||||
175 | } | |||||
176 | ||||||
177 | sub get_attr { | |||||
178 | 0 | my $self = shift; | ||||
179 | 0 | if (_check_params(@_) eq 1) { | ||||
180 | 0 | return -1; | ||||
181 | } | |||||
182 | 0 | my ($attr) = @_; | ||||
183 | 0 | if (exists($self->{$attr})) { | ||||
184 | 0 | return $self->{$attr}; | ||||
185 | } | |||||
186 | else { | |||||
187 | 0 | warn sprintf('%s is currently undefined.', $attr); | ||||
188 | 0 | return -1; | ||||
189 | } | |||||
190 | } | |||||
191 | ||||||
192 | sub set_attr { | |||||
193 | 0 | my $self = shift; | ||||
194 | 0 | if (_check_params(@_) eq 1) { | ||||
195 | 0 | return -1; | ||||
196 | } | |||||
197 | 0 | my %attrs = @_; | ||||
198 | 0 | foreach my $attrib (keys(%attrs)) { | ||||
199 | 0 | $self->{$attrib} = $attrs{$attrib}; | ||||
200 | }; | |||||
201 | 0 | return 0; | ||||
202 | } | |||||
203 | ||||||
204 | 1; |