\n' +
@@ -203,6 +204,15 @@ $(document).on('turbolinks:load', function(){
$(this).parents(".requireForm_item").remove();
});
+ $('.nav-setting-form').on('click', '.module_hidden', function(){
+ var checkEle = $(this);
+ if (checkEle.is(':checked')) {
+ checkEle.prev().val(0);
+ } else {
+ checkEle.prev().val(1);
+ }
+ });
+
$('.competition-staff-settings').on('click', '.mutiple-limited-radio', function(){
var radio = $(this);
if (radio.is(':checked')) {
diff --git a/app/assets/javascripts/admins/users/index.js b/app/assets/javascripts/admins/users/index.js
index 8b2bb2f40..0ef024bfd 100644
--- a/app/assets/javascripts/admins/users/index.js
+++ b/app/assets/javascripts/admins/users/index.js
@@ -80,6 +80,21 @@ $(document).on('turbolinks:load', function(){
})
});
+ // reset user login times
+ $('.users-list-container').on('click', '.reset-login-times-action', function(){
+ var $action = $(this);
+
+ var userId = $action.data('id');
+ $.ajax({
+ url: '/admins/users/' + userId + '/reset_login_times',
+ method: 'POST',
+ dataType: 'json',
+ success: function() {
+ showSuccessNotify();
+ }
+ });
+ });
+
// ***************** reward grade modal *****************
var $rewardGradeModal = $('.admin-users-reward-grade-modal');
var $form = $rewardGradeModal.find('form.admin-users-reward-grade-form');
diff --git a/app/controllers/admins/users_controller.rb b/app/controllers/admins/users_controller.rb
index 6aaec04e1..9630394b4 100644
--- a/app/controllers/admins/users_controller.rb
+++ b/app/controllers/admins/users_controller.rb
@@ -52,6 +52,12 @@ class Admins::UsersController < Admins::BaseController
render_ok(grade: user.grade)
end
+ def reset_login_times
+ User.find(params[:id]).reset_login_times!
+
+ render_ok
+ end
+
private
def update_params
diff --git a/app/controllers/competitions/competition_teams_controller.rb b/app/controllers/competitions/competition_teams_controller.rb
index 6d28d6a16..c375ba218 100644
--- a/app/controllers/competitions/competition_teams_controller.rb
+++ b/app/controllers/competitions/competition_teams_controller.rb
@@ -78,7 +78,7 @@ class Competitions::CompetitionTeamsController < Competitions::BaseController
end
render_ok
- rescue Competitions::CreatePersonalTeamService::Error => ex
+ rescue ApplicationService::Error => ex
render_error(ex.message)
end
diff --git a/app/controllers/competitions/competitions_controller.rb b/app/controllers/competitions/competitions_controller.rb
index 88f3a9a83..27556175b 100644
--- a/app/controllers/competitions/competitions_controller.rb
+++ b/app/controllers/competitions/competitions_controller.rb
@@ -31,7 +31,7 @@ class Competitions::CompetitionsController < Competitions::BaseController
def show
@competition = current_competition
- current_competition.increment(:visits)
+ current_competition.increment!(:visits)
end
def update
@@ -44,6 +44,8 @@ class Competitions::CompetitionsController < Competitions::BaseController
@competition = current_competition
@competition_modules = @competition.unhidden_competition_modules
@user = current_user
+
+ current_competition.increment!(:visits)
end
def informs
@@ -176,7 +178,7 @@ class Competitions::CompetitionsController < Competitions::BaseController
if personal
row_cells_column << record_user.real_name
row_cells_column << record_user.school_name
- row_cells_column << record_user.student_id
+ row_cells_column << record_user.student_id.present? ? (record_user.student_id.to_s + "\t") : "--"
else
row_cells_column << record.name
row_cells_column << record.teachers_name
diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb
index da2b9eb2d..5d27de7b8 100644
--- a/app/controllers/homework_commons_controller.rb
+++ b/app/controllers/homework_commons_controller.rb
@@ -440,6 +440,7 @@ class HomeworkCommonsController < ApplicationController
@user = current_user
@work = @homework.user_work(current_user.id) if @user_course_identity == Course::STUDENT
@course_groups = @course.course_groups.where(id: @course.charge_group_ids(@user))
+ @shixun = @homework.shixuns.take if @homework.homework_type == "practice"
end
def update_settings
diff --git a/app/controllers/users/authentication_applies_controller.rb b/app/controllers/users/authentication_applies_controller.rb
index d406b33d3..2fec6e0cd 100644
--- a/app/controllers/users/authentication_applies_controller.rb
+++ b/app/controllers/users/authentication_applies_controller.rb
@@ -11,6 +11,6 @@ class Users::AuthenticationAppliesController < Users::BaseAccountController
private
def create_params
- params.permit(:name, :id_number, :upload_image)
+ params.permit(:name, :gender, :id_number, :upload_image)
end
end
\ No newline at end of file
diff --git a/app/helpers/competitions_helper.rb b/app/helpers/competitions_helper.rb
index 6b75e6aac..b980aba3d 100644
--- a/app/helpers/competitions_helper.rb
+++ b/app/helpers/competitions_helper.rb
@@ -38,8 +38,10 @@ module CompetitionsHelper
def chart_stages competition
stages = []
statistic_stages = competition.competition_stages.where("score_rate > 0")
- if competition.max_stage_end_time && competition.max_stage_end_time < Time.now && statistic_stages.size > 1
- stages << {id: nil, name: "总排行榜", rate: 1.0, start_time: competition.start_time, end_time: competition.end_time}
+
+ end_time = competition.max_stage_end_time || competition.end_time
+ if end_time && end_time < Time.now
+ stages << {id: nil, name: statistic_stages.size > 1 ? "总排行榜" : "排行榜", rate: 1.0, start_time: competition.start_time, end_time: competition.end_time}
end
statistic_stages.each do |stage|
diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb
index 1274e07c7..36120266b 100644
--- a/app/helpers/export_helper.rb
+++ b/app/helpers/export_helper.rb
@@ -44,7 +44,7 @@ module ExportHelper
w_2 = w_user&.login.present? ? w_user&.login : "--"
w_3 = w_user&.real_name.present? ? w_user&.real_name : "--"
w_3_1 = w_user&.mail.present? ? w_user.mail : "--"
- w_4 = w_user.student_id.present? ? w_user.student_id : "--"
+ w_4 = w_user.student_id.present? ? (w_user.student_id.to_s + "\t") : "--"
else
w_2 = "--"
w_3 = "--"
@@ -132,7 +132,7 @@ module ExportHelper
w_2 = w_user&.login.present? ? w_user&.login : "--"
w_3 = w_user&.real_name.present? ? w_user&.real_name : "--"
w_3_1 = w_user&.mail.present? ? w_user.mail : "--"
- w_4 = w_user.student_id.present? ? w_user.student_id : "--"
+ w_4 = w_user.student_id.present? ? (w_user.student_id.to_s + "\t") : "--"
course_name = course.students.find_by(user_id: w.user_id).try(:course_group_name)
w_5 = course_name.present? ? course_name : "--"
#0: 未提交, 1 按时提交, 2 延迟提交
@@ -217,7 +217,7 @@ module ExportHelper
w_2 = w_user&.login.present? ? w_user&.login : "--"
w_3 = w_user&.real_name.present? ? w_user&.real_name : "--"
w_3_1 = w_user&.mail.present? ? w_user.mail : "--"
- w_4 = w_user.student_id.present? ? w_user.student_id : "--"
+ w_4 = w_user.student_id.present? ? (w_user.student_id.to_s + "\t") : "--"
w_5 = work.class_grouping_name
if task_type_boolean #是否分组
w_6 = work.grouping_name
@@ -311,7 +311,7 @@ module ExportHelper
end
user_start_time = e_user.start_at.present? ? e_user.start_at.strftime('%Y-%m-%d %H:%M') : "--"
user_end_time = e_user.end_at.present? ? e_user.end_at.strftime('%Y-%m-%d %H:%M') : "--"
- user_student_id = user_info.student_id.present? ? user_info.student_id : "--"
+ user_student_id = user_info.student_id.present? ? (user_info.student_id.to_s + "\t") : "--"
user_login = user_info&.login.present? ? user_info.login : "--"
user_real_name = user_info.real_name.present? ? user_info.real_name : "--"
user_mail = user_info&.mail.present? ? user_info.mail : "--"
@@ -373,7 +373,7 @@ module ExportHelper
w_2 = user&.login.present? ? user&.login : "--"
w_3 = user&.real_name.present? ? user&.real_name : "--"
w_3_1 = user&.mail.present? ? user.mail : "--"
- w_4 = user.student_id.present? ? user.student_id : "--"
+ w_4 = user.student_id.present? ? (user.student_id.to_s + "\t") : "--"
w_5 = student&.course_group_name.present? ? student.course_group_name : "--"
w_6 = topic.present? ? topic.name : "--"
w_7 = topic.present? ? topic.teacher.full_name : "--"
diff --git a/app/libs/limit_forbid_control/base.rb b/app/libs/limit_forbid_control/base.rb
index f112c1df7..fbde5e6ea 100644
--- a/app/libs/limit_forbid_control/base.rb
+++ b/app/libs/limit_forbid_control/base.rb
@@ -32,6 +32,7 @@ class LimitForbidControl::Base
# 锁定
if value >= allow_times.to_i
+ Rails.logger.info("[LimitForbidControl] Lock #{cache_key}")
Rails.cache.write(forbid_cache_key, true, expires_in: forbid_expires)
Rails.cache.delete(cache_key)
else
@@ -40,6 +41,7 @@ class LimitForbidControl::Base
end
def clear
+ Rails.logger.info("[LimitForbidControl] Clear #{cache_key}")
Rails.cache.delete(forbid_cache_key)
Rails.cache.delete(cache_key)
end
diff --git a/app/models/challenge.rb b/app/models/challenge.rb
index da88b0fca..73079d82b 100644
--- a/app/models/challenge.rb
+++ b/app/models/challenge.rb
@@ -46,7 +46,16 @@ class Challenge < ApplicationRecord
#self.challenge_chooses.pluck(:score).sum
end
- # 关卡总分
+ def challenge_difficulty
+ case difficulty
+ when 1 then "简单"
+ when 2 then "中等"
+ when 3 then "困难"
+ else ''
+ end
+ end
+
+ # 关卡总分
def all_score
self.score
# if self.st == 1
diff --git a/app/models/competition.rb b/app/models/competition.rb
index eb1d2a5fa..2789ac628 100644
--- a/app/models/competition.rb
+++ b/app/models/competition.rb
@@ -47,6 +47,10 @@ class Competition < ApplicationRecord
sponsor_schools.map{|sponsor| sponsor.school.name}
end
+ def region_schools_name
+ region_schools.map{|region| region.school.name}
+ end
+
def competition_status
if !status
com_status = "nearly_published"
diff --git a/app/models/user.rb b/app/models/user.rb
index 6b5fc62ee..806abc98f 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -660,6 +660,10 @@ class User < ApplicationRecord
end
end
+ def reset_login_times!
+ LimitForbidControl::UserLogin.new(self).clear
+ end
+
protected
def validate_password_length
# 管理员的初始密码是5位
diff --git a/app/queries/admins/user_statistic_query.rb b/app/queries/admins/user_statistic_query.rb
index 9f8fed952..644c7ca38 100644
--- a/app/queries/admins/user_statistic_query.rb
+++ b/app/queries/admins/user_statistic_query.rb
@@ -46,12 +46,12 @@ class Admins::UserStatisticQuery < ApplicationQuery
finish_challenge = finish_challenge.where(updated_at: time_range)
end
- study_myshixun_map = study_myshixun.group(:user_id).count
- finish_myshixun_map = finish_myshixun.group(:user_id).count
- study_challenge_map = study_challenge.group(:user_id).count
- finish_challenge_map = finish_challenge.group(:user_id).count
- evaluate_count_map = study_challenge.group(:user_id).sum(:evaluate_count)
- cost_time_map = study_challenge.group(:user_id).sum(:cost_time)
+ study_myshixun_map = study_myshixun.reorder(nil).group(:user_id).count
+ finish_myshixun_map = finish_myshixun.reorder(nil).group(:user_id).count
+ study_challenge_map = study_challenge.reorder(nil).group(:user_id).count
+ finish_challenge_map = finish_challenge.reorder(nil).group(:user_id).count
+ evaluate_count_map = study_challenge.reorder(nil).group(:user_id).sum(:evaluate_count)
+ cost_time_map = study_challenge.reorder(nil).group(:user_id).sum(:cost_time)
users.each do |user|
user._extra_data = {
diff --git a/app/services/admins/competition_nav_setting_service.rb b/app/services/admins/competition_nav_setting_service.rb
index 8e45980c5..9c9201c02 100644
--- a/app/services/admins/competition_nav_setting_service.rb
+++ b/app/services/admins/competition_nav_setting_service.rb
@@ -21,7 +21,7 @@ class Admins::CompetitionNavSettingService < ApplicationService
else
com_module = CompetitionModule.create!(competition_id: competition.id, module_type: 'md')
end
- com_module.update_attributes!(hidden: nav["hidden"] ? 0 : 1, position: nav["position"] ? nav["position"] : com_module.position, name: nav["name"], url: nav["url"])
+ com_module.update_attributes!(hidden: nav["hidden"] && nav["hidden"].to_i == 0 ? 0 : 1, position: nav["position"] ? nav["position"] : params[:navbar].length, name: nav["name"], url: nav["url"])
end
delete_module_ids = old_module_ids - module_ids
diff --git a/app/services/competitions/create_personal_team_service.rb b/app/services/competitions/create_personal_team_service.rb
index 998a13880..b2976b37a 100644
--- a/app/services/competitions/create_personal_team_service.rb
+++ b/app/services/competitions/create_personal_team_service.rb
@@ -1,5 +1,4 @@
class Competitions::CreatePersonalTeamService < ApplicationService
- Error = Class.new(StandardError)
attr_reader :competition, :user
diff --git a/app/services/competitions/save_team_service.rb b/app/services/competitions/save_team_service.rb
index 233648fbb..9e882c9d8 100644
--- a/app/services/competitions/save_team_service.rb
+++ b/app/services/competitions/save_team_service.rb
@@ -11,6 +11,8 @@ class Competitions::SaveTeamService < ApplicationService
end
def call
+ raise Error, '本竞赛只面向部分学校/单位开放,你暂时没有参赛资格' unless competition.open?(creator)
+
Competitions::SaveTeamForm.new(form_params).validate!
new_record = team.new_record?
diff --git a/app/services/users/apply_authentication_service.rb b/app/services/users/apply_authentication_service.rb
index d6da2d1fb..a96e13809 100644
--- a/app/services/users/apply_authentication_service.rb
+++ b/app/services/users/apply_authentication_service.rb
@@ -22,6 +22,8 @@ class Users::ApplyAuthenticationService < ApplicationService
user.authentication = false
user.save!
+ user.user_extension.update!(gender: params[:gender].to_i) if params[:gender].present?
+
user.apply_user_authentication.create!(auth_type: 1, status: 0)
move_image_file! unless params[:upload_image].to_s == 'false'
diff --git a/app/services/users/course_service.rb b/app/services/users/course_service.rb
index db9be69bc..6cc9669cb 100644
--- a/app/services/users/course_service.rb
+++ b/app/services/users/course_service.rb
@@ -1,7 +1,7 @@
class Users::CourseService
include CustomSortable
- sort_columns :updated_at, default_by: :updated_at, default_direction: :desc
+ sort_columns :created_at, :updated_at, default_by: :updated_at, default_direction: :desc
attr_reader :user, :params
@@ -15,7 +15,7 @@ class Users::CourseService
courses = status_filter(courses)
- custom_sort(courses, :updated_at, params[:sort_direction])
+ custom_sort(courses, params[:sort_by], params[:sort_direction])
end
private
diff --git a/app/services/users/project_service.rb b/app/services/users/project_service.rb
index 7296c0a58..f08b96009 100644
--- a/app/services/users/project_service.rb
+++ b/app/services/users/project_service.rb
@@ -1,7 +1,7 @@
class Users::ProjectService
include CustomSortable
- sort_columns :updated_on, default_by: :updated_on, default_direction: :desc
+ sort_columns :created_on, :updated_on, default_by: :updated_on, default_direction: :desc
attr_reader :user, :params
@@ -21,7 +21,7 @@ class Users::ProjectService
projects = category_filter(projects)
projects = status_filter(projects)
- custom_sort(projects, :updated_on, params[:sort_direction])
+ custom_sort(projects, params[:sort_by], params[:sort_direction])
end
private
diff --git a/app/services/users/shixun_service.rb b/app/services/users/shixun_service.rb
index 4730a5777..aeaac6a2c 100644
--- a/app/services/users/shixun_service.rb
+++ b/app/services/users/shixun_service.rb
@@ -77,6 +77,10 @@ class Users::ShixunService
sort_by = sort_by&.downcase
sort_direction = sort_direction&.downcase
+ if sort_by.blank? || !%w(updated_at created_at).include?(sort_by)
+ sort_by = 'updated_at'
+ end
+
if sort_direction.blank? || !%w(desc asc).include?(sort_direction)
sort_direction = 'desc'
end
@@ -87,11 +91,11 @@ class Users::ShixunService
case params[:category]
when 'study' then
- relations.order("myshixuns.updated_at #{sort_direction}")
+ relations.order("myshixuns.#{sort_by} #{sort_direction}")
when 'manage' then
- relations.order("shixuns.updated_at #{sort_direction}")
+ relations.order("shixuns.#{sort_by} #{sort_direction}")
else
- relations.order("shixuns.created_at #{sort_direction}")
+ relations.order("shixuns.#{sort_by} #{sort_direction}")
end
end
end
diff --git a/app/services/users/subject_service.rb b/app/services/users/subject_service.rb
index 745b7cce2..8a4fdce3b 100644
--- a/app/services/users/subject_service.rb
+++ b/app/services/users/subject_service.rb
@@ -1,7 +1,7 @@
class Users::SubjectService
include CustomSortable
- sort_columns :updated_at, default_by: :updated_at, default_direction: :desc
+ sort_columns :created_at, :updated_at, default_by: :updated_at, default_direction: :desc
attr_reader :user, :params
@@ -14,7 +14,7 @@ class Users::SubjectService
subjects = category_scope_subjects
subjects = user_policy_filter(subjects)
- custom_sort(subjects.distinct, :updated_at, params[:sort_direction])
+ custom_sort(subjects.distinct, params[:sort_by], params[:sort_direction])
end
private
diff --git a/app/tasks/exercise_publish_task.rb b/app/tasks/exercise_publish_task.rb
index 4e34320ea..17f5370ed 100644
--- a/app/tasks/exercise_publish_task.rb
+++ b/app/tasks/exercise_publish_task.rb
@@ -45,12 +45,14 @@ class ExercisePublishTask
Rails.logger.info("log--------------------------------exercise_end start")
puts "--------------------------------exercise_end start"
# 1。统一设置的试卷
- exercises = Exercise.includes(:exercise_users,:exercise_questions).where("exercise_status = 2 AND unified_setting = true AND end_time <= ?",Time.now + 900)
+ exercises = Exercise.includes(:exercise_users,:exercise_questions).where("exercise_status = 2 AND
+ unified_setting = true AND end_time <= ?",Time.now + 900)
exercises&.each do |exercise|
ex_type = exercise.exercise_questions.pluck(:question_type).uniq
exercise.update_column('exercise_status', 3)
exercise.exercise_users&.each do |exercise_user|
begin
+ Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
if (exercise_user&.commit_status == 0) && (exercise_user&.start_at.present?)
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score]
if ex_type.include?(4) #是否包含主观题
@@ -60,6 +62,9 @@ class ExercisePublishTask
end
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
+ Rails.logger.info("true: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
+ Rails.logger.info("true: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
+ Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
@@ -94,6 +99,7 @@ class ExercisePublishTask
exercise_users = exercise.exercise_users.where(:user_id => users.pluck(:user_id))
exercise_users&.each do |exercise_user|
begin
+ Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
if exercise_user.commit_status == 0 && !exercise_user.start_at.nil?
if ex_types.include?(4) #是否包含主观题
subjective_score = exercise_user.subjective_score
@@ -103,6 +109,9 @@ class ExercisePublishTask
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score]
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
+ Rails.logger.info("false: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
+ Rails.logger.info("false: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
+ Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
diff --git a/app/views/admins/competition_settings/index.html.erb b/app/views/admins/competition_settings/index.html.erb
index 94f28d69d..73bc343d6 100644
--- a/app/views/admins/competition_settings/index.html.erb
+++ b/app/views/admins/competition_settings/index.html.erb
@@ -189,7 +189,8 @@