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

dev_aliyun
caishi 5 years ago
commit 327759c649

@ -1188,4 +1188,12 @@ class ApplicationController < ActionController::Base
logger.info "----------------------- handle_flag: #{flag} -------------------------" logger.info "----------------------- handle_flag: #{flag} -------------------------"
flag flag
end end
# 用户是否完善资料
def check_account
if !User.current.profile_completed?
redirect_to my_account_path(need_profile_completed: true)
end
end
end end

@ -17,7 +17,8 @@ class CompetitionTeamsController < ApplicationController
@team_user_ids = @team.team_members.pluck(:user_id) @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.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.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) @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 = get_valid_myshixun_count(forked_shixun_map.keys)
forked_myshixun_count_map.each { |k, v| @myshixun_count_map[forked_shixun_map[k]] += v } 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')) 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)') .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) .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 = 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') @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') .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) @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)') .where('exists(select 1 from games where games.myshixun_id = myshixuns.id and games.status = 2)')
.group('homework_commons.course_id').count .group('homework_commons.course_id').count
@course_shixun_count_map = get_valid_shixun_count(course_ids)
end end
def search_teacher def search_teacher
@ -345,6 +358,28 @@ class CompetitionTeamsController < ApplicationController
.group('shixun_id').count .group('shixun_id').count
end 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 def record_agent_user_action
# 记录是否是引流用户的行为 # 记录是否是引流用户的行为
ip = request.remote_ip ip = request.remote_ip

@ -145,7 +145,7 @@ class CompetitionsController < ApplicationController
section = stage.competition_stage_sections.reorder("start_time asc").first section = stage.competition_stage_sections.reorder("start_time asc").first
if section.present? && section.start_time.present? && section.start_time > Time.now 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| 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 begin
if user.phone.present? 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')) 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'))

@ -1,7 +1,9 @@
class LibrariesController < ApplicationController class LibrariesController < ApplicationController
include ApplicationHelper
layout 'base_library' layout 'base_library'
before_filter :require_login, :except => [:index, :show] before_filter :require_login, :except => [:index, :show]
before_filter :check_account, only: [:new, :create]
after_filter :increment_visit_count, only: [:show, :create, :edit, :update] after_filter :increment_visit_count, only: [:show, :create, :edit, :update]
def index def index

@ -1664,7 +1664,8 @@ end
# 删除单位 # 删除单位
def delete_school def delete_school
school = School.where(:id => params[:school]).first 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 ApplyAddSchools.where(:school_id => params[:school]).destroy_all
ApplyAddDepartment.where(:school_id => params[:school]).destroy_all ApplyAddDepartment.where(:school_id => params[:school]).destroy_all
school.destroy school.destroy
@ -1869,6 +1870,7 @@ end
# 删除学校的用户 # 删除学校的用户
users = UserExtensions.where("school_id = #{applied_school.school_id}") 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) 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.certification = 1
user.grade = 0 user.grade = 0
user.password = "12345678" user.password = "12345678"
user.phone = list[5]
if user.save 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)) 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 if list[3] && list[3].to_i == 0

@ -1,10 +1,11 @@
# encoding=utf-8 # encoding=utf-8
# For react # For react
class ProjectPackagesController < ApplicationController class ProjectPackagesController < ApplicationController
before_filter :require_login, :except => [:index, :show]
include ApplicationHelper include ApplicationHelper
before_filter :require_login, except: [:index]
before_filter :check_account, only: [:new, :create]
def show def show
render_react render_react
end end

@ -30,6 +30,7 @@ class ProjectsController < ApplicationController
skip_before_filter :verify_authenticity_token, :only => [:training_task_status] skip_before_filter :verify_authenticity_token, :only => [:training_task_status]
skip_before_filter :check_if_login_required, :only => [:training_task_status] skip_before_filter :check_if_login_required, :only => [:training_task_status]
before_filter :check_authentication 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, 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] :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] before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course]

@ -628,17 +628,19 @@ module ApplicationHelper
return return
end end
=end =end
if !User.current.profile_completed?
redirect_to my_account_path # 暂时不需要试用授权
Rails.logger.info("check_authentication end") # if !User.current.profile_completed?
elsif User.current.certification != 1 # 系统没有授权 # redirect_to my_account_path
day_cer = UserDayCertification.where(:user_id => User.current.id).last # Rails.logger.info("check_authentication end")
unless (Time.now.to_i - day_cer.try(:created_at).to_i) < 86400 # elsif User.current.certification != 1 # 系统没有授权
redirect_to my_account_path # day_cer = UserDayCertification.where(:user_id => User.current.id).last
Rails.logger.info("check_authentication end") # unless (Time.now.to_i - day_cer.try(:created_at).to_i) < 86400
return # redirect_to my_account_path
end # Rails.logger.info("check_authentication end")
end # return
# end
# end
end end
def match_specific_symbol(str) def match_specific_symbol(str)

@ -32,7 +32,7 @@ class Shixun < ActiveRecord::Base
has_many :users, :through => :shixun_members has_many :users, :through => :shixun_members
has_many :shixun_members, :dependent => :destroy has_many :shixun_members, :dependent => :destroy
has_one :repository, :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 :homework_challenge_settings, :dependent => :destroy
has_many :challenges, :dependent => :destroy has_many :challenges, :dependent => :destroy
has_many :myshixuns, :dependent => :destroy has_many :myshixuns, :dependent => :destroy

