diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0e783c74..90041420 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1188,4 +1188,12 @@ class ApplicationController < ActionController::Base logger.info "----------------------- handle_flag: #{flag} -------------------------" flag end + + # 用户是否完善资料 + def check_account + if !User.current.profile_completed? + redirect_to my_account_path(need_profile_completed: true) + end + end + end diff --git a/app/controllers/competition_teams_controller.rb b/app/controllers/competition_teams_controller.rb index 2bbbd6ef..72732a1a 100644 --- a/app/controllers/competition_teams_controller.rb +++ b/app/controllers/competition_teams_controller.rb @@ -17,7 +17,8 @@ class CompetitionTeamsController < ApplicationController @team_user_ids = @team.team_members.pluck(:user_id) - shixuns = Shixun.where(user_id: @team_user_ids, status: 2).where('shixuns.created_at > ?', Time.parse('2018-06-01')) + shixuns = Shixun.where(user_id: @team_user_ids, status: 2) + .where('shixuns.created_at > ? && shixuns.created_at <= ?', Time.parse('2018-06-01'), @competition.end_time) shixuns = shixuns.joins('left join shixuns forked_shixuns on forked_shixuns.fork_from = shixuns.id and forked_shixuns.status = 2') shixuns = shixuns.select('shixuns.id, shixuns.identifier, shixuns.user_id, shixuns.myshixuns_count, shixuns.name, shixuns.fork_from, sum(forked_shixuns.myshixuns_count) forked_myshixun_count') @shixuns = shixuns.group('shixuns.id').order('shixuns.myshixuns_count desc').includes(:creator) @@ -30,18 +31,30 @@ class CompetitionTeamsController < ApplicationController forked_myshixun_count_map = get_valid_myshixun_count(forked_shixun_map.keys) forked_myshixun_count_map.each { |k, v| @myshixun_count_map[forked_shixun_map[k]] += v } - # todo:使用新版course_members + @course_count_map = get_valid_course_count(shixun_ids) + forked_map = get_valid_course_count(forked_shixun_map.keys) + @forked_course_count_map = {} + forked_map.each do |forked_id, course_count| + @forked_course_count_map[forked_shixun_map[forked_id]] ||= 0 + @forked_course_count_map[forked_shixun_map[forked_id]] += course_count + end + + + # 课堂 course_ids = Course.where('courses.created_at > ?', Time.parse('2018-06-01')) + .where('courses.created_at <= ?', @competition.end_time) .joins('join course_members on course_members.course_id = courses.id and course_members.role in (1,2,3)') .where(course_members: { user_id: @team_user_ids }).pluck(:id) courses = Course.where(id: course_ids).joins(:shixun_homework_commons).where('homework_commons.publish_time < now()') @courses = courses.select('courses.id, courses.name, courses.members_count, count(*) shixun_homework_count') .group('courses.id').order('shixun_homework_count desc').having('shixun_homework_count > 0') + course_ids = @courses.map(&:id) @course_myshixun_map = Myshixun.joins(student_works: :homework_common) - .where(homework_commons: { course_id: @courses.map(&:id) }) + .where(homework_commons: { course_id: course_ids }) .where('exists(select 1 from games where games.myshixun_id = myshixuns.id and games.status = 2)') .group('homework_commons.course_id').count + @course_shixun_count_map = get_valid_shixun_count(course_ids) end def search_teacher @@ -345,6 +358,28 @@ class CompetitionTeamsController < ApplicationController .group('shixun_id').count end + def get_valid_course_count(ids) + percentage_sql = StudentWork.where('homework_common_id = homework_commons.id') + .select('count(compelete_status !=0 ) as finish, count(*) as total') + .having('finish > (total / 2)').to_sql + + Course.joins(shixun_homework_commons: :homework_commons_shixuns) + .where('shixun_id in (?)', ids) + .where("exists (#{percentage_sql})") + .group('shixun_id').count + end + + def get_valid_shixun_count(ids) + percentage_sql = StudentWork.where('homework_common_id = homework_commons.id') + .select('count(compelete_status !=0 ) as finish, count(*) as total') + .having('finish > (total / 2)').to_sql + Shixun.joins(homework_commons_shixuns: :homework_common) + .where(homework_commons: { homework_type: 3 }) + .where('course_id in (?)', ids) + .where("exists (#{percentage_sql})") + .group('course_id').count + end + def record_agent_user_action # 记录是否是引流用户的行为 ip = request.remote_ip diff --git a/app/controllers/competitions_controller.rb b/app/controllers/competitions_controller.rb index 028bab2d..24f02037 100644 --- a/app/controllers/competitions_controller.rb +++ b/app/controllers/competitions_controller.rb @@ -145,7 +145,7 @@ class CompetitionsController < ApplicationController section = stage.competition_stage_sections.reorder("start_time asc").first if section.present? && section.start_time.present? && section.start_time > Time.now User.where(:id => TeamMember.where(:competition_team_id => @competition.competition_teams.pluck(:id)).pluck(:user_id).uniq).each do |user| - name = @competition.name + "(#{stage.name})" + name = @competition.name + "#{@competition.sub_title}(#{stage.name})" begin if user.phone.present? status = Trustie::Sms.send(mobile: user.phone.to_s, code: '1', send_type:'competition_start', user_name:user.show_name, name:name, result:section.start_time.strftime('%Y-%m-%d %H:%M:%S')) diff --git a/app/controllers/libraries_controller.rb b/app/controllers/libraries_controller.rb index ac861841..457eb8ce 100644 --- a/app/controllers/libraries_controller.rb +++ b/app/controllers/libraries_controller.rb @@ -1,7 +1,9 @@ class LibrariesController < ApplicationController + include ApplicationHelper layout 'base_library' before_filter :require_login, :except => [:index, :show] + before_filter :check_account, only: [:new, :create] after_filter :increment_visit_count, only: [:show, :create, :edit, :update] def index diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb index e3d560aa..06b29c9f 100644 --- a/app/controllers/managements_controller.rb +++ b/app/controllers/managements_controller.rb @@ -1664,7 +1664,8 @@ end # 删除单位 def delete_school school = School.where(:id => params[:school]).first - UserExtensions.where(:school_id => params[:school]).update_all(school_id: nil, department_id: nil, profile_completed: false) + UserExtensions.where(:school_id => params[:school]).update_all(school_id: nil, department_id: nil) + User.joins(:user_extension).where(user_extensions: {school_id: params[:school]}).update_all(profile_completed: false) ApplyAddSchools.where(:school_id => params[:school]).destroy_all ApplyAddDepartment.where(:school_id => params[:school]).destroy_all school.destroy @@ -1869,6 +1870,7 @@ end # 删除学校的用户 users = UserExtensions.where("school_id = #{applied_school.school_id}") + User.where(id: users.map(&:user_id)).update_all(profile_completed: false) # 申请了职业认证的用户撤销申请 apply_user_auth = ApplyUserAuthentication.where(:user_id => users.map(&:user_id), :auth_type => 2, :status => 0) @@ -3030,6 +3032,7 @@ end user.certification = 1 user.grade = 0 user.password = "12345678" + user.phone = list[5] if user.save ue = UserExtensions.new(:user_id => user.id, :gender => 0, :school_id => school_id, :location => school.province, :location_city => school.city, :identity => list[3], :student_id => list[0], :department_id => department.try(:id)) if list[3] && list[3].to_i == 0 diff --git a/app/controllers/project_packages_controller.rb b/app/controllers/project_packages_controller.rb index 6721c1c4..b9aaa269 100644 --- a/app/controllers/project_packages_controller.rb +++ b/app/controllers/project_packages_controller.rb @@ -1,10 +1,11 @@ # encoding=utf-8 # For react class ProjectPackagesController < ApplicationController - before_filter :require_login, :except => [:index, :show] - include ApplicationHelper + before_filter :require_login, except: [:index] + before_filter :check_account, only: [:new, :create] + def show render_react end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5e01aa62..f096a23b 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -30,6 +30,7 @@ class ProjectsController < ApplicationController skip_before_filter :verify_authenticity_token, :only => [:training_task_status] skip_before_filter :check_if_login_required, :only => [:training_task_status] before_filter :check_authentication + before_filter :check_account, only: [:new, :create] before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise, :view_homework_attaches,:join_project, :project_home, :training_execute, :training_task_status] before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course] diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5737f99b..6a62503e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -628,17 +628,19 @@ module ApplicationHelper return end =end - if !User.current.profile_completed? - redirect_to my_account_path - Rails.logger.info("check_authentication end") - elsif User.current.certification != 1 # 系统没有授权 - day_cer = UserDayCertification.where(:user_id => User.current.id).last - unless (Time.now.to_i - day_cer.try(:created_at).to_i) < 86400 - redirect_to my_account_path - Rails.logger.info("check_authentication end") - return - end - end + + # 暂时不需要试用授权 + # if !User.current.profile_completed? + # redirect_to my_account_path + # Rails.logger.info("check_authentication end") + # elsif User.current.certification != 1 # 系统没有授权 + # day_cer = UserDayCertification.where(:user_id => User.current.id).last + # unless (Time.now.to_i - day_cer.try(:created_at).to_i) < 86400 + # redirect_to my_account_path + # Rails.logger.info("check_authentication end") + # return + # end + # end end def match_specific_symbol(str) diff --git a/app/models/shixun.rb b/app/models/shixun.rb index 0d201ed3..35193f2d 100644 --- a/app/models/shixun.rb +++ b/app/models/shixun.rb @@ -32,7 +32,7 @@ class Shixun < ActiveRecord::Base has_many :users, :through => :shixun_members has_many :shixun_members, :dependent => :destroy has_one :repository, :dependent => :destroy - has_many :homework_commons_shixunses + has_many :homework_commons_shixuns, class_name: 'HomeworkCommonsShixuns' has_many :homework_challenge_settings, :dependent => :destroy has_many :challenges, :dependent => :destroy has_many :myshixuns, :dependent => :destroy diff --git a/app/services/careers_service.rb b/app/services/careers_service.rb index a548c74d..290c3a7d 100644 --- a/app/services/careers_service.rb +++ b/app/services/careers_service.rb @@ -506,7 +506,7 @@ class CareersService {username: current_user.show_name, login: current_user.login, user_id: current_user.id, image_url: url_to_avatar(current_user), admin: current_user.admin?, is_teacher: current_user.user_extensions.try(:identity) == 0, - tidding_count: count, phone: current_user.phone} + tidding_count: count, phone: current_user.phone, is_student: current_user.user_extensions.try(:identity) == 1} end def find_career id diff --git a/app/views/competition_teams/show.html.erb b/app/views/competition_teams/show.html.erb index 129fa32a..f8e1f1c5 100644 --- a/app/views/competition_teams/show.html.erb +++ b/app/views/competition_teams/show.html.erb @@ -20,11 +20,23 @@ <% total_myshixun_count = 0 total_forked_myshixun_count = 0 + total_shixun_score = 0 %> <% @shixuns.each do |shixun| %> <% total_myshixun_count += shixun.myshixuns_count total_forked_myshixun_count += shixun['forked_myshixun_count'].to_i + + valid_course_count = @course_count_map.fetch(shixun.id, 0) + valid_student_count = @myshixun_count_map.fetch(shixun.id, 0) + score = + if shixun.fork_from.blank? + 500 + 50 * valid_course_count + 10 * valid_student_count + else + 100 + 10 * valid_course_count + 5 * valid_student_count + end + score += @forked_course_count_map.fetch(shixun.id, 0) + total_shixun_score += score %>
<%= stage.name %>
-- 标注说明:每个小组选择一种编程语言的题目,针对标注任务中指定的标注模块,要求对代码模块、模块中的代码文件, 以及文件中的函数必须进行标注,关键代码块、代码行及关键变量等由参赛者自由选择进行标注。 正式赛第一阶段的比赛在标注阶段就开放查看所有人的标注,请大家根据个人理解,写出自己的风格。我们将综合考虑标注的原创性、准确性、 完整性和多样性等不同的维度对标注质量进行评分。<%= challenge_description_extra[i] %> -
- -<%= row_data[:name] || entry.name %>
-- <% - is_start = Time.now > first_section.start_time - competition_url = User.current.logged? ? "#{entry.url}?eid=#{User.current.id}" : "#{entry.url}" - btn_url = is_start ? "#{competition_url}" : "javascript:void(0);" - %> - <%= entry.name %> -
- - <% if row_data.present? %> -项目简介
-<%= raw row_data[:description] %>
-标注任务
- <% if index ==2 %> -<%= row_data[:task] %>
- <% else %> -<%= row_data[:task] %>
- <% end %> -经典算法解读:
- -- 点击进入代标注模块 -
- <% end %> -<%= @competition.sub_title %>
- <% unless User.current.logged? %> + <% if !User.current.logged? %> <%= link_to "创建战队", signin_path, :remote => true, :class => "enroll-in-b enroll-in-b-green fr" %> + <% elsif !User.current.try(:profile_completed?) %> + <%= link_to "创建战队", 'javascript:void(0)', :class => "enroll-in-b enroll-in-b-green fr", onclick: "userProfileModal()" %> <% else %> <% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %> <% if !@can_enroll %> @@ -19,8 +21,10 @@ <% end %> <% end %> - <% unless User.current.logged? %> + <% if !User.current.logged? %> <%= link_to "加入战队", signin_path, :remote => true, :class => "enroll-in-b fr" %> + <% elsif !User.current.try(:profile_completed?) %> + <%= link_to "加入战队", 'javascript:void(0)', :class => "enroll-in-b fr", onclick: "userProfileModal()" %> <% else %> <% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %> <% if !@can_enroll %> @@ -153,6 +157,14 @@ pop_box_new(htmlvalue, 500, 205); } + function userProfileModal() { + var htmlvalue = '
'; + pop_box_new(htmlvalue, 480, 205); + } + function joinSure() { if ($("#codeinput").val().trim() == "") { $("#codeInput-notice").html("请输入邀请码"); diff --git a/app/views/layouts/_logined_header.html.erb b/app/views/layouts/_logined_header.html.erb index 6b9cde10..35e39ac6 100644 --- a/app/views/layouts/_logined_header.html.erb +++ b/app/views/layouts/_logined_header.html.erb @@ -79,13 +79,21 @@ @@ -154,4 +162,12 @@ <% end %> }); + + function showUserProfileModal() { + var htmlvalue = ''; + pop_box_new(htmlvalue, 480, 205); + } \ No newline at end of file diff --git a/app/views/layouts/_unlogin_header.html.erb b/app/views/layouts/_unlogin_header.html.erb index d54b65f5..11aabde9 100644 --- a/app/views/layouts/_unlogin_header.html.erb +++ b/app/views/layouts/_unlogin_header.html.erb @@ -66,9 +66,9 @@ diff --git a/app/views/managements/_competition_enroll_list.html.erb b/app/views/managements/_competition_enroll_list.html.erb index 6b67f3b1..6658f57b 100644 --- a/app/views/managements/_competition_enroll_list.html.erb +++ b/app/views/managements/_competition_enroll_list.html.erb @@ -33,7 +33,7 @@
<%= praise_num %>