gitlink-forgeplus/app/models/glcc_medium_term_examine_ma...

103 lines
3.1 KiB
Ruby

# == Schema Information
#
# Table name: glcc_medium_term_examine_material
#
# id :integer not null, primary key
# student_reg_id :integer not null
# task_id :integer not null
# defence_video_url :string(1000) not null
# code_or_pr_url :string(1000)
# PPT_attachment_id :integer not null
# term :integer
# created_on :datetime
# updated_on :datetime
# is_delete :boolean default("0"), not null
# round :integer default("1"), not null
#
class GlccMediumTermExamineMaterial < ActiveRecord::Base
self.table_name = "glcc_medium_term_examine_material"
belongs_to :glcc_student, :class_name => :GlccRegistrationStudent, :foreign_key => "student_reg_id"
def check_pr_url
state = []
# code_or_pr_url = "https://www.gitlink.org.cn/Gitlink/forgeplus/pulls/337"
url_array = code_or_pr_url.split("/")
gitlink_index = url_array.index("www.gitlink.org.cn") || url_array.index("gitlink.org.cn")
pull_index = url_array.index("pulls")
#发送没有在gitlink上提交PR的邮件
unless gitlink_index.present?
state << 1
end
# 输入的地址有问题邮件内容
unless pull_index == 5
state << 2
end
project = Project.find_by(identifier: url_array[4])
pr = PullRequest.where(project:project, gitea_number:url_array[6])
unless pr.present?
state << 3
end
if white_list && term == 1 #特殊处理 白名单的中期考核不处理 中期考核后去掉
state = []
end
state
end
def white_list
# 全局设置白名单 key
key = "glcc_white_task_#{self.created_on.year}"
white_task = EduSetting.find_by_name(key)
if white_task
task_ids = white_task.value.split(",")
task_ids.map(&:to_i).include?(self.task_id)
else
false
end
end
def send_mail
gcs = glcc_student
mail = gcs.mail
return if mail.nil? || code_or_pr_url.nil?
state = check_pr_url
return unless state.present?
title = "2023年GitLink确实开源GLCC开源夏令营#{term == 1 ? "中期考核" : "结项考核"}提醒"
content = gennerate_content(state)
UserMailer.glcc_pr_check_email(mail,title, gcs.student_name, content).deliver_now
end
def state_to_html
gcs = glcc_student
mail = gcs.mail
return "数据异常PR连接为空" if mail.nil? || code_or_pr_url.nil?
state = check_pr_url
gennerate_content(state)
end
def gennerate_content(state)
content = ""
state.map{|e|
content = content + number_to_content(e)
}
content
end
def number_to_content(num)
case num
when 1
"<p> PR链接为非GitLink平台链接 </p>"
when 2
"<p> PR链接为GitLink平台非PR链接 </p>"
when 3
"<p> PR链接中的PR不存在 </p>"
end
end
end