]> source.dussan.org Git - redmine.git/commitdiff
Replaces TimeEntry.visible_by with a visible scope.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 16 Mar 2011 17:29:30 +0000 (17:29 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 16 Mar 2011 17:29:30 +0000 (17:29 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5149 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/projects_controller.rb
app/controllers/timelog_controller.rb
app/models/time_entry.rb
app/views/projects/show.rhtml

index 459b54784ed3793758e3df94b1a58d4e2d9ec244..f80cbbf26a288ae934830aa4c38440260bd1635a 100644 (file)
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  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
@@ -156,11 +156,10 @@ class ProjectsController < ApplicationController
                                             :include => [:project, :status, :tracker],
                                             :conditions => cond)
     
-    TimeEntry.visible_by(User.current) do
-      @total_hours = TimeEntry.sum(:hours, 
-                                   :include => :project,
-                                   :conditions => cond).to_f
+    if User.current.allowed_to?(:view_time_entries, @project)
+      @total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f
     end
+    
     @key = User.current.rss_key
     
     respond_to do |format|
index f75d5833ec5f153b26fca10ba12fe64e3e7b30a4..604a8f2445c37e64a83d8d90f19401e834dcac12 100644 (file)
@@ -40,60 +40,56 @@ class TimelogController < ApplicationController
                 'hours' => 'hours'
     
     cond = ARCondition.new
-    if @project.nil?
-      cond << Project.allowed_to_condition(User.current, :view_time_entries)
-    elsif @issue.nil?
-      cond << @project.project_condition(Setting.display_subprojects_issues?)
-    else
+    if @issue
       cond << "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}"
+    elsif @project
+      cond << @project.project_condition(Setting.display_subprojects_issues?)
     end
     
     retrieve_date_range
     cond << ['spent_on BETWEEN ? AND ?', @from, @to]
 
-    TimeEntry.visible_by(User.current) do
-      respond_to do |format|
-        format.html {
-          # Paginate results
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-          @total_hours = TimeEntry.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
+    respond_to do |format|
+      format.html {
+        # Paginate results
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  =>  @entry_pages.items_per_page,
+                                  :offset =>  @entry_pages.current.offset)
+        @total_hours = TimeEntry.visible.sum(:hours, :include => [:project, :issue], :conditions => cond.conditions).to_f
 
-          render :layout => !request.xhr?
-        }
-        format.api  {
-          @entry_count = TimeEntry.count(:include => [:project, :issue], :conditions => cond.conditions)
-          @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => :tracker}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause,
-                                    :limit  =>  @entry_pages.items_per_page,
-                                    :offset =>  @entry_pages.current.offset)
-        }
-        format.atom {
-          entries = TimeEntry.find(:all,
-                                   :include => [:project, :activity, :user, {:issue => :tracker}],
-                                   :conditions => cond.conditions,
-                                   :order => "#{TimeEntry.table_name}.created_on DESC",
-                                   :limit => Setting.feeds_limit.to_i)
-          render_feed(entries, :title => l(:label_spent_time))
-        }
-        format.csv {
-          # Export all entries
-          @entries = TimeEntry.find(:all, 
-                                    :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
-                                    :conditions => cond.conditions,
-                                    :order => sort_clause)
-          send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
-        }
-      end
+        render :layout => !request.xhr?
+      }
+      format.api  {
+        @entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
+        @entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => :tracker}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause,
+                                  :limit  =>  @entry_pages.items_per_page,
+                                  :offset =>  @entry_pages.current.offset)
+      }
+      format.atom {
+        entries = TimeEntry.visible.find(:all,
+                                 :include => [:project, :activity, :user, {:issue => :tracker}],
+                                 :conditions => cond.conditions,
+                                 :order => "#{TimeEntry.table_name}.created_on DESC",
+                                 :limit => Setting.feeds_limit.to_i)
+        render_feed(entries, :title => l(:label_spent_time))
+      }
+      format.csv {
+        # Export all entries
+        @entries = TimeEntry.visible.find(:all, 
+                                  :include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
+                                  :conditions => cond.conditions,
+                                  :order => sort_clause)
+        send_data(entries_to_csv(@entries), :type => 'text/csv; header=present', :filename => 'timelog.csv')
+      }
     end
   end
   
index ade80286837c8908daa85b1aa1d728322f64a240..c89ead32225c0352aa811bb04a1e1c7d2cb04d58 100644 (file)
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  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
@@ -38,6 +38,11 @@ class TimeEntry < ActiveRecord::Base
   validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
   validates_numericality_of :hours, :allow_nil => true, :message => :invalid
   validates_length_of :comments, :maximum => 255, :allow_nil => true
+  
+  named_scope :visible, lambda {|*args| { 
+    :include => :project,
+    :conditions => Project.allowed_to_condition(args.first || User.current, :view_time_entries) 
+  }}
 
   def after_initialize
     if new_record? && self.activity.nil?
@@ -79,7 +84,9 @@ class TimeEntry < ActiveRecord::Base
     (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project)
   end
   
+  # TODO: remove this method in 1.3.0
   def self.visible_by(usr)
+    ActiveSupport::Deprecation.warn "TimeEntry.visible_by is deprecated and will be removed in Redmine 1.3.0. Use the visible scope instead."
     with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do
       yield
     end
index 414358acaf4188dee81aa1e92feb2d2b596069e8..7cc554c8462905daccb81b51de3c355970e791cb 100644 (file)
@@ -64,7 +64,7 @@
 </div>
 
 <% content_for :sidebar do %>
-    <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %>
+    <% if @total_hours.present? %>
     <h3><%= l(:label_spent_time) %></h3>
     <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p>
     <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> |