You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
205 lines
6.1 KiB
205 lines
6.1 KiB
6 years ago
|
#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 :tidings, :as => :container , :dependent => :destroy
|
||
|
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 :send_tiding
|
||
|
|
||
|
# after_create :add_user_message, :send_wechat_message
|
||
|
|
||
|
scope :unviewed, ->(type, id){
|
||
|
where(at_message_type: type, at_message_id:id, viewed: false)
|
||
|
}
|
||
|
|
||
|
def send_tiding
|
||
|
# self.tidings << Tiding.new(:trigger_user_id => self.sender_id, :user_id => self.user_id, :parent_container_id => self.at_message_id, :parent_container_type => self.at_message_type, :viewed => 0, :tiding_type => "Mentioned")
|
||
|
end
|
||
|
|
||
|
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
|