]>
Commit | Line | Data |
---|---|---|
0a580593 DM |
1 | package PMG::RuleDB::TimeFrame; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | use Carp; | |
6 | use DBI; | |
7 | use Digest::SHA; | |
8 | ||
758c7b6b | 9 | use PMG::Utils; |
0a580593 DM |
10 | use PMG::RuleDB::Object; |
11 | ||
b8ea5d5d | 12 | use base qw(PMG::RuleDB::Object); |
0a580593 DM |
13 | |
14 | sub otype { | |
15 | return 2000; | |
16 | } | |
17 | ||
18 | sub oclass { | |
19 | return 'when'; | |
20 | } | |
21 | ||
22 | sub otype_text { | |
23 | return 'TimeFrame'; | |
24 | } | |
25 | ||
26 | sub oicon { | |
27 | return 'timeframe.gif'; | |
28 | } | |
29 | ||
30 | sub oconfigsite { | |
31 | # fixme: | |
32 | return 'item_timeframe.epl'; | |
33 | } | |
34 | ||
35 | sub oinfo { | |
36 | # fixme: | |
37 | return 'e.g. 12:00 - 13:00'; | |
38 | } | |
39 | ||
40 | sub new { | |
41 | my ($type, $start, $end, $ogroup) = @_; | |
42 | ||
43 | my $class = ref($type) || $type; | |
44 | ||
45 | my $self = $class->SUPER::new(otype(), $ogroup); | |
46 | ||
47 | $start //= "00:00"; | |
48 | $end //= "24:00"; | |
49 | ||
50 | if ($start =~ m/:/) { | |
51 | my @tmp = split(/:/, $start); | |
52 | $start = $tmp[0]*60+$tmp[1]; | |
53 | } | |
54 | ||
55 | if ($end =~ m/:/) { | |
56 | my @tmp = split(/:/, $end); | |
57 | $end = $tmp[0]*60+$tmp[1]; | |
58 | } | |
59 | ||
60 | $self->{start} = $start; | |
61 | $self->{end} = $end; | |
62 | ||
63 | return $self; | |
64 | } | |
65 | ||
66 | sub load_attr { | |
67 | my ($type, $ruledb, $id, $ogroup, $value) = @_; | |
68 | ||
69 | my $class = ref($type) || $type; | |
70 | ||
71 | defined($value) || return undef; | |
72 | ||
73 | my ($sh, $sm, $eh, $em) = $value =~ m/(\d+):(\d+)-(\d+):(\d+)/; | |
74 | ||
75 | my $start = $sh*60+$sm; | |
76 | my $end = $eh*60+$em; | |
77 | ||
78 | my $obj = $class->new($start, $end, $ogroup); | |
79 | $obj->{id} = $id; | |
80 | ||
81 | $obj->{digest} = Digest::SHA::sha1_hex ($id, $start, $end, $ogroup); | |
82 | ||
83 | return $obj; | |
84 | } | |
85 | ||
86 | sub save { | |
87 | my ($self, $ruledb) = @_; | |
88 | ||
89 | defined($self->{ogroup}) || return undef; | |
90 | defined($self->{start}) || return undef; | |
91 | defined($self->{end}) || return undef; | |
92 | ||
93 | my $v = sprintf ("%d:%d-%d:%d", int ($self->{start} / 60), int ($self->{start} % 60), | |
94 | int ($self->{end} / 60), int ($self->{end} % 60)); | |
95 | ||
96 | if (defined ($self->{id})) { | |
97 | # update | |
98 | ||
99 | $ruledb->{dbh}->do( | |
100 | "UPDATE Object SET Value = ? WHERE ID = ?", undef, $v, $self->{id}); | |
101 | ||
102 | } else { | |
103 | # insert | |
104 | ||
105 | my $sth = $ruledb->{dbh}->prepare( | |
106 | "INSERT INTO Object " . | |
107 | "(Objectgroup_ID, ObjectType, Value) " . | |
108 | "VALUES (?, ?, ?);"); | |
109 | ||
110 | $sth->execute($self->ogroup, $self->otype, $v); | |
111 | ||
758c7b6b | 112 | $self->{id} = PMG::Utils::lastid($ruledb->{dbh}, 'object_id_seq'); |
0a580593 DM |
113 | } |
114 | ||
115 | return $self->{id}; | |
116 | } | |
117 | ||
118 | sub when_match { | |
119 | my ($self, $t) = @_; | |
120 | ||
121 | my ($sec,$min,$hour) = localtime($t); | |
122 | ||
123 | my $amin = $hour*60 + $min; | |
124 | ||
125 | return $amin >= $self->{start} && $amin <= $self->{end} | |
126 | } | |
127 | ||
128 | sub start { | |
129 | my ($self, $v) = @_; | |
130 | ||
131 | if (defined ($v)) { | |
132 | $self->{start} = $v; | |
133 | } | |
134 | ||
135 | $self->{start}; | |
136 | } | |
137 | ||
138 | sub end { | |
139 | my ($self, $v) = @_; | |
140 | ||
141 | if (defined ($v)) { | |
142 | $self->{end} = $v; | |
143 | } | |
144 | ||
145 | $self->{end}; | |
146 | } | |
147 | ||
148 | sub short_desc { | |
149 | my $self = shift; | |
150 | ||
151 | my $v = sprintf ("%d:%02d-%d:%02d", | |
152 | int ($self->{start} / 60), | |
153 | int ($self->{start} % 60 ), | |
154 | int ($self->{end} / 60), | |
155 | int ($self->{end} % 60)); | |
156 | return "$v"; | |
157 | } | |
158 | ||
159 | ||
160 | 1; | |
161 | ||
162 | __END__ | |
163 | ||
164 | =head1 PMG::RuleDB::TimeFrame | |
165 | ||
166 | A WHEN object to check for a specific daytime. | |
167 | ||
168 | =head2 Attribues | |
169 | ||
170 | =head3 start | |
171 | ||
172 | Start time im minutes since 00:00. | |
173 | ||
174 | =head3 end | |
175 | ||
176 | End time im minutes since 00:00. | |
177 | ||
178 | =head2 Examples | |
179 | ||
180 | $obj = PMG::RuleDB::TimeFrame->new(8*60+15, 16*60+30); | |
181 | ||
182 | Represent: 8:15 to 16:30 |