[freeside-commits] branch FREESIDE_3_BRANCH updated. 19cae13fbfa17207f58c2ad44cb94f57caf64356
Ivan
ivan at 420.am
Sat Apr 5 20:47:01 PDT 2014
The branch, FREESIDE_3_BRANCH has been updated
via 19cae13fbfa17207f58c2ad44cb94f57caf64356 (commit)
from 3f20bec8cc551e82274aa79bf1eb6ad8464e1558 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 19cae13fbfa17207f58c2ad44cb94f57caf64356
Author: Ivan Kohler <ivan at freeside.biz>
Date: Sat Apr 5 20:46:31 2014 -0700
weekly view for RTx::Calendar, RT#16584
diff --git a/rt/lib/RTx/Calendar.pm b/rt/lib/RTx/Calendar.pm
index be12707..88cfecd 100644
--- a/rt/lib/RTx/Calendar.pm
+++ b/rt/lib/RTx/Calendar.pm
@@ -10,7 +10,7 @@ our $VERSION = "0.17";
RT->AddStyleSheets('calendar.css')
if RT->can('AddStyleSheets');
-our @EXPORT_OK = qw( FirstDay LastDay );
+our @EXPORT_OK = qw( FirstDay LastDay LastDayOfWeek );
sub FirstDay {
my ($year, $month, $matchday) = @_;
@@ -37,6 +37,19 @@ sub LastDay {
$day;
}
+sub LastDayOfWeek {
+ my ($year, $month, $day, $matchday) = @_;
+ my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
+ );
+
+ my $day = DateTime->new( year => $year, month => $month, day => $day );
+
+ $day = $set->next($day) while $day->day_of_week != $matchday;
+ $day;
+
+}
+
# we can't use RT::Date::Date because it uses gmtime
# and we need localtime
sub LocalDate {
diff --git a/rt/share/html/NoAuth/css/calendar.css b/rt/share/html/NoAuth/css/calendar.css
index 93edccf..cc1f2c4 100644
--- a/rt/share/html/NoAuth/css/calendar.css
+++ b/rt/share/html/NoAuth/css/calendar.css
@@ -31,6 +31,11 @@ color:#505050;
width:100%;
}
+.calendardate {
+ text-align: right;
+ width:100%;
+}
+
table.rtxcalendar {
width:100%;
border-collapse: collapse;
@@ -73,3 +78,15 @@ table.rtxcalendar td.aweekago {
border-bottom: none;
}
+table.rtxcalendar td.controls {
+ background: #eeeeee;
+ width: 1%;
+ border-top: 1px solid #eeeeee;
+ border-left: 1px solid #eeeeee;
+ border-bottom: 1px solid #eeeeee;
+}
+
+table.rtxcalendar td.controls:hover {
+ background-color: #CFDEFF;
+}
+
diff --git a/rt/share/html/NoAuth/images/week-collapse.gif b/rt/share/html/NoAuth/images/week-collapse.gif
new file mode 100644
index 0000000..3c300bb
Binary files /dev/null and b/rt/share/html/NoAuth/images/week-collapse.gif differ
diff --git a/rt/share/html/NoAuth/images/week-expand.gif b/rt/share/html/NoAuth/images/week-expand.gif
new file mode 100644
index 0000000..959687e
Binary files /dev/null and b/rt/share/html/NoAuth/images/week-expand.gif differ
diff --git a/rt/share/html/Search/Calendar.html b/rt/share/html/Search/Calendar.html
index 8a1b796..db781d8 100644
--- a/rt/share/html/Search/Calendar.html
+++ b/rt/share/html/Search/Calendar.html
@@ -7,6 +7,11 @@ $Order => undef
$OrderBy => undef
$RowsPerPage => undef
$NewQuery => 0
+$WeekDay => undef
+$WeekMonth => undef
+$WeekYear => undef
+$OrigMonth => undef
+$OrigYear => undef
</%args>
<& /Elements/Header, Title => $title &>
@@ -17,34 +22,39 @@ $NewQuery => 0
title_class=> 'inverse',
color => "#993333" &>
-<table width="100%">
-<tr>
-<td align="left">
-% my ($PMonth, $PYear) = ($Month - 1, $Year);
+% my($PMonth, $PYear, $NMonth, $NYear);
+% unless ( $WeekDay ) {
+
+ <table width="100%">
+ <tr>
+ <td align="left">
+% ($PMonth, $PYear) = ($Month - 1, $Year);
% if ($PMonth < 0) {
% $PYear--;
% $PMonth = 11;
% }
-<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
-</td>
-<th align="center">
- <font size="+1"><% $rtdate->GetMonth($Month). " $Year" %></font>
-</th>
-<td align="right">
-% my ($NMonth, $NYear) = ($Month + 1, $Year);
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
+ </td>
+ <th align="center">
+ <font size="+1"><% $rtdate->GetMonth($Month). " $Year" %></font>
+ </th>
+ <td align="right">
+% ($NMonth, $NYear) = ($Month + 1, $Year);
% if ($NMonth > 11) {
% $NYear++;
% $NMonth = 0;
% }
-<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
-</td>
-</tr>
-</table>
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
+ </td>
+ </tr>
+ </table>
+% }
<table class="rtxcalendar">
<thead>
<tr>
+<td class="controls"></td>
% for ( @{$week{$weekstart}} ) {
<th width="14%"><%$rtdate->GetWeekday($_)%></th>
% }
@@ -53,6 +63,11 @@ $NewQuery => 0
<tbody>
<tr>
+% if ( $WeekDay ) {
+ <& td_week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &>
+% } else {
+ <& td_week_expand, date=>$date, Month=>$Month, Year=>$Year, QueryString=>$QueryString &>
+% }
% while ($date <= $end) {
%
% my $offmonth = $date->month != ($Month + 1);
@@ -60,7 +75,7 @@ $NewQuery => 0
% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0);
% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0);
- <td class="<% $offmonth ? 'offmonth'
+ <td class="<% ($offmonth && !$WeekDay) ? 'offmonth'
: $is_today ? 'today'
: $is_yesterday ? 'yesterday'
: $is_aweekago ? 'aweekago'
@@ -68,9 +83,11 @@ $NewQuery => 0
%>"
>
<div class="<% $is_today ? 'todays'
- : $offmonth ? 'offmonth'
+ : ($offmonth && !$WeekDay) ? 'offmonth'
:'' %>calendardate"
- ><%$date->day%></div>
+ ><% ( $WeekDay ? $rtdate->GetMonth($date->month). ' ' : '' ).
+ $date->day
+ %></div>
% my $sp = 3;
% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) {
@@ -83,47 +100,61 @@ $NewQuery => 0
% $date = $set->next($date);
% if ( $date->day_of_week == $startday_of_week ) {
- </tr><tr>
+ </tr>
+% if ( $date <= $end ) {
+ <tr>
+% if ( $WeekDay ) {
+ <& td_week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &>
+% } else {
+ <& td_week_expand, date=>$date, Month=>$Month, Year=>$Year, QueryString=>$QueryString &>
+% }
+% }
% }
% }
-</tr>
</tbody>
</table>
-<table width="100%">
-<tr>
-<td align="left">
-<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
-</td>
+% unless ( $WeekDay ) {
-<td valign="top" align="center">
-<form action="<%$RT::WebPath%>/Search/Calendar.html?<%$QueryString%>" method="post">
+ <table width="100%">
+ <tr>
+ <td align="left">
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
+ </td>
-<select name="Month">
-% for (0..11) {
-<option value="<%$_%>" <% $_ == $Month ? 'selected' : ''%> ><%$rtdate->GetMonth($_)%></option>
-% }
-</select>
-% my $year = (localtime)[5] + 1900;
-<select name="Year">
-% for ( ($year-5) .. ($year+5)) {
-<option value="<%$_%>" <% $_ == $Year ? 'selected' : ''%>><%$_%></option>
-% }
-</select>
+ <td valign="top" align="center">
+ <form action="<%$RT::WebPath%>/Search/Calendar.html?<%$QueryString%>" method="post">
+
+ <select name="Month">
+% for (0..11) {
+ <option value="<%$_%>" <% $_ == $Month ? 'selected' : ''%> ><%$rtdate->GetMonth($_)%></option>
+% }
+ </select>
+
+% my $year = (localtime)[5] + 1900;
+ <select name="Year">
+% for ( ($year-5) .. ($year+5)) {
+ <option value="<%$_%>" <% $_ == $Year ? 'selected' : ''%>><%$_%></option>
+% }
+ </select>
%# <& /Elements/Submit&>
-<input type="submit" value="<% loc('Submit') %>" class="button" />
+ <input type="submit" value="<% loc('Submit') %>" class="button" />
-</form>
-</td>
+ </form>
+ </td>
-<td align="right">
-<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
-</td>
-</tr>
-</table>
+ <td align="right">
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
+ </td>
+ </tr>
+ </table>
+
+% }
+% #XXX an option to turn off "Calendar Preferences and Help" for embedded
+% # (and weekly?) use
<table width="100%">
<tr>
@@ -166,7 +197,7 @@ my %legend = (
</%ONCE>
<%INIT>
-use RTx::Calendar qw(FirstDay LastDay);
+use RTx::Calendar qw(FirstDay LastDay LastDayOfWeek);
my $title = loc("Calendar");
@@ -186,8 +217,15 @@ my $endday_of_week = ${$week{$weekstart}}[-1] || 7;
my $today = DateTime->today;
my $yesterday = $today->clone->subtract( days=>1 );
my $aweekago = $today->clone->subtract( days=>7 );
-my $date = FirstDay($Year, $Month + 1, $startday_of_week );
-my $end = LastDay ($Year, $Month + 1, $endday_of_week );
+
+my( $date, $end);
+if ( $WeekDay ) {
+ $date = DateTime->new( year=>$WeekYear, month=>$WeekMonth, day=>$WeekDay );
+ $end = LastDayOfWeek( $WeekYear, $WeekMonth, $WeekDay, $endday_of_week );
+} else {
+ $date = FirstDay($Year, $Month + 1, $startday_of_week );
+ $end = LastDay ($Year, $Month + 1, $endday_of_week );
+}
# use this to loop over days until $end
my $set = DateTime::Set->from_recurrence(
@@ -235,3 +273,26 @@ $TempQuery .= RTx::Calendar::DatesClauses(\@Dates, $date->strftime("%F"), $end->
my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $TempQuery, \@Dates, $date->strftime("%F"), $end->strftime("%F"));
</%INIT>
+<%def td_week_expand>
+<%args>
+ $date => undef
+ $Month => undef
+ $Year => undef
+ $QueryString => undef
+</%args>
+ <td class="controls">
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?WeekDay=<% $date->day %>&WeekMonth=<% $date->month %>&WeekYear=<% $date->year %>&OrigMonth=<% $Month %>&OrigYear=<% $Year %>&<%$QueryString%>"><img src="<%$RT::WebPath%>/NoAuth/images/week-expand.gif"></a>
+ </td>
+</%def>
+
+<%def td_week_collapse>
+<%args>
+ $date => undef
+ $Month => undef
+ $Year => undef
+ $QueryString => undef
+</%args>
+ <td class="controls">
+ <a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<% $Month %>&Year=<% $Year %>&<%$QueryString%>"><img src="<%$RT::WebPath%>/NoAuth/images/week-collapse.gif"></a>
+ </td>
+</%def>
-----------------------------------------------------------------------
Summary of changes:
rt/lib/RTx/Calendar.pm | 15 ++-
rt/share/html/NoAuth/css/calendar.css | 17 +++
rt/share/html/NoAuth/images/week-collapse.gif | Bin 0 -> 137 bytes
rt/share/html/NoAuth/images/week-expand.gif | Bin 0 -> 150 bytes
rt/share/html/Search/Calendar.html | 159 +++++++++++++++++--------
5 files changed, 141 insertions(+), 50 deletions(-)
create mode 100644 rt/share/html/NoAuth/images/week-collapse.gif
create mode 100644 rt/share/html/NoAuth/images/week-expand.gif
More information about the freeside-commits
mailing list