dev_haigong
guange 6 years ago
commit 9c1f33d60a

@ -17,7 +17,7 @@ require 'digest'
class EcloudController < ApplicationController class EcloudController < ApplicationController
skip_before_filter :verify_authenticity_token skip_before_filter :verify_authenticity_token
# before_filter :check_sign, only: [:ps_new, :ps_update, :bs_new, :bs_update] before_filter :check_sign, only: [:ps_new, :ps_update, :bs_new, :bs_update]
before_filter :save_para before_filter :save_para
before_filter :user_setup before_filter :user_setup
@ -48,61 +48,87 @@ class EcloudController < ApplicationController
# applyno 申请单号,唯一 # applyno 申请单号,唯一
# ecordercode 唯一标志一个企业的订购关系 # ecordercode 唯一标志一个企业的订购关系
# params['opttype']操作类型。0开通1变更2试用转商用4再次开通 # params['opttype']操作类型。0开通1变更2试用转商用4再次开通
# 业务列表opttype: 0新增1注销2修改
# serviceparas: 但是由于企业版是按成员收费的所以serviceparas里面会传成员数个人版是包月计费的serviceparas不会传成员数
def bs_new def bs_new
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
ecloud_id = 0
if params['opttype'] == 0 # 开通企业/个人业务 if params['opttype'] == 0 # 开通企业/个人业务
ecloud = Ecloud.create!(eloud_params) ecloud = Ecloud.create!(eloud_params)
ecloud_id = ecloud.try(:id) create_service(params['services'], ecloud.try(:id))
create_product_params(params['productparas'], ecloud.try(:id)) if params['productparas'].present?
# 为管理员添加一条记录
# 开通的时候都是用户的opttype也是0
EcloudUser.create!(custid: params['custid'], opttype: params['opttype'], userid: params['userid'],
username: params['username'], useralias: params['useralias'],
mobile: params['mobile'], email: params['email'], begintime: params['begintime'],
endtime: params['endtime'])
elsif params['opttype'] == 2 # 试用转商用 # 变更企业/个人业务 elsif params['opttype'] == 2 # 试用转商用 # 变更企业/个人业务
ecloud = Ecloud.where(custid: params['custid'], custcode: params['custcode']).first # 业务列表:注销业务(注销试用的套餐),另一个业务项的操作代码是:新增业务(开通商用的套餐)
ecloud.update_attributes!(eloud_params) # 需要通过产品服务编号和业务编码来区分哪个产品
ecloud.ecloud_productparas.destroy ecloud = Ecloud.where(custid: params['custid'], custcode: params['custcode'], productcode: params['productcode'], trial: true).first
ecloud.ecloud_services.destroy
ecloud_id = ecloud.try(:id) # 注销试用的套餐
elsif params['opttype'] == 1 # 业务变更 ## 需要注销的套餐; 试用转商用是不会有批量操作的所以可以使用first
ecloud = Ecloud.where(bossorderid: params['bossorderid']).first des_service = params['services'].select{|s| s['opttype'] == 1}.first
ecloud.update_attributes!(eloud_params) esd = EcloudService.where(ecloud_id: ecloud.try(:id), code: des_service['code']).first
ecloud.ecloud_productparas.destroy ecloud.update_attribute(:trial, params['trial'])
ecloud.ecloud_services.destroy esd.update_attributes!(opttype: des_service['opttype'], begintime: des_service['begintime'], endtime: des_service['endtime'])
ecloud_id = ecloud.try(:id) # 试用转商用是不会有批量操作的
# 新增业务
add_service = params['services'].select{|s| s['opttype'] == 0}
create_service(add_service, ecloud.try(:id))
#
elsif params['opttype'] == 4 # 再次重复开通 elsif params['opttype'] == 1 # 业务变更
REDO ecloud = Ecloud.where(custid: params['custid'], custcode: params['custcode'], productcode: params['productcode']).first
ecloud = Ecloud.where(bossorderid: params['bossorderid']).first # 套餐变更
end # 新增业务
add_service = params['services'].select{|s| s['opttype'] == 0}
# 业务列表 create_service(add_service, ecloud.try(:id)) if add_service.present?
services = params['services']
if services.present? # 如果有注销业务,注销业务
services.each do |service| des_services = params['services'].select{|s| s['opttype'] == 1}
es = EcloudService.create(opttype: service['opttype'], code: service['code'], begintime: service['begintime'], if des_services.present?
endtime: service['endtime'], ecloud_id: ecloud_id) des_services.each do |ds|
if service['serviceparas'].present? esd = EcloudService.where(ecloud_id: ecloud.try(:id), code: ds['code']).first
service['serviceparas'].each do |servicepara| esd.update_attributes!(opttype: ds['opttype'], begintime: ds['begintime'], endtime: ds['endtime'])
EcloudServieceServicepara.create!(ecloud_service_id: es.id, key: servicepara['key'], value: servicepara['value'])
end
end end
end end
end
# 应用开通参数 # 变更业务
productparas = params['productparas'] edt_services = params['services'].select{|s| s['opttype'] == 2}
if productparas.present? if edt_services.present?
productparas.each do |productpara| edt_services.each do |es|
EcloudProductpara.create!(key: productpara['key'], value: productpara['value'], ecloud_id: ecloud_id) ese = EcloudService.where(ecloud_id: ecloud.try(:id), code: es['code']).first
ese.update_attributes!(opttype: es['opttype'], begintime: es['begintime'], endtime: es['endtime'])
create_serviceparas es['serviceparas'].first, ese.id
end
end end
end
# 非试用情况下,为管理员单独创建一条账号,企业账号
unless params['trial'] # ecloud = Ecloud.where(bossorderid: params['bossorderid']).first
EcloudUser.create!(ecloud_id: ecloud.try(:id), opttype: params['opttype'], userid: params['userid'], # ecloud.update_attributes!(eloud_params)
username: params['username'], useralias: params['useralias'], # ecloud.ecloud_productparas.destroy
mobile: params['mobile'], email: params['email']) # ecloud.ecloud_services.destroy
#
# ecloud_id = ecloud.try(:id)
elsif params['opttype'] == 4 # 再次重复开通
ecloud = Ecloud.where(custid: params['custid'], custcode: params['custcode'], productcode: params['productcode']).first
create_service(params['services'], ecloud.try(:id))
create_product_params(params['productparas'], ecloud.try(:id)) if params['productparas'].present?
end end
#
# # 非试用情况下,为管理员单独创建一条账号,企业账号
# unless params['trial']
# EcloudUser.create!(ecloud_id: ecloud.try(:id), opttype: params['opttype'], userid: params['userid'],
# username: params['username'], useralias: params['useralias'],
# mobile: params['mobile'], email: params['email'])
# end
render :json => {result: true, errmsg: ""} render :json => {result: true, errmsg: ""}
rescue Exception => e rescue Exception => e
logger.error(e.message) logger.error(e.message)
@ -113,17 +139,31 @@ class EcloudController < ApplicationController
end end
# 企业/个人业务变更、注销 # 企业/个人业务变更、注销
# 处理业务平台退订、暂停(欠费暂停,信控暂停等)、暂停后恢复应用业务
# 这个接口是不会新增业务的
# 试用退订的时候bossorderid传空字符
def bs_update def bs_update
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
ecloud = Ecloud.where(custid: params['custid'], custcode: params['custcode']).first case params['opttype']
ecloud.update_attributes!(applyno: params['applyno'], ecordercode: params['ecordercode'], opttype: params['opttype'], when 0 # 退订
custid: params['custid'], custcode: params['custcode'], productcode: params['productcode'], opttype = 6
operatime: params['operatime'], effecttime: params['effecttime']) when 1 # 暂停
services = params['services'].first opttype = 7
ecloud.ecloud_service.update_attributes!(packagecode: services['packagecode'], bossorderid: services['bossorderid']) when 2 # 恢复
opttype = 8
end
if params['bossorderid'].present?
ecloud = Ecloud.where(bossorderid: params['bossorderid']).first
ecloud.update_attribute(:opttype, opttype)
else
# 试用退订
params['services'].each do |service|
ecloud_id = EcloudService.where(code: service['packagecode']).first.try(:ecloud_id)
Ecloud.find(ecloud_id).update_attribute(:opttype, opttype)
end
end
render :json => {result: true, errmsg: ""} render :json => {result: true, errmsg: ""}
rescue Exception => e rescue Exception => e
logger.error(e.message) logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"} render :json => {code: 500, msg: "#{e.message}"}
@ -134,37 +174,55 @@ class EcloudController < ApplicationController
# 用户业务开通与变更接口 # 用户业务开通与变更接口
# 授权statu为1取消授权status为0 # 授权statu为1取消授权status为0
# user['opttype']: 操作类型0开通1变更3: 取消授权4暂停5恢复
def ps_new def ps_new
begin ActiveRecord::Base.transaction do
user_params = params['users'] begin
user_params.each do |user_param| user_params = params['users']
EcloudUser.create!(custid: params['custid'], opttype: user_param['opttype'], userid: user_param['userid'], user_params.each do |user_param|
username: user_param['username'], useralias: user_param['useralias'], if user_param['opttype'] == 0 # 开通
mobile: user_param['mobile'], email: user_param['email'], begintime: user_param['begintime'].to_s, EcloudUser.create!(custid: params['custid'], opttype: user_param['opttype'], userid: user_param['userid'],
endtime: user_param['endtime'].to_s, status: 1) username: user_param['username'], useralias: user_param['useralias'],
mobile: user_param['mobile'], email: user_param['email'], begintime: user_param['begintime'].to_s,
endtime: user_param['endtime'].to_s)
elsif user_param['opttype'] == 1 # 变更
ecloud_user = EcloudUser.where(custid: params['custid'], userid: user_param['userid']).first
ecloud_user.update_attributes!(opttype: user_param['opttype'], username: user_param['username'],
useralias: user_param['useralias'], mobile: user_param['mobile'], email: user_param['email'],
begintime: user_param['begintime'].to_s, endtime: user_param['endtime'].to_s)
end
end
render :json => {success: true, errmsg: ""}
# end
rescue Exception => e
logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"}
raise ActiveRecord::Rollback
end end
render :json => {success: true, errmsg: ""}
# end
rescue Exception => e
logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"}
end end
end end
# 用户业务状态变更 # 用户业务状态变更
# 授权statu为1取消授权status为0 # user['opttype']: 操作类型0开通1变更3: 取消授权4暂停5恢复
def ps_update def ps_update
begin begin
user_params = params['users'] user_params = params['users']
user_params.each do |user_param| user_params.each do |user_param|
ecloud_user = EcloudUser.where(userid: user_param['userid'], status: 1).first case user_param['opttype']
ecloud_user.update_attributes(opttype: user_param['opttype'], userid: user_param['userid'], status: 0) when 0 # 取消授权
opttype = 3
when 1 # 暂停
opttype = 4
when 2 # 恢复
opttype = 5
end
ecloud_user = EcloudUser.where(custid: params['custid'], userid: user_param['userid']).first
ecloud_user.update_attributes!(opttype: opttype, operatime: params['operatime'], effecttime: params['effecttime'])
end end
render :json => {success: true, errmsg: ""} render :json => {success: true, errmsg: ""}
# else
# render :json => {code: 404, msg: "企业ID不存在"}
# end
rescue Exception => e rescue Exception => e
logger.error(e.message) logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"} render :json => {code: 500, msg: "#{e.message}"}
@ -269,6 +327,28 @@ class EcloudController < ApplicationController
endtime: params['endtime']} endtime: params['endtime']}
end end
# 新增套餐
def create_service services, ecloud_id
services.each do |service|
ese = EcloudService.create!(opttype: service['opttype'], code: service['code'], begintime: service['begintime'],
endtime: service['endtime'], ecloud_id: ecloud_id)
if service['serviceparas'].present?
create_serviceparas(service['serviceparas'].first, ese.id)
end
end
end
def create_serviceparas params_serviceparas, ese_id
if params_serviceparas.present?
EcloudServieceServicepara.create(key: params_serviceparas['key'], value: params_serviceparas['value'], ecloud_service_id: ese_id)
end
end
def create_product_params params, ecloud_id
params.each do |p|
EcloudProductpara.create(key: p['key'], value: p['value'], ecloud_id: ecloud_id)
end
end
def check_sign def check_sign
sign = sign(params['timestamp']) sign = sign(params['timestamp'])
@ -279,7 +359,8 @@ class EcloudController < ApplicationController
end end
def save_para def save_para
EcloudLog.create(url: request.url, para_value: params, applyno: params['applyno'], custid: params['custid'], custcode: params['custcode']) EcloudLog.create(url: request.url, para_value: params, applyno: params['applyno'], custid: params['custid'],
custcode: params['custcode'], userid: params['userid'], username: params['username'])
end end
end end

