socialforge/app/models/journals_for_message.rb

166 lines
5.9 KiB
Ruby
Raw Normal View History

2013-08-04 10:59:25 +08:00
# fq
2013-12-25 09:17:15 +08:00
# 数据库字段中带有m前缀和is_readed是二次开发添加之前的字段基本复用
2013-12-25 15:40:34 +08:00
# 注意reply_id 是提到人的id不是留言id, Base中叫做 at_user
2013-08-01 10:33:49 +08:00
class JournalsForMessage < ActiveRecord::Base
2013-12-25 09:17:15 +08:00
include Redmine::SafeAttributes
2014-07-24 18:05:37 +08:00
include UserScoreHelper
2013-12-25 09:17:15 +08:00
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)
2014-11-02 14:41:41 +08:00
"is_comprehensive_evaluation" # 1 教师评论、2 匿评、3 留言
2013-12-25 09:17:15 +08:00
acts_as_tree :foreign_key => 'm_parent_id', :counter_cache => :m_reply_count, :order => "#{JournalsForMessage.table_name}.created_on ASC"
2014-07-01 09:15:53 +08:00
belongs_to :project,
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Project' "
2014-06-06 08:50:46 +08:00
belongs_to :course,
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Course' "
2013-08-01 10:33:49 +08:00
belongs_to :jour, :polymorphic => true
belongs_to :user
2014-05-16 11:02:25 +08:00
belongs_to :homework_attach
2014-03-13 22:06:49 +08:00
belongs_to :at_user, :class_name => "User", :foreign_key => 'reply_id'
acts_as_event :title => Proc.new {|o| "#{l(:label_my_message)}"},
:datetime => Proc.new {|o| o.updated_on },
2014-03-13 22:06:49 +08:00
:author => Proc.new {|o| o.user },
:description => Proc.new{|o| o.notes },
:type => Proc.new {|o| o.jour_type },
:url => Proc.new {|o|
2014-06-27 11:24:48 +08:00
if o.jour.kind_of? Project
{:controller => 'projects', :action => 'feedback', :id => o.jour, :r => o.id, :anchor => "word_li_#{o.id}"}
elsif o.jour.kind_of? Course
{:controller => 'courses', :action => 'feedback', :id => o.jour, :r => o.id, :anchor => "word_li_#{o.id}"}
end
}
acts_as_activity_provider :author_key => :user_id,
:timestamp => "#{self.table_name}.updated_on",
:find_options => {:include => :project }
2013-12-25 09:17:15 +08:00
2014-06-13 11:49:28 +08:00
acts_as_activity_provider :type => 'course_journals_for_messages',
:author_key => :user_id,
:timestamp => "#{self.table_name}.updated_on",
:find_options => {:include => :course }
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
2013-12-25 09:17:15 +08:00
validates :notes, presence: true
after_create :act_as_activity #huang
2014-08-13 11:17:22 +08:00
after_create :reset_counters!
2013-12-25 09:17:15 +08:00
after_destroy :reset_counters!
2014-08-13 11:17:22 +08:00
after_save :be_user_score
after_destroy :down_user_score
2013-12-26 08:39:43 +08:00
2013-12-26 08:43:16 +08:00
# default_scope { where('m_parent_id IS NULL') }
2013-12-30 20:16:56 +08:00
2014-01-06 21:11:20 +08:00
def self.create_by_user? user
if user.anonymous?
return false
else
return true
end
end
2014-07-28 10:46:05 +08:00
2014-01-06 21:11:20 +08:00
def self.remove_by_user? user
2013-12-30 20:16:56 +08:00
if( self.user == user ||
( self.jour.kind_of?(User) && self.jour== user )
)
true
else
false
end
end
2013-08-01 10:33:49 +08:00
def self.delete_message(message_id)
2013-12-26 19:28:18 +08:00
self.find(message_id).destroy
# self.destroy_all "id = #{message_id}"
2013-08-01 10:33:49 +08:00
end
def reference_user
User.find(reply_id)
end
2014-07-28 10:46:05 +08:00
def delete_by_user?user
# 用户可删除自己的留言
if self.user.id == user.id || user.admin?
return true
else
return false
end
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'
2013-12-24 16:42:56 +08:00
unless self.user_id == self.jour.id && self.user_id != self.reply_id && self.reply_id != 0
2014-03-07 16:49:45 +08:00
# 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)
2014-06-06 08:50:46 +08:00
elsif self.jour_type == 'Course'
self.acts << Activity.new(:user_id => self.reply_id)
2014-03-07 16:49:45 +08:00
else
end
end
2013-12-25 09:17:15 +08:00
def reset_counters!
2013-12-25 15:40:34 +08:00
self.class.reset_counters!(self)
2013-12-25 09:17:15 +08:00
end
2013-12-25 15:40:34 +08:00
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])
2013-12-25 09:17:15 +08:00
end
2014-07-01 10:31:44 +08:00
#如果是在项目中留言则返回该项目否则返回nil - zjc
def project
if self.jour_type == 'Project'
Project.find(self.jour_id)
else
nil
end
end
# 更新用户分数 -by zjc
def be_user_score
#新建了留言回复
2014-06-17 15:57:31 +08:00
if self.reply_id != 0
#协同得分加分
2014-08-13 11:17:22 +08:00
UserScore.joint(:reply_message, self.user,User.find(self.reply_id),self, { journals_for_messages_id: self.id })
update_replay_for_message(self.user,1)
if self.jour_type == "Project"
update_replay_for_message(self.user,2,self.jour)
end
end
end
# 更新用户分数 -by zjc
def down_user_score
#删除了留言回复
if self.reply_id != 0
#协同得分减分
2014-08-13 11:17:22 +08:00
UserScore.joint(:reply_message_delete, self.user,User.find(self.reply_id), { journals_for_messages_id: self.id })
update_replay_for_message(self.user,1)
if self.jour_type == "Project"
update_replay_for_message(self.user,2,self.jour)
end
end
end
2013-08-01 10:33:49 +08:00
end