[Rt-commit] rt branch, 3.9-trunk, updated. rt-3.9.7-903-g23dc202
Shawn Moore
sartak at bestpractical.com
Thu Dec 16 14:23:35 EST 2010
The branch, 3.9-trunk has been updated
via 23dc2024414c7e67584cd43e33baf224b4e5a4ae (commit)
from 044ec159007eec106a7a611a775f5b32c99b668d (commit)
Summary of changes:
lib/RT/Dashboard/Mailer.pm | 109 ++++++++++++++++++++++++++++----------------
1 files changed, 70 insertions(+), 39 deletions(-)
- Log -----------------------------------------------------------------
commit 23dc2024414c7e67584cd43e33baf224b4e5a4ae
Author: Shawn M Moore <sartak at bestpractical.com>
Date: Thu Dec 16 14:21:45 2010 -0500
Factor out IsSubscriptionReady for overriding
...and for less indentation :)
diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
index e4a0aaa..c319d72 100644
--- a/lib/RT/Dashboard/Mailer.pm
+++ b/lib/RT/Dashboard/Mailer.pm
@@ -93,42 +93,11 @@ sub MailDashboards {
# look through this user's subscriptions, are any supposed to be generated
# right now?
for my $subscription ($user->Attributes->Named('Subscription')) {
- my $counter = $subscription->SubValue('Counter') || 0;
-
- if (!$args{All}) {
- my $sub_frequency = $subscription->SubValue('Frequency');
- my $sub_hour = $subscription->SubValue('Hour');
- my $sub_dow = $subscription->SubValue('Dow');
- my $sub_dom = $subscription->SubValue('Dom');
- my $sub_fow = $subscription->SubValue('Fow');
-
- $RT::Logger->debug("Checking against subscription with frequency $sub_frequency, hour $sub_hour, dow $sub_dow, dom $sub_dom, fow $sub_fow");
-
- next if $sub_frequency eq 'never';
-
- # correct hour?
- next if $sub_hour ne $hour;
-
- # if weekly, correct day of week?
- if ( $sub_frequency eq 'weekly' ) {
- next if $sub_frequency ne $dow;
- my $fow = $sub_fow || 1;
- if ( $counter % $fow ) {
- $subscription->SetSubValues( Counter => $counter + 1 )
- unless $args{DryRun};
- next;
- }
- }
-
- # if monthly, correct day of month?
- elsif ($sub_frequency eq 'monthly') {
- next if $sub_dom != $dom;
- }
-
- elsif ($sub_frequency eq 'm-f') {
- next if $dow eq 'Sunday' || $dow eq 'Saturday';
- }
- }
+ next unless $self->IsSubscriptionReady(
+ %args,
+ Subscription => $subscription,
+ LocalTime => [$hour, $dow, $dom],
+ );
my $email = $subscription->SubValue('Recipient')
|| $user->EmailAddress;
@@ -146,14 +115,76 @@ sub MailDashboards {
$RT::Logger->error("Caught exception: $@");
}
else {
- $subscription->SetSubValues(
- Counter => $counter + 1 )
- unless $args{DryRun};
+ my $counter = $subscription->SubValue('Counter') || 0;
+ $subscription->SetSubValues(Counter => $counter + 1)
+ unless $args{DryRun};
}
}
}
}
+sub IsSubscriptionReady {
+ my $self = shift;
+ my %args = (
+ All => 0,
+ Subscription => undef,
+ LocalTime => [0, 0, 0],
+ @_,
+ );
+
+ return 1 if $args{All};
+
+ my $subscription = $args{Subscription};
+
+ my $counter = $subscription->SubValue('Counter') || 0;
+
+ my $sub_frequency = $subscription->SubValue('Frequency');
+ my $sub_hour = $subscription->SubValue('Hour');
+ my $sub_dow = $subscription->SubValue('Dow');
+ my $sub_dom = $subscription->SubValue('Dom');
+ my $sub_fow = $subscription->SubValue('Fow');
+
+ my ($hour, $dow, $dom) = @{ $args{LocalTime} };
+
+ $RT::Logger->debug("Checking against subscription with frequency $sub_frequency, hour $sub_hour, dow $sub_dow, dom $sub_dom, fow $sub_fow");
+
+ return 0 if $sub_frequency eq 'never';
+
+ # correct hour?
+ return 0 if $sub_hour ne $hour;
+
+ # all we need is the correct hour for daily dashboards
+ return 1 if $sub_frequency eq 'daily';
+
+ if ($sub_frequency eq 'weekly') {
+ # correct day of week?
+ return 0 if $sub_frequency ne $dow;
+
+ # does it match the "every N weeks" clause?
+ $sub_fow = 1 if !$sub_fow;
+
+ return 1 if $counter % $sub_fow == 0;
+
+ $subscription->SetSubValues(Counter => $counter + 1)
+ unless $args{DryRun};
+ return 0;
+ }
+
+ # if monthly, correct day of month?
+ if ($sub_frequency eq 'monthly') {
+ return $sub_dom == $dom;
+ }
+
+ # monday through friday
+ if ($sub_frequency eq 'm-f') {
+ return 0 if $dow eq 'Sunday' || $dow eq 'Saturday';
+ return 1;
+ }
+
+ # unknown frequency type, bail out
+ return 0;
+}
+
sub GetFrom {
RT->Config->Get('DashboardAddress') || RT->Config->Get('OwnerEmail')
}
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list