@ -33,6 +33,28 @@ module ApplicationHelper
extend Forwardable extend Forwardable
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
# 课堂相关controller
def course_controller
["courses", "homework_common", "student_work", "exercise", "poll", "boards", "messages", "graduation_topics", "graduation_tasks",
"graduation_works", "files"]
end
# 实训课程相关controller
def subjects_controller
["subjects", "stages"]
end
# 实训路径相关controller
def shixuns_controller
["shixuns", "challenges", "myshixuns", "games"]
end
# 工程认证相关controller
def ecs_controller
["ecs", "ec_courses", "ec_course_evaluations", "ec_course_supports", "ec_course_targets", "ec_graduation_requirements",
"ec_major_schools", "ec_majors", "ec_years"]
end
def exercise_bank_json_data exercises def exercise_bank_json_data exercises
exercises.map do |exercise| exercises.map do |exercise|
exercise_path = exercise_bank_path(exercise) exercise_path = exercise_bank_path(exercise)

@ -15,6 +15,8 @@ module SubjectsHelper
'<span class="fr color-grey-9">已发布</span>' '<span class="fr color-grey-9">已发布</span>'
when 3 when 3
'<span class="fr color-grey-9">已关闭</span>' '<span class="fr color-grey-9">已关闭</span>'
else
""
end end
else else
if shixun_status != 2 if shixun_status != 2
@ -23,6 +25,8 @@ module SubjectsHelper
'<span class="fr color-grey-c">暂未公开</span>' '<span class="fr color-grey-c">暂未公开</span>'
when 3 when 3
'<span class="fr color-grey-9">已关闭</span>' '<span class="fr color-grey-9">已关闭</span>'
else
""
end end
else else
"" ""

