Merge branch 'dev_aliyun' of http://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

dev_forum
cxt 6 years ago
commit 1df37b0ca6

@ -23,6 +23,13 @@ class ApplicationController < ActionController::Base
EduSetting.get(name) EduSetting.get(name)
end end
# 实训的访问权限
def shixun_access_allowed
if !current_user.shixun_permission(@shixun)
tip_exception(403, "..")
end
end
def user_course_identity def user_course_identity
@user_course_identity = current_user.course_identity(@course) @user_course_identity = current_user.course_identity(@course)
if @user_course_identity > Course::STUDENT && @course.is_public == 0 if @user_course_identity > Course::STUDENT && @course.is_public == 0

@ -5,8 +5,10 @@ class ChallengesController < ApplicationController
before_action :find_challenge, only: [:edit, :show, :update, :create_choose_question, :index_down, :index_up, before_action :find_challenge, only: [:edit, :show, :update, :create_choose_question, :index_down, :index_up,
:edit_choose_question, :show_choose_question, :destroy_challenge_choose, :edit_choose_question, :show_choose_question, :destroy_challenge_choose,
:update_choose_question, :destroy, :crud_answer, :answer] :update_choose_question, :destroy, :crud_answer, :answer]
# 权限控制 # 关卡更新和操作的权限控制
before_action :allowed, except: [:index] before_action :update_allowed, except: [:index]
# 关卡访问的权限控制
before_action :shixun_access_allowed
include ShixunsHelper include ShixunsHelper
include ChallengesHelper include ChallengesHelper
@ -279,6 +281,9 @@ class ChallengesController < ApplicationController
def find_shixun def find_shixun
@shixun = Shixun.find_by_identifier(params[:shixun_identifier]) @shixun = Shixun.find_by_identifier(params[:shixun_identifier])
if !current_user.shixun_permission(@shixun)
tip_exception(403, "..")
end
end end
# 通用接口 # 通用接口
@ -298,7 +303,7 @@ class ChallengesController < ApplicationController
:standard_answer, :score, :difficult) :standard_answer, :score, :difficult)
end end
def allowed def update_allowed
unless current_user.manager_of_shixun?(@shixun) unless current_user.manager_of_shixun?(@shixun)
raise Educoder::TipException.new(403, "..") raise Educoder::TipException.new(403, "..")
end end

@ -2,8 +2,9 @@ class ShixunsController < ApplicationController
before_action :require_login, except: [:download_file, :index, :menus] before_action :require_login, except: [:download_file, :index, :menus]
before_action :check_auth, except: [:download_file, :index] before_action :check_auth, except: [:download_file, :index]
before_action :find_shixun, except: [:index, :new, :create, :menus, :get_recommend_shixuns, :propaedeutics, before_action :find_shixun, :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns,
:departments, :apply_shixun_mirror, :get_mirror_script, :download_file] :propaedeutics, :departments, :apply_shixun_mirror,
:get_mirror_script, :download_file]
before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy] before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy]
before_action :allowed, only: [:update, :close, :update_propaedeutics, :settings, :publish, before_action :allowed, only: [:update, :close, :update_propaedeutics, :settings, :publish,
@ -726,10 +727,6 @@ private
normal_status(404, "...") normal_status(404, "...")
return return
end end
if !current_user.shixun_permission(@shixun)
tip_exception(403, "..")
end
end end
def find_repo_name def find_repo_name

@ -51,8 +51,8 @@ class Challenge < ApplicationRecord
end end
# 开启挑战 # 开启挑战
def open_game user_id, challenge_id, shixun def open_game user_id, shixun
game = games.select{|game| game.challenge_id = challenge_id && game.user_id == user_id}.first game = self.games.select([:status, :identifier]).where(user_id: user_id).first
if game.present? if game.present?
shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : "" shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : ""
else else
@ -97,12 +97,12 @@ class Challenge < ApplicationRecord
# 关卡用户通关数 # 关卡用户通关数
def user_passed_count def user_passed_count
games.select{|game| game.status == 2}.size games.where(status: 2).count
end end
# 关卡用户正在挑战的人数 # 关卡用户正在挑战的人数
def playing_count def playing_count
games.select{|game| game.status == 0 || game.status == 1}.size games.where(status: [0, 1]).count
end end
def last_challenge def last_challenge

@ -17,7 +17,7 @@ if @challenges.present?
json.passed_count challenge.user_passed_count json.passed_count challenge.user_passed_count
json.playing_count challenge.playing_count json.playing_count challenge.playing_count
json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier)
json.open_game challenge.open_game(@user.id, challenge.id, @shixun) json.open_game challenge.open_game(@user.id, @shixun)
if @editable if @editable
json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier)
json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier)

@ -54,7 +54,7 @@ json.exercise_questions do
this_ques_status = all_question_status.detect {|f| f[:q_id] == q.id} this_ques_status = all_question_status.detect {|f| f[:q_id] == q.id}
json.answer_status this_ques_status[:stand_status] json.answer_status this_ques_status[:stand_status]
end end
json.user_score user_ques_answers[:user_score].to_s json.user_score user_ques_answers[:user_score].present? ? user_ques_answers[:user_score].to_s : nil
json.partial! "exercise_questions/exercise_questions", json.partial! "exercise_questions/exercise_questions",
question: q, question: q,
ex_answerer: ex_answerer, ex_answerer: ex_answerer,

Loading…
Cancel
Save