[Rt-commit] rt branch, 4.4/dashboard-weekdays, created. rt-4.2.11-31-g16d3d08

Shawn Moore shawn at bestpractical.com
Mon Sep 28 20:15:28 EDT 2015


The branch, 4.4/dashboard-weekdays has been created
        at  16d3d088a99c0907e67cc4fb26ffcd71a33c80ec (commit)

- Log -----------------------------------------------------------------
commit 16d3d088a99c0907e67cc4fb26ffcd71a33c80ec
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Sat Jun 6 00:19:23 2015 +0000

    Weekday checkboxes for daily dashboard subscriptions
    
        This migrates M-F subscriptions to be daily with Saturday and Sunday
        unchecked, and makes sure all seven days are checked for the
        frequency that used to be called "daily" (which meant every single day).
    
        New subscriptions are initially set to a frequency of daily with
        M-F checked and weekend days unchecked.

diff --git a/etc/upgrade/4.3.0/content b/etc/upgrade/4.3.0/content
new file mode 100644
index 0000000..8502f00
--- /dev/null
+++ b/etc/upgrade/4.3.0/content
@@ -0,0 +1,41 @@
+use strict;
+use warnings;
+
+our @Initial = (
+    sub {
+        $RT::Logger->info("Going to migrate dashboard subscriptions");
+
+        my $attrs = RT::Attributes->new( RT->SystemUser );
+        $attrs->Limit( FIELD => 'ObjectType', VALUE => 'RT::User' );
+        $attrs->Limit( FIELD => 'Name', VALUE => 'Subscription' );
+
+        while ( my $attr = $attrs->Next ) {
+            my %fields;
+            my $frequency = $attr->SubValue('Frequency');
+
+            if ($frequency eq 'daily') {
+                for my $day (qw/Monday Tuesday Wednesday Thursday Friday Saturday Sunday/) {
+                    $fields{$day} = 1;
+                }
+            }
+            elsif ($frequency eq 'm-f') {
+                $fields{Frequency} = 'daily';
+                for my $day (qw/Monday Tuesday Wednesday Thursday Friday/) {
+                    $fields{$day} = 1;
+                }
+                $fields{Saturday} = $fields{Sunday} = 0;
+            }
+            else {
+                next;
+            }
+
+            my ($ok, $msg) = $attr->SetSubValues(%fields);
+
+            if (!$ok) {
+                $RT::Logger->error("Couldn't update subscription $msg");
+            }
+        }
+        return 1;
+    },
+);
+
diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
index f0f14a0..276e93f 100644
--- a/lib/RT/Dashboard/Mailer.pm
+++ b/lib/RT/Dashboard/Mailer.pm
@@ -149,17 +149,27 @@ sub IsSubscriptionReady {
     my $sub_dom       = $subscription->SubValue('Dom');
     my $sub_fow       = $subscription->SubValue('Fow') || 1;
 
+    my $log_frequency = $sub_frequency;
+    if ($log_frequency eq 'daily') {
+        my $days = join ' ', grep { $subscription->SubValue($_) }
+                             qw/Monday Tuesday Wednesday Thursday Friday
+                                Saturday Sunday/;
+
+        $log_frequency = "$log_frequency ($days)";
+    }
+
     my ($hour, $dow, $dom) = @{ $args{LocalTime} };
 
-    $RT::Logger->debug("Checking against subscription " . $subscription->Id . " for " . $args{User}->Name . " with frequency $sub_frequency, hour $sub_hour, dow $sub_dow, dom $sub_dom, fow $sub_fow, counter $counter");
+    $RT::Logger->debug("Checking against subscription " . $subscription->Id . " for " . $args{User}->Name . " with frequency $log_frequency, hour $sub_hour, dow $sub_dow, dom $sub_dom, fow $sub_fow, counter $counter");
 
     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 'daily') {
+        return $subscription->SubValue($dow) ? 1 : 0;
+    }
 
     if ($sub_frequency eq 'weekly') {
         # correct day of week?
@@ -178,12 +188,6 @@ sub IsSubscriptionReady {
         return $sub_dom == $dom;
     }
 
-    # monday through friday
-    if ($sub_frequency eq 'm-f') {
-        return 0 if $dow eq 'Sunday' || $dow eq 'Saturday';
-        return 1;
-    }
-
     $RT::Logger->debug("Invalid subscription frequency $sub_frequency for " . $args{User}->Name);
 
     # unknown frequency type, bail out
@@ -323,7 +327,6 @@ sub EmailDashboard {
     my $frequency    = $subscription->SubValue('Frequency');
 
     my %frequency_lookup = (
-        'm-f'     => 'Weekday', # loc
         'daily'   => 'Daily',   # loc
         'weekly'  => 'Weekly',  # loc
         'monthly' => 'Monthly', # loc
diff --git a/share/html/Dashboards/Subscription.html b/share/html/Dashboards/Subscription.html
index 3bf39d0..d55076d 100644
--- a/share/html/Dashboards/Subscription.html
+++ b/share/html/Dashboards/Subscription.html
@@ -87,17 +87,21 @@
 
 <&| /Widgets/TitleBox, title => loc('Subscription') &>
 
-<table>
-<tr><td class="label">
+<table class="dashboard-subscription">
+<tr class="frequency"><td class="label">
 <&|/l&>Frequency</&>:
 </td><td class="value">
 
 <input type="radio" id="Frequency-daily" name="Frequency" value="daily" <% $fields{'Frequency'} eq 'daily' ? 'checked="checked"' : "" |n %>></input>
-<label for="Frequency-daily"><&|/l&>daily</&></label>
-<br />
+<label for="Frequency-daily">
+<&|/l&>daily, on</&>
+</label>
+
+% for my $day ( qw/Monday Tuesday Wednesday Thursday Friday Saturday Sunday/ ) {
+      <label><input name="<% $day %>" value=1 type="checkbox" <% $fields{$day} ? 'checked="checked"' : '' %>> <&|/l&><% $day %></&></label>
+    <input type="hidden"class="hidden" name="<% $day %>-Magic" value=1 />
+% }
 
-<input type="radio" id="Frequency-m-f" name="Frequency" value="m-f" <% $fields{'Frequency'} eq 'm-f' ? 'checked="checked"' : "" |n %>></input>
-<label for="Frequency-m-f"><&|/l&>Monday through Friday</&></label>
 <br />
 
 <input type="radio" id="Frequency-weekly" name="Frequency" value="weekly"<% $fields{'Frequency'} eq 'weekly' ? 'checked="checked"' : "" |n %>></input>
@@ -207,6 +211,13 @@ $id = $SubscriptionObj ? $SubscriptionObj->SubValue('DashboardId') : $ARGS{'id'}
 my %fields = (
     DashboardId => $id,
     Frequency   => 'daily',
+    Monday      => 1,
+    Tuesday     => 1,
+    Wednesday   => 1,
+    Thursday    => 1,
+    Friday      => 1,
+    Saturday    => 0,
+    Sunday      => 0,
     Hour        => '06:00',
     Dow         => 'Monday',
     Dom         => 1,
@@ -227,7 +238,7 @@ if ($SubscriptionObj) {
 for my $field (keys %fields) {
     next if $field eq 'DashboardId'; # but this one is immutable
     $fields{$field} = $ARGS{$field}
-        if defined($ARGS{$field});
+        if defined($ARGS{$field}) || $ARGS{$field.'-Magic'};
 }
 
 
diff --git a/share/html/Elements/RT__Dashboard/ColumnMap b/share/html/Elements/RT__Dashboard/ColumnMap
index e9509a2..3414733 100644
--- a/share/html/Elements/RT__Dashboard/ColumnMap
+++ b/share/html/Elements/RT__Dashboard/ColumnMap
@@ -95,9 +95,6 @@ my $COLUMN_MAP = {
                 elsif ($freq eq 'daily') {
                     $frequency = loc("daily at [_1]", $hour);
                 }
-                elsif ($freq eq 'm-f') {
-                    $frequency = loc("M-F at [_1]", $hour);
-                }
                 elsif ($freq eq 'never') {
                     $frequency = loc("Never");
                 }
diff --git a/share/static/css/base/misc.css b/share/static/css/base/misc.css
index a76bf00..ee8f856 100644
--- a/share/static/css/base/misc.css
+++ b/share/static/css/base/misc.css
@@ -79,3 +79,7 @@ textarea.messagebox, #cke_Content, #cke_UpdateContent {
 .datepicker {
     width: 17em;
 }
+
+.dashboard-subscription tr.frequency .value input {
+    margin-bottom: 0.75em;
+}
diff --git a/t/mail/dashboards.t b/t/mail/dashboards.t
index d7b1ccc..f325706 100644
--- a/t/mail/dashboards.t
+++ b/t/mail/dashboards.t
@@ -259,8 +259,13 @@ RT->Config->Set('DashboardAddress' => 'root');
 $m->login;
 create_dashboard($baseurl, $m);
 create_subscription($baseurl, $m,
-    Frequency => 'm-f',
-    Hour => '06:00',
+    Frequency => 'daily',
+    Monday    => 1,
+    Tuesday   => 1,
+    Wednesday => 1,
+    Thursday  => 1,
+    Friday    => 1,
+    Hour      => '06:00',
 );
 
 ($dashboard_id, $subscription_id) = get_dash_sub_ids();
@@ -270,7 +275,7 @@ $bad_time = $good_time - 86400;
 
 produces_dashboard_mail_ok(
     Time    => $good_time,
-    Subject =>  "[example.com] a Weekday b Testing! c\n",
+    Subject =>  "[example.com] a Daily b Testing! c\n",
 );
 
 produces_no_dashboard_mail_ok(
@@ -285,7 +290,7 @@ produces_no_dashboard_mail_ok(
 
 produces_dashboard_mail_ok(
     Time    => $bad_time - 86400 * 2, # friday
-    Subject =>  "[example.com] a Weekday b Testing! c\n",
+    Subject =>  "[example.com] a Daily b Testing! c\n",
 );
 
 

-----------------------------------------------------------------------


More information about the rt-commit mailing list