From 2fb84af3e91dc17aa0f84a8fa0e02cabe2ac712c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 21 Apr 2007 12:08:31 +0000 Subject: 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 --- lib/redmine/acts_as_watchable/init.rb | 3 ++ .../acts_as_watchable/lib/acts_as_watchable.rb | 53 ++++++++++++++++++++++ lib/redmine/version.rb | 11 +++++ 3 files changed, 67 insertions(+) create mode 100644 lib/redmine/acts_as_watchable/init.rb create mode 100644 lib/redmine/acts_as_watchable/lib/acts_as_watchable.rb create mode 100644 lib/redmine/version.rb (limited to 'lib/redmine') diff --git a/lib/redmine/acts_as_watchable/init.rb b/lib/redmine/acts_as_watchable/init.rb new file mode 100644 index 000000000..f39cc7d18 --- /dev/null +++ b/lib/redmine/acts_as_watchable/init.rb @@ -0,0 +1,3 @@ +# Include hook code here +require File.dirname(__FILE__) + '/lib/acts_as_watchable' +ActiveRecord::Base.send(:include, Redmine::Acts::Watchable) diff --git a/lib/redmine/acts_as_watchable/lib/acts_as_watchable.rb b/lib/redmine/acts_as_watchable/lib/acts_as_watchable.rb new file mode 100644 index 000000000..d62742cac --- /dev/null +++ b/lib/redmine/acts_as_watchable/lib/acts_as_watchable.rb @@ -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 \ No newline at end of file diff --git a/lib/redmine/version.rb b/lib/redmine/version.rb new file mode 100644 index 000000000..630fb1ff8 --- /dev/null +++ b/lib/redmine/version.rb @@ -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 -- cgit v1.2.3