2019-04-11 19:42:40 +08:00
#coding=utf-8
class AtMessage < ActiveRecord :: Base
include ApplicationHelper
belongs_to :user
belongs_to :sender , class_name : " User " , foreign_key : " sender_id "
attr_accessible :at_message , :container , :viewed , :user_id , :sender_id
belongs_to :at_message , polymorphic : true
belongs_to :container , polymorphic : true
has_many :message_alls , :class_name = > 'MessageAll' , :as = > :message , :dependent = > :destroy
validates :user_id , :sender_id , :at_message_id , :at_message_type , presence : true
after_create :add_user_message , :send_wechat_message
scope :unviewed , - > ( type , id ) {
where ( at_message_type : type , at_message_id : id , viewed : false )
}
def viewed!
update_attribute :viewed , true
end
def at_valid?
return true if at_message_type == 'Issue'
return true if 'Journal' == at_message_type
return true if 'JournalsForMessage' == at_message_type
return true if 'Message' == at_message_type
false
end
def add_user_message
if MessageAll . where ( message_type : self . class . name , message_id : self . id ) . empty?
self . message_alls << MessageAll . new ( :user_id = > self . user_id )
end
end
#@的时候发微信模版消息通知被@的人
def send_wechat_message
shield_type = " "
container_id = 0
status = 0
type = " "
detail_id = 0
detail_title = " "
if defined? at_message . notes
detail_content = strip_html at_message . notes , 30
elsif defined? at_message . content
detail_content = strip_html at_message . content , 30
elsif defined? at_message . description
detail_content = strip_html at_message . description , 30
end
user = self . user
topic = get_root_parent at_message
case at_message_type
when " Issue "
#新建issue
shield_type = " Project "
container_id = at_message . project . id
type = " issues "
detail_id = topic . id
detail_title = at_message . subject
when " Journal "
#issue回复
topic = get_root_parent at_message . journalized
shield_type = " Project "
container_id = at_message . journalized . project . id
type = " issues "
detail_id = topic . id
detail_title = at_message . journalized . subject
when 'Message'
if at_message . course
shield_type = " Course "
container_id = at_message . course . id
type = " course_discussion "
detail_id = topic . id
detail_title = at_message . subject
elsif at_message . project
shield_type = " Project "
container_id = at_message . project . id
type = " project_discussion "
detail_id = topic . id
detail_title = at_message . subject
else
status = - 1
end
when 'JournalsForMessage'
if at_message . jour && defined? at_message . jour . course
#作业回复
shield_type = " Course "
container_id = at_message . jour . course . id
type = " homework "
detail_id = at_message . jour . id
detail_title = at_message . jour . name
else
type = " journal_for_message "
detail_id = topic . id
detail_title = topic . notes . nil? ? " " : topic . notes
end
else
status = - 1
end
count = 0
detail_title = detail_title . gsub ( / RE: / , '' )
if container_id != 0
count = ShieldWechatMessage . where ( " container_type='User' and container_id= #{ user . id } and shield_type=' #{ shield_type } ' and shield_id= #{ container_id } " ) . count
end
if count == 0 && status == 0
message_title = self . sender . show_name + " @了您 "
ws = WechatService . new
ws . at_notice user . id , type , detail_id , message_title , detail_title , format_time ( Time . now ) , detail_content , " 点击查看详情。 " , 0
end
end
def subject
case at_message_type
when " Issue "
" 新建问题: " + at_message . subject
when " Journal "
" 问题留言: " + at_message . journalized . subject
when 'Message'
if ( at_message . topic? )
" 发布新帖: "
else
" 回复帖子: "
end + at_message . subject
when 'JournalsForMessage'
if at_message . jour_type == 'Principal'
" 留言: 在 #{ at_message . at_user . show_name } 主页中留言 "
else
" 作业: #{ at_message . jour . name } 中留言 "
end
else
logger . error " error type: #{ at_message_type } "
end
end
def description
case at_message_type
when " Issue "
at_message . description
when " Journal "
at_message . notes
when 'Message'
at_message . content
when " JournalsForMessage "
at_message . notes
else
logger . error " error type: #{ at_message_type } "
end
end
def author
case at_message_type
when " Issue "
at_message . author
when " Journal "
at_message . user
when 'Message'
at_message . author
when 'JournalsForMessage'
at_message . user
else
logger . error " error type: #{ at_message_type } "
end
end
def url
case at_message_type
when " Issue "
{ controller : :issues , action : :show , id : at_message }
when " Journal "
{ controller : :issues , action : :show , id : at_message . journalized }
when 'Message'
{ controller : :boards , action : :show , project_id : at_message . board . project , id : at_message . board }
when 'JournalsForMessage'
if at_message . jour_type == 'Principal'
{ controller : :users , action : :user_messages , id : at_message . at_user }
elsif at_message . jour_type == 'HomeworkCommon'
{ controller : :homework_common , action : :index , course : at_message . jour . course_id }
elsif at_message . jour_type == 'Course'
{ controller : :courses , action : :feedback , id : at_message . jour_id }
end
else
logger . error " error type: #{ at_message_type } "
end
end
end