Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes.

For now, it's only usefull for users who are not members of the project, since members receive notifications for each issue (this behaviour will change).

git-svn-id: http://redmine.rubyforge.org/svn/trunk@453 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2007-04-21 12:08:31 +00:00
parent 907f906ec6
commit 2fb84af3e9
21 changed files with 245 additions and 11 deletions
+2 -11
View File
@@ -1,11 +1,2 @@
module Redmine
module VERSION #:nodoc:
MAJOR = 0
MINOR = 5
TINY = 0
STRING= [MAJOR, MINOR, TINY].join('.')
def self.to_s; STRING end
end
end
require 'redmine/version'
require 'redmine/acts_as_watchable/init'
+3
View File
@@ -0,0 +1,3 @@
# Include hook code here
require File.dirname(__FILE__) + '/lib/acts_as_watchable'
ActiveRecord::Base.send(:include, Redmine::Acts::Watchable)
@@ -0,0 +1,53 @@
# ActsAsWatchable
module Redmine
module Acts
module Watchable
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def acts_as_watchable(options = {})
return if self.included_modules.include?(Redmine::Acts::Watchable::InstanceMethods)
send :include, Redmine::Acts::Watchable::InstanceMethods
class_eval do
has_many :watchers, :as => :watchable, :dependent => :delete_all
end
end
end
module InstanceMethods
def self.included(base)
base.extend ClassMethods
end
def add_watcher(user)
self.watchers << Watcher.new(:user => user)
end
def remove_watcher(user)
return nil unless user && user.is_a?(User)
Watcher.delete_all "watchable_type = '#{self.class}' AND watchable_id = #{self.id} AND user_id = #{user.id}"
end
def watched_by?(user)
!self.watchers.find(:first,
:conditions => ["#{Watcher.table_name}.user_id = ?", user.id]).nil?
end
def watcher_recipients
self.watchers.collect { |w| w.user.mail if w.user.mail_notification }.compact
end
module ClassMethods
def watched_by(user)
find(:all,
:include => :watchers,
:conditions => ["#{Watcher.table_name}.user_id = ?", user.id])
end
end
end
end
end
end
+11
View File
@@ -0,0 +1,11 @@
module Redmine
module VERSION #:nodoc:
MAJOR = 0
MINOR = 5
TINY = 0
STRING= [MAJOR, MINOR, TINY].join('.')
def self.to_s; STRING end
end
end