|  |  | # fq
 | 
						
						
						
							|  |  | # 数据库字段中带有m前缀和is_readed是二次开发添加,之前的字段基本复用
 | 
						
						
						
							|  |  | # 注意reply_id 是提到人的id,不是留言id, Base中叫做 at_user
 | 
						
						
						
							|  |  | class JournalsForMessage < ActiveRecord::Base
 | 
						
						
						
							|  |  |   include Redmine::SafeAttributes
 | 
						
						
						
							|  |  |   include UserScoreHelper
 | 
						
						
						
							|  |  |   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_key => 'jour_id',
 | 
						
						
						
							|  |  |              :conditions => "#{self.table_name}.jour_type = 'Project' "
 | 
						
						
						
							|  |  |   belongs_to :course,
 | 
						
						
						
							|  |  |              :foreign_key => 'jour_id',
 | 
						
						
						
							|  |  |              :conditions => "#{self.table_name}.jour_type = 'Course' "
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   belongs_to :jour, :polymorphic => true
 | 
						
						
						
							|  |  |   belongs_to :user
 | 
						
						
						
							|  |  |   belongs_to :homework_attach
 | 
						
						
						
							|  |  |   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 },
 | 
						
						
						
							|  |  |                 :author => Proc.new {|o| o.user },
 | 
						
						
						
							|  |  |                 :description => Proc.new{|o| o.notes },
 | 
						
						
						
							|  |  |                 :type => Proc.new {|o| o.jour_type },
 | 
						
						
						
							|  |  |                 :url => Proc.new {|o|
 | 
						
						
						
							|  |  |                   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 }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   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
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   validates :notes, presence: true
 | 
						
						
						
							|  |  |   after_create :act_as_activity #huang
 | 
						
						
						
							|  |  |   after_create :reset_counters!
 | 
						
						
						
							|  |  |   after_destroy :reset_counters!
 | 
						
						
						
							|  |  |   after_save :be_user_score
 | 
						
						
						
							|  |  |   after_destroy :down_user_score
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 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 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' 
 | 
						
						
						
							|  |  |       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)
 | 
						
						
						
							|  |  |     elsif self.jour_type == 'Course'
 | 
						
						
						
							|  |  |       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
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #如果是在项目中留言则返回该项目否则返回nil - zjc
 | 
						
						
						
							|  |  |   def project
 | 
						
						
						
							|  |  |     if self.jour_type == 'Project'
 | 
						
						
						
							|  |  |       Project.find(self.jour_id)
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       nil
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 更新用户分数     -by zjc
 | 
						
						
						
							|  |  |   def be_user_score
 | 
						
						
						
							|  |  |     #新建了留言回复
 | 
						
						
						
							|  |  |     if self.reply_id != 0
 | 
						
						
						
							|  |  |       #协同得分加分
 | 
						
						
						
							|  |  |       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
 | 
						
						
						
							|  |  |       #协同得分减分
 | 
						
						
						
							|  |  |       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
 | 
						
						
						
							|  |  | end
 |