#encoding: utf-8
# 使用请了解以下描述,不清楚请@Hjqreturn
#
# user_id: 信息接收人
# trigger_user_id: 信息的触发者,具体情况可能有所不同。eg:产生消息的用户ID;处理消息的用户ID等
# container_id:消息实体的ID。eg:issue的id
# container_type:消息实体的类型。eg:“Issue","Board"
# parent_container_id:消息实体的父实体消息的id,是为了生成url时使用,避免反复查数据库。eg:message中的board 的id
# parent_container_type:消息实体的父实体消息类型,便于分类。eg:“Message","Board"
# belong_container_id:消息实体所属的实体ID。eg:project_id,course_id,organization_id
# belong_container_type:消息实体所属的实体类型。eg:“Project”,“Course”,"Shixun"
# status:申请类消息实体的状态。eg:1:“已处理”:0:“未处理” or 系统类消息的处理结果 1:同意 2:拒绝 3:更改(学校、部门申请结果), 4: 删除(部门被删除)
# tiding_type: 消息类型 "Apply":审核, "HomeworkCommon":作业, "Exercise":试卷, "Poll":问卷, GraduationTopic:毕设选题, GraduationTask:毕设任务, "Project":项目, "Comment":评论, "Journal":留言,
# "Mentioned":@, "Praise":赞, "Tread":踩, "Fan":粉丝, "System" 系统,
# 新版:通知:System 审核:Apply 课堂提醒:HomeworkCommon、Exercise、Poll、GraduationTopic、GraduationTask 项目提醒:Project 互动提醒:Comment、Mentioned、Praise、Fan
# viewed:消息是否已读。eg:1 -> 已读; 0 -> 未读
#
class Tiding < ActiveRecord::Base
attr_accessible :belong_container_id, :belong_container_type, :container_id, :container_type, :parent_container_id,
:parent_container_type, :status, :trigger_user_id, :user_id, :tiding_type, :viewed, :extra
default_scope :order => 'created_at desc'
belongs_to :container, :polymorphic => true
belongs_to :user
include ApplicationHelper
scope :course_tiding, lambda {where(tiding_type: %W{HomeworkCommon Exercise Poll Comment})}
# scope :sorted, lambda { order(*User.fields_for_order_statement)}
# Tiding.order(params[:search], 1)
# scope :order, lambda {|arg, type|
# if arg.blank?
# where(nil)
# else
# pattern = "%#{arg.to_s.strip}%"
# #where(" LOWER(concat(lastname, firstname)) LIKE :p ", :p => pattern)
# if type == "0"
# where(" LOWER(login) LIKE '#{pattern}' ")
# elsif type == "1"
# where(" LOWER(concat(lastname, firstname)) LIKE '#{pattern}' ")
# elsif type == "3"
# where(" LOWER(concat(lastname, firstname,login)) LIKE '#{pattern}' ")
# else
# where(" LOWER(mail) LIKE '#{pattern}' ")
# end
# end
# }
def user
User.where(:id => self.trigger_user_id).first
end
def key_word
case self.container_type
when "ApplyUserAuthentication"
user = User.where(:id => self.trigger_user_id).first unless self.trigger_user_id == 0
ue = UserExtensions.where(:user_id => user.id).first unless self.trigger_user_id == 0
technical_title = ue.show_identity unless self.trigger_user_id == 0
if self.tiding_type == "Apply"
container.auth_type == 1 ? ('申请实名认证:' + user.show_real_name + " " + user.ID_number) : ('申请职业认证:' + (ue.school.present? ? ue.school.name : '') + (ue.department_id.present? ? ( "_" + ue.department.name) : '') + " " + technical_title)
else
container.auth_type == 1 ? ('你提交的实名认证申请,审核' + (self.status == 1 ? '已通过' : ('未通过' + " " + '原因:' + container.try(:remarks).to_s))) : ('你提交的职业认证申请,审核' + (self.status == 1 ? '已通过' : ('未通过' + " " + '原因:' + container.try(:remarks).to_s)))
end
when "CancelUserAuthentication"
user = User.where(:id => self.user_id).first
"取消了你的实名认证:" + user.show_real_name.to_s + " " + user.ID_number.to_s
when "CancelUserProCertification"
user = User.where(:id => self.user_id).first
ue = user.user_extensions
"取消了你的职业认证:" + (ue.school.present? ? ue.school.name : '') + (ue.department_id.present? ? ( "_" + ue.department.name) : '') + " " + ue.show_identity
when 'JoinCourse', "DealCourse", "StudentJoinCourse", "TeacherJoinCourse"
course_name = Course.find(container_id).name
if self.container_type == "JoinCourse"
"申请加入课堂:" + course_name + "(" + (self.extra.to_i == 9 ? "教师" : "助教") + ")"
elsif self.container_type == "DealCourse"
"你提交的加入课堂申请:" + course_name + "(" + (self.extra.to_i == 9 ? "教师" : "助教") + "), 审核" + (self.status == 1 ? "已通过" : "未通过")
elsif self.container_type == "StudentJoinCourse"
"加入了课堂:" + course_name + "(学生)"
elsif self.container_type == "TeacherJoinCourse"
self.user.try(:show_real_name).to_s + "将你加入课堂:" + course_name + "(" + (self.extra.to_i == 9 ? "教师" : (self.extra.to_i == 7 ? "助教" : "学生")) + ")"
end
when "ApplyAddDepartment"
if self.tiding_type == "Apply"
"申请添加二级单位:" + container.name.to_s + "(" + School.where(:id => container.school_id).first.try(:name).to_s + ")"
else
case self.status
when 1
"你提交的添加二级单位申请:" + container.name.to_s + "(" + School.where(:id => container.school_id).first.try(:name).to_s + ")" + ",审核已通过"
when 2
"你提交的添加二级单位申请:" + container.name.to_s + "(" + School.where(:id => container.school_id).first.try(:name).to_s + ")" + ",审核未通过" + (self.extra.nil? ? "" : " 原因:#{self.extra}")
when 3
"你提交的添加二级单位申请:" + container.name.to_s + "(" + School.where(:id => container.school_id).first.try(:name).to_s + ")" + ",已被更改为:" + self.extra
end
end
when "ApplyAddSchools"
if self.tiding_type == "Apply"
("申请添加单位:" + container.name)
else
case self.status
when 1
"你提交的添加单位申请:" + container.name + ",审核已通过"
when 2
"你提交的添加单位申请:" + container.name + ",审核未通过" + (self.extra.nil? ? "" : " 原因:#{self.extra}")
when 3
"你提交的添加单位申请:" + container.name + ",已被更改为:" + self.extra
end
end
when "ApplyAction"
case self.parent_container_type
when "ApplyShixun"
shixun_name = Shixun.find(self.parent_container_id).name
self.tiding_type == "System" ? ("你提交的实训发布申请:" + shixun_name + ",审核" + (self.status == 1 ? '已通过':('未通过' + " " + '原因:' + container.try(:reason).to_s))) : ("申请发布实训:"+ shixun_name)
when "ApplySubject"
shixun_name = Subject.find(self.parent_container_id).name
self.tiding_type == "System" ? ("你提交的实训课程发布申请:" + shixun_name + ",审核" + (self.status == 1 ? '已通过':('未通过' + " " + '原因:' + container.try(:reason).to_s))) : ("申请发布实训课程:"+ shixun_name)
when "TrialAuthorization"
self.tiding_type == "System" ? ("你提交的试用授权申请:审核" + (self.status == 1 ? '已通过':('未通过' + " " + '原因:' + container.try(:reason).to_s + ';' + container.try(:reject_description).to_s))) : ("提交了试用授权申请")
end
when "Course", "Shixun","Subject"
name = self.container_type == "Course" ? "课堂" : (self.container_type == "Shixun" ? "实训" :"实训课程")
"成功创建了" + name + ":" + container.name
when "ArchiveCourse"
course_name = Course.find(container_id).name
"你的课堂已经归档:" + course_name
when "JournalsForMessage"
if self.tiding_type != "Mentioned"
case self.parent_container_type
when "Principal"
if container.m_parent_id.present?
(container.parent.try(:m_parent_id).present? ? "评论了你的回复:" : "评论了你的留言:") + message_content(container.notes)
else
"给你" + (container.private == 0 ? "留言:" : "私信:") + message_content(container.notes)
end
when "HomeworkCommon"
(container.m_parent_id.present? ? "评论了你的回复:" : "评论了你发布的作业:") + message_content(container.notes)
when "GraduationTopic"
(container.m_parent_id.present? ? "评论了你的回复:" : "评论了你发布的毕设选题:") + message_content(container.notes)
when "StudentWorksScore"
if container.m_parent_id.present?
"评论了你的回复:" + message_content(container.notes)
else
"评论了你发布的作品评语:" + message_content(container.notes)
end
end
else
"@了你:" + message_content(container.notes)
end
when 'Message'
if self.tiding_type == "Mentioned"
"@了你:" + message_content(container.content)
else
if container.parent.present?
if container.parent_id == container.root_id
"评论了你的帖子:" + message_content(container.content)
else
"评论了你的回复:" + message_content(container.content)
end
else
"发布了帖子:" + container.subject
end
end
when 'Memo'
if container.parent.present?
if container.parent_id == container.root_id
"评论了你的帖子:" + message_content(container.content)
else
"评论了你的回复:" + message_content(container.content)
end
else
"发布了帖子:" + container.subject
end
when 'Watcher'
"关注了你"
when "PraiseTread"
try = self.parent_container_type.constantize
object = try.find(self.parent_container_id)
case self.parent_container_type
when "Challenge"
if self.container
(self.container.praise_or_tread == 1 ? "赞" :"踩") + "了你发布的实训任务:" + object.shixun.name + ",第" + object.position.to_s + "关"
end
when "Memo","Message"
"赞了你" + (object.parent_id.present? ? ("的评论:" + message_content(object.content)) : ("发布的帖子:" + object.subject))
when "HomeworkCommon"
"赞了你发布的作业:" + object.name
when "JournalsForMessage"
"赞了你" + (object.jour_type == "Principal" && !object.m_parent_id.present? ? "的留言:" : "的评论:") + message_content(object.notes)
when "Discuss"
"赞了你的评论:" + message_content(object.content)
when "Issue"
"赞了你发布的项目Issue:" + object.subject
when "Journal"
"赞了你的回复" + (object.notes.present? ? ":#{message_content(object.notes)}" :"")
end
when "Discuss"
(self.container.parent_id.present? ? "评论了你的回复:" : "评论了你发布的实训:" ) + message_content(container.content)
when 'Grade'
case self.parent_container_type
when 'Avatar'
"首次上传头像获得金币奖励:"
when 'Phone'
"首次绑定手机号码获得金币奖励:"
when 'Attendance'
"签到成功获得金币奖励:"
when 'Mail'
"首次绑定邮箱获得金币奖励:"
when 'Account'
"首次填写基本资料获得金币奖励:"
when 'Answer'
game = Game.where(:id => self.parent_container_id).first
if game.present?
"查看实训#{game.challenge.shixun.name}第#{game.challenge.position}关的参考答案消耗金币: "
else
# 之所以这样处理,是因为消息的类型是不能和实体绑定,没有关联删除
"查看实训的参考答案消耗金币"
end
when 'Game'
game = Game.where(:id => self.parent_container_id).first
if game.present?
"通过实训#{game.challenge.shixun.name}的第#{game.challenge.position}关获得金币奖励:"
end
when 'Memo'
"发布的评论或者帖子获得平台奖励:"
when 'Discusses'
"发布的评论获得金币奖励:"
when 'testSet'
game = Game.where(:id => self.parent_container_id).first
position = game.nil? ? "--" : game.challenge.position
"查看实训的第#{position}关的隐藏测试集消耗的金币:"
when 'shixunPublish'
"发布实训#{grade_shixun_name(self.parent_container_id)}获得的奖励:"
when 'Star'
"给实训评分获得的随机奖励:"
when 'Feedback'
"反馈的问题获得平台奖励:"
when 'Authentication'
"用户首次完成实名认证获得的奖励:"
when 'Professional'
"用户首次完成职业认证获得的奖励:"
end + container.score.to_s + "金币"
when 'JoinProject', "DealProject", "ReporterJoinProject", "ManagerJoinProject"
project_name = Project.find(container_id).name
if self.container_type == "JoinProject"
"申请加入项目:" + project_name + "(" + (self.extra.to_i == 3 ? "管理人员" : "开发人员") + ")"
elsif self.container_type == "DealProject"
"你提交的加入项目申请:" + project_name + "(" + (self.extra.to_i == 3 ? "管理人员" : "开发人员") + "), 审核" + (self.status == 1 ? "已通过" : "未通过")
elsif self.container_type == "ReporterJoinProject"
"加入了项目:" + project_name + "(报告人员)"
elsif self.container_type == "ManagerJoinProject"
self.user.try(:show_real_name).to_s + "将你加入项目:" + project_name + "(" + (self.extra.to_i == 3 ? "管理人员" : (self.extra.to_i == 4 ? "开发人员" : "报告人员")) + ")"
end
when "Journal"
if self.tiding_type == "Mentioned"
"@了你:" + message_content(container.notes)
elsif self.tiding_type == "Comment"
"评论了你" + (container.parent.present? ? "的回复:" : "发布的项目issue:") + message_content(container.notes)
else
"更新了Issue:#{container.issue.subject}"
end
when 'Issue'
"指派了Issue给你:" + container.subject
when 'PullRequest'
if self.tiding_type == "Apply"
"提交了PullRequest:" + container.try(:title).to_s
else
str = self.status == 2 ? "接受" : (self.status == 3 ? "重新打开" : "关闭")
"#{str}了PullRequest:" + container.try(:title)
end
when 'SendMessage'
"申请了新镜像:" + self.extra.to_s
when 'Poll'
case self.parent_container_type
when 'PollPublish'
"发布了问卷:"
when 'NearlyEnd'
"问卷的截止时间快到啦:"
when 'CommitPoll'
"提交了问卷答题:"
end + container.polls_name
when 'Exercise'
case self.parent_container_type
when 'ExercisePublish'
"发布了试卷:"
when 'NearlyEnd'
"试卷的截止时间快到啦:"
when 'CommitExercise'
"提交了试卷答题:"
when 'ExerciseScore'
"评阅了你的试卷:"
end + container.exercise_name
when 'StudentGraduationTopic'
"选择了毕设选题:" + container.graduation_topic.try(:name).to_s
when 'DealStudentTopicSelect'
topic = GraduationTopic.where(:id => parent_container_id).first
"你提交的选题申请:#{topic.try(:name).to_s},审核#{status == 2 ? '未通过' : '已通过'}"
when 'GraduationTask'
case self.parent_container_type
when 'TaskPublish'
"发布了毕设任务:" + container.name
when 'NearlyEnd'
"毕设任务的提交截止时间快到啦:" + container.name
when 'NearlyLateEnd'
"毕设任务的补交截止时间快到啦:" + container.name
when 'CrossComment'
"开启了交叉评阅:" + container.name
end
when 'GraduationWork'
(extra.nil? ? "提交了作品:" : "重新提交了作品,建议您重新评阅:") + container.graduation_task.try(:name).to_s
when 'GraduationWorkScore'
"评阅了你的作品:" + self.container.graduation_work.graduation_task.try(:name).to_s
when 'HomeworkCommon'
case self.parent_container_type
when 'AnonymousComment'
"开启了作业匿评:" + container.name
when 'AnonymousCommentFail'
"开启作业匿评失败:" + container.name + ",
原因:#{self.extra}"
when 'AnonymousAppeal'
"开启了匿评申诉:" + container.name
when 'HomeworkPublish'
"发布了作业:" + container.name
when'NearlyEnd'
"作业的提交截止时间快到啦:" + container.name
when 'AppealNearlyEnd'
"作品的匿评申诉时间快到啦:" + container.name
when 'EvaluationNearlyEnd'
"作业的匿评截止时间快到啦:" + container.name
else
logger.error "error type: 1"
end
when 'StudentWork'
(extra.nil? ? "提交了作品:" : "重新提交了作品,建议您重新评阅:") + container.homework_common.try(:name).to_s
when 'StudentWorksScore'
case extra
when "1", "2"
'评阅了你的作品:'
when "3"
'有人匿评了你的作品:'
end + self.container.student_work.homework_common.try(:name).to_s
when 'ChallengeWorkScore'
'调整了你的作品分数:' + self.container.comment
when 'StudentWorksScoresAppeal'
work = StudentWork.where(:id => self.parent_container_id).first
if work
case self.parent_container_type
when "UserAppealResult"
(self.status == 1 ? "同意了你提交的匿评申诉申请:" : "拒绝了你提交的匿评申诉") + work.homework_common.try(:name)
when "AppealResult"
(self.status == 1 ? "同意了他人对你的匿评申诉申请:" : "拒绝了他人对你的匿评申诉") + work.homework_common.try(:name)
when "StudentWork"
case self.tiding_type
when 'Apply'
"发起了匿评申诉申请:" + work.homework_common.try(:name)
when 'HomeworkCommon'
"有人对你的匿评发起了申诉:" + work.homework_common.try(:name)
end
end
end
when "ChallengeWorkScore"
" "
when 'Department'
"你选填的二级单位:#{self.container.try(:name)}(#{self.container.try(:school).name})因不符合规范,已被系统删除.请重新选择"
when 'Library'
library = Library.find_by_id(container_id)
if tiding_type == 'Apply'
"申请发布文库:#{library.try(:title)}"
elsif tiding_type == 'System'
text = status == 1 ? "审核已通过" : "审核未通过,
原因:#{extra}"
"你提交的发布文库申请:#{library.try(:title)},#{text}"
end
else
logger.error "error type: 1"
end
end
# status 0 待处理 # status 1 已处理
def process
process = []
case self.status
when 0
process << "待处理"
process << 'edu-filter-btn-red'
else
process << "已处理"
process << 'edu-filter-btn-green'
end
end
def title
case tiding_type
when "System"
"通知"
when "Apply"
"审核"
when "HomeworkCommon","Exercise","Poll"
"课堂提醒"
when "Project"
"项目提醒"
when "Comment","Mentioned","Praise","Fan"
"互动提醒"
end
end
#
def description
case container_type
when "Message"
container.updated_on
when "Journal","Issue"
container.created_on
else
self.updated_at
end
end
end