]> git.proxmox.com Git - pmg-api.git/blame - PMG/RuleDB/TimeFrame.pm
Accept.pm: fix short_descr
[pmg-api.git] / PMG / RuleDB / TimeFrame.pm
CommitLineData
0a580593
DM
1package PMG::RuleDB::TimeFrame;
2
3use strict;
4use warnings;
5use Carp;
6use DBI;
7use Digest::SHA;
8
758c7b6b 9use PMG::Utils;
0a580593
DM
10use PMG::RuleDB::Object;
11
b8ea5d5d 12use base qw(PMG::RuleDB::Object);
0a580593
DM
13
14sub otype {
15 return 2000;
16}
17
18sub oclass {
19 return 'when';
20}
21
22sub otype_text {
23 return 'TimeFrame';
24}
25
26sub oicon {
27 return 'timeframe.gif';
28}
29
30sub oconfigsite {
31 # fixme:
32 return 'item_timeframe.epl';
33}
34
35sub oinfo {
36 # fixme:
37 return 'e.g. 12:00 - 13:00';
38}
39
40sub 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
66sub 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
86sub 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
118sub 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
128sub start {
129 my ($self, $v) = @_;
130
131 if (defined ($v)) {
132 $self->{start} = $v;
133 }
134
135 $self->{start};
136}
137
138sub end {
139 my ($self, $v) = @_;
140
141 if (defined ($v)) {
142 $self->{end} = $v;
143 }
144
145 $self->{end};
146}
147
148sub 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
1601;
161
162__END__
163
164=head1 PMG::RuleDB::TimeFrame
165
166A WHEN object to check for a specific daytime.
167
168=head2 Attribues
169
170=head3 start
171
172Start time im minutes since 00:00.
173
174=head3 end
175
176End time im minutes since 00:00.
177
178=head2 Examples
179
180 $obj = PMG::RuleDB::TimeFrame->new(8*60+15, 16*60+30);
181
182Represent: 8:15 to 16:30