Subject: | [patch] configure Sunday -> Saturday weeks |
This patch changes the week row in month view from "Monday -> Sunday" to
the more common "Sunday -> Saturday".
I kept the support for "Monday -> Sunday" weeks (and also added "Saturday
-> Friday" weeks), but didn't know whether to make the choice into an
RT::SiteConfig option, a user pref or what, so the patch just has
my $weekstart = 'Sunday'
Subject: | RTx-Calendar.dayofweek.patch |
Index: lib/RTx/Calendar.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/rt/lib/RTx/Calendar.pm,v
retrieving revision 1.1
diff -u -r1.1 Calendar.pm
--- lib/RTx/Calendar.pm 19 May 2010 02:32:00 -0000 1.1
+++ lib/RTx/Calendar.pm 19 May 2010 19:01:46 -0000
@@ -1,33 +1,36 @@
package RTx::Calendar;
use strict;
+use base qw( Exporter );
use DateTime;
use DateTime::Set;
our $VERSION = "0.07";
-sub FirstMonday {
- my ($year, $month) = (shift, shift);
+our @EXPORT_OK = qw( FirstDay LastDay );
+
+sub FirstDay {
+ my ($year, $month, $matchday) = @_;
my $set = DateTime::Set->from_recurrence(
next => sub { $_[0]->truncate( to => 'day' )->subtract( days => 1 ) }
);
my $day = DateTime->new( year => $year, month => $month );
- $day = $set->next($day) while $day->day_of_week != 1;
+ $day = $set->next($day) while $day->day_of_week != $matchday;
$day;
}
-sub LastSunday {
- my ($year, $month) = (shift, shift);
+sub LastDay {
+ my ($year, $month, $matchday) = @_;
my $set = DateTime::Set->from_recurrence(
next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
);
my $day = DateTime->last_day_of_month( year => $year, month => $month );
- $day = $set->next($day) while $day->day_of_week != 7;
+ $day = $set->next($day) while $day->day_of_week != $matchday;
$day;
}
Index: share/html/Search/Calendar.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/rt/share/html/Search/Calendar.html,v
retrieving revision 1.1
diff -u -r1.1 Calendar.html
--- share/html/Search/Calendar.html 19 May 2010 02:32:01 -0000 1.1
+++ share/html/Search/Calendar.html 19 May 2010 19:01:46 -0000
@@ -46,7 +46,7 @@
<thead>
<tr>
<th></th>
-% for (1 .. 6, 0) {
+% for ( @{$week{$weekstart}} ) {
<th width="14%"><%$rtdate->GetWeekday($_)%></th>
% }
</tr>
@@ -54,7 +54,7 @@
<tbody>
<tr>
% while ($date <= $end) {
-% if ( $date->day_of_week == 1) {
+% if ( $date->day_of_week == $startday_of_week ) {
<th><% $date->week_number %></th>
% }
<td class="<% $date->month != ($Month + 1) ? 'oddline' : '' %>"
@@ -66,7 +66,7 @@
% }
</td>
% $date = $set->next($date);
-% if ( $date->day_of_week == 1) {
+% if ( $date->day_of_week == $startday_of_week ) {
</tr><tr>
% }
% }
@@ -125,7 +125,7 @@
</html>
<%INIT>
-use RTx::Calendar;
+use RTx::Calendar qw(FirstDay LastDay);
my $title = loc("Calendar");
@@ -133,9 +133,18 @@
my $rtdate = RT::Date->new($session{'CurrentUser'});
+my $weekstart = 'Sunday'; #RT::SiteConfig? user pref?
+my %week = (
+ 'Saturday' => [6,0..5],
+ 'Sunday' => [0..6],
+ 'Monday' => [1..6,0],
+);
+my $startday_of_week = ${$week{$weekstart}}[0] || 7;
+my $endday_of_week = ${$week{$weekstart}}[-1] || 7;
+
my $today = DateTime->today;
-my $date = RTx::Calendar::FirstMonday($Year, $Month + 1);
-my $end = RTx::Calendar::LastSunday($Year, $Month + 1);
+my $date = FirstDay($Year, $Month + 1, $startday_of_week );
+my $end = LastDay ($Year, $Month + 1, $endday_of_week );
# use this to loop over days until $end
my $set = DateTime::Set->from_recurrence(