|
- #encoding: utf-8
- #老师布置的作业表
- #homework_type: 0:普通作业;1:匿评作业;2:编程作业
- class HomeworkCommon < ActiveRecord::Base
- # attr_accessible :name, :user_id, :description, :publish_time, :end_time, :homework_type, :late_penalty, :course_id,:simi_time
- require 'net/http'
- require 'json'
- include Redmine::SafeAttributes
- include ApplicationHelper
-
- belongs_to :course
- belongs_to :user
- has_one :homework_detail_manual, :dependent => :destroy
- has_one :homework_detail_programing, :dependent => :destroy
- has_one :homework_detail_group, :dependent => :destroy
- has_many :student_work_projects, :dependent => :destroy
- has_many :homework_tests, :dependent => :destroy
- has_many :student_works, :dependent => :destroy, :conditions => "is_test=0 and is_delete != 1"
- has_many :student_works_evaluation_distributions, :through => :student_works #一个作业的分配的匿评列表
- has_many :journals_for_messages, :as => :jour, :dependent => :destroy
- has_many :apply_homeworks, :dependent => :destroy
- has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
- has_one :praise_tread_cache, as: :object, dependent: :destroy
- has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy #用户活动
- # 课程动态
- has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy
- # 课程消息
- has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy
- acts_as_attachable
- acts_as_event :title => Proc.new {|o| "#{l(:label_course_homework)} ##{o.id}: #{o.name}" },
- :description => :description,
- :author => :author,
- :url => Proc.new {|o| {:controller => 'student_work', :action => 'index', :homework => o.id}}
- after_create :act_as_activity, :send_mail,:act_as_course_message,:update_cache_add
- after_update :update_activity, :update_cache
- after_save :act_as_course_activity
- after_destroy :delete_kindeditor_assets
- before_destroy :update_cache_delete
-
- #作业类型
- def homework_type_ch
- type = self.homework_type
- case type
- when 1
- type = "普通"
- when 2
- type = "编程"
- when 3
- type = "分组"
- end
- type
- end
-
- def act_as_activity
- self.acts << Activity.new(:user_id => self.user_id)
- end
-
- #课程动态公共表记录
- def act_as_course_activity
- if self.course
- if self.homework_detail_manual.comment_status == 0
- self.course_acts.destroy_all
- else
- if self.course_acts.size == 0
- self.course_acts << CourseActivity.new(:user_id => self.user_id,:course_id => self.course_id)
- end
- end
- end
- end
-
- #课程作业消息记录
- def act_as_course_message
- if self.course
- if self.homework_detail_manual.comment_status == 0
- self.course_messages.destroy_all
- else
- # self.course.members.each do |m|
- # # if m.user_id != self.user_id
- # #self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false)
- # rolesids = []
- # m.roles.each do |role|
- # rolesids << role.id
- # end
- # if rolesids.include?(10)
- # count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
- # if count == 0
- # ws = WechatService.new
- # name = self.course.syllabus.nil? ? self.course.name : self.course.syllabus.title+" • "+self.course.name
- # ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。")
- # end
- # end
- # # end
- # end
- self.delay.send_homework_wechat_message_delay
- end
- end
- end
-
- #作业微信通知delay
- def send_homework_wechat_message_delay
- self.course.members.each do |m|
- # if m.user_id != self.user_id
- #self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false)
- rolesids = []
- m.roles.each do |role|
- rolesids << role.id
- end
- if rolesids.include?(10)
- count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
- if count == 0
- ws = WechatService.new
- name = self.course.syllabus.nil? ? self.course.name : self.course.syllabus.title+" • "+self.course.name
- ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。")
- end
- end
- # end
- end
- end
-
-
- #动态的更新
- def update_activity
- update_course_activity(self.class, self.id)
- update_user_activity(self.class, self.id)
- update_org_activity(self.class, self.id)
- end
- #删除对应的图片
- def delete_kindeditor_assets
- delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::HOMEWORKCOMMON
- end
-
- def send_mail
- if self.homework_detail_manual.comment_status != 0
- Mailer.run.homework_added(self)
- end
- end
-
- def is_program_homework?
- self.homework_type == 2 && self.homework_detail_programing
- end
-
- def is_group_homework?
- self.homework_type == 3 && self.homework_detail_group
- end
-
- ###添加回复
- def self.add_homework_jour(user, notes, id, root_id, options = {})
- homework = HomeworkCommon.find(id)
- if options.count == 0
- jfm = homework.journals_for_messages.build(:user_id => user.id, :notes => notes, :reply_id => 0, :root_id => root_id)
- else
- jfm = homework.journals_for_messages.build(options)
- end
- jfm.save
- jfm
- end
-
- #修改作业后发送微信模板消息
- # def wechat_message
- # self.course.members.each do |member|
- # count = ShieldWechatMessage.where("container_type='User' and container_id=#{member.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count
- # if count == 0
- # ws = WechatService.new
- # ws.homework_template(member.user_id, "homework", self.id, "#{l(:label_update_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
- # end
- # end
- # end
-
- def set_jour_viewed
- self.journals_for_messages.each do |j|
- User.current.at_messages.unviewed('JournalsForMessage', j.id).each {|x| x.viewed!}
- end
- end
-
- #更新缓存
- def update_cache_add
- CourseCache.update_course_homeworks_cache(self.course.id,self.id,0,{})
- end
-
- def update_cache_delete
- CourseCache.update_course_homeworks_cache(self.course.id,self.id,1,{})
- ReplyCache.delete_homework_replys_cache(self.id)
- HomeworkCommonCache.delete_homework_common_cache(self.id)
- end
-
- def update_cache
- HomeworkCommonCache.update_homework_common_cache(self.id,self)
- end
- delegate :language_name, :language, :to => :homework_detail_programing
-
- end
|