diff options
-rw-r--r-- | app/controllers/issues_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 2 | ||||
-rw-r--r-- | app/sweepers/issue_sweeper.rb | 38 | ||||
-rw-r--r-- | app/views/projects/calendar.rhtml | 4 | ||||
-rw-r--r-- | app/views/projects/gantt.rhtml | 71 | ||||
-rw-r--r-- | config/environment.rb | 4 |
6 files changed, 85 insertions, 36 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 9c16d299b..cec126dd3 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -18,6 +18,8 @@ class IssuesController < ApplicationController layout 'base', :except => :export_pdf before_filter :find_project, :authorize + + cache_sweeper :issue_sweeper, :only => [ :edit, :change_status, :destroy ] helper :custom_fields include CustomFieldsHelper diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index a870cca2a..ca6ea8d8e 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -21,6 +21,8 @@ class ProjectsController < ApplicationController layout 'base' before_filter :find_project, :authorize, :except => [ :index, :list, :add ] before_filter :require_admin, :only => [ :add, :destroy ] + + cache_sweeper :issue_sweeper, :only => [ :add_issue ] helper :sort include SortHelper diff --git a/app/sweepers/issue_sweeper.rb b/app/sweepers/issue_sweeper.rb new file mode 100644 index 000000000..dc9020535 --- /dev/null +++ b/app/sweepers/issue_sweeper.rb @@ -0,0 +1,38 @@ +# redMine - project management software +# Copyright (C) 2006-2007 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +class IssueSweeper < ActionController::Caching::Sweeper + observe Issue + + def after_save(issue) + expire_cache_for(issue) + end + + def after_destroy(issue) + expire_cache_for(issue) + end + +private + def expire_cache_for(issue) + # fragments of the main project + expire_fragment(Regexp.new("projects/(calendar|gantt)/#{issue.project_id}\\.")) + # fragments of the root project that include subprojects issues + unless issue.project.parent_id.nil? + expire_fragment(Regexp.new("projects/(calendar|gantt)/#{issue.project.parent_id}\\..*subprojects")) + end + end +end diff --git a/app/views/projects/calendar.rhtml b/app/views/projects/calendar.rhtml index c63365b6c..2a53831fe 100644 --- a/app/views/projects/calendar.rhtml +++ b/app/views/projects/calendar.rhtml @@ -1,3 +1,4 @@ +<% cache(:year => @year, :month => @month, :tracker_ids => @selected_tracker_ids, :subprojects => params[:with_subprojects], :lang => current_language) do %> <h2><%= l(:label_calendar) %></h2> <% form_tag do %> @@ -87,4 +88,5 @@ end %> <%= image_tag 'arrow_from.png' %> <%= l(:text_tip_task_begin_day) %><br /> <%= image_tag 'arrow_to.png' %> <%= l(:text_tip_task_end_day) %><br /> -<%= image_tag 'arrow_bw.png' %> <%= l(:text_tip_task_begin_end_day) %><br />
\ No newline at end of file +<%= image_tag 'arrow_bw.png' %> <%= l(:text_tip_task_begin_end_day) %><br /> +<% end %> diff --git a/app/views/projects/gantt.rhtml b/app/views/projects/gantt.rhtml index 6359f0429..317fd993d 100644 --- a/app/views/projects/gantt.rhtml +++ b/app/views/projects/gantt.rhtml @@ -1,3 +1,28 @@ +<% zoom = 1 +@zoom.times { zoom = zoom * 2 } + +subject_width = 330 +header_heigth = 18 + +headers_height = header_heigth +show_weeks = false +show_days = false + +if @zoom >1 + show_weeks = true + headers_height = 2*header_heigth + if @zoom > 2 + show_days = true + headers_height = 3*header_heigth + end +end + +g_width = (@date_to - @date_from + 1)*zoom +g_height = [(20 * @events.length + 6)+150, 206].max +t_height = g_height + headers_height +%> + +<% cache(:year => @year_from, :month => @month_from, :months => @months, :zoom => @zoom, :tracker_ids => @selected_tracker_ids, :subprojects => params[:with_subprojects], :lang => current_language) do %> <div class="contextual"> <%= l(:label_export_to) %> <%= link_to 'PDF', {:zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects], :output => 'pdf'}, :class => 'icon icon-pdf' %> @@ -47,30 +72,6 @@ </table> <% end %> -<% zoom = 1 -@zoom.times { zoom = zoom * 2 } - -subject_width = 330 -header_heigth = 18 - -headers_height = header_heigth -show_weeks = false -show_days = false - -if @zoom >1 - show_weeks = true - headers_height = 2*header_heigth - if @zoom > 2 - show_days = true - headers_height = 3*header_heigth - end -end - -g_width = (@date_to - @date_from + 1)*zoom -g_height = [(20 * @events.length + 6)+150, 206].max -t_height = g_height + headers_height -%> - <table width="100%" style="border:0; border-collapse: collapse;"> <tr> <td style="width:<%= subject_width %>px;"> @@ -173,14 +174,6 @@ end %> <% # -# Today red line -# -if Date.today >= @date_from and Date.today <= @date_to %> - <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div> -<% end %> - -<% -# # Tasks # top = headers_height + 10 @@ -226,6 +219,18 @@ top = headers_height + 10 <% end %> <% top = top + 20 end %> + +<% end # cache +%> + +<% +# +# Today red line (excluded from cache) +# +if Date.today >= @date_from and Date.today <= @date_to %> + <div style="position: absolute;height:<%= g_height %>px;top:<%= headers_height + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div> +<% end %> + </div> </td> </tr> @@ -236,4 +241,4 @@ end %> <td align="left"><%= link_to ('« ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] %></td> <td align="right"><%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months, :tracker_ids => @selected_tracker_ids, :with_subprojects => params[:with_subprojects] %></td> </tr> -</table>
\ No newline at end of file +</table> diff --git a/config/environment.rb b/config/environment.rb index 8ff43e0ac..e5e7d0e4b 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -13,8 +13,8 @@ Rails::Initializer.run do |config| # Skip frameworks you're not going to use # config.frameworks -= [ :action_web_service, :action_mailer ] - # Add additional load paths for your own custom dirs - # config.load_paths += %W( #{RAILS_ROOT}/extras ) + # Add additional load paths for sweepers + config.load_paths += %W( #{RAILS_ROOT}/app/sweepers ) # Force all environments to use the same logger level # (by default production uses :info, the others :debug) |