This commit was generated by cvs2svn to compensate for changes in r11022,
[freeside.git] / FS / FS / part_event / Condition / every.pm
1 package FS::part_event::Condition::every;
2
3 use strict;
4 use FS::UID qw( dbh );
5 use FS::Record qw( qsearch );
6 use FS::cust_event;
7
8 use base qw( FS::part_event::Condition );
9
10 sub description { "Don't retry failures more often than specified interval"; }
11
12 sub option_fields {
13   (
14     'retry_delay' => { label=>'Retry after', type=>'freq', value=>'1d', },
15     'max_tries'   => { label=>'Maximum # of attempts', type=>'text', size=>3, },
16   );
17 }
18
19 my %after = (
20   'h' =>     3600,
21   'd' =>    86400,
22   'w' =>   604800,
23   'm' =>  2592000, #well, 30 days... presumably people would mostly use d or w
24   ''  =>  2592000,
25   'y' => 31536000, #well, 365 days...
26 );
27
28 my $sql =
29   "SELECT COUNT(*) FROM cust_event WHERE eventpart = ? AND tablenum = ?";
30
31 sub condition {
32   my($self, $object, %opt) = @_;
33
34   my $obj_pkey = $object->primary_key;
35   my $tablenum = $object->$obj_pkey();
36
37   if ( $self->option('max_tries') =~ /^\s*(\d+)\s*$/ ) {
38     my $max_tries = $1;
39     my $sth = dbh->prepare($sql)
40       or die dbh->errstr. " preparing: $sql";
41     $sth->execute($self->eventpart, $tablenum)
42       or die $sth->errstr. " executing: $sql";
43     my $tries = $sth->fetchrow_arrayref->[0];
44     return 0 if $tries >= $max_tries;
45   }
46
47   my $time = $opt{'time'};
48   my $retry_delay = $self->option('retry_delay');
49   $retry_delay =~ /^(\d+)([hdwmy]?)$/
50     or die "unparsable retry_delay: $retry_delay";
51   my $date_after = $time - $1 * $after{$2};
52
53   my $sth = dbh->prepare("$sql AND _date > ?") # AND status = 'failed' "
54     or die  dbh->errstr. " preparing: $sql";
55   $sth->execute($self->eventpart, $tablenum, $date_after)
56     or die $sth->errstr. " executing: $sql";
57   ! $sth->fetchrow_arrayref->[0];
58
59 }
60
61 #sub condition_sql {
62 #  my( $self, $table ) = @_;
63 #
64 #  'true';
65 #}
66
67 1;