annotate .svn/pristine/c4/c4531d47cc56461cf6b79ce17579ddd86c41ae44.svn-base @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents 038ba2d95de8
children
rev   line source
Chris@1296 1 # Redmine - project management software
Chris@1296 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
Chris@1296 3 #
Chris@1296 4 # This program is free software; you can redistribute it and/or
Chris@1296 5 # modify it under the terms of the GNU General Public License
Chris@1296 6 # as published by the Free Software Foundation; either version 2
Chris@1296 7 # of the License, or (at your option) any later version.
Chris@1296 8 #
Chris@1296 9 # This program is distributed in the hope that it will be useful,
Chris@1296 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@1296 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@1296 12 # GNU General Public License for more details.
Chris@1296 13 #
Chris@1296 14 # You should have received a copy of the GNU General Public License
Chris@1296 15 # along with this program; if not, write to the Free Software
Chris@1296 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@1296 17
Chris@1296 18 module Redmine
Chris@1296 19 module Activity
Chris@1296 20 # Class used to retrieve activity events
Chris@1296 21 class Fetcher
Chris@1296 22 attr_reader :user, :project, :scope
Chris@1296 23
Chris@1296 24 # Needs to be unloaded in development mode
Chris@1296 25 @@constantized_providers = Hash.new {|h,k| h[k] = Redmine::Activity.providers[k].collect {|t| t.constantize } }
Chris@1296 26
Chris@1296 27 def initialize(user, options={})
Chris@1296 28 options.assert_valid_keys(:project, :with_subprojects, :author)
Chris@1296 29 @user = user
Chris@1296 30 @project = options[:project]
Chris@1296 31 @options = options
Chris@1296 32
Chris@1296 33 @scope = event_types
Chris@1296 34 end
Chris@1296 35
Chris@1296 36 # Returns an array of available event types
Chris@1296 37 def event_types
Chris@1296 38 return @event_types unless @event_types.nil?
Chris@1296 39
Chris@1296 40 @event_types = Redmine::Activity.available_event_types
Chris@1296 41 @event_types = @event_types.select {|o| @project.self_and_descendants.detect {|p| @user.allowed_to?("view_#{o}".to_sym, p)}} if @project
Chris@1296 42 @event_types
Chris@1296 43 end
Chris@1296 44
Chris@1296 45 # Yields to filter the activity scope
Chris@1296 46 def scope_select(&block)
Chris@1296 47 @scope = @scope.select {|t| yield t }
Chris@1296 48 end
Chris@1296 49
Chris@1296 50 # Sets the scope
Chris@1296 51 # Argument can be :all, :default or an array of event types
Chris@1296 52 def scope=(s)
Chris@1296 53 case s
Chris@1296 54 when :all
Chris@1296 55 @scope = event_types
Chris@1296 56 when :default
Chris@1296 57 default_scope!
Chris@1296 58 else
Chris@1296 59 @scope = s & event_types
Chris@1296 60 end
Chris@1296 61 end
Chris@1296 62
Chris@1296 63 # Resets the scope to the default scope
Chris@1296 64 def default_scope!
Chris@1296 65 @scope = Redmine::Activity.default_event_types
Chris@1296 66 end
Chris@1296 67
Chris@1296 68 # Returns an array of events for the given date range
Chris@1296 69 # sorted in reverse chronological order
Chris@1296 70 def events(from = nil, to = nil, options={})
Chris@1296 71 e = []
Chris@1296 72 @options[:limit] = options[:limit]
Chris@1296 73
Chris@1296 74 @scope.each do |event_type|
Chris@1296 75 constantized_providers(event_type).each do |provider|
Chris@1296 76 e += provider.find_events(event_type, @user, from, to, @options)
Chris@1296 77 end
Chris@1296 78 end
Chris@1296 79
Chris@1296 80 e.sort! {|a,b| b.event_datetime <=> a.event_datetime}
Chris@1296 81
Chris@1296 82 if options[:limit]
Chris@1296 83 e = e.slice(0, options[:limit])
Chris@1296 84 end
Chris@1296 85 e
Chris@1296 86 end
Chris@1296 87
Chris@1296 88 private
Chris@1296 89
Chris@1296 90 def constantized_providers(event_type)
Chris@1296 91 @@constantized_providers[event_type]
Chris@1296 92 end
Chris@1296 93 end
Chris@1296 94 end
Chris@1296 95 end