2015-12-17 15:44:17 +08:00
#coding=utf-8
2015-12-17 15:14:52 +08:00
class AtMessage < ActiveRecord :: Base
2016-08-30 14:08:10 +08:00
include ApplicationHelper
2015-12-17 15:14:52 +08:00
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
2016-08-30 14:08:10 +08:00
after_create :add_user_message , :send_wechat_message
2015-12-17 15:14:52 +08:00
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
2016-08-31 14:21:38 +08:00
#@的时候发微信模版消息通知被@的人
2016-08-30 14:08:10 +08:00
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
2016-08-30 15:01:26 +08:00
elsif defined? at_message . description
detail_content = strip_html at_message . description , 30
2016-08-30 14:08:10 +08:00
end
user = self . user
topic = get_root_parent at_message
case at_message_type
when " Issue "
2016-08-31 14:21:38 +08:00
#新建issue
2016-08-30 14:08:10 +08:00
shield_type = " Project "
container_id = at_message . project . id
2016-08-30 14:25:36 +08:00
type = " issues "
2016-08-30 14:08:10 +08:00
detail_id = topic . id
detail_title = at_message . subject
when " Journal "
2016-08-31 14:21:38 +08:00
#issue回复
2016-08-30 14:08:10 +08:00
topic = get_root_parent at_message . journalized
shield_type = " Project "
container_id = at_message . journalized . project . id
2016-08-30 14:25:36 +08:00
type = " issues "
2016-08-30 14:08:10 +08:00
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'
2016-09-18 14:49:01 +08:00
if at_message . jour && defined? at_message . jour . course
2016-08-31 14:21:38 +08:00
#作业回复
2016-08-30 14:08:10 +08:00
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
2016-09-18 16:48:20 +08:00
detail_title = topic . notes . nil? ? " " : topic . notes
2016-08-30 14:08:10 +08:00
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
2015-12-17 15:14:52 +08:00
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'
2016-01-26 18:24:15 +08:00
if at_message . jour_type == 'Principal'
" 留言: 在 #{ at_message . at_user . show_name } 主页中留言 "
else
" 作业: #{ at_message . jour . name } 中留言 "
end
2015-12-17 15:14:52 +08:00
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'
2016-01-26 18:24:15 +08:00
if at_message . jour_type == 'Principal'
{ controller : :users , action : :user_messages , id : at_message . at_user }
2016-08-30 16:15:57 +08:00
elsif at_message . jour_type == 'HomeworkCommon'
2016-01-26 18:24:15 +08:00
{ controller : :homework_common , action : :index , course : at_message . jour . course_id }
2016-08-30 16:15:57 +08:00
elsif at_message . jour_type == 'Course'
{ controller : :courses , action : :feedback , id : at_message . jour_id }
2016-01-26 18:24:15 +08:00
end
2015-12-17 15:14:52 +08:00
else
logger . error " error type: #{ at_message_type } "
end
end
end