@ -1,3 +1,3 @@
class EcloudLog < ActiveRecord::Base class EcloudLog < ActiveRecord::Base
attr_accessible :para_value, :url, :applyno, :custid, :custcode
end end

@ -1,3 +1,3 @@
class EcloudUser < ActiveRecord::Base class EcloudUser < ActiveRecord::Base
attr_accessible :begintime, :email, :endtime, :mobile, :opttype, :paras, :useralias, :userid, :username, :custid, :status, :ecloud_id has_many :ecloud_user_paras
end end

@ -0,0 +1,3 @@
class EcloudUserPara < ActiveRecord::Base
belongs_to :ecloud_user
end

@ -188,9 +188,9 @@ class HomeworkCommon < ActiveRecord::Base
# end # end
end end
def is_program_homework? # def is_program_homework?
self.homework_type == 2 && self.homework_detail_programing # self.homework_type == 2 && self.homework_detail_programing
end # end
def is_group_homework? def is_group_homework?
self.homework_type == 3 && self.homework_detail_group self.homework_type == 3 && self.homework_detail_group
@ -225,6 +225,6 @@ class HomeworkCommon < ActiveRecord::Base
end end
end end
delegate :language_name, :language, :to => :homework_detail_programing # delegate :language_name, :language, :to => :homework_detail_programing
end end

@ -24,7 +24,7 @@ class StudentWork < ActiveRecord::Base
scope :all_commit, lambda{where("work_status != 0")} scope :all_commit, lambda{where("work_status != 0")}
before_destroy :delete_praise before_destroy :delete_praise
before_save :set_program_score, :set_src before_save :set_program_score
after_save :update_avg_sum_score after_save :update_avg_sum_score
# after_create :act_as_message # after_create :act_as_message
@ -34,25 +34,26 @@ class StudentWork < ActiveRecord::Base
PraiseTread.where("praise_tread_object_id = #{self.id} AND praise_tread_object_type = 'StudentWork'").destroy_all PraiseTread.where("praise_tread_object_id = #{self.id} AND praise_tread_object_type = 'StudentWork'").destroy_all
end end
def last_test # def last_test
student_work_tests.order('id desc').first # student_work_tests.order('id desc').first
end # end
private private
def set_program_score def set_program_score
if self.homework_common.is_program_homework? #编程作业,学生提交作品后计算系统得分 # if self.homework_common.is_program_homework? #编程作业,学生提交作品后计算系统得分
#根据最后一次测试计算得分 # #根据最后一次测试计算得分
unless last_test # unless last_test
self.system_score = 0 # self.system_score = 0
else # else
self.system_score = last_test.test_score self.homework_common.homework_tests.size # self.system_score = last_test.test_score self.homework_common.homework_tests.size
end # end
end # end
set_final_score self.homework_common,self set_final_score self.homework_common,self
end end
def set_src
self.description = last_test.src if last_test # def set_src
end # self.description = last_test.src if last_test
# end
#成绩计算 #成绩计算
def set_final_score homework,student_work def set_final_score homework,student_work
@ -217,8 +218,8 @@ class StudentWork < ActiveRecord::Base
# status == 0 : delay # status == 0 : delay
def act_as_message def act_as_message
if self.work_status != 0 && self.created_at > self.homework_common.end_time # if self.work_status != 0 && self.created_at > self.homework_common.end_time
self.course_messages << CourseMessage.new(:user_id => self.user_id, :course_id => self.homework_common.course_id, :viewed => false, :status => false) # self.course_messages << CourseMessage.new(:user_id => self.user_id, :course_id => self.homework_common.course_id, :viewed => false, :status => false)
end # end
end end
end end

