Mercurial > hg > soundsoftware-site
comparison .svn/pristine/11/110c099a0d3863ceae49596e622ce49ebec0b0f7.svn-base @ 1298:4f746d8966dd redmine_2.3_integration
Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:28:30 +0100 |
parents | 622f24f53b42 |
children |
comparison
equal
deleted
inserted
replaced
1297:0a574315af3e | 1298:4f746d8966dd |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with this program; if not, write to the Free Software | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 module Redmine | |
19 module Acts | |
20 module ActivityProvider | |
21 def self.included(base) | |
22 base.extend ClassMethods | |
23 end | |
24 | |
25 module ClassMethods | |
26 def acts_as_activity_provider(options = {}) | |
27 unless self.included_modules.include?(Redmine::Acts::ActivityProvider::InstanceMethods) | |
28 cattr_accessor :activity_provider_options | |
29 send :include, Redmine::Acts::ActivityProvider::InstanceMethods | |
30 end | |
31 | |
32 options.assert_valid_keys(:type, :permission, :timestamp, :author_key, :find_options) | |
33 self.activity_provider_options ||= {} | |
34 | |
35 # One model can provide different event types | |
36 # We store these options in activity_provider_options hash | |
37 event_type = options.delete(:type) || self.name.underscore.pluralize | |
38 | |
39 options[:timestamp] ||= "#{table_name}.created_on" | |
40 options[:find_options] ||= {} | |
41 options[:author_key] = "#{table_name}.#{options[:author_key]}" if options[:author_key].is_a?(Symbol) | |
42 self.activity_provider_options[event_type] = options | |
43 end | |
44 end | |
45 | |
46 module InstanceMethods | |
47 def self.included(base) | |
48 base.extend ClassMethods | |
49 end | |
50 | |
51 module ClassMethods | |
52 # Returns events of type event_type visible by user that occured between from and to | |
53 def find_events(event_type, user, from, to, options) | |
54 provider_options = activity_provider_options[event_type] | |
55 raise "#{self.name} can not provide #{event_type} events." if provider_options.nil? | |
56 | |
57 scope = self | |
58 | |
59 if from && to | |
60 scope = scope.scoped(:conditions => ["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to]) | |
61 end | |
62 | |
63 if options[:author] | |
64 return [] if provider_options[:author_key].nil? | |
65 scope = scope.scoped(:conditions => ["#{provider_options[:author_key]} = ?", options[:author].id]) | |
66 end | |
67 | |
68 if options[:limit] | |
69 # id and creation time should be in same order in most cases | |
70 scope = scope.scoped(:order => "#{table_name}.id DESC", :limit => options[:limit]) | |
71 end | |
72 | |
73 if provider_options.has_key?(:permission) | |
74 scope = scope.scoped(:conditions => Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options)) | |
75 elsif respond_to?(:visible) | |
76 scope = scope.visible(user, options) | |
77 else | |
78 ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option." | |
79 scope = scope.scoped(:conditions => Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options)) | |
80 end | |
81 | |
82 scope.all(provider_options[:find_options].dup) | |
83 end | |
84 end | |
85 end | |
86 end | |
87 end | |
88 end |