#encoding: utf-8 class BlogComment < ActiveRecord::Base # attr_accessible :title, :body require 'net/http' require 'json' include Redmine::SafeAttributes belongs_to :blog belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' acts_as_tree :counter_cache => :comments_count, :order => "#{BlogComment.table_name}.sticky desc ,#{BlogComment.table_name}.created_on ASC" acts_as_attachable belongs_to :last_reply, :class_name => 'BlogComment', :foreign_key => 'last_comment_id' # 虚拟关联 has_many :user_acts, :class_name => 'UserAcivity',:as =>:act acts_as_watchable validates_presence_of :title, :content validates_length_of :title, :maximum => 255 #validate :cannot_reply_to_locked_comment, :on => :create safe_attributes 'title', 'content',"sticky", "locked" after_save :add_user_activity after_update :update_activity after_create :update_parent_time, :blog_wechat_message before_destroy :destroy_user_activity scope :like, lambda {|arg| if arg.blank? where(nil) else pattern = "%#{arg.to_s.strip.downcase}%" where(" LOWER(title) LIKE :p ", :p => pattern) end } #动态更新 def update_activity user_activity = UserActivity.where("act_type='BlogComment' and act_id =?",self.id).first if user_activity user_activity.updated_at = Time.now user_activity.save end end #在个人动态里面增加当前动态 def add_user_activity if self.parent_id.nil? #只有发博文才插入动态 user_activity = UserActivity.where("act_type = '#{self.class.to_s}' and act_id = '#{self.id}'").first if user_activity user_activity.save else user_activity = UserActivity.new user_activity.act_id = self.id user_activity.act_type = self.class.to_s user_activity.container_type = "Blog" user_activity.container_id = self.blog_id user_activity.user_id = self.author_id user_activity.save end end end def destroy_user_activity user_activity = UserActivity.where("act_type = '#{self.class.to_s}' and act_id = '#{self.id}'") user_activity.destroy_all end def deleted_attach_able_by? user (user && user.logged? && (self.author == user) ) || user.admin? end def update_parent_time if !self.parent.nil? self.root.update_attribute(:updated_on, self.updated_on) end end def project end #博客回复微信模板消息 def blog_wechat_message ws = WechatService.new if self.parent_id.nil? self.author.watcher_users.each do |watcher| content = strip_html self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, 200 ws.message_update_template watcher.id, "blog_comment", self.id, "#{l(:label_new_blog_template)}", content, format_time(self.created_at) end else content = strip_html self.content.html_safe, 200 ws.comment_template self.parent.author_id, "blog_comment", self.parent_id, "#{l(:label_blog_comment_template)}", self.author.try(:realname), format_time(self.created_at), content end end end