Mercurial > hg > soundsoftware-site
comparison .svn/pristine/7b/7b79b629f3da71f401261cf1288a60cb2acf04af.svn-base @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 # redMine - project management software | |
2 # Copyright (C) 2006-2008 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_options = {} | |
58 cond = ARCondition.new | |
59 if from && to | |
60 cond.add(["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to]) | |
61 end | |
62 | |
63 if options[:author] | |
64 return [] if provider_options[:author_key].nil? | |
65 cond.add(["#{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_options[:order] = "#{table_name}.id DESC" | |
71 scope_options[:limit] = options[:limit] | |
72 end | |
73 | |
74 scope = self | |
75 if provider_options.has_key?(:permission) | |
76 cond.add(Project.allowed_to_condition(user, provider_options[:permission] || :view_project, options)) | |
77 elsif respond_to?(:visible) | |
78 scope = scope.visible(user, options) | |
79 else | |
80 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." | |
81 cond.add(Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options)) | |
82 end | |
83 scope_options[:conditions] = cond.conditions | |
84 | |
85 with_scope(:find => scope_options) do | |
86 scope.find(:all, provider_options[:find_options].dup) | |
87 end | |
88 end | |
89 end | |
90 end | |
91 end | |
92 end | |
93 end |