|
|
class GraduationTopicsController < ApplicationController
|
|
|
before_action :require_login, except: [:index]
|
|
|
before_action :find_course
|
|
|
before_action :teacher_allowed, only: [:new, :create, :update, :edit, :destroys, :set_public,
|
|
|
:refuse_student_topic, :accept_student_topic, :export]
|
|
|
before_action :find_graduation_topic, except: [:index, :create, :new, :set_public, :destroys, :export]
|
|
|
before_action :find_course_teachers, only: [:new, :edit]
|
|
|
before_action :user_course_identity, only: [:index, :show, :show_detail, :show_comment]
|
|
|
|
|
|
include ExportHelper
|
|
|
|
|
|
|
|
|
# 毕设选题列表
|
|
|
def index
|
|
|
@graduation_topic = @course.graduation_topics
|
|
|
@current_user = current_user
|
|
|
# 搜索
|
|
|
if params[:search]
|
|
|
@graduation_topic = @graduation_topic.search_by_name(params[:search])
|
|
|
end
|
|
|
|
|
|
if params[:status]
|
|
|
@graduation_topic = @graduation_topic.search_by_status(params[:status])
|
|
|
end
|
|
|
|
|
|
# 当前用户是否已经选过题
|
|
|
# @user_selected = StudentGraduationTopic.where(graduation_topic_id: @graduation_topic, user_id: current_user.id).count > 0
|
|
|
user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1], graduation_topic_id: @graduation_topic.pluck(:id)) #6.12 -hs
|
|
|
@user_selected = user_graduation_topics.size > 0
|
|
|
## 分页参数
|
|
|
page = params[:page] || 1
|
|
|
limit = params[:limit] || 15
|
|
|
@graduation_topic_count = @graduation_topic.count
|
|
|
@graduation_topic = @graduation_topic.order("created_at desc").page(page).per(limit)
|
|
|
end
|
|
|
|
|
|
# 课题列表
|
|
|
def show
|
|
|
@student_graduation_topics =
|
|
|
if @user_course_identity > Course::STUDENT && !@graduation_topic.is_public
|
|
|
StudentGraduationTopic.none
|
|
|
else
|
|
|
@graduation_topic.student_graduation_topics.includes(:user, :course_member => [:course_group])
|
|
|
.order("student_graduation_topics.created_at desc")
|
|
|
end
|
|
|
## 分页参数
|
|
|
@current_user = current_user
|
|
|
course_group_ids = @course.course_members.where(user_id: current_user.id, role: [1,2,3]).pluck(:course_group_id).uniq
|
|
|
#6.11 -hs
|
|
|
if course_group_ids.present?
|
|
|
if course_group_ids.include?(0)
|
|
|
course_group_ids = @course.course_groups.pluck(:id)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
@group_list = CourseGroup.where(id: course_group_ids)
|
|
|
|
|
|
page = params[:page] || 1
|
|
|
limit = params[:limit] || 50
|
|
|
@users_count = @student_graduation_topics.try(:count).to_i
|
|
|
@student_graduation_topics = @student_graduation_topics.page(page).per(limit)
|
|
|
end
|
|
|
|
|
|
# 课题详情
|
|
|
def show_detail
|
|
|
@attachments = @graduation_topic.attachments
|
|
|
end
|
|
|
|
|
|
# 课题详情回复接口
|
|
|
def show_comment
|
|
|
@page = params[:page] || 1
|
|
|
@limit = params[:limit] || 10
|
|
|
@parent = params[:parent_id]
|
|
|
@current_user = current_user
|
|
|
@messages = @graduation_topic.journals_for_messages
|
|
|
if @parent
|
|
|
@messages = @messages.where(m_parent_id: @parent).order("created_on desc")
|
|
|
else
|
|
|
@messages = @messages.parent_comment.order("created_on asc")
|
|
|
end
|
|
|
|
|
|
@messages_count = @messages.count
|
|
|
|
|
|
@messages = @messages.page(@page).per(@limit)
|
|
|
end
|
|
|
|
|
|
|
|
|
# 新建课题
|
|
|
def new
|
|
|
#6.11 新增,-hs
|
|
|
left_banner_content = @course.course_modules.search_by_module_type("graduation")
|
|
|
if left_banner_content.present?
|
|
|
@left_banner_id = left_banner_content.first.course_second_categories.first.id
|
|
|
@left_banner_name = left_banner_content.first.course_second_categories.first.name
|
|
|
else
|
|
|
normal_status(-1,"左侧导航不存在!")
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 创建课题
|
|
|
# POST: /graduation_topics
|
|
|
def create
|
|
|
@graduation_topic = GraduationTopic.new(graduation_topic_params)
|
|
|
@graduation_topic.course_id = @course.id
|
|
|
@graduation_topic.user_id = current_user.id
|
|
|
@graduation_topic.save!
|
|
|
Attachment.associate_container(params[:attachment_ids], @graduation_topic.id, @graduation_topic.class) if params[:attachment_ids]
|
|
|
|
|
|
end
|
|
|
|
|
|
# 更新课程
|
|
|
def update
|
|
|
@graduation_topic.update_attributes(graduation_topic_params)
|
|
|
Attachment.associate_container(params[:attachment_ids], @graduation_topic.id, @graduation_topic.class) if params[:attachment_ids]
|
|
|
end
|
|
|
|
|
|
def edit
|
|
|
@attachments = @graduation_topic.attachments
|
|
|
left_banner_content = @course.course_modules.search_by_module_type("graduation")
|
|
|
if left_banner_content.present?
|
|
|
@left_banner_id = left_banner_content.first.course_second_categories.first.id
|
|
|
@left_banner_name = left_banner_content.first.course_second_categories.first.name
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def destroys
|
|
|
tip_exception(-1, "graduation_topic_ids不能为空") if params[:graduation_topic_ids].nil?
|
|
|
@graduation_topics = GraduationTopic.where(:id => params[:graduation_topic_ids])
|
|
|
@graduation_topics.destroy_all
|
|
|
normal_status("删除成功")
|
|
|
end
|
|
|
|
|
|
def set_public
|
|
|
tip_exception(-1, "私有课程不能设置毕设选题为公开") if @course.is_public == 0
|
|
|
tip_exception(-1, "graduation_topic_ids不能为空") if params[:graduation_topic_ids].nil?
|
|
|
@graduation_topics = GraduationTopic.where(id: params[:graduation_topic_ids])
|
|
|
@graduation_topics.update_all(is_public: true)
|
|
|
normal_status("设置成功")
|
|
|
end
|
|
|
|
|
|
# 拒绝课题
|
|
|
def refuse_student_topic
|
|
|
begin
|
|
|
student_graduation_topic = @graduation_topic.student_graduation_topics
|
|
|
.find_by(id: params[:student_graduation_topic])
|
|
|
if student_graduation_topic.present?
|
|
|
# 更新学生选题和老师选题的状态
|
|
|
student_graduation_topic.update_attributes(:status => 2)
|
|
|
update_graduation_topic_status
|
|
|
|
|
|
# 拒绝后将该学生移动到未分班中
|
|
|
student_member = @course.course_members.where(:user_id => student_graduation_topic.user_id).first
|
|
|
student_member.update_attributes(:course_group_id => 0) if student_member.present?
|
|
|
|
|
|
student_graduation_topic.tidings.update_all(:status => 1)
|
|
|
Tiding.create(:user_id => student_graduation_topic.user_id, :trigger_user_id => current_user.id,
|
|
|
:container_id => student_graduation_topic.id, :container_type => "DealStudentTopicSelect",
|
|
|
:parent_container_id => @graduation_topic.id, :parent_container_type => "GraduationTopic",
|
|
|
:belong_container_id => @graduation_topic.course_id, :belong_container_type => "Course",
|
|
|
:viewed => 0, :tiding_type => "GraduationTopic", :status => 2)
|
|
|
end
|
|
|
normal_status("拒绝成功")
|
|
|
rescue Exception => e
|
|
|
uid_logger(e.message)
|
|
|
tip_exception(-1, "操作失败")
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 接受课题
|
|
|
def accept_student_topic
|
|
|
student_graduation_topic = @graduation_topic.student_graduation_topics
|
|
|
.where(:id => params[:student_graduation_topic_id]).first
|
|
|
if student_graduation_topic.present?
|
|
|
# 更新学生选题和老师选题的状态
|
|
|
student_graduation_topic.update_attributes(:status => 1)
|
|
|
update_graduation_topic_status
|
|
|
|
|
|
# 将学生加入到老师的第一个具有管理权限的分班(没有则创建一个“XXX老师组”分班并弹框提醒)
|
|
|
teacher_group = @course.teacher_course_groups.where(:user_id => @graduation_topic.tea_id, :id => params[:group_id]).first
|
|
|
unless teacher_group.present?
|
|
|
member = @course.course_members.where(:user_id => @graduation_topic.tea_id).first
|
|
|
tip_exception("分班名称不能为空") if params[:course_group_name].blank?
|
|
|
course_group = CourseGroup.create(:name => params[:course_group_name], :course_id => @course.id)
|
|
|
teacher_group = TeacherCourseGroup.create(:course_id => @course.id, :member_id => member.try(:id),
|
|
|
:user_id => @graduation_topic.tea_id,
|
|
|
:course_group_id => course_group.try(:id))
|
|
|
end
|
|
|
student_member = @course.course_members.where(:user_id => student_graduation_topic.user_id).first
|
|
|
student_member.update_attributes(:course_group_id => teacher_group.course_group_id) if student_member.present?
|
|
|
|
|
|
student_graduation_topic.tidings.update_all(:status => 1)
|
|
|
Tiding.create(:user_id => student_graduation_topic.user_id, :trigger_user_id => current_user.id,
|
|
|
:container_id => student_graduation_topic.id, :container_type => "DealStudentTopicSelect",
|
|
|
:parent_container_id => @graduation_topic.id, :parent_container_type => "GraduationTopic",
|
|
|
:belong_container_id => @graduation_topic.course_id, :belong_container_type => "Course",
|
|
|
:viewed => 0, :tiding_type => "GraduationTopic", :status => 1)
|
|
|
end
|
|
|
normal_status("同意成功")
|
|
|
end
|
|
|
|
|
|
# 学生选题
|
|
|
def student_select_topic
|
|
|
user_unaccept_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1])
|
|
|
if user_unaccept_topics.size == 0
|
|
|
member_id = @course.course_members.find_by_user_id(current_user.id)
|
|
|
StudentGraduationTopic.create(course_id: @course.id, user_id: current_user.id, member_id: member_id,
|
|
|
graduation_topic_id: @graduation_topic.id)
|
|
|
@graduation_topic.update_attribute(:status, 1)
|
|
|
normal_status("选题成功")
|
|
|
else
|
|
|
normal_status("已经选过题,无法重复选题")
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 学生取消选题
|
|
|
def student_cancel_topic
|
|
|
user_unaccept_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1])
|
|
|
user_unaccept_topics.destroy_all
|
|
|
update_graduation_topic_status
|
|
|
normal_status(0,"取消成功")
|
|
|
end
|
|
|
|
|
|
# 加入题库
|
|
|
def add_to_bank
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
topics = @course.graduation_topics.where(id: params[:topic_ids])
|
|
|
|
|
|
topics.each do |topic|
|
|
|
topic_bank = current_user.gtopic_banks.find_by(graduation_topic_id: topic.id)
|
|
|
|
|
|
# 已加入的更新,未加入的新建
|
|
|
if topic_bank.present?
|
|
|
topic_bank.update_attributes(name: topic, description: topic.description,
|
|
|
topic_source: topic.topic_source,
|
|
|
topic_property_first: topic.topic_property_first,
|
|
|
topic_property_second: topic.topic_property_second,
|
|
|
source_unit: topic.source_unit,
|
|
|
topic_repeat: topic.topic_repeat,
|
|
|
province: topic.province,
|
|
|
city: topic.city,
|
|
|
course_list_id: @course.course_list_id)
|
|
|
topic_bank.attachments.destroy_all
|
|
|
else
|
|
|
topic_bank = GtopicBank.new(name: topic, description: topic.description,
|
|
|
topic_source: topic.topic_source,
|
|
|
topic_property_first: topic.topic_property_first,
|
|
|
topic_property_second: topic.topic_property_second,
|
|
|
source_unit: topic.source_unit,
|
|
|
topic_repeat: topic.topic_repeat,
|
|
|
province: topic.province,
|
|
|
city: topic.city,
|
|
|
course_list_id: @course.course_list_id,
|
|
|
user_id: current_user.id,
|
|
|
graduation_topic_id: topic.id)
|
|
|
|
|
|
topic_bank.save!
|
|
|
end
|
|
|
topic.attachments.each do |attachment|
|
|
|
att = attachment.copy
|
|
|
att.author_id = topic_bank.user_id
|
|
|
att.copy_from = attachment.id
|
|
|
topic_bank.attachments << att
|
|
|
end
|
|
|
end
|
|
|
|
|
|
normal_status(0,"加入题库成功")
|
|
|
rescue Exception => e
|
|
|
uid_logger(e.message)
|
|
|
tip_exception(e.message)
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 导出功能
|
|
|
def export
|
|
|
course = @course
|
|
|
students = course.students.joins(user: :user_extension).order("user_extensions.student_id")
|
|
|
graduation_topic_to_xlsx(students,course)
|
|
|
exercise_export_name = current_user.real_name + "_" + course.name + "_毕设选题" + "_" + Time.now.strftime('%Y%m%d_%H%M%S')
|
|
|
render xlsx: "#{exercise_export_name.strip.first(30)}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells}
|
|
|
end
|
|
|
|
|
|
private
|
|
|
def find_graduation_topic
|
|
|
begin
|
|
|
@graduation_topic = GraduationTopic.find params[:id]
|
|
|
rescue Exception => e
|
|
|
uid_logger(e.message)
|
|
|
missing_template
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def find_course_teachers
|
|
|
@teachers = @course.teachers.joins(:user).order("users.id = #{current_user.id} desc,
|
|
|
CONVERT(users.lastname USING gbk) COLLATE gbk_chinese_ci asc")
|
|
|
end
|
|
|
|
|
|
# 创建允许参数
|
|
|
def graduation_topic_params
|
|
|
params.require(:graduation_topic).permit(:tea_id, :name, :topic_type, :topic_source, :topic_property_first,
|
|
|
:description, :topic_property_second, :status, :source_unit, :topic_repeat,
|
|
|
:province, :city, :is_public)
|
|
|
end
|
|
|
|
|
|
# 更新选题的状态
|
|
|
def update_graduation_topic_status
|
|
|
status = @graduation_topic.student_graduation_topic_status
|
|
|
@graduation_topic.update_attribute(:status, status)
|
|
|
end
|
|
|
end
|