[freeside-commits] branch master updated. b7e8cfa78c29c9cc561cafa07dbcd82ff58acb50

Ivan ivan at 420.am
Sat Apr 5 20:46:36 PDT 2014


The branch, master has been updated
       via  b7e8cfa78c29c9cc561cafa07dbcd82ff58acb50 (commit)
      from  58c47a18e6a3cff2fe4032c08f74c922966f3f40 (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 b7e8cfa78c29c9cc561cafa07dbcd82ff58acb50
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