@ -88,15 +88,28 @@ class GamesService
# tpm_script_modified = (shixun.reset_time > myshixun.reset_time ? true : false) # 新结构脚本是实时传送的,所以不会影响 # tpm_script_modified = (shixun.reset_time > myshixun.reset_time ? true : false) # 新结构脚本是实时传送的,所以不会影响
# 区分评测过未评测过,未评测过按需求取数据 # 区分评测过未评测过,未评测过按需求取数据
if max_query_index > 0 sql =
qurey_test_sets = TestSet.find_by_sql("SELECT o.actual_output, o.out_put, o.result, o.test_set_position, o.query_index,t.is_public,t.input, t.output, g.id as game_id, c.id as challenge_id FROM outputs o,games g ,challenges c,test_sets t where if max_query_index > 0
g.id=#{game.id} and o.query_index=#{max_query_index} and g.id = o.game_id and c.id= g.challenge_id and t.challenge_id = c.id and t.position =o.test_set_position order by o.query_index "SELECT
") b.actual_output, b.out_put, b.result, a.is_public, a.input, a.output
else FROM
qurey_test_sets = TestSet.find_by_sql("SELECT t.is_public,t.input, t.output,t.position FROM games g ,challenges c,test_sets t where (SELECT position, input, output, challenge_id, is_public FROM test_sets where challenge_id=6000) a
g.id=#{game.id} and c.id= g.challenge_id and t.challenge_id = c.id LEFT JOIN
") (SELECT
end result, test_set_position, g.challenge_id, o.actual_output, o.out_put
FROM
outputs o left join games g on g.id=o.game_id
WHERE
game_id=#{game.id} and query_index = #{max_query_index}
) b
ON
b.challenge_id = a.challenge_id and b.test_set_position = a.position"
else
"SELECT t.is_public, t.input, t.output, t.position
FROM games g ,challenges c,test_sets t
WHERE g.id=#{game.id} and c.id= g.challenge_id and t.challenge_id = c.id"
end
qurey_test_sets = TestSet.find_by_sql(sql)
# 测试集统计及处理 # 测试集统计及处理
unless qurey_test_sets.blank? unless qurey_test_sets.blank?

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><meta name="renderer" content="webkit"/><meta name="force-rendering" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico"><title>Educoder</title><script type="text/javascript">window.__isR=!0</script><link rel="stylesheet" href="/react/build/css/css_min_all.css"><link rel="stylesheet" href="/assets/iconfont/iconfont.css"><link href="/react/build/./static/css/main.c95e49c6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="md_div" style="display:none"></div><div id="root" class="page -layout-v -fit"></div><div id="picture_display" style="display:none"></div><script type="text/javascript" src="/react/build/js/js_min_all.js"></script><script type="text/javascript" src="/assets/kindeditor/kindeditor.js"></script><script type="text/javascript" src="/react/build/js/create_kindeditor.js"></script><script type="text/javascript" src="/javascripts/educoder/edu_application.js"></script><script type="text/javascript" src="/react/build/./static/js/main.ea3ca4b2.js"></script></body></html> <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><meta name="renderer" content="webkit"/><meta name="force-rendering" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico"><title>Educoder</title><script type="text/javascript">window.__isR=!0</script><link rel="stylesheet" href="/react/build/css/css_min_all.css"><link rel="stylesheet" href="/assets/iconfont/iconfont.css"><link href="/react/build/./static/css/main.80b6ec5e.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="md_div" style="display:none"></div><div id="root" class="page -layout-v -fit"></div><div id="picture_display" style="display:none"></div><script type="text/javascript" src="/react/build/js/js_min_all.js"></script><script type="text/javascript" src="/assets/kindeditor/kindeditor.js"></script><script type="text/javascript" src="/react/build/js/create_kindeditor.js"></script><script type="text/javascript" src="/javascripts/educoder/edu_application.js"></script><script type="text/javascript" src="/react/build/./static/js/main.b4ee5e8a.js"></script></body></html>

@ -2,10 +2,10 @@
<%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg"), home_path %> <%= link_to image_tag("/images/educoder/headNavLogo.png", alt:"高校智能化教学与实训平台", class:"logoimg"), home_path %>
<div class="head-nav pr"> <div class="head-nav pr">
<ul id="header-nav"> <ul id="header-nav">
<li class="<%= params[:action] == "index" && params[:controller] == "subjects" ? " active" : "" %>"><%= link_to "实训课程", subjects_path %></li> <li class="<%= subjects_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "实训课程", subjects_path %></li>
<li class="<%= params[:action] == "index" && params[:controller] == "courses" ? " active" : "" %>"><%= link_to "翻转课堂", courses_path %></li> <li class="<%= course_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "翻转课堂", courses_path %></li>
<!-- 精选实训 --> <!-- 精选实训 -->
<li class="pr<%= params[:action] == "index" && params[:controller] == "shixuns" ? " active" : "" %>"><%= link_to "开发社区", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li> <li class="pr<%= shixuns_controller.include?(params[:controller]) ? " active" : "" %>"><%= link_to "开发社区", shixuns_path %><img src="/images/educoder/hot-h.png" class="nav-img" /></li>
<% careers = Career.published.order("created_at asc") %> <% careers = Career.published.order("created_at asc") %>
<% if careers.present? %> <% if careers.present? %>
@ -18,10 +18,10 @@
</ul> </ul>
</li> </li>
<% end %> <% end %>
<li class="<%= params[:action] == "index" && params[:controller] == "competitions" ? " active" : "" %>"><%= link_to "竞赛", competitions_path %></li> <li class="<%= params[:controller] == "competitions" ? " active" : "" %>"><%= link_to "竞赛", competitions_path %></li>
<li class="<%= params[:action] == "index" && params[:controller] == "forums" ? " active" : "" %>"><%= link_to "问答", forums_path %></li> <li class="<%= params[:controller] == "forums" ? " active" : "" %>"><%= link_to "问答", forums_path %></li>
<% if User.current.ec_school.present? %> <% if User.current.ec_school.present? %>
<li class="<%= params[:controller] == "ecs" ? " active" : "" %>" id="ec_banner"> <li class="<%= ecs_controller.include?(params[:controller]) ? " active" : "" %>" id="ec_banner">
<%= link_to "认证", department_ecs_path(:school_id => User.current.ec_school) %> <%= link_to "认证", department_ecs_path(:school_id => User.current.ec_school) %>
</li> </li>
<% end %> <% end %>

@ -91,22 +91,19 @@
document.getElementById('nHeader').style.left=sl+'px'; document.getElementById('nHeader').style.left=sl+'px';
} }
$(function () { $(function () {
<% if params[:action] == "index" %>
var $header = $("#header-nav").children("li"); var $header = $("#header-nav").children("li");
<% case params[:controller] %> <% if params[:controller] == "welcome" %>
<% when "welcome" %>
$("#header-nav").children("li").eq(0).addClass("active"); $("#header-nav").children("li").eq(0).addClass("active");
<% when "shixuns" %> <% elsif subjects_controller.include?(params[:controller]) %>
$("#header-nav").children("li").eq(1).addClass("active"); $("#header-nav").children("li").eq(1).addClass("active");
<% when "subjects" %> <% elsif course_controller.include?(params[:controller]) %>
$("#header-nav").children("li").eq(2).addClass("active"); $("#header-nav").children("li").eq(2).addClass("active");
<% when "courses" %> <% elsif shixuns_controller.include?(params[:controller]) %>
$header.length == 7 ? $header.eq(4).addClass("active") : $header.eq(3).addClass("active"); $header.length == 7 ? $header.eq(2).addClass("active") : $header.eq(3).addClass("active");
<% when "competitions" %> <% elsif params[:controller] == "competitions" %>
$header.length == 7 ? $header.eq(5).addClass("active") : $header.eq(4).addClass("active"); $header.length == 7 ? $header.eq(5).addClass("active") : $header.eq(4).addClass("active");
<% when "forums" %> <% elsif params[:controller] == "forums" %>
$header.length == 7 ? $header.eq(6).addClass("active") : $header.eq(5).addClass("active"); $header.length == 7 ? $header.eq(6).addClass("active") : $header.eq(5).addClass("active");
<% end %> <% end %>
<% end %>
}) })
</script> </script>

