|
|
# fq
|
|
|
# 数据库字段中带有m前缀和is_readed是二次开发添加,之前的字段基本复用
|
|
|
# 注意reply_id 是提到人的id,不是留言id, Base中叫做 at_user
|
|
|
class JournalsForMessage < ActiveRecord::Base
|
|
|
include Redmine::SafeAttributes
|
|
|
safe_attributes "jour_type", # 留言所属类型
|
|
|
"jour_id", # 留言所属类型的id
|
|
|
"notes", # 留言内容
|
|
|
"reply_id", # 留言被回复留言者的用户id(用户a回复了用户b,这是b的id,用以查询谁给b留言了)
|
|
|
"status", # 留言是否被查看(弃用)
|
|
|
"user_id", # 留言者的id
|
|
|
"m_parent_id", # 留言信息的父留言id
|
|
|
"is_readed", # 留言是否已读
|
|
|
"m_reply_count", # 留言的回复数量
|
|
|
"m_reply_id" # 回复某留言的留言id(a留言回复了b留言,这是b留言的id)
|
|
|
acts_as_tree :foreign_key => 'm_parent_id', :counter_cache => :m_reply_count, :order => "#{JournalsForMessage.table_name}.created_on ASC"
|
|
|
|
|
|
belongs_to :project, :foreign_type => 'jour_type', :foreign_key => 'jour_id', :polymorphic => true
|
|
|
belongs_to :jour, :polymorphic => true
|
|
|
belongs_to :user
|
|
|
belongs_to :at_user, :class_name => "User", :foreign_key => 'reply_id'
|
|
|
|
|
|
acts_as_event :title => Proc.new {|o| "#{l(:label_my_message)}"},
|
|
|
:datetime => :updated_on,
|
|
|
:author => Proc.new {|o| o.user },
|
|
|
:description => Proc.new{|o| o.notes },
|
|
|
:type => Proc.new {|o| o.jour_type }#,
|
|
|
#:url => Proc.new {|o| ''}#{:controller => 'documents', :action => 'show', :id => o.id}}
|
|
|
acts_as_activity_provider :author_key => :author_id,
|
|
|
:func => 'memos',
|
|
|
:timestamp => 'updated_on',
|
|
|
:find_options => {}#:include => :project}
|
|
|
|
|
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
|
|
|
|
|
validates :notes, presence: true
|
|
|
after_create :act_as_activity #huang
|
|
|
after_create :reset_counters!
|
|
|
after_destroy :reset_counters!
|
|
|
|
|
|
# default_scope { where('m_parent_id IS NULL') }
|
|
|
|
|
|
def self.create_by_user? user
|
|
|
if user.anonymous?
|
|
|
return false
|
|
|
else
|
|
|
return true
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def self.remove_by_user? user
|
|
|
if( self.user == user ||
|
|
|
( self.jour.kind_of?(User) && self.jour== user )
|
|
|
)
|
|
|
true
|
|
|
else
|
|
|
false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def self.delete_message(message_id)
|
|
|
self.find(message_id).destroy
|
|
|
# self.destroy_all "id = #{message_id}"
|
|
|
end
|
|
|
|
|
|
def reference_user
|
|
|
User.find(reply_id)
|
|
|
end
|
|
|
|
|
|
def self.reference_message(user_id)
|
|
|
@user = User.find(user_id)
|
|
|
message = JournalsForMessage.find_by_sql("select * from journals_for_messages where reply_id = #{@user.id} or (jour_type = 'Bid' and jour_id in (select id from bids where author_id = #{@user.id}))")
|
|
|
message
|
|
|
end
|
|
|
|
|
|
def act_as_activity
|
|
|
if self.jour_type == 'Principal'
|
|
|
unless self.user_id == self.jour.id && self.user_id != self.reply_id && self.reply_id != 0
|
|
|
# self.acts << Activity.new(:user_id => self.user_id)
|
|
|
self.acts << Activity.new(:user_id => self.jour_id)
|
|
|
end
|
|
|
elsif self.jour_type == 'Project'
|
|
|
self.acts << Activity.new(:user_id => self.reply_id)
|
|
|
else
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def reset_counters!
|
|
|
self.class.reset_counters!(self)
|
|
|
end
|
|
|
def self.reset_counters! journals_for_messages
|
|
|
# jfm_id = journals_for_messages.id.to_i
|
|
|
count = find_all_by_m_parent_id(journals_for_messages.m_parent_id).count #(SELECT COUNT(*) FROM #{JournalsForMessage.table_name} WHERE m_parent_id = #{jfm_id} )
|
|
|
update_all("m_reply_count = #{count.to_i}", ["id = ?", journals_for_messages.m_parent_id])
|
|
|
end
|
|
|
end
|