#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.present? ? ("评论了你" + (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 when 'ProjectPackage' package = ProjectPackage.find_by_id(container_id) case tiding_type when 'Apply' then "申请发布众包需求:#{package.try(:title)}" when 'System' then text = status == 1 ? "审核已通过" : "审核未通过,
原因:#{extra}" "你提交的众包需求申请:#{package.try(:title)},#{text}" when 'Created' then "你创建了众包需求:#{package.try(:title)}" when 'Destroyed' then "你删除了众包需求:#{extra}" when 'Bidding' then "应征了你发布的众包任务:#{package.try(:title)}" when 'BiddingEnd' then "你发布的众包任务:#{package.try(:title)},已进入选标阶段,请尽快进行选择确认!" when 'BiddingWon' then "恭喜,你应征的众包任务:#{package.try(:title)},在评选环节中标了" when 'BiddingLost' then "很遗憾,你应征投稿的众包任务:#{package.try(:title)},未中标" 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