Merge remote-tracking branch 'origin/dev_aliyun' into dev_aliyun

dev_auth
杨树明 5 years ago
commit b6d27369f5

@ -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');

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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"

@ -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位

@ -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 = {

@ -1,5 +1,4 @@
class Competitions::CreatePersonalTeamService < ApplicationService
Error = Class.new(StandardError)
attr_reader :competition, :user

@ -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?

@ -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'

@ -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

@ -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

@ -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

@ -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

@ -2,15 +2,15 @@
<thead class="thead-light">
<tr>
<th width="10%" class="text-left">真实姓名</th>
<th width="16%">邮件地址</th>
<th width="15%">邮件地址</th>
<th width="10%">手机号码</th>
<th width="14%">单位</th>
<th width="8%">角色</th>
<th width="7%">角色</th>
<th width="10%"><%= sort_tag('创建于', name: 'created_on', path: admins_users_path) %></th>
<th width="10%"><%= sort_tag('最后登录', name: 'last_login_on', path: admins_users_path) %></th>
<th width="6%"><%= sort_tag('经验值', name: 'experience', path: admins_users_path) %></th>
<th width="6%"><%= sort_tag('金币', name: 'grade', path: admins_users_path) %></th>
<th width="12%">操作</th>
<th width="14%">操作</th>
</tr>
</thead>
<tbody>
@ -33,8 +33,6 @@
<td class="action-container">
<%= link_to '编辑', edit_admins_user_path(user), class: 'action' %>
<%= javascript_void_link('奖励', class: 'action reward-grade-action', data: { toggle: 'modal', target: '.admin-users-reward-grade-modal', id: user.id }) %>
<%= javascript_void_link '解锁', class: 'action unlock-action', data: { id: user.id }, style: user.locked? ? '' : 'display: none;' %>
<% if user.registered? %>
@ -45,7 +43,14 @@
<%= javascript_void_link '加锁', class: 'action lock-action', data: { id: user.id }, style: user.locked? || user.registered? ? 'display: none;' : '' %>
<% end %>
<%= delete_link '删除', admins_user_path(user, element: ".user-item-#{user.id}"), class: 'delete-user-action' %>
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown">
<%= javascript_void_link('奖励', class: 'dropdown-item reward-grade-action', data: { toggle: 'modal', target: '.admin-users-reward-grade-modal', id: user.id }) %>
<%= javascript_void_link '恢复禁密账号', class: 'dropdown-item reset-login-times-action', data: { id: user.id } %>
<%= delete_link '删除', admins_user_path(user, element: ".user-item-#{user.id}"), class: 'dropdown-item delete-user-action' %>
</div>
</td>
</tr>
<% end %>

@ -12,6 +12,8 @@ json.published @competition.published?
json.nearly_published @competition.published_at.present?
json.competition_status @competition.competition_status
json.region_schools @competition.region_schools_name
json.avatar_url url_to_avatar(@competition)
json.competition_modules @competition_modules do |com_module|

@ -15,17 +15,19 @@ json.group_settings @course_groups do |group|
end
if @homework.homework_type == "practice"
json.shixun_identifier @homework.shixuns.first.try(:identifier)
json.shixun_identifier @shixun.try(:identifier)
json.task_pass @shixun&.task_pass
json.(@homework, :work_efficiency, :eff_score)
json.(@homework.homework_detail_manual, :answer_open_evaluation, :shixun_evaluation)
total_exp = 0
json.challenge_settings @homework.shixuns.first.try(:challenges).each do |challenge|
json.challenge_settings @shixun.try(:challenges).each do |challenge|
json.challenge_id challenge.id
json.challenge_name challenge.subject
json.checked challenge_setting(@homework, challenge.id).present?
json.challenge_score challenge_setting(@homework, challenge.id).try(:score).to_f
json.challenge_exp challenge.score
json.difficulty challenge.challenge_difficulty
total_exp += challenge.score
end

@ -906,6 +906,7 @@ Rails.application.routes.draw do
post :lock
post :unlock
post :active
post :reset_login_times
end
end
resource :import_users, only: [:create]

@ -0,0 +1,7 @@
class ReCounterCourseGroups < ActiveRecord::Migration[5.2]
def change
CourseGroup.find_each do |group|
CourseGroup.reset_counters(group.id, :course_members_count)
end
end
end

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -138762,6 +138762,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');

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save