@ -506,7 +506,7 @@ class CareersService
{username: current_user.show_name, login: current_user.login, {username: current_user.show_name, login: current_user.login,
user_id: current_user.id, image_url: url_to_avatar(current_user), 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, 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 end
def find_career id def find_career id

@ -20,11 +20,23 @@
<% <%
total_myshixun_count = 0 total_myshixun_count = 0
total_forked_myshixun_count = 0 total_forked_myshixun_count = 0
total_shixun_score = 0
%> %>
<% @shixuns.each do |shixun| %> <% @shixuns.each do |shixun| %>
<% <%
total_myshixun_count += shixun.myshixuns_count total_myshixun_count += shixun.myshixuns_count
total_forked_myshixun_count += shixun['forked_myshixun_count'].to_i 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
%> %>
<tr> <tr>
<td width="10%"><%= shixun.creator.show_real_name %></td> <td width="10%"><%= shixun.creator.show_real_name %></td>
@ -39,7 +51,7 @@
<td width="10%"><%= shixun.myshixuns_count.to_i.zero? ? '--' : shixun.myshixuns_count.to_i %></td> <td width="10%"><%= shixun.myshixuns_count.to_i.zero? ? '--' : shixun.myshixuns_count.to_i %></td>
<td width="15%"><%= shixun['forked_myshixun_count'].to_i.zero? ? '--' : shixun['forked_myshixun_count'].to_i %></td> <td width="15%"><%= shixun['forked_myshixun_count'].to_i.zero? ? '--' : shixun['forked_myshixun_count'].to_i %></td>
<td width="10%"><%= @myshixun_count_map.fetch(shixun.id, '--') %></td> <td width="10%"><%= @myshixun_count_map.fetch(shixun.id, '--') %></td>
<td width="15%">--</td> <td width="15%"><%= score.zero? ? '--' : score %></td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>
@ -50,7 +62,7 @@
<th width="10%"><%= total_myshixun_count %></th> <th width="10%"><%= total_myshixun_count %></th>
<th width="15%"><%= total_forked_myshixun_count %></th> <th width="15%"><%= total_forked_myshixun_count %></th>
<th width="10%"><%= @myshixun_count_map.values.reduce(:+) %></th> <th width="10%"><%= @myshixun_count_map.values.reduce(:+) %></th>
<th width="15%">--</th> <th width="15%"><%= total_shixun_score %></th>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
@ -73,11 +85,15 @@
<% <%
total_members_count = 0 total_members_count = 0
total_shixun_homework_count = 0 total_shixun_homework_count = 0
total_course_score = 0
%> %>
<% @courses.each do |course| %> <% @courses.each do |course| %>
<% <%
total_members_count += course.members_count.to_i total_members_count += course.members_count.to_i
total_shixun_homework_count += course['shixun_homework_count'].to_i total_shixun_homework_count += course['shixun_homework_count'].to_i
score = 500 + 5 * @course_shixun_count_map.fetch(course.id, 0) * @course_myshixun_map.fetch(course.id, 0)
total_course_score += score
%> %>
<tr> <tr>
<td width="10%"><%= course.teachers.where(user_id: @team_user_ids).first.user.show_real_name %></td> <td width="10%"><%= course.teachers.where(user_id: @team_user_ids).first.user.show_real_name %></td>
@ -89,7 +105,7 @@
<td width="10%"><%= course.members_count %></td> <td width="10%"><%= course.members_count %></td>
<td width="15%"><%= course['shixun_homework_count'].presence || '--' %></td> <td width="15%"><%= course['shixun_homework_count'].presence || '--' %></td>
<td width="10%"><%= @course_myshixun_map.fetch(course.id, '--') %></td> <td width="10%"><%= @course_myshixun_map.fetch(course.id, '--') %></td>
<td width="15%">--</td> <td width="15%"><%= score.zero? ? '--' : score %></td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>
@ -99,8 +115,8 @@
<th width="40%" class="edu-txt-left"><%= @courses.size %></th> <th width="40%" class="edu-txt-left"><%= @courses.size %></th>
<th width="10%"><%= total_members_count %></th> <th width="10%"><%= total_members_count %></th>
<th width="15%"><%= total_shixun_homework_count %></th> <th width="15%"><%= total_shixun_homework_count %></th>
<th width="10%"><%= @course_myshixun_map.values.reduce(:+) %></th> <th width="10%"><%= @course_myshixun_map.values.reduce(:+) || 0 %></th>
<th width="15%">--</th> <th width="15%"><%= total_course_score %></th>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>

@ -1,171 +1,171 @@
<% index = 0 %> <% index = 0 %>
<p class="second_code_1" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p> <p class="second_code_1" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p>
<% index += 1%> <% index += 1%>
<p class="second_code_2" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p> <p class="second_code_2" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p>
<% index += 1 %> <% index += 1 %>
<% <%
challenge_description_extra = [ challenge_description_extra = [
"模拟赛选择了第一届标注大赛正式赛第一阶段的三个项目供大家体验熟悉平台、学习其他人的标注,模拟赛标注不计分。", "模拟赛选择了第一届标注大赛正式赛第一阶段的三个项目供大家体验熟悉平台、学习其他人的标注,模拟赛标注不计分。",
"第一阶段比赛得分占正赛总比分的30%。", "第一阶段比赛得分占正赛总比分的30%。",
"第二阶段比赛得分占正赛总比分的70%。" "第二阶段比赛得分占正赛总比分的70%。"
] ]
data = [ data = [
[ [
{ {
name: 'Java项目', name: 'Java项目',
description: "Weka是基于Java的机器学习与数据挖掘平台汇集了最前沿的机器学习算法包括处理标准数据挖掘问题的几乎所有方法回归、分类、聚类、关联规则以及属性选择等是Java机器学习入门的首选平台。<br/><br/>本项目的Clusters目录中包含了K-Means、层次聚类等多种聚类算法以及相应的聚类效果评估方法的java实现", description: "Weka是基于Java的机器学习与数据挖掘平台汇集了最前沿的机器学习算法包括处理标准数据挖掘问题的几乎所有方法回归、分类、聚类、关联规则以及属性选择等是Java机器学习入门的首选平台。<br/><br/>本项目的Clusters目录中包含了K-Means、层次聚类等多种聚类算法以及相应的聚类效果评估方法的java实现",
task: '标注../weka/clusterers/目录下的所有代码文件。', task: '标注../weka/clusterers/目录下的所有代码文件。',
link_name: 'CSDN经典聚类算法', link_name: 'CSDN经典聚类算法',
link_url: 'https://blog.csdn.net/qq_30262201/article/details/78799926' link_url: 'https://blog.csdn.net/qq_30262201/article/details/78799926'
}, },
{ {
name: 'C++项目', name: 'C++项目',
description: "该项目是GitHub上最受欢迎的C++语言实现经典算法与数据结构的项目之一,内容涵盖排序、链表、树结构、图搜索、贪心算法等。学习这些算法的代码实现,可以深刻理解和掌握算法的核心思想,感受算法之美,代码之美,是人工智能时代的基础入门一课。<br/><br/>本项目的sort_search_problems目录涵盖了冒泡排序、快速排序等各类经典排序算法的C++实现。", description: "该项目是GitHub上最受欢迎的C++语言实现经典算法与数据结构的项目之一,内容涵盖排序、链表、树结构、图搜索、贪心算法等。学习这些算法的代码实现,可以深刻理解和掌握算法的核心思想,感受算法之美,代码之美,是人工智能时代的基础入门一课。<br/><br/>本项目的sort_search_problems目录涵盖了冒泡排序、快速排序等各类经典排序算法的C++实现。",
task: '标注../sort_search_problems目录下的所有代码文件及对应引用的../include目录中自定义的头文件。', task: '标注../sort_search_problems目录下的所有代码文件及对应引用的../include目录中自定义的头文件。',
link_name: 'CSDN十大经典排序算法', link_name: 'CSDN十大经典排序算法',
link_url: 'https://blog.csdn.net/wfq784967698/article/details/79551476' link_url: 'https://blog.csdn.net/wfq784967698/article/details/79551476'
}, },
{ {
name: 'Python项目', name: 'Python项目',
description: "该项目是GitHub上最受欢迎的Python语言实现经典算法的项目之一包含了前沿的神经网络和经典数据结构及算法的Python实现。项目具有兼顾经典和前沿的特点。学习经典算法的源码实现感受经典算法的思想之美、代码之美。<br/><br/>本项目的Sorts目录中包含了冒泡排序、快速排序等各类经典排序算法的Python实现。", description: "该项目是GitHub上最受欢迎的Python语言实现经典算法的项目之一包含了前沿的神经网络和经典数据结构及算法的Python实现。项目具有兼顾经典和前沿的特点。学习经典算法的源码实现感受经典算法的思想之美、代码之美。<br/><br/>本项目的Sorts目录中包含了冒泡排序、快速排序等各类经典排序算法的Python实现。",
task: '标注../sorts/目录下的所有代码文件。', task: '标注../sorts/目录下的所有代码文件。',
link_name: 'CSDN十大经典排序算法', link_name: 'CSDN十大经典排序算法',
link_url: 'https://blog.csdn.net/wfq784967698/article/details/79551476' link_url: 'https://blog.csdn.net/wfq784967698/article/details/79551476'
}, },
], ],
[{ [{
name: 'Java项目', name: 'Java项目',
description: "CoreNLP是一个Java自然语言分析库是斯坦福大学自然语言处理小组的研究成果它集成了所有的自然语言处理工具分词、词性标注、依存句法分析、命名实体识别等。<br/><br/>本项目的stanford/nlp/parser/目录中包含了Lexparser、nndep以及Shiftreduce等句法分析算法的Java实现。", description: "CoreNLP是一个Java自然语言分析库是斯坦福大学自然语言处理小组的研究成果它集成了所有的自然语言处理工具分词、词性标注、依存句法分析、命名实体识别等。<br/><br/>本项目的stanford/nlp/parser/目录中包含了Lexparser、nndep以及Shiftreduce等句法分析算法的Java实现。",
task: '标注../stanford/nlp/parser/目录下的所有代码文件(包括子目录)。', task: '标注../stanford/nlp/parser/目录下的所有代码文件(包括子目录)。',
link_name: 'CSDN, 使用Stanford Parser进行句法分析', link_name: 'CSDN, 使用Stanford Parser进行句法分析',
link_url: 'https://blog.csdn.net/u010239102/article/details/78111760' link_url: 'https://blog.csdn.net/u010239102/article/details/78111760'
},{ },{
name: 'C++项目', name: 'C++项目',
description: "Sentencepiece是Google公司开发的一个C++自然语言处理工具包,它实现了数据驱动、跨语言、高性能、轻量级的面向神经网络文本生成系统的无监督文本词条化工具。<br/><br/>本项目的src/目录中包含了BPE、Unigram以及Char等文本分词算法的C++实现。", description: "Sentencepiece是Google公司开发的一个C++自然语言处理工具包,它实现了数据驱动、跨语言、高性能、轻量级的面向神经网络文本生成系统的无监督文本词条化工具。<br/><br/>本项目的src/目录中包含了BPE、Unigram以及Char等文本分词算法的C++实现。",
task: '标注../src/目录下的所有.cc和.h代码文件不包括子目录(注:其中模型训练、测试相关代码可以去掉:*_test.cc, *_trainer.cc, *_trainer.h', task: '标注../src/目录下的所有.cc和.h代码文件不包括子目录。',
link_name: 'CSDN, sentencePiece入门小结', link_name: 'CSDN, sentencePiece入门小结',
link_url: 'https://blog.csdn.net/sinat_33455447/article/details/90265938' link_url: 'https://blog.csdn.net/sinat_33455447/article/details/90265938'
},{ },{
name: 'Python项目', name: 'Python项目',
description: "NLTK是宾西法尼亚大学计算机和信息科学系开发的一个Python自然语言处理工具包它提供了易于使用的接口通过这些接口可以访问超过50个语料库和词汇资源如WordNet还有一套用于分类、标记化、词干标记、解析和语义推理的文本处理库。<br/><br/>本项目的nltk/stem/目录中包含了Lancaster、Porter以及Snowball等文本分词算法的Python实现。", description: "NLTK是宾西法尼亚大学计算机和信息科学系开发的一个Python自然语言处理工具包它提供了易于使用的接口通过这些接口可以访问超过50个语料库和词汇资源如WordNet还有一套用于分类、标记化、词干标记、解析和语义推理的文本处理库。<br/><br/>本项目的nltk/stem/目录中包含了Lancaster、Porter以及Snowball等文本分词算法的Python实现。",
task: '标注../nltk/stem/目录下的所有代码文件。', task: '标注../nltk/stem/目录下的所有代码文件。',
link_name: 'CSDN, 英文分词的算法和原理', link_name: 'CSDN, 英文分词的算法和原理',
link_url: 'https://blog.csdn.net/wisdom77/article/details/79446674' link_url: 'https://blog.csdn.net/wisdom77/article/details/79446674'
}], }],
[{ [{
name: 'Java项目', name: 'Java项目',
description: "Deeplearning4j是Eclipse公司开发的支持各种深度学习算法的运算框架它可以实施的技术包括受限玻尔兹曼机、深度置信网络、深度自动编码器、堆叠式降噪自动编码器、循环神经张量网络以及word2vec、doc2vec和GloVe等。<br/><br/>本项目的nn/layers/recurrent/目录中包含了循环神经网络RNN中LSTM、Bidirectional LSTM等算法的Java实现。", description: "Deeplearning4j是Eclipse公司开发的支持各种深度学习算法的运算框架它可以实施的技术包括受限玻尔兹曼机、深度置信网络、深度自动编码器、堆叠式降噪自动编码器、循环神经张量网络以及word2vec、doc2vec和GloVe等。<br/><br/>本项目的nn/layers/recurrent/目录中包含了循环神经网络RNN中LSTM、Bidirectional LSTM等算法的Java实现。",
task: '标注../nn/layers/recurrent/目录下的所有代码文件。', task: '标注../nn/layers/recurrent/目录下的所有代码文件。',
link_name: '官方DL4J快速入门指南', link_name: '官方DL4J快速入门指南',
link_url: 'https://deeplearning4j.org/cn/quickstart' link_url: 'https://deeplearning4j.org/cn/quickstart'
},{ },{
name: 'C++项目', name: 'C++项目',
description: "TensorFlow是谷歌人工智能团队开发的用于机器学习和深度神经网络研究的开源框架它在图形分类、音频处理、推荐系统和自然语言处理等场景下都有丰富的应用提供了丰富的API包括基本的向量矩阵计算、各种优化算法、各种卷积神经网络和循环神经网络基本单元的实现、以及可视化的辅助工具等。<br/><br/>本项目的core/kernels/rnn/目录中包含了循环神经网络RNN中卷积GEMM、LSTM以及GRU算法的C++实现。", description: "TensorFlow是谷歌人工智能团队开发的用于机器学习和深度神经网络研究的开源框架它在图形分类、音频处理、推荐系统和自然语言处理等场景下都有丰富的应用提供了丰富的API包括基本的向量矩阵计算、各种优化算法、各种卷积神经网络和循环神经网络基本单元的实现、以及可视化的辅助工具等。<br/><br/>本项目的core/kernels/rnn/目录中包含了循环神经网络RNN中卷积GEMM、LSTM以及GRU算法的C++实现。",
task: '标注../core/kernels/rnn/目录下的所有代码文件。', task: '标注../core/kernels/rnn/目录下的所有代码文件。',
link_name: 'CSDN, 深度学习之RNN(循环神经网络)', link_name: 'CSDN, 深度学习之RNN(循环神经网络)',
link_url: 'https://blog.csdn.net/qq_32241189/article/details/80461635' link_url: 'https://blog.csdn.net/qq_32241189/article/details/80461635'
},{ },{
name: 'Python项目', name: 'Python项目',
description: "Keras是Google公司开发的高度模块化的神经网络学习框架它是一个高层神经网络API能够支持简易和快速的原型设计支持CNN和RNN或二者的结合且能够支持无缝CPU和GPU切换。<br/><br/>本项目的keras/layers/目录中包含了神经网络运算层中Embedding、CNN以及RNN等算法的Python实现。", description: "Keras是Google公司开发的高度模块化的神经网络学习框架它是一个高层神经网络API能够支持简易和快速的原型设计支持CNN和RNN或二者的结合且能够支持无缝CPU和GPU切换。<br/><br/>本项目的keras/layers/目录中包含了神经网络运算层中Embedding、CNN以及RNN等算法的Python实现。",
task: '标注../keras/layers/目录下的所有代码文件。', task: '标注../keras/layers/目录下的所有代码文件。',
link_name: '官方, Keras说明文档', link_name: '官方, Keras说明文档',
link_url: 'https://keras.io/layers/about-keras-layers/' link_url: 'https://keras.io/layers/about-keras-layers/'
}] }]
] ]
%> %>
<% @competition.competition_stages.includes(:competition_stage_sections).each_with_index do |stage, i| %> <% @competition.competition_stages.includes(:competition_stage_sections).each_with_index do |stage, i| %>
<div class="second_code_<%= index + 1 %>" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"> <div class="second_code_<%= index + 1 %>" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;">
<% <%
first_section = stage.competition_stage_sections[0] first_section = stage.competition_stage_sections[0]
second_section = stage.competition_stage_sections[1] second_section = stage.competition_stage_sections[1]
%> %>
<div class="enter_panel" style="<%= i.zero? ? "height: 1212px" : ''%>"> <div class="enter_panel" style="<%= i.zero? ? "height: 1212px" : ''%>">
<p class="challenge_title"><%= stage.name %></p> <p class="challenge_title"><%= stage.name %></p>
<ul class="clearfix challenge_sub_title"> <ul class="clearfix challenge_sub_title">
<li class="fl"> <li class="fl">
<span class="mr20"><%= first_section.try(:name) %></span> <span class="mr20"><%= first_section.try(:name) %></span>
<span><%= format_time first_section.start_time %> ~ <%= com_end_time first_section.end_time %></span> <span><%= format_time first_section.start_time %> ~ <%= com_end_time first_section.end_time %></span>
</li> </li>
<li class="fr"> <li class="fr">
<span class="mr20"><%= second_section.try(:name) %></span> <span class="mr20"><%= second_section.try(:name) %></span>
<span><%= format_time second_section.try(:start_time) %> ~ <%= com_end_time second_section.try(:end_time) %></span> <span><%= format_time second_section.try(:start_time) %> ~ <%= com_end_time second_section.try(:end_time) %></span>
</li> </li>
</ul> </ul>
<p class="break_word font-18 challenge_describe"> <p class="break_word font-18 challenge_describe">
标注说明:每个小组选择一种编程语言的题目,针对标注任务中指定的标注模块,要求对代码模块、模块中的代码文件, 以及文件中的函数必须进行标注,关键代码块、代码行及关键变量等由参赛者自由选择进行标注。 正式赛第一阶段的比赛在标注阶段就开放查看所有人的标注,请大家根据个人理解,写出自己的风格。我们将综合考虑标注的原创性、准确性、 完整性和多样性等不同的维度对标注质量进行评分。<%= challenge_description_extra[i] %> 标注说明:每个小组选择一种编程语言的题目,针对标注任务中指定的标注模块,要求对代码模块、模块中的代码文件, 以及文件中的函数必须进行标注,关键代码块、代码行及关键变量等由参赛者自由选择进行标注。 正式赛第一阶段的比赛在标注阶段就开放查看所有人的标注,请大家根据个人理解,写出自己的风格。我们将综合考虑标注的原创性、准确性、 完整性和多样性等不同的维度对标注质量进行评分。<%= challenge_description_extra[i] %>
</p> </p>
<ul class="mt30"> <ul class="mt30">
<% first_section.competition_entries.each_with_index do |entry, j| %> <% first_section.competition_entries.each_with_index do |entry, j| %>
<% row_data = data[i][j] %> <% row_data = data[i][j] %>
<li class="challenge_box"> <li class="challenge_box">
<p class="challenge_b_t"><%= row_data[:name] || entry.name %></p> <p class="challenge_b_t"><%= row_data[:name] || entry.name %></p>
<p class="enter_btn mb40 clearfix"> <p class="enter_btn mb40 clearfix">
<% <%
is_start = Time.now > first_section.start_time is_start = Time.now > first_section.start_time
competition_url = User.current.logged? ? "#{entry.url}?eid=#{User.current.id}" : "#{entry.url}" competition_url = User.current.logged? ? "#{entry.url}?eid=#{User.current.id}" : "#{entry.url}"
btn_url = is_start ? "#{competition_url}" : "javascript:void(0);" btn_url = is_start ? "#{competition_url}" : "javascript:void(0);"
%> %>
<a class="setNewBnt <%= is_start ? 'active' : '' %>" <a class="setNewBnt <%= is_start ? 'active' : '' %>"
href="javascript:void(0);" href="javascript:void(0);"
data-url="<%= btn_url %>"><%= entry.name %></a> data-url="<%= btn_url %>"><%= entry.name %></a>
</p> </p>
<% if row_data.present? %> <% if row_data.present? %>
<p class="challenge_b_d">项目简介</p> <p class="challenge_b_d">项目简介</p>
<p class="break-word challenge_b_des"><%= raw row_data[:description] %></p> <p class="break-word challenge_b_des"><%= raw row_data[:description] %></p>
<p class="challenge_b_d">标注任务</p> <p class="challenge_b_d">标注任务</p>
<% if index ==2 %> <% if index ==2 %>
<p class="break-word challenge_b_des" style="color: #FC2F78;min-height: 60px"><%= row_data[:task] %></p> <p class="break-word challenge_b_des" style="color: #FC2F78;min-height: 60px"><%= row_data[:task] %></p>
<% else %> <% else %>
<p class="break-word challenge_b_des" style="color: #FC2F78;min-height: 80px"><%= row_data[:task] %></p> <p class="break-word challenge_b_des" style="color: #FC2F78;min-height: 80px"><%= row_data[:task] %></p>
<% end %> <% end %>
<p class="challenge_b_d">经典算法解读:</p> <p class="challenge_b_d">经典算法解读:</p>
<ul class="clearfix algorithm"> <ul class="clearfix algorithm">
<a href="<%= row_data[:link_url] %>" target="_blank"><%= row_data[:link_name] %></a> <a href="<%= row_data[:link_url] %>" target="_blank"><%= row_data[:link_name] %></a>
</ul> </ul>
<p class="enter_btn clearfix"> <p class="enter_btn clearfix">
<a href="javascript:void(0);" <a href="javascript:void(0);"
data-url="<%= btn_url %>" data-url="<%= btn_url %>"
class="setNewBnt <%= is_start ? 'active' : '' %>">点击进入代标注模块</a> class="setNewBnt <%= is_start ? 'active' : '' %>">点击进入代标注模块</a>
</p> </p>
<% end %> <% end %>
</li> </li>
<% end %> <% end %>
</ul> </ul>
</div> </div>
</div> </div>
<% index += 1 %> <% index += 1 %>
<% end %> <% end %>
<p class="second_code_6" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p> <p class="second_code_6" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p>
<% index += 1 %> <% index += 1 %>
<p class="second_code_7" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p> <p class="second_code_7" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p>
<% index += 1 %> <% index += 1 %>
<p class="second_code_8" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p> <p class="second_code_8" style="background: url(<%= named_attachment_path(@images[index], @images[index].try(:filename)) %>) no-repeat top center;"></p>
<script> <script>
$(function(){ $(function(){
var userLogged = <%= @user.present? && @user.logged? %>; var userLogged = <%= @user.present? && @user.logged? %>;
var userEnrolled = <%= @enrolled %>; var userEnrolled = <%= @enrolled %>;
$(".enter_btn .setNewBnt.active").on("click", function(){ $(".enter_btn .setNewBnt.active").on("click", function(){
var url = $(this).data("url"); var url = $(this).data("url");
if (!userLogged) { if (!userLogged) {
location.href = "<%= signin_url(back_url: competition_path(id: params[:id])) %>"; location.href = "<%= signin_url(back_url: competition_path(id: params[:id])) %>";
return; return;
} }
if (!userEnrolled) { if (!userEnrolled) {
sure_box_redirect_without_newtab_btn("<%= enroll_competition_path(id: params[:id]) %>", "完成报名后即可参赛", "我要报名"); sure_box_redirect_without_newtab_btn("<%= enroll_competition_path(id: params[:id]) %>", "完成报名后即可参赛", "我要报名");
return; return;
} }
var newTab = window.open("_blank"); var newTab = window.open("_blank");
newTab.location = url; newTab.location = url;
}) })
}) })
</script> </script>

@ -57,6 +57,14 @@
%> %>
var userEnrolled = <%= user_enrolled %>; var userEnrolled = <%= user_enrolled %>;
var userProfileModal = function(url, str) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix">提示</div>'+
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div>' +
'<div class="task-popup-submit clearfix"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>'+
'<a href="'+ url +'" class="task-btn task-btn-orange fr" target="_blank" onclick="hideModal();">立即完善</a></div></div>';
pop_box_new(htmlvalue, 480, 205);
}
$(".enroll-btn.active").on("click", function(){ $(".enroll-btn.active").on("click", function(){
var url = $(this).data("url"); var url = $(this).data("url");
@ -65,6 +73,11 @@
return; return;
} }
if (<%= !@user.profile_completed? %>) {
userProfileModal('/my/account?need_profile_completed=true', '您需要去完善您的个人资料,才能使用此功能');
return
}
if (!userEnrolled) { if (!userEnrolled) {
$.ajax({ $.ajax({
url: "/api/courses/apply_to_join_course.json", url: "/api/courses/apply_to_join_course.json",

@ -5,8 +5,10 @@
<% if @maximum_staff > 1 %> <% if @maximum_staff > 1 %>
<p class="sub_title"><%= @competition.sub_title %></p> <p class="sub_title"><%= @competition.sub_title %></p>
<p class="edu-txt-right inline mt20"> <p class="edu-txt-right inline mt20">
<% unless User.current.logged? %> <% if !User.current.logged? %>
<%= link_to "创建战队", signin_path, :remote => true, :class => "enroll-in-b enroll-in-b-green fr" %> <%= 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 %> <% else %>
<% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %> <% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %>
<% if !@can_enroll %> <% if !@can_enroll %>
@ -19,8 +21,10 @@
<% end %> <% end %>
<% end %> <% end %>
<% unless User.current.logged? %> <% if !User.current.logged? %>
<%= link_to "加入战队", signin_path, :remote => true, :class => "enroll-in-b fr" %> <%= 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 %> <% else %>
<% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %> <% unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now %>
<% if !@can_enroll %> <% if !@can_enroll %>
@ -153,6 +157,14 @@
pop_box_new(htmlvalue, 500, 205); pop_box_new(htmlvalue, 500, 205);
} }
function userProfileModal() {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix">提示</div>'+
'<div class="task-popup-content"><p class="task-popup-text-center font-16">您需要去完善您的个人资料,才能使用此功能</p></div>' +
'<div class="task-popup-submit clearfix"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>'+
'<a href="/my/account?need_profile_completed=true" class="task-btn task-btn-orange fr" onclick="hideModal();">立即完善</a></div></div>';
pop_box_new(htmlvalue, 480, 205);
}
function joinSure() { function joinSure() {
if ($("#codeinput").val().trim() == "") { if ($("#codeinput").val().trim() == "") {
$("#codeInput-notice").html("请输入邀请码"); $("#codeInput-notice").html("请输入邀请码");

@ -79,13 +79,21 @@
<div class="edu-menu-list" style="top:60px;width: 240px;"> <div class="edu-menu-list" style="top:60px;width: 240px;">
<div class="overPart"></div> <div class="overPart"></div>
<ul class="fl with50 edu-txt-center pr ul-leftline"> <ul class="fl with50 edu-txt-center pr ul-leftline">
<li><%= link_to '新建课堂', new_course_path() %></li> <% unless User.current.identity == "学生" %>
<li><%= link_to '新建课堂', new_course_path() %></li>
<% end %>
<li><%= link_to '新建实训', new_shixun_path() %></li> <li><%= link_to '新建实训', new_shixun_path() %></li>
<li><%= link_to '新建实践课程', new_subject_path() %></li> <li><%= link_to '新建实践课程', new_subject_path() %></li>
<li><%= link_to '新建项目', new_project_path() %></li> <li><%= link_to '新建项目', new_project_path() %></li>
</ul> </ul>
<ul class="fl with50 edu-txt-center"> <ul class="fl with50 edu-txt-center">
<li><%= link_to "加入课堂", join_private_courses_path, :remote => true %></li> <li>
<% if User.current.profile_completed? %>
<%= link_to "加入课堂", join_private_courses_path, :remote => true %>
<% else %>
<%= link_to "加入课堂", 'javascript:void(0)', onclick: 'showUserProfileModal()' %>
<% end %>
</li>
<!-- <li><%#= link_to "加入项目", applied_join_project_path, :remote => true %></li>--> <!-- <li><%#= link_to "加入项目", applied_join_project_path, :remote => true %></li>-->
</ul> </ul>
</div> </div>
@ -154,4 +162,12 @@
<% end %> <% end %>
}); });
function showUserProfileModal() {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix">提示</div>'+
'<div class="task-popup-content"><p class="task-popup-text-center font-16">您需要去完善您的个人资料,才能使用此功能</p></div>' +
'<div class="task-popup-submit clearfix"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>'+
'<a href="/my/account?need_profile_completed=true" class="task-btn task-btn-orange fr" onclick="hideModal();">立即完善</a></div></div>';
pop_box_new(htmlvalue, 480, 205);
}
</script> </script>

@ -66,9 +66,9 @@
<div class="edu-menu-list" style="top:60px;width: 240px;"> <div class="edu-menu-list" style="top:60px;width: 240px;">
<div class="overPart"></div> <div class="overPart"></div>
<ul class="fl with50 edu-txt-center pr ul-leftline"> <ul class="fl with50 edu-txt-center pr ul-leftline">
<li><%= link_to '新建实训', new_shixun_path() %></li> <li><%= link_to "新建实训", signin_path, :remote => true %></li>
<li><%= link_to '新建实践课程', new_subject_path() %></li> <li><%= link_to "新建实践课程", signin_path, :remote => true %></li>
<li><%= link_to '新建项目', new_project_path() %></li> <li><%= link_to "新建项目", signin_path, :remote => true %></li>
</ul> </ul>
<ul class="fl with50 edu-txt-center"> <ul class="fl with50 edu-txt-center">
<li><%= link_to "加入课堂", signin_path, :remote => true %></li> <li><%= link_to "加入课堂", signin_path, :remote => true %></li>

@ -18,7 +18,7 @@
</ul> </ul>
<div class="edu-position fr mt12 mb10"> <div class="edu-position fr mt12 mb10">
<%= hidden_field_tag(:type, params[:type]) %> <%= hidden_field_tag(:type, params[:type]) %>
<input class="winput-300-35 panel-box-sizing" placeholder="输入教学案例标题、编号进行检索" type="text" id="search_name"> <input class="winput-300-35 panel-box-sizing" placeholder="输入教学案例标题、作者、单位进行检索" type="text" id="search_name">
<a href="javascript:void(0);" class="edu-btn-search font-16 color-grey" id="search"><i class="fa fa-search"></i></a> <a href="javascript:void(0);" class="edu-btn-search font-16 color-grey" id="search"><i class="fa fa-search"></i></a>
</div> </div>
</div> </div>

@ -33,7 +33,7 @@
<td><%= member_user.try(:authentication_status) %></td> <td><%= member_user.try(:authentication_status) %></td>
<td><%= member_user.try(:professional_status) %></td> <td><%= member_user.try(:professional_status) %></td>
<td><%= member_user.try(:school_name) %></td> <td><%= member_user.try(:school_name) %></td>
<td><%= member_user.user_extensions.school.try(:province) %></td> <td><%= member_user.user_extensions.try(:school).try(:province) %></td>
<td><%= format_time member.created_at %></td> <td><%= format_time member.created_at %></td>
</tr> </tr>
<% end %> <% end %>

@ -193,9 +193,10 @@
<% if User.current.admin? %> <% if User.current.admin? %>
<label class="panel-form-label fl mr18">管理员:</label> <label class="panel-form-label fl mr18">管理员:</label>
<span class="fl"> <span class="fl">
<input type="checkbox" <%= @user.admin? ? "checked" : "" %> name="admin" value="<%= @user.admin? ? "1" : "0" %>" id="person_admin" class="magic-checkbox" style="float:left; margin-top: 8px;"> <input type="checkbox" <%= @user.admin? ? "checked" : "" %> id="person_admin" class="magic-checkbox" style="float:left; margin-top: 8px;">
<label for="person_admin"></label> <label for="person_admin"></label>
</span> </span>
<input type="hidden" id="user_admin" name="admin" value="<%= @user.admin? ? "1" : "0" %>">
<% end %> <% end %>
</li> </li>
@ -636,9 +637,9 @@
<% if User.current.admin? %> <% if User.current.admin? %>
var admin_check = document.getElementById('person_admin').checked; var admin_check = document.getElementById('person_admin').checked;
if (admin_check) { if (admin_check) {
document.getElementById('person_admin').value = "1"; document.getElementById('user_admin').value = "1";
} else { } else {
document.getElementById('person_admin').value = "0"; document.getElementById('user_admin').value = "0";
} }
<% end %> <% end %>
my_account_form_submit(); my_account_form_submit();

@ -2,8 +2,12 @@
praised = PraiseTread.praised(object) praised = PraiseTread.praised(object)
praise_num = get_praise_num(object) || 0 praise_num = get_praise_num(object) || 0
%> %>
<p class="noteDetailPoints plus-praise-btn" data-tip-down="点赞" style="<%= praised ? 'display:block' : 'display:none' %>"><i class="iconfont icon-dianzan"></i><br><span class="praise-num"><%= praise_num %></span></p> <% if User.current.try(:logged?) %>
<p class="noteDetailPointsBCD1E3 minus-praise-btn" data-tip-down="取消点赞" style="<%= praised ? 'display:none' : 'display:block' %>"><span>已赞</span><br><span class="praise-num"><%= praise_num %></span></p> <p class="noteDetailPoints plus-praise-btn" data-tip-down="点赞" style="<%= praised ? 'display:block' : 'display:none' %>"><i class="iconfont icon-dianzan"></i><br><span class="praise-num"><%= praise_num %></span></p>
<p class="noteDetailPointsBCD1E3 minus-praise-btn" data-tip-down="取消点赞" style="<%= praised ? 'display:none' : 'display:block' %>"><span>已赞</span><br><span class="praise-num"><%= praise_num %></span></p>
<% else %>
<p class="noteDetailPointsBCD1E3 minus-praise-btn unlogged"><i class="iconfont icon-dianzan"></i><br><span class="praise-num"><%= praise_num %></span></p>
<% end %>
<script> <script>
$(function(){ $(function(){
@ -26,6 +30,11 @@
}); });
$minusPraiseBtn.on('click', function(){ $minusPraiseBtn.on('click', function(){
if($(this).hasClass('unlogged')){
window.location.href = '<%= signin_path(back_url: request.original_url) %>';
return;
}
$.ajax({ $.ajax({
method: "get", method: "get",
url: "<%= praise_tread_praise_minus_path(obj_id: object.id, obj_type: object.class) %>", url: "<%= praise_tread_praise_minus_path(obj_id: object.id, obj_type: object.class) %>",

File diff suppressed because one or more lines are too long

@ -0,0 +1,13 @@
class ModifyTestUserForSchool < ActiveRecord::Migration
def up
school_ids = School.where("id < 1500").pluck(:id)
users = User.where(is_test: true).includes(:user_extensions)
users.find_each do |u|
school_id = school_ids.sample
u.user_extensions.update_column(:school_id, school_id) if u.user_extensions.present?
end
end
def down
end
end

@ -41,7 +41,7 @@ var proxy = "http://localhost:3000"
// proxy = "http://testbdweb.trustie.net" // proxy = "http://testbdweb.trustie.net"
// proxy = "http://testbdweb.educoder.net" // proxy = "http://testbdweb.educoder.net"
// proxy ="http://192.168.2.63:3000" // proxy ="http://192.168.2.63:3000"
// proxy='https://www.educoder.net' proxy='http://120.27.231.56:48080'
const requestMap={}; const requestMap={};
// 在这里使用requestMap控制避免用户通过双击等操作发出重复的请求 // 在这里使用requestMap控制避免用户通过双击等操作发出重复的请求
// 如果需要支持重复的请求考虑config里面自定义一个allowRepeat参考来控制 // 如果需要支持重复的请求考虑config里面自定义一个allowRepeat参考来控制

@ -258,20 +258,20 @@ class NewHeader extends Component {
} }
NewCoursesAndShixuns=(sum)=>{ NewCoursesAndShixuns=(sum)=>{
if(this.props.current_user&&this.props.current_user.login=== ""){
if(this.props.user&&this.props.user.login=== ""||this.props.user&&this.props.user===null||this.props.current_user&&this.props.current_user=== ""){
window.location.href = "/login";
}else if(this.state.current_user=== ""){
window.location.href = "/login"; window.location.href = "/login";
}else{ }else if(sum===1){
if(sum===1){ window.location.href = "/courses/new";
window.location.href = "/courses/new"; }else if(sum===2){
}else if(sum===2){ window.location.href = "/shixuns/new";
window.location.href = "/shixuns/new"; }else if(sum===3){
}else if(sum===3){ window.location.href = "/paths/new";
window.location.href = "/paths/new"; }else if(sum===4){
}else if(sum===4){ window.location.href = "/projects/new";
window.location.href = "/projects/new";
}
} }
} }
render() { render() {
@ -308,7 +308,7 @@ class NewHeader extends Component {
console.log(this.props.current_user&&this.props.current_user.login=== "") console.log(this.props.user&&this.props.user.is_student=== true||this.props.current_user&&this.props.current_user.is_student==true)
console.log(this.state.current_user) console.log(this.state.current_user)
// console.log(match.path.startsWith("/ec_courses")) // console.log(match.path.startsWith("/ec_courses"))
return ( return (
@ -477,7 +477,10 @@ class NewHeader extends Component {
<div className="edu-menu-list" style={{top: '60px',width:"240px"}}> <div className="edu-menu-list" style={{top: '60px',width:"240px"}}>
<div className="overPart"></div> <div className="overPart"></div>
<ul className="fl with50 edu-txt-center pr ul-leftline"> <ul className="fl with50 edu-txt-center pr ul-leftline">
<li><a onClick={()=>this.NewCoursesAndShixuns(1)}>新建课堂</a></li> {
this.props.user&&this.props.user.is_student=== false || this.props.current_user&&this.props.current_user.is_student==false?
<li><a onClick={()=>this.NewCoursesAndShixuns(1)}>新建课堂</a></li>:""
}
<li><a onClick={()=>this.NewCoursesAndShixuns(2)}>新建实训</a></li> <li><a onClick={()=>this.NewCoursesAndShixuns(2)}>新建实训</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(3)}>新建实践课程</a></li> <li><a onClick={()=>this.NewCoursesAndShixuns(3)}>新建实践课程</a></li>
<li><a onClick={()=>this.NewCoursesAndShixuns(4)}>新建项目</a></li> <li><a onClick={()=>this.NewCoursesAndShixuns(4)}>新建项目</a></li>

Loading…
Cancel
Save