@ -70,22 +70,7 @@
</div> </div>
<% end %> <% end %>
<script> <script>
/* -------------- 简介Md -------------------- */
var shixunPro = editormd.markdownToHTML("shixuns_propaedeutics", {
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
/* -------------- 简介Md -------------------- */
var shixunPro = editormd.markdownToHTML("subject_learning_notes", {
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
var flag = true; var flag = true;
$(function() { $(function() {

@ -109,6 +109,23 @@
<% end %> <% end %>
</div> </div>
<script> <script>
/* -------------- 简介Md -------------------- */
var shixunPro = editormd.markdownToHTML("shixuns_propaedeutics", {
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
/* -------------- 课程须知MD -------------------- */
var shixunPro = editormd.markdownToHTML("subject_learning_notes", {
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
//点击新建阶段 //点击新建阶段
$(".click_add").click(function(){ $(".click_add").click(function(){
if($("#new_stage_form").length == 1){ if($("#new_stage_form").length == 1){

@ -0,0 +1,5 @@
class AddProductcodeToUcloudService < ActiveRecord::Migration
def change
add_column :ecloud_services, :productcode, :string
end
end

@ -1,30 +0,0 @@
class MigrationShixunStudentWork < ActiveRecord::Migration
def up
works = StudentWork.where("myshixun_id != 0 and myshixun_id not in (select id from myshixuns) and (work_score is null or work_score = 0)")
works.update_all(:myshixun_id => 0, :work_status => 0, :work_score => nil, :final_score => nil,
:cost_time => 0, :update_time => nil, :compelete_status => 0, :commit_time => nil)
shixun_works = StudentWork.where("myshixun_id != 0 and myshixun_id not in (select id from myshixuns) and work_score > 0")
shixun_works.each do |work|
if work.homework_common && work.homework_common.homework_commons_shixuns.try(:shixun)
shixun = work.homework_common.homework_commons_shixuns.try(:shixun)
# 创建新的myshixun和games
myshixun = nil
work_score = work.final_score
work.homework_common.homework_challenge_settings.each do |setting|
if work_score > 1
myshixun.games.where(:challenge_id => setting.challenge_id).first.update_attributes(:status => 2)
work_score -= setting.score
end
end
work.update_column("myshixun_id", myshixun.id)
end
end
end
def down
end
end

@ -0,0 +1,6 @@
class AddUseridToEcloudLog < ActiveRecord::Migration
def change
add_column :ecloud_logs, :userid, :integer
add_column :ecloud_logs, :username, :string
end
end

@ -0,0 +1,11 @@
class CreateEcloudUserParas < ActiveRecord::Migration
def change
create_table :ecloud_user_paras do |t|
t.string :key
t.string :value
t.integer :ecloud_user_id
t.timestamps
end
end
end

@ -0,0 +1,6 @@
class AddOperatimeToEcloudUsers < ActiveRecord::Migration
def change
add_column :ecloud_users, :operatime, :bigint
add_column :ecloud_users, :effecttime, :bigint
end
end

@ -0,0 +1,75 @@
class CreateShixunStudentWorks < ActiveRecord::Migration
def up
ActiveRecord::Base.transaction do
begin
works = StudentWork.where("myshixun_id != 0 and myshixun_id not in (select id from myshixuns) and (work_score is null or work_score = 0)")
works.update_all(:myshixun_id => 0, :work_status => 0, :work_score => nil, :final_score => nil,
:cost_time => 0, :update_time => nil, :compelete_status => 0, :commit_time => nil)
shixun_works = StudentWork.where("myshixun_id != 0 and myshixun_id not in (select id from myshixuns) and work_score > 0")
shixun_works.each do |work|
shixun = work.homework_common.try(:homework_commons_shixuns).try(:shixun)
user = work.user
if shixun.present? && user.present?
# 创建新的myshixun和games
# fork版本库如果用户没有同步则先同步用户
g = Gitlab.client
if user.gid.nil?
s = Trustie::Gitlab::Sync.new
s.sync_user(user)
end
gshixun = g.fork(shixun.gpid, user.gid)
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
code = down_generate_identifier("myshixun")
# 一般通过默认分支是否存在来判断一个项目是否fork成功
if gshixun.try(:id).present?
commit_id = g.commits(shixun.gpid).first.try(:id)
# educoder 加入到myshixun中
myshixun_admin_gid = User.where(:login => "educoder").first.try(:gid)
g.add_team_member(gshixun.id, myshixun_admin_gid, 40) # 40代表角色master
myshixun = Myshixun.create!(:shixun_id => shixun.id, :user_id => user.id, :identifier => code,
:modify_time => shixun.modify_time, :reset_time => shixun.reset_time,
:onclick_time => Time.now, :gpid => gshixun.id,
:git_url => gshixun.try(:path_with_namespace), :commit_id => commit_id)
rep_url = Base64.urlsafe_encode64(gitlab_url shixun) # 注意educoder为默认给实训创建版本库的用户如果换成别的用户名字要相应的修改
uri = "#{shixun_tomcat}/bridge/game/openGameInstance"
params = {tpiID: "#{myshixun.id}", tpmGitURL:rep_url, tpiRepoName: gshixun.try(:name)}
logger.info("openGameInstance params is #{params}")
res = uri_exec uri, params
if (res && res['code'].to_i != 0)
raise("实训云平台繁忙繁忙等级83")
end
# 其它创建关卡等操作
challenges = shixun.challenges
# 之所以增加user_id是为了方便统计查询性能
challenges.each_with_index do |challenge, index|
status = (index == 0 ? 0 : 3)
code = down_generate_identifier("game")
Game.create!(:challenge_id => challenge.id, :myshixun_id => myshixun.id, :status => status, :user_id => myshixun.user_id,
:open_time => Time.now, :identifier => code, :modify_time => challenge.modify_time)
end
work_score = work.final_score
work.homework_common.homework_challenge_settings.each do |setting|
if work_score > 1
games = myshixun.games.where(:challenge_id => setting.challenge_id).first
games.update_attributes(:status => 2, :end_time => Time.now, :final_score => setting.challenge.score)
work_score -= setting.score
end
end
work.update_column("myshixun_id", myshixun.id)
end
end
end
rescue Exception => e
puts ("###failed to exec shixun: current task id is #{e}")
g.delete_project(gshixun.id) if gshixun.try(:id).present?
raise ActiveRecord::Rollback
end
end
end
def down
end
end

@ -1,88 +1,88 @@
{ {
"./static/js/0.6b9d3c60.chunk.js": "./static/js/0.6b9d3c60.chunk.js", "./static/js/0.f26528b1.chunk.js": "./static/js/0.f26528b1.chunk.js",
"./static/js/0.6b9d3c60.chunk.js.map": "./static/js/0.6b9d3c60.chunk.js.map", "./static/js/0.f26528b1.chunk.js.map": "./static/js/0.f26528b1.chunk.js.map",
"./static/js/1.5f152c98.chunk.js": "./static/js/1.5f152c98.chunk.js", "./static/js/1.cc33d6fc.chunk.js": "./static/js/1.cc33d6fc.chunk.js",
"./static/js/1.5f152c98.chunk.js.map": "./static/js/1.5f152c98.chunk.js.map", "./static/js/1.cc33d6fc.chunk.js.map": "./static/js/1.cc33d6fc.chunk.js.map",
"./static/js/10.2464b0fd.chunk.js": "./static/js/10.2464b0fd.chunk.js", "./static/js/10.943803f2.chunk.js": "./static/js/10.943803f2.chunk.js",
"./static/js/10.2464b0fd.chunk.js.map": "./static/js/10.2464b0fd.chunk.js.map", "./static/js/10.943803f2.chunk.js.map": "./static/js/10.943803f2.chunk.js.map",
"./static/js/11.03d0c22e.chunk.js": "./static/js/11.03d0c22e.chunk.js", "./static/js/11.c1a78f08.chunk.js": "./static/js/11.c1a78f08.chunk.js",
"./static/js/11.03d0c22e.chunk.js.map": "./static/js/11.03d0c22e.chunk.js.map", "./static/js/11.c1a78f08.chunk.js.map": "./static/js/11.c1a78f08.chunk.js.map",
"./static/js/12.ec0ef070.chunk.js": "./static/js/12.ec0ef070.chunk.js", "./static/js/12.fd69873b.chunk.js": "./static/js/12.fd69873b.chunk.js",
"./static/js/12.ec0ef070.chunk.js.map": "./static/js/12.ec0ef070.chunk.js.map", "./static/js/12.fd69873b.chunk.js.map": "./static/js/12.fd69873b.chunk.js.map",
"./static/js/13.8575d630.chunk.js": "./static/js/13.8575d630.chunk.js", "./static/js/13.d7c70bf4.chunk.js": "./static/js/13.d7c70bf4.chunk.js",
"./static/js/13.8575d630.chunk.js.map": "./static/js/13.8575d630.chunk.js.map", "./static/js/13.d7c70bf4.chunk.js.map": "./static/js/13.d7c70bf4.chunk.js.map",
"./static/js/14.29e80958.chunk.js": "./static/js/14.29e80958.chunk.js", "./static/js/14.af9b2fb8.chunk.js": "./static/js/14.af9b2fb8.chunk.js",
"./static/js/14.29e80958.chunk.js.map": "./static/js/14.29e80958.chunk.js.map", "./static/js/14.af9b2fb8.chunk.js.map": "./static/js/14.af9b2fb8.chunk.js.map",
"./static/js/15.0dcec662.chunk.js": "./static/js/15.0dcec662.chunk.js", "./static/js/15.05fc7db4.chunk.js": "./static/js/15.05fc7db4.chunk.js",
"./static/js/15.0dcec662.chunk.js.map": "./static/js/15.0dcec662.chunk.js.map", "./static/js/15.05fc7db4.chunk.js.map": "./static/js/15.05fc7db4.chunk.js.map",
"./static/js/16.e8e3aa00.chunk.js": "./static/js/16.e8e3aa00.chunk.js", "./static/js/16.efbbac6a.chunk.js": "./static/js/16.efbbac6a.chunk.js",
"./static/js/16.e8e3aa00.chunk.js.map": "./static/js/16.e8e3aa00.chunk.js.map", "./static/js/16.efbbac6a.chunk.js.map": "./static/js/16.efbbac6a.chunk.js.map",
"./static/js/17.d11660e2.chunk.js": "./static/js/17.d11660e2.chunk.js", "./static/js/17.17bd092d.chunk.js": "./static/js/17.17bd092d.chunk.js",
"./static/js/17.d11660e2.chunk.js.map": "./static/js/17.d11660e2.chunk.js.map", "./static/js/17.17bd092d.chunk.js.map": "./static/js/17.17bd092d.chunk.js.map",
"./static/js/18.5fe45ac4.chunk.js": "./static/js/18.5fe45ac4.chunk.js", "./static/js/18.24d189e1.chunk.js": "./static/js/18.24d189e1.chunk.js",
"./static/js/18.5fe45ac4.chunk.js.map": "./static/js/18.5fe45ac4.chunk.js.map", "./static/js/18.24d189e1.chunk.js.map": "./static/js/18.24d189e1.chunk.js.map",
"./static/js/19.5f9a9263.chunk.js": "./static/js/19.5f9a9263.chunk.js", "./static/js/19.cadd2a48.chunk.js": "./static/js/19.cadd2a48.chunk.js",
"./static/js/19.5f9a9263.chunk.js.map": "./static/js/19.5f9a9263.chunk.js.map", "./static/js/19.cadd2a48.chunk.js.map": "./static/js/19.cadd2a48.chunk.js.map",
"./static/js/2.eb0d1091.chunk.js": "./static/js/2.eb0d1091.chunk.js", "./static/js/2.9a1bdcfa.chunk.js": "./static/js/2.9a1bdcfa.chunk.js",
"./static/js/2.eb0d1091.chunk.js.map": "./static/js/2.eb0d1091.chunk.js.map", "./static/js/2.9a1bdcfa.chunk.js.map": "./static/js/2.9a1bdcfa.chunk.js.map",
"./static/js/20.6efcbe58.chunk.js": "./static/js/20.6efcbe58.chunk.js", "./static/js/20.5086cbe2.chunk.js": "./static/js/20.5086cbe2.chunk.js",
"./static/js/20.6efcbe58.chunk.js.map": "./static/js/20.6efcbe58.chunk.js.map", "./static/js/20.5086cbe2.chunk.js.map": "./static/js/20.5086cbe2.chunk.js.map",
"./static/js/21.6e5a22af.chunk.js": "./static/js/21.6e5a22af.chunk.js", "./static/js/21.d3d939d5.chunk.js": "./static/js/21.d3d939d5.chunk.js",
"./static/js/21.6e5a22af.chunk.js.map": "./static/js/21.6e5a22af.chunk.js.map", "./static/js/21.d3d939d5.chunk.js.map": "./static/js/21.d3d939d5.chunk.js.map",
"./static/js/22.7c073e45.chunk.js": "./static/js/22.7c073e45.chunk.js", "./static/js/22.234575f5.chunk.js": "./static/js/22.234575f5.chunk.js",
"./static/js/22.7c073e45.chunk.js.map": "./static/js/22.7c073e45.chunk.js.map", "./static/js/22.234575f5.chunk.js.map": "./static/js/22.234575f5.chunk.js.map",
"./static/js/23.0abe5b59.chunk.js": "./static/js/23.0abe5b59.chunk.js", "./static/js/23.67ab77f0.chunk.js": "./static/js/23.67ab77f0.chunk.js",
"./static/js/23.0abe5b59.chunk.js.map": "./static/js/23.0abe5b59.chunk.js.map", "./static/js/23.67ab77f0.chunk.js.map": "./static/js/23.67ab77f0.chunk.js.map",
"./static/js/24.e1553222.chunk.js": "./static/js/24.e1553222.chunk.js", "./static/js/24.27d7be07.chunk.js": "./static/js/24.27d7be07.chunk.js",
"./static/js/24.e1553222.chunk.js.map": "./static/js/24.e1553222.chunk.js.map", "./static/js/24.27d7be07.chunk.js.map": "./static/js/24.27d7be07.chunk.js.map",
"./static/js/25.7f05ced8.chunk.js": "./static/js/25.7f05ced8.chunk.js", "./static/js/25.c8a915ae.chunk.js": "./static/js/25.c8a915ae.chunk.js",
"./static/js/25.7f05ced8.chunk.js.map": "./static/js/25.7f05ced8.chunk.js.map", "./static/js/25.c8a915ae.chunk.js.map": "./static/js/25.c8a915ae.chunk.js.map",
"./static/js/26.e3927d38.chunk.js": "./static/js/26.e3927d38.chunk.js", "./static/js/26.488c5233.chunk.js": "./static/js/26.488c5233.chunk.js",
"./static/js/26.e3927d38.chunk.js.map": "./static/js/26.e3927d38.chunk.js.map", "./static/js/26.488c5233.chunk.js.map": "./static/js/26.488c5233.chunk.js.map",
"./static/js/27.d2f21a4d.chunk.js": "./static/js/27.d2f21a4d.chunk.js", "./static/js/27.ba45f1d3.chunk.js": "./static/js/27.ba45f1d3.chunk.js",
"./static/js/27.d2f21a4d.chunk.js.map": "./static/js/27.d2f21a4d.chunk.js.map", "./static/js/27.ba45f1d3.chunk.js.map": "./static/js/27.ba45f1d3.chunk.js.map",
"./static/js/28.db5cbded.chunk.js": "./static/js/28.db5cbded.chunk.js", "./static/js/28.8071de5d.chunk.js": "./static/js/28.8071de5d.chunk.js",
"./static/js/28.db5cbded.chunk.js.map": "./static/js/28.db5cbded.chunk.js.map", "./static/js/28.8071de5d.chunk.js.map": "./static/js/28.8071de5d.chunk.js.map",
"./static/js/29.95e5a009.chunk.js": "./static/js/29.95e5a009.chunk.js", "./static/js/29.67275bf0.chunk.js": "./static/js/29.67275bf0.chunk.js",
"./static/js/29.95e5a009.chunk.js.map": "./static/js/29.95e5a009.chunk.js.map", "./static/js/29.67275bf0.chunk.js.map": "./static/js/29.67275bf0.chunk.js.map",
"./static/js/3.123eae7e.chunk.js": "./static/js/3.123eae7e.chunk.js", "./static/js/3.935bae8c.chunk.js": "./static/js/3.935bae8c.chunk.js",
"./static/js/3.123eae7e.chunk.js.map": "./static/js/3.123eae7e.chunk.js.map", "./static/js/3.935bae8c.chunk.js.map": "./static/js/3.935bae8c.chunk.js.map",
"./static/js/30.92e2f4a6.chunk.js": "./static/js/30.92e2f4a6.chunk.js", "./static/js/30.4964944f.chunk.js": "./static/js/30.4964944f.chunk.js",
"./static/js/30.92e2f4a6.chunk.js.map": "./static/js/30.92e2f4a6.chunk.js.map", "./static/js/30.4964944f.chunk.js.map": "./static/js/30.4964944f.chunk.js.map",
"./static/js/31.3edb9173.chunk.js": "./static/js/31.3edb9173.chunk.js", "./static/js/31.5a1072f1.chunk.js": "./static/js/31.5a1072f1.chunk.js",
"./static/js/31.3edb9173.chunk.js.map": "./static/js/31.3edb9173.chunk.js.map", "./static/js/31.5a1072f1.chunk.js.map": "./static/js/31.5a1072f1.chunk.js.map",
"./static/js/32.23fc5ec4.chunk.js": "./static/js/32.23fc5ec4.chunk.js", "./static/js/32.2ff1fc95.chunk.js": "./static/js/32.2ff1fc95.chunk.js",
"./static/js/32.23fc5ec4.chunk.js.map": "./static/js/32.23fc5ec4.chunk.js.map", "./static/js/32.2ff1fc95.chunk.js.map": "./static/js/32.2ff1fc95.chunk.js.map",
"./static/js/4.a563b706.chunk.js": "./static/js/4.a563b706.chunk.js", "./static/js/4.017bf48d.chunk.js": "./static/js/4.017bf48d.chunk.js",
"./static/js/4.a563b706.chunk.js.map": "./static/js/4.a563b706.chunk.js.map", "./static/js/4.017bf48d.chunk.js.map": "./static/js/4.017bf48d.chunk.js.map",
"./static/js/5.459a49ba.chunk.js": "./static/js/5.459a49ba.chunk.js", "./static/js/5.27b42764.chunk.js": "./static/js/5.27b42764.chunk.js",
"./static/js/5.459a49ba.chunk.js.map": "./static/js/5.459a49ba.chunk.js.map", "./static/js/5.27b42764.chunk.js.map": "./static/js/5.27b42764.chunk.js.map",
"./static/js/6.83516b55.chunk.js": "./static/js/6.83516b55.chunk.js", "./static/js/6.1d80a66b.chunk.js": "./static/js/6.1d80a66b.chunk.js",
"./static/js/6.83516b55.chunk.js.map": "./static/js/6.83516b55.chunk.js.map", "./static/js/6.1d80a66b.chunk.js.map": "./static/js/6.1d80a66b.chunk.js.map",
"./static/js/7.accad232.chunk.js": "./static/js/7.accad232.chunk.js", "./static/js/7.03d1beb1.chunk.js": "./static/js/7.03d1beb1.chunk.js",
"./static/js/7.accad232.chunk.js.map": "./static/js/7.accad232.chunk.js.map", "./static/js/7.03d1beb1.chunk.js.map": "./static/js/7.03d1beb1.chunk.js.map",
"./static/js/8.69fefc71.chunk.js": "./static/js/8.69fefc71.chunk.js", "./static/js/8.ea688812.chunk.js": "./static/js/8.ea688812.chunk.js",
"./static/js/8.69fefc71.chunk.js.map": "./static/js/8.69fefc71.chunk.js.map", "./static/js/8.ea688812.chunk.js.map": "./static/js/8.ea688812.chunk.js.map",
"./static/js/9.e77edf45.chunk.js": "./static/js/9.e77edf45.chunk.js", "./static/js/9.2971266e.chunk.js": "./static/js/9.2971266e.chunk.js",
"./static/js/9.e77edf45.chunk.js.map": "./static/js/9.e77edf45.chunk.js.map", "./static/js/9.2971266e.chunk.js.map": "./static/js/9.2971266e.chunk.js.map",
"main.css": "./static/css/main.c95e49c6.css", "main.css": "./static/css/main.80b6ec5e.css",
"main.css.map": "./static/css/main.c95e49c6.css.map", "main.css.map": "./static/css/main.80b6ec5e.css.map",
"main.js": "./static/js/main.ea3ca4b2.js", "main.js": "./static/js/main.b4ee5e8a.js",
"main.js.map": "./static/js/main.ea3ca4b2.js.map", "main.js.map": "./static/js/main.b4ee5e8a.js.map",
"static/media/ERASBD.ttf": "static/media/ERASBD.d5213044.ttf", "static\\media\\ERASBD.ttf": "static/media/ERASBD.d5213044.ttf",
"static/media/background1.png": "static/media/background1.a34df396.png", "static\\media\\background1.png": "static/media/background1.a34df396.png",
"static/media/background2.png": "static/media/background2.22ee659e.png", "static\\media\\background2.png": "static/media/background2.22ee659e.png",
"static/media/courses.jpg": "static/media/courses.7b27495b.jpg", "static\\media\\courses.jpg": "static/media/courses.7b27495b.jpg",
"static/media/group.png": "static/media/group.2f91e9cd.png", "static\\media\\group.png": "static/media/group.2f91e9cd.png",
"static/media/introduceback.jpg": "static/media/introduceback.3d75d3db.jpg", "static\\media\\introduceback.jpg": "static/media/introduceback.3d75d3db.jpg",
"static/media/logo.svg": "static/media/logo.5d5d9eef.svg", "static\\media\\logo.svg": "static/media/logo.ee7cd8ed.svg",
"static/media/match_ad.jpg": "static/media/match_ad.4e957369.jpg", "static\\media\\match_ad.jpg": "static/media/match_ad.4e957369.jpg",
"static/media/message.svg": "static/media/message.c4f86b97.svg", "static\\media\\message.svg": "static/media/message.a7af2a8f.svg",
"static/media/messagegrey.svg": "static/media/messagegrey.31dd74f4.svg", "static\\media\\messagegrey.svg": "static/media/messagegrey.8c1dff55.svg",
"static/media/nodata.png": "static/media/nodata.cde5b659.png", "static\\media\\nodata.png": "static/media/nodata.cde5b659.png",
"static/media/passall.png": "static/media/passall.46817e26.png", "static\\media\\passall.png": "static/media/passall.46817e26.png",
"static/media/passpart.png": "static/media/passpart.4aaf3e6b.png", "static\\media\\passpart.png": "static/media/passpart.4aaf3e6b.png",
"static/media/rc-tree.png": "static/media/rc-tree.776c7fe6.png", "static\\media\\rc-tree.png": "static/media/rc-tree.776c7fe6.png",
"static/media/search.svg": "static/media/search.0e1dcc19.svg", "static\\media\\search.svg": "static/media/search.0e1dcc19.svg",
"static/media/vedio.png": "static/media/vedio.6a98b4f1.png" "static\\media\\vedio.png": "static/media/vedio.6a98b4f1.png"
} }

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><meta name="renderer" content="webkit"/><meta name="force-rendering" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico"><title>Educoder</title><script type="text/javascript">window.__isR=!0</script><link rel="stylesheet" href="/css/css_min_all.css"><link rel="stylesheet" href="http://testbdweb.educoder.net/assets/iconfont/iconfont.css"><link href="/react/build/./static/css/main.c95e49c6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="md_div" style="display:none"></div><div id="root" class="page -layout-v -fit"></div><div id="picture_display" style="display:none"></div><script type="text/javascript" src="/js/js_min_all.js"></script><script type="text/javascript" src="http://testbdweb.educoder.net/assets/kindeditor/kindeditor.js"></script><script type="text/javascript" src="/js/create_kindeditor.js"></script><script type="text/javascript" src="http://testbdweb.educoder.net/javascripts/educoder/edu_application.js"></script><script type="text/javascript" src="/react/build/./static/js/main.ea3ca4b2.js"></script></body></html> <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><meta name="renderer" content="webkit"/><meta name="force-rendering" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico"><title>Educoder</title><script type="text/javascript">window.__isR=!0</script><link rel="stylesheet" href="/css/css_min_all.css"><link rel="stylesheet" href="http://testbdweb.educoder.net/assets/iconfont/iconfont.css"><link href="/react/build/./static/css/main.80b6ec5e.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="md_div" style="display:none"></div><div id="root" class="page -layout-v -fit"></div><div id="picture_display" style="display:none"></div><script type="text/javascript" src="/js/js_min_all.js"></script><script type="text/javascript" src="http://testbdweb.educoder.net/assets/kindeditor/kindeditor.js"></script><script type="text/javascript" src="/js/create_kindeditor.js"></script><script type="text/javascript" src="http://testbdweb.educoder.net/javascripts/educoder/edu_application.js"></script><script type="text/javascript" src="/react/build/./static/js/main.b4ee5e8a.js"></script></body></html>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
webpackJsonp([29],{1787:function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function o(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=n(0),u=n.n(l),c=n(1),i=n.n(c),f=n(594),p=(n.n(f),function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}()),s={bar:{type:f.UrlQueryParamTypes.string},foo:{type:f.UrlQueryParamTypes.number,queryParam:"fooInUrl"}},b=function(e){function t(){return r(this,t),a(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return o(t,e),p(t,[{key:"render",value:function(){var e=this.props,t=e.foo,n=e.bar,r=e.onChangeFoo,a=e.onChangeBar,o=e.onChangeUrlQueryParams;return u.a.createElement("div",null,u.a.createElement("table",null,u.a.createElement("tbody",null,u.a.createElement("tr",null,u.a.createElement("td",null,"foo"),u.a.createElement("td",null,t),u.a.createElement("td",null,"(url query param)"),u.a.createElement("td",null,u.a.createElement("button",{onClick:function(){return r(Math.round(1e3*Math.random()))}},"Change foo"))),u.a.createElement("tr",null,u.a.createElement("td",null,"bar"),u.a.createElement("td",null,n),u.a.createElement("td",null,"(url query param)"),u.a.createElement("td",null,u.a.createElement("button",{onClick:function(){return a(Math.random().toString(32).substring(8))}},"Change bar"))),u.a.createElement("tr",null,u.a.createElement("td",{colSpan:4},u.a.createElement("button",{onClick:function(){return o({foo:Math.round(1e3*Math.random()),bar:Math.random().toString(32).substring(8)})}},"Change both with one URL update"))))))}}]),t}(l.PureComponent);b.propTypes={bar:i.a.string,foo:i.a.number,onChangeFoo:i.a.func,onChangeBar:i.a.func,onChangeUrlQueryParams:i.a.func},b.defaultProps={foo:123,bar:"bar"},t.default=Object(f.addUrlProps)({urlPropsQueryConfig:s})(b)}}); webpackJsonp([29],{1817:function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function o(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var l=n(0),u=n.n(l),c=n(1),i=n.n(c),f=n(606),p=(n.n(f),function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}()),s={bar:{type:f.UrlQueryParamTypes.string},foo:{type:f.UrlQueryParamTypes.number,queryParam:"fooInUrl"}},b=function(e){function t(){return r(this,t),a(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return o(t,e),p(t,[{key:"render",value:function(){var e=this.props,t=e.foo,n=e.bar,r=e.onChangeFoo,a=e.onChangeBar,o=e.onChangeUrlQueryParams;return u.a.createElement("div",null,u.a.createElement("table",null,u.a.createElement("tbody",null,u.a.createElement("tr",null,u.a.createElement("td",null,"foo"),u.a.createElement("td",null,t),u.a.createElement("td",null,"(url query param)"),u.a.createElement("td",null,u.a.createElement("button",{onClick:function(){return r(Math.round(1e3*Math.random()))}},"Change foo"))),u.a.createElement("tr",null,u.a.createElement("td",null,"bar"),u.a.createElement("td",null,n),u.a.createElement("td",null,"(url query param)"),u.a.createElement("td",null,u.a.createElement("button",{onClick:function(){return a(Math.random().toString(32).substring(8))}},"Change bar"))),u.a.createElement("tr",null,u.a.createElement("td",{colSpan:4},u.a.createElement("button",{onClick:function(){return o({foo:Math.round(1e3*Math.random()),bar:Math.random().toString(32).substring(8)})}},"Change both with one URL update"))))))}}]),t}(l.PureComponent);b.propTypes={bar:i.a.string,foo:i.a.number,onChangeFoo:i.a.func,onChangeBar:i.a.func,onChangeUrlQueryParams:i.a.func},b.defaultProps={foo:123,bar:"bar"},t.default=Object(f.addUrlProps)({urlPropsQueryConfig:s})(b)}});
//# sourceMappingURL=29.95e5a009.chunk.js.map //# sourceMappingURL=29.67275bf0.chunk.js.map

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save