dev_SaaS
caishi 6 years ago
commit 2627a5da13

@ -65,6 +65,16 @@ class ApplicationController < ActionController::Base
include Redmine::MenuManager::MenuController include Redmine::MenuManager::MenuController
helper Redmine::MenuManager::MenuHelper helper Redmine::MenuManager::MenuHelper
def ec_public_auth major_school
unless User.current.admin? || major_school.template_major || major_school.school.users.where(:id => User.current.id).count > 0 ||
major_school.ec_major_school_users.where(:user_id => User.current.id).count > 0 ||
EcCourseUser.where(:user_id => User.current.id, :ec_course_id => EcCourse.where(:ec_year_id => major_school.ec_years.pluck(:id)).pluck(:id)).count > 0
render_403
else
true
end
end
def user_agent def user_agent
logger.info "HTTP_USER_AGENT #{request.env["HTTP_USER_AGENT"]}" logger.info "HTTP_USER_AGENT #{request.env["HTTP_USER_AGENT"]}"
end end
@ -274,6 +284,7 @@ class ApplicationController < ActionController::Base
true true
end end
def require_admin def require_admin
return unless require_login return unless require_login
if !User.current.admin? if !User.current.admin?

@ -2,6 +2,7 @@
class EcCourseAchievementMethodsController < ApplicationController class EcCourseAchievementMethodsController < ApplicationController
before_filter :find_target, :only => [:edit_course_target, :create_evaluation_methods] before_filter :find_target, :only => [:edit_course_target, :create_evaluation_methods]
skip_before_filter :verify_authenticity_token, :only => [:create_evaluation_methods, :sync_course_data] skip_before_filter :verify_authenticity_token, :only => [:create_evaluation_methods, :sync_course_data]
before_filter :find_ec_course, :only => [:index]
include ApplicationHelper include ApplicationHelper
@ -59,11 +60,9 @@ class EcCourseAchievementMethodsController < ApplicationController
############################################################### ###############################################################
def index def index
achievement_list = [] achievement_list = []
# 具体工程课程
ec_course = EcCourse.find params[:ec_course_id]
# 课程的所有目标 # 课程的所有目标
targets = ec_course.ec_course_targets targets = @ec_course.ec_course_targets
targets.each do |target| targets.each do |target|
evaluate_data = [] evaluate_data = []
# 评价环节 # 评价环节
@ -95,7 +94,7 @@ class EcCourseAchievementMethodsController < ApplicationController
end end
achievement_list << {target_id: target.id, target_evaluate_data: evaluate_data} achievement_list << {target_id: target.id, target_evaluate_data: evaluate_data}
end end
render :json => {achievement_list: achievement_list} render :json => {achievement_list: achievement_list, is_manager: @is_manager}
end end
@ -306,4 +305,13 @@ class EcCourseAchievementMethodsController < ApplicationController
@target = EcCourseTarget.find params[:ec_course_target_id] @target = EcCourseTarget.find params[:ec_course_target_id]
end end
def find_ec_course
@ec_course = EcCourse.find(params[:ec_course_id])
@year = @ec_course.ec_year
@ec_major_school = @year.ec_major_school
@template_major = User.current.admin? || @ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) ||
@ec_major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id)
@is_manager = @template_major || @ec_course.ec_course_users.pluck(:user_id).include?(User.current.id)
end
end end

@ -2,6 +2,8 @@
class EcCourseSupportsController < ApplicationController class EcCourseSupportsController < ApplicationController
before_filter :find_year, :except => [:edit_require_vs_course, :destroy_require_vs_course] before_filter :find_year, :except => [:edit_require_vs_course, :destroy_require_vs_course]
skip_before_filter :verify_authenticity_token, :only => [:create, :edit_require_vs_course, :destroy_require_vs_course] skip_before_filter :verify_authenticity_token, :only => [:create, :edit_require_vs_course, :destroy_require_vs_course]
before_filter :require_login
before_filter :ec_auth, :except => [:edit_require_vs_course, :destroy_require_vs_course]
############################################################################### ###############################################################################
# 毕业要求vs课程体系 # 毕业要求vs课程体系
@ -47,6 +49,8 @@ class EcCourseSupportsController < ApplicationController
course_support_data = [] course_support_data = []
max_support_count = 0 max_support_count = 0
subitems_count = 0 subitems_count = 0
major_school = @year.ec_major_school
is_manager = User.current.admin? || major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) || major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id)
ec_graduation_requirements.each_with_index do |gr, i| ec_graduation_requirements.each_with_index do |gr, i|
logger.info("#############index:#{i}#####_ec_gradiation_reqiorements: #{gr.id}") logger.info("#############index:#{i}#####_ec_gradiation_reqiorements: #{gr.id}")
subitems_count += gr.ec_graduation_subitems.count subitems_count += gr.ec_graduation_subitems.count
@ -60,7 +64,12 @@ class EcCourseSupportsController < ApplicationController
course_data << { name: name, top_relation: cs.top_relation, weigths: cs.weigths} course_data << { name: name, top_relation: cs.top_relation, weigths: cs.weigths}
end end
gs.ec_course_supports.count > max_support_count && max_support_count = gs.ec_course_supports.count gs.ec_course_supports.count > max_support_count && max_support_count = gs.ec_course_supports.count
course_support_data << {sequence_num: sequence_num, ec_graduation_subitem_id: gs.id, course_data: course_data, num_total: gs.ec_course_supports.count, weights_total: weigths_sum} course_support_data << {sequence_num: sequence_num,
sequence_title: gs.content,
ec_graduation_subitem_id: gs.id,
course_data: course_data,
num_total: gs.ec_course_supports.count,
weights_total: weigths_sum}
end end
end end
render :json => {ec_year_id: @year.id, render :json => {ec_year_id: @year.id,
@ -69,7 +78,8 @@ class EcCourseSupportsController < ApplicationController
subitems_url: "#{graduation_requirement_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}", subitems_url: "#{graduation_requirement_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}",
course_count: @year.ec_courses.count, course_count: @year.ec_courses.count,
course_url: "#{ec_course_setting_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}", course_url: "#{ec_course_setting_ec_major_school_ec_year_path(@year, :ec_major_school_id => @year.ec_major_school_id)}",
max_support_count: max_support_count} max_support_count: max_support_count,
is_manager: is_manager}
end end
# 毕业要求vs课程体系 详情页面 # 毕业要求vs课程体系 详情页面
@ -208,4 +218,9 @@ class EcCourseSupportsController < ApplicationController
def find_year def find_year
@year = EcYear.find(params[:ec_year_id]) @year = EcYear.find(params[:ec_year_id])
end end
# 职业认证的权限判断
def ec_auth
ec_public_auth @year.ec_major_school
end
end end

@ -3,6 +3,8 @@ class EcCoursesController < ApplicationController
layout 'base_ec' layout 'base_ec'
before_filter :find_ec_course, :except => [:create, :get_calculation_data, :sync_all_course_data] before_filter :find_ec_course, :except => [:create, :get_calculation_data, :sync_all_course_data]
before_filter :find_year, :only => [:create, :get_calculation_data] before_filter :find_year, :only => [:create, :get_calculation_data]
before_filter :require_login
before_filter :ec_auth, :except => [:sync_all_course_data]
skip_before_filter :verify_authenticity_token, :only => [:crud_targets, :crud_score_level, :sync_all_course_data, :search_courses, skip_before_filter :verify_authenticity_token, :only => [:crud_targets, :crud_score_level, :sync_all_course_data, :search_courses,
:correlation_course, :delete_course] :correlation_course, :delete_course]
@ -77,7 +79,8 @@ class EcCoursesController < ApplicationController
end end
calculation_data << {first_level: first_level, first_leval_data: first_leval_data} calculation_data << {first_level: first_level, first_leval_data: first_leval_data}
end end
render :json => {calculation_data: calculation_data, calculation_value: @year.calculation_value, course_ids: course_ids.uniq} render :json => {calculation_data: calculation_data, calculation_value: @year.calculation_value, course_ids: course_ids.uniq,
is_manager: @template_major}
end end
# 课程目标配置 # 课程目标配置
@ -100,6 +103,12 @@ class EcCoursesController < ApplicationController
end end
end end
def ec_course_support_setting_data
course_targets = @ec_course.ec_course_targets.includes(:ec_graduation_subitems)
json_data = target_list_data(course_targets)
render :json => json_data
end
# 课程目标配置的更新操作() # 课程目标配置的更新操作()
# /ec_courses/1/crud_targets # /ec_courses/1/crud_targets
def crud_targets def crud_targets
@ -414,6 +423,8 @@ class EcCoursesController < ApplicationController
def score_level def score_level
respond_to do |format| respond_to do |format|
format.html{ format.html{
Rails.logger.info("1111111111111111111template_major: #{@template_major}")
Rails.logger.info("1111111111111111111is_manager: #{@is_manager}")
render "/common/index", :layout => false render "/common/index", :layout => false
} }
format.json{ format.json{
@ -429,11 +440,27 @@ class EcCoursesController < ApplicationController
{score: 70, level: ""}, {score: 70, level: ""},
{score: 60, level: ""}] {score: 60, level: ""}]
end end
render :json => {levels: ls} render :json => {levels: ls, is_manager: @is_manager}
} }
end end
end end
def score_level_data
levels = @ec_course.ec_score_levels
ls = []
if levels.present?
levels.each do |l|
ls << {score: l.score, level: l.level}
end
else
ls = [{score: 90, level: ""},
{score: 80, level: ""},
{score: 70, level: ""},
{score: 60, level: ""}]
end
render :json => {levels: ls, is_manager: @is_manager}
end
def crud_score_level def crud_score_level
levels = params[:levels] levels = params[:levels]
render :json => {status: -1, message: "参数不能为空"} if levels.blank? render :json => {status: -1, message: "参数不能为空"} if levels.blank?
@ -574,6 +601,11 @@ class EcCoursesController < ApplicationController
#@is_manager = @template_major || @ec_course.ec_course_users.pluck(:user_id).include?(User.current.id) #@is_manager = @template_major || @ec_course.ec_course_users.pluck(:user_id).include?(User.current.id)
end end
# 职业认证的权限判断
def ec_auth
ec_public_auth @ec_major_school
end
def target_list_data course_targets def target_list_data course_targets
targets = [] targets = []
course_targets.each do |ct| course_targets.each do |ct|
@ -595,6 +627,10 @@ class EcCoursesController < ApplicationController
end end
end end
Rails.logger.info("111111111111111user_id: #{User.current.try(:id)}")
Rails.logger.info("template_major: #{@template_major}")
Rails.logger.info("is_manager: #{@is_manager}")
return {ec_year_id: @ec_course.ec_year_id, ec_course_id: @ec_course.id, course_targets: targets, return {ec_year_id: @ec_course.ec_year_id, ec_course_id: @ec_course.id, course_targets: targets,
requirements: requirements, is_manager: @is_manager} requirements: requirements, is_manager: @is_manager}
end end
@ -630,7 +666,7 @@ class EcCoursesController < ApplicationController
# 遍历学生成绩统计数据 # 遍历学生成绩统计数据
student_scores.each do |sc| student_scores.each do |sc|
sub_ecss = EcCourseStudentScore.where(:ec_course_id => @ec_course.id, :ec_year_student_id => sc.ec_year_student_id).first sub_ecss = EcCourseStudentScore.where(:ec_course_id => @ec_course.id, :ec_year_student_id => sc.ec_year_student_id).first
sub_score = base_score == 0 ? 0 : ((sc.try(:score).to_f/base_score) * percentage).round(3) sub_score = base_score == 0 || sc.try(:score).nil? ? 0 : ((sc.try(:score).to_f/base_score) * percentage).round(3)
if sub_ecss if sub_ecss
ess_target = sub_ecss.ec_student_score_targets.where(:ec_course_target_id => target.id, ess_target = sub_ecss.ec_student_score_targets.where(:ec_course_target_id => target.id,

@ -2,7 +2,10 @@
class EcMajorSchoolsController < ApplicationController class EcMajorSchoolsController < ApplicationController
layout "base_ec" layout "base_ec"
before_filter :require_login
before_filter :find_major_school, :except => [:get_navigation_data] before_filter :find_major_school, :except => [:get_navigation_data]
before_filter :ec_auth, :except => [:get_navigation_data]
def show def show
@years = @major_school.ec_years @years = @major_school.ec_years
@ -125,7 +128,8 @@ class EcMajorSchoolsController < ApplicationController
evaluation_methods_url: evaluation_methods_url, evaluation_methods_url: evaluation_methods_url,
competition_calculation_info_url: competition_calculation_info_url, competition_calculation_info_url: competition_calculation_info_url,
score_level_setting_url: score_level_setting_url, score_level_setting_url: score_level_setting_url,
example_major: example_major example_major: example_major,
allow_visit: User.current.admin? || (User.current.ec_school.present? && User.current.ec_school == major.school.id)
} }
end end
@ -181,4 +185,9 @@ class EcMajorSchoolsController < ApplicationController
# 管理员权限 # 管理员权限
@major_manager = User.current.admin? || @major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) || @major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id) @major_manager = User.current.admin? || @major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) || @major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id)
end end
# 职业认证的权限判断
def ec_auth
ec_public_auth @major_school
end
end end

@ -3,6 +3,9 @@ class EcYearsController < ApplicationController
layout "base_ec" layout "base_ec"
before_filter :find_major_and_year, except: [:create] before_filter :find_major_and_year, except: [:create]
before_filter :require_login
before_filter :ec_auth, except: [:create]
#before_filter :find_year, only: [:set_calculation_value] #before_filter :find_year, only: [:set_calculation_value]
skip_before_filter :verify_authenticity_token, :only => [:import_students, :set_calculation_value, :destroy_students] skip_before_filter :verify_authenticity_token, :only => [:import_students, :set_calculation_value, :destroy_students]
require 'simple_xlsx_reader' require 'simple_xlsx_reader'
@ -54,37 +57,38 @@ class EcYearsController < ApplicationController
format.html { format.html {
render "/common/index", :layout => false render "/common/index", :layout => false
} }
format.json { end
template_file = EcTemplate.find_by_name "学生列表导入模板" end
if template_file.present?
file = template_file.attachments.first
template_url = "/attachments/download/#{file.id}/#{file.filename}"
else
template_url = "javascript:void(0);"
end
students = @year.ec_year_students
show_name = @year.ec_year_students.where(:name => nil).count == 0
page = params[:page] || 1 def student_lists_data
total_student = students.count template_file = EcTemplate.find_by_name "学生列表导入模板"
total_page = (total_student / 50.0).ceil if template_file.present?
students = paginateHelper students, 50 file = template_file.attachments.first
template_url = "/attachments/download/#{file.id}/#{file.filename}"
else
template_url = "javascript:void(0);"
end
ec_students = [] students = @year.ec_year_students
students.each_with_index do |student, index| show_name = @year.ec_year_students.where(:name => nil).count == 0
student = {index: (50*(page.to_i - 1) + index + 1),
student_name: student.name,
student_id: student.student_id}
ec_students << student
end
import_url = "/ec_major_schools/#{@ec_major_school.id}/academic_years/#{@year.id}/import_students" page = params[:page] || 1
total_student = students.count
total_page = (total_student / 50.0).ceil
students = paginateHelper students, 50
render :json => {template_url: template_url, ec_students: ec_students, total_page: total_page, import_url: import_url, ec_students = []
show_name: show_name, :total_student => total_student} students.each_with_index do |student, index|
} student = {index: (50*(page.to_i - 1) + index + 1),
student_name: student.name,
student_id: student.student_id}
ec_students << student
end end
import_url = "/ec_major_schools/#{@ec_major_school.id}/academic_years/#{@year.id}/import_students"
render :json => {template_url: template_url, ec_students: ec_students, total_page: total_page, import_url: import_url,
show_name: show_name, :total_student => total_student, :is_manager => @template_major}
end end
# DELETE: /ec_major_schools/:major_id/academic_years/:year_id/destroy_students # DELETE: /ec_major_schools/:major_id/academic_years/:year_id/destroy_students
@ -346,6 +350,11 @@ class EcYearsController < ApplicationController
@template_major = User.current.admin? || @ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) || @ec_major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id) @template_major = User.current.admin? || @ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) || @ec_major_school.ec_major_school_users.pluck(:user_id).include?(User.current.id)
end end
# 职业认证的权限判断
def ec_auth
ec_public_auth @ec_major_school
end
def find_year def find_year
@year = EcYear.find(params[:id]) @year = EcYear.find(params[:id])
end end
@ -387,6 +396,14 @@ class EcYearsController < ApplicationController
new_egs.save! new_egs.save!
# 记录新旧对应关系,为之后的中间表做记录 # 记录新旧对应关系,为之后的中间表做记录
egs_record << [pre_egs.id, new_egs.id] egs_record << [pre_egs.id, new_egs.id]
prev_ersvss = EcRequireSubVsStandard.where(:ec_graduation_subitem_id => pre_egs.id)
prev_ersvss.each do |prev_ersvs|
new_ersvss = EcRequireSubVsStandard.new
new_ersvss.attributes = prev_ersvs.attributes.dup.except("id", "ec_graduation_subitem_id")
new_ersvss.ec_graduation_subitem_id = new_egs.id
new_ersvss.save!
end
end end
end end
@ -397,12 +414,30 @@ class EcYearsController < ApplicationController
new_eto.attributes = pre_eto.attributes.dup.except("id", "ec_year_id") new_eto.attributes = pre_eto.attributes.dup.except("id", "ec_year_id")
new_eto.ec_year_id = ec_year.id new_eto.ec_year_id = ec_year.id
new_eto.save! new_eto.save!
# 复制 "培养目标分项" # 复制 "培养目标分项"
pre_eto.ec_training_subitems.try(:each) do |pre_ets| pre_eto.ec_training_subitems.try(:each) do |pre_ets|
new_ets = EcTrainingSubitem.new new_ets = EcTrainingSubitem.new
new_ets.attributes = pre_ets.attributes.dup.except("id", "ec_training_objective_id") new_ets.attributes = pre_ets.attributes.dup.except("id", "ec_training_objective_id")
new_ets.ec_training_objective_id = new_eto.id new_ets.ec_training_objective_id = new_eto.id
new_ets.save! new_ets.save!
# 复制 "毕业要去 vs 培养目标"
pre_ervsos = EcRequirementVsObjective.where(:ec_training_objective_id => pre_ets.id)
pre_ervsos.each do |ervso|
new_ervso = EcRequirementVsObjective.new
new_ervso.attributes = ervso.attributes.dup.except("id", "ec_training_objective_id", "ec_graduation_requirement_id")
new_ervso.ec_training_objective_id = new_ets.id
new_egr_id = -1
egr_record.each do |egr_id|
if egr_id[0] == ervso.ec_graduation_requirement_id
new_egr_id = egr_id[1]
end
end
raise("找不对应的毕业要求") if new_egr_id == -1
new_ervso.ec_graduation_requirement_id = new_egr_id
new_ervso.save!
end
end end
end end

@ -1,83 +1,115 @@
#encoding=utf-8 #encoding=utf-8
require 'net/http' require 'net/http'
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 :user_setup before_filter :user_setup
before_filter :require_login, only: [:authorize] # before_filter :require_login, only: [:authorize]
skip_before_filter :verify_authenticity_token, only: [:ps_new, :ps_edit] skip_before_filter :verify_authenticity_token, only: [:ps_new, :ps_update, :bs_new, :bs_update, :ecloud_login_callback]
def index def index
render file: 'public/react-oschina/build/index.html', :layout => false render file: 'public/react-oschina/build/index.html', :layout => false
end end
def trustie_login def trustie_login
end end
CLIENT_ID = 'e5da9855f89bc724a335d100cb63cf02a03a592bd3151bbc84acf7b2e222ddb8' CLIENT_ID = '1022'
CLIENT_SECRET = '4f2f291fac1d3dae338c18a3e3544814be5a1c4ade9e72d62f45ceab914c89f5' CLIENT_SECRET = '2112037a-6d7a-432b-9081-feb1153d8668'
ROOT_URl = 'http://localhost:3000' ROOT_URl = 'http://localhost:3000'
SERVER_URL = "https://221.176.54.92:9081/restful/services/"
def oschina_login
# 根据session看看有没有存access_token去刷新下。
# 1. 如果过期,则跳转
# 2. 未过期,直接用
redirect_to "https://gitee.com/oauth/authorize?client_id=#{CLIENT_ID}&redirect_uri=#{ROOT_URl}/oschina/login_cb&response_type=code" ## 签名
def sign(timestamp)
Digest::MD5.hexdigest("client_id=#{CLIENT_ID}client_key=#{CLIENT_SECRET}timestamp=#{timestamp}").upcase
end end
# 企业开通 # 企业开通
# applyno 申请单号,唯一
# ecordercode 唯一标志一个企业的订购关系 # ecordercode 唯一标志一个企业的订购关系
def bs_new def bs_new
begin ActiveRecord::Base.transaction do
Ecloud.create!(applyno: params['applyno'], ecordercode: params['ecordercode'], opttype: params['opttype'], trial: params['trial'], begin
bossorderid: params['bossorderid'], custid: params['custid'], custcode: params['custcode']) ecloud = Ecloud.create!(applyno: params['applyno'], ecordercode: params['ecordercode'], opttype: params['opttype'],
trial: params['trial'], bossorderid: params['bossorderid'], custid: params['custid'], custtype: params['custtype'],
render :json => {result: true, errmsg: ""} custcode: params['custcode'], registersource: params['registersource'], custname: params['custname'],
rescue Exception => e userid: params['userid'], username: params['username'], useralias: params['useralias'], mobile: params['mobile'],
logger.error(e.message) email: params['email'], productcode: params['productcode'], begintime: params['begintime'],
render :json => {code: 500, msg: "#{e.message}"} endtime: params['endtime'])
services = params['services'].first
EcloudService.create(opttype: services['opttype'], code: services['code'], begintime: services['begintime'],
endtime: services['endtime'], ecloud_id: ecloud.try(:id))
render :json => {result: true, errmsg: ""}
rescue Exception => e
logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"}
raise ActiveRecord::Rollback
end
end end
end end
# 企业更新 # 企业更新
def bs_update def bs_update
ActiveRecord::Base.transaction do
begin
ecloud = Ecloud.where(applyno: params['applyno']).first
ecloud.update_attributes!(applyno: params['applyno'], ecordercode: params['ecordercode'], opttype: params['opttype'],
custid: params['custid'], custcode: params['custcode'], productcode: params['productcode'],
operatime: params['operatime'], effecttime: params['effecttime'])
services = params['services'].first
ecloud.ecloud_service.update_attributes!(packagecode: services['packagecode'], bossorderid: services['bossorderid'])
render :json => {result: true, errmsg: ""}
rescue Exception => e
logger.error(e.message)
render :json => {code: 500, msg: "#{e.message}"}
raise ActiveRecord::Rollback
end
end
end end
# 用户业务开通接口 # 用户业务开通与变更接口
def ps_new def ps_new
begin begin
logger.info("11111######params") user_param = params['users'].first
ecloud_user = EcloudUser.where(:custid => params['custid'], :user_id => params['users']['userid']).first # ecloud_user = EcloudUser.where(:custid => params['custid'], :userid => user_param['userid']).first
if ecloud_user.present? # if ecloud_user.present?
render :json => {code: 501, msg: "你已开通过该业务"} # render :json => {code: 500, msg: "你已开通过该业务"}
else # else
EcloudUser.create!(custid: params['custid'], opttype: params['users']['opttype'], userid: params['users']['userid'], EcloudUser.create!(custid: params['custid'], opttype: user_param['opttype'], userid: user_param['userid'],
username: params['users']['username'], useralias: params['users']['useralias'], username: user_param['username'], useralias: user_param['useralias'],
mobile: params['users']['mobile'], email: params['users']['email'], begintime: params['users']['begintime'].to_s, mobile: user_param['mobile'], email: user_param['email'], begintime: user_param['begintime'].to_s,
endtime: params['users']['endtime'].to_s) endtime: user_param['endtime'].to_s)
render :json => {success: true, errmsg: ""} render :json => {success: true, errmsg: ""}
end # 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}"}
end end
end end
# 用户业务变更、销毁接口 # 用户业务状态变更
def ps_update def ps_update
begin begin
ecloud_user = EcloudUser.where(:custid => params['custid'], :user_id => params['users']['userid']).first ecloud = Ecloud.where(applyno: params['applyno']).first
if ecloud_user.present? user_param = params['users'].first
ecloud_user.update_attributes(opttype: params['users']['opttype']) ecloud_user = EcloudUser.where(ecloud_id: ecloud.id).first
render :json => {code: 501, msg: "你已开通过该业务"}
else ecloud_user.update_attributes(opttype: user_param['opttype'], userid: user_param['userid'])
render :json => {code: 404, errmsg: ""} render :json => {success: true, errmsg: ""}
end # 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}"}
@ -86,16 +118,15 @@ class EcloudController < ApplicationController
def ecloud_login_callback def ecloud_login_callback
#获取code #获取code
# logger.info "oauth2 login_callback: #{params}"
#
logger.debug params raise "没有code" unless params[:code]
url = "https://221.176.54.92:9081/restful/services/oauth2/authorization?grant_type=authorization_code" +
url = "#{SERVER_URL}/oauth2/authorization?grant_type=authorization_code" +
"&client_id=#{CLIENT_ID}&scope=&redirect_uri=&code=#{params[:code]}" "&client_id=#{CLIENT_ID}&scope=&redirect_uri=&code=#{params[:code]}"
# url = "https://gitee.com/oauth/token?grant_type=authorization_code"+
# "&code=#{params[:code]}&client_id=#{CLIENT_ID}&redirect_uri=#{ROOT_URl}/oschina/login_cb&client_secret=#{CLIENT_SECRET}"
res = post(url) res = post(url)
logger.debug res logger.info "oauth2 authorization resp: #{res}"
body = decode(res) body = decode(res)
#{"access_token":"21a80f20ff736b54aecd002b60210943","token_type":"bearer","expires_in":86400,"refresh_token":"be92e2c137a8c6dd22f0d8c4a622b3aeceb054087a95d293130f04ec60fd3e3f","scope":"user_info","created_at":1542684088} #{"access_token":"21a80f20ff736b54aecd002b60210943","token_type":"bearer","expires_in":86400,"refresh_token":"be92e2c137a8c6dd22f0d8c4a622b3aeceb054087a95d293130f04ec60fd3e3f","scope":"user_info","created_at":1542684088}
@ -105,17 +136,18 @@ class EcloudController < ApplicationController
#获取此用户信息 #获取此用户信息
# res = get("https://gitee.com/api/v5/user?access_token=#{body["access_token"]}") # res = get("https://gitee.com/api/v5/user?access_token=#{body["access_token"]}")
res = get("https://221.176.54.92:9081/restful/services/user/info?access_token=#{body["access_token"]}&userid=%7bUSERID%7d") res = get("#{SERVER_URL}/user/info?access_token=#{body['access_token']}&userid=#{body['uid']}")
logger.debug res logger.info "oauth2 get user info: #{res}"
info = decode(res)
user = User.find_by_oschina_user_id(info["id"]) # 同步用户
unless user # info = decode(res)
user = User.create_with_oschina!(info) #
end # user = User.find_by_oschina_user_id(info["id"])
# unless user
@current_user = user # user = User.create_with_oschina!(info)
# end
#
# @current_user = user
render :index render :index
end end
@ -157,7 +189,12 @@ class EcloudController < ApplicationController
end end
private private
def ecloudeuser_params def check_sign
{} sign = sign(params['timestamp'])
if sign != params['sign']
render :json => {code: 501, msg: "sign的值错误"}
return
end
end end
end end

@ -1,5 +1,7 @@
class EcsController < ApplicationController class EcsController < ApplicationController
before_filter :require_login
before_filter :find_school, :except => [:get_navigation_url] before_filter :find_school, :except => [:get_navigation_url]
before_filter :school_manager, :except => [:department, :get_navigation_url]
layout 'base_ec' layout 'base_ec'
def department def department
@ -10,26 +12,30 @@ class EcsController < ApplicationController
@major_schools = @school.ec_major_schools.where(:template_major => false) @major_schools = @school.ec_major_schools.where(:template_major => false)
unless @is_school_manager unless @is_school_manager
ec_major_school_ids = EcMajorSchoolUser.where(:user_id => User.current.id).pluck(:ec_major_school_id) ec_major_school_ids = EcMajorSchoolUser.where(:user_id => User.current.id).pluck(:ec_major_school_id)
ec_course_major_ids = EcYear.where(:id => EcCourseUser.where(:user_id => User.current.id).pluck(:ec_year_id)).pluck(:ec_major_school_id) ec_course_major_ids = EcYear.where(:id => EcCourse.where(:id => EcCourseUser.where(:user_id => User.current.id).pluck(:ec_course_id)).pluck(:ec_year_id)).pluck(:ec_major_school_id)
@major_schools = @major_schools.where(:id => (ec_major_school_ids + ec_course_major_ids).uniq) @major_schools = @major_schools.where(:id => (ec_major_school_ids + ec_course_major_ids).uniq)
end end
@major_count = @major_schools.count @major_count = @major_schools.count
if params[:search].present? if @major_count == 0
major_ids = EcMajor.where("name like '%#{params[:search]}%' or code like '%#{params[:search]}%'").pluck(:id) render_403
@major_schools = @major_schools.where(:ec_major_id => major_ids) else
end if params[:search].present?
major_ids = EcMajor.where("name like '%#{params[:search]}%' or code like '%#{params[:search]}%'").pluck(:id)
@major_schools = @major_schools.where(:ec_major_id => major_ids)
end
@obj_count = @major_schools.count @obj_count = @major_schools.count
@limit = 10 @limit = 10
@is_remote = true @is_remote = true
@obj_pages = Paginator.new @obj_count, @limit, params['page'] || 1 @obj_pages = Paginator.new @obj_count, @limit, params['page'] || 1
@offset ||= @obj_pages.offset @offset ||= @obj_pages.offset
@major_schools = paginateHelper @major_schools, @limit @major_schools = paginateHelper @major_schools, @limit
respond_to do |format| respond_to do |format|
format.js format.js
format.html format.html
end
end end
end end
@ -62,4 +68,10 @@ class EcsController < ApplicationController
def find_school def find_school
@school = School.find(params[:school_id]) @school = School.find(params[:school_id])
end end
def school_manager
unless User.current.admin? || @school.users.where(:id => User.current.id).count > 0
render_403
end
end
end end

@ -219,10 +219,10 @@ class GamesController < ApplicationController
@had_passed_testsests_public_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == true}.count @had_passed_testsests_public_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == true}.count
@mirror_name = @myshixun.mirror_name @mirror_name = @myshixun.mirror_name
@final_score = ((@shixun.status <= 1) ? 0 : @game.final_score.to_i) @final_score = ((@shixun.status <= 1) ? 0 : @game.final_score.to_i)
if @myshixun.shixun.status <= 1 || (@game.final_score != 0 && @game.answer_open?) if @myshixun.shixun.status <= 1 || (@game.final_score != 0 && @game.answer_open > 0)
@gold = 0 @gold = 0
else else
if @game.answer_open? && @game.final_score ==0 if @game.answer_open > 0 && @game.final_score ==0
@gold = -@game_challenge.score.to_i @gold = -@game_challenge.score.to_i
else else
@gold = @game.final_score.to_i @gold = @game.final_score.to_i

@ -1,6 +1,6 @@
#encoding: utf-8 #encoding: utf-8
class OauthController < ApplicationController class OauthController < ApplicationController
require
include ApplicationHelper include ApplicationHelper
before_filter :user_setup before_filter :user_setup

@ -2968,7 +2968,7 @@ module ApplicationHelper
title << ("关于我们") title << ("关于我们")
end end
elsif params[:controller] == "courses" && params[:action] == "index" elsif params[:controller] == "courses" && params[:action] == "index"
title << ("课堂") title << ("翻转课堂")
elsif params[:controller] == "competitions" && params[:action] == "index" elsif params[:controller] == "competitions" && params[:action] == "index"
title << ("竞赛") title << ("竞赛")
elsif @competition elsif @competition
@ -2976,11 +2976,11 @@ module ApplicationHelper
elsif @contest elsif @contest
title << (@contest.name.nil? ? "创新源于实践" : @contest.name) title << (@contest.name.nil? ? "创新源于实践" : @contest.name)
elsif @shixun elsif @shixun
title << (@shixun.name.nil? ? "精选实训" : @shixun.name) title << (@shixun.name.nil? ? "开发社区" : @shixun.name)
elsif @my_shixun elsif @my_shixun
title << ("我的实训") title << ("我的实训")
elsif params[:controller] == "shixuns" && params[:action] == "index" elsif params[:controller] == "shixuns" && params[:action] == "index"
title << ("精选实训") title << ("开发社区")
elsif @subject elsif @subject
title << (@subject.name.nil? ? "实训课程" : @subject.name) title << (@subject.name.nil? ? "实训课程" : @subject.name)
elsif params[:controller] == "subjects" && params[:action] == "index" elsif params[:controller] == "subjects" && params[:action] == "index"

@ -1,5 +1,7 @@
class Ecloud < ActiveRecord::Base class Ecloud < ActiveRecord::Base
attr_accessible :applyno, :begintime, :bossorderid, :custcode, :custid, :custname, :custtype, :ecordercode, :endtime, :mobile, :opttype, :productcode, :registersource, :string, :trial, :useralias, :userid, :username attr_accessible :applyno, :begintime, :bossorderid, :custcode, :custid, :custname, :custtype, :ecordercode, :endtime,
has_many :ecloud_users :mobile, :opttype, :productcode, :registersource, :string, :trial, :useralias, :userid, :username, :email,
has_many :ecloud_services :effecttime, :operatime
has_one :ecloud_user
has_one :ecloud_service
end end

@ -1,3 +1,3 @@
class EcloudService < ActiveRecord::Base class EcloudService < ActiveRecord::Base
attr_accessible :begintime, :code, :endtime, :opttype attr_accessible :begintime, :code, :endtime, :opttype, :ecloud_id, :packagecode, :bossorderid
end end

@ -64,7 +64,7 @@ class Myshixun < ActiveRecord::Base
time = 0 time = 0
self.games.each do |game| self.games.each do |game|
if game.status == 2 if game.status == 2
time += (game.end_time.to_i - game.open_time.to_i) > 0 ? (game.end_time.to_i - game.open_time.to_i) : 0 time += game.cost_time.to_i
end end
end end
time time

@ -245,6 +245,8 @@ class User < Principal
has_many :ec_major_schools, :through => :ec_major_school_users has_many :ec_major_schools, :through => :ec_major_school_users
has_many :ec_major_school_users, :dependent => :destroy has_many :ec_major_school_users, :dependent => :destroy
has_many :ec_course_users
##### #####
scope :logged, lambda { where("#{User.table_name}.status <> #{STATUS_ANONYMOUS}") } scope :logged, lambda { where("#{User.table_name}.status <> #{STATUS_ANONYMOUS}") }
@ -344,6 +346,21 @@ class User < Principal
end end
end end
} }
# 工程认证的学校
def ec_school
school_id = self.ec_school_users.pluck(:school_id).first ||
self.ec_major_schools.pluck(:school_id).first ||
(self.ec_course_users.first && self.ec_course_users.first.try(:ec_course).try(:ec_year).try(:ec_major_school).try(:school_id))
end
# 工程认证的权限
def ec_school_auth school_id
# self.ec_school_users.where(:school_id => school_id).count > 0 ||
# self.ec_major_schools.where(:school_id => school_id).count > 0 ||
#
end
def challenge_tags def challenge_tags
games = self.games.where(:id => self.experiences.map(&:container_id), :status => 2) games = self.games.where(:id => self.experiences.map(&:container_id), :status => 2)
challenge_tags = ChallengeTag.where(:challenge_id => games.map(&:challenge_id)).where("name != ''") challenge_tags = ChallengeTag.where(:challenge_id => games.map(&:challenge_id)).where("name != ''")

@ -43,7 +43,7 @@ class GamesService
# 高性能取上一关、下一关 # 高性能取上一关、下一关
prev_game = Game.prev_identifier(shixun.id, game.myshixun_id, game_challenge.position) prev_game = Game.prev_identifier(shixun.id, game.myshixun_id, game_challenge.position)
next_game = if current_user.is_certification_teacher || shixun_manager(shixun, current_user) || game.status == 2 next_game = if current_user.is_certification_teacher || shixun_manager(shixun, current_user) || game.status || shixun.task_pass
Game.next_game(shixun.id, game.myshixun_id, game_challenge.position).try(:identifier) Game.next_game(shixun.id, game.myshixun_id, game_challenge.position).try(:identifier)
end end
@ -697,7 +697,7 @@ class GamesService
if had_passed && !game.had_passed? if had_passed && !game.had_passed?
game.update_attributes(:status => 2, :end_time => Time.now) game.update_attributes(:status => 2, :end_time => Time.now)
# TPM实训已发布并且没有查看答案 # TPM实训已发布并且没有查看答案
if shixun.is_published? && !game.answer_open if shixun.is_published? && game.answer_open == 0
# 查看答案的时候处理final_scor和扣分记录 # 查看答案的时候处理final_scor和扣分记录
experience = score experience = score
reward_grade(myshixun.owner, game.id, 'Game', score) reward_grade(myshixun.owner, game.id, 'Game', score)
@ -930,7 +930,8 @@ class GamesService
end end
#end #end
myshixun_job = Base64.urlsafe_encode64("myshixun_#{myshixun.id}") myshixun_job = Base64.urlsafe_encode64("myshixun_#{myshixun.id}")
StudentWork.where(:myshixun_id => myshixun.id).update_all(:myshixun_id => nil, :work_status => 0) StudentWork.where(:myshixun_id => myshixun.id).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)
# myshixun.destroy # myshixun.destroy
myshixun.delete myshixun.delete
# 主从复制出现脏读的情况 # 主从复制出现脏读的情况

@ -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.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.2958c8ba.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.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>

@ -26,7 +26,7 @@
<% end %> <% end %>
</li> </li>
<% end %> <% end %>
<% else %> <% elsif @template_major %>
<form id="form_data_for_requirements"> <form id="form_data_for_requirements">
<div class="clearfix ml30 mr30 pt20 pb20 bor-top-greyE" id="requirementNew"> <div class="clearfix ml30 mr30 pt20 pb20 bor-top-greyE" id="requirementNew">
<p class="df mb20"><input type="hidden" name="year_id" value="<%= @year.id %>"> <p class="df mb20"><input type="hidden" name="year_id" value="<%= @year.id %>">

@ -49,13 +49,13 @@
<!--</span>--> <!--</span>-->
</span> </span>
<span class="column-2 fr edu-txt-center"> <span class="column-2 fr edu-txt-center">
<% if @major_manager && !@major_school.template_major %> <% if @major_manager && !@major_school.template_major || User.current.admin? %>
<a href="javascript:void(0);" onclick="delete_confirm_box_3('<%= ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school) %>','您确定要删除吗?')" class="mr15 color-grey-c">删除</a> <a href="javascript:void(0);" onclick="delete_confirm_box_3('<%= ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school) %>','您确定要删除吗?')" class="mr15 color-grey-c">删除</a>
<% end %> <% end %>
<%#= link_to '删除', ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school), method: :delete, :class => "mr15 color-grey-c", data: { confirm: '您确定要删除吗' } %> <%#= link_to '删除', ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school), method: :delete, :class => "mr15 color-grey-c", data: { confirm: '您确定要删除吗' } %>
<% if @major_manager || @major_school.template_major %> <%# if @major_manager || @major_school.template_major %>
<a href="javascript:void(0)" data-tip-down="导出本学年所有数据" class="mr15 color-blue">导出</a> <!--<a href="javascript:void(0)" data-tip-down="导出本学年所有数据" class="mr15 color-blue">导出</a>-->
<% end %> <%# end %>
<%= link_to @btn_text, training_objectives_ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school) %> <%= link_to @btn_text, training_objectives_ec_major_school_ec_year_path(year, :ec_major_school_id => @major_school) %>
</span> </span>

@ -86,7 +86,7 @@
</span> </span>
<% end %> <% end %>
<span class="column-5 fr"> <span class="column-5 fr">
<% if course_manager || @template_major %> <% if @template_major %>
<a href="javascript:void(0)" onclick="delete_confirm_box_2('<%= ec_course_path(course) %>','是否确定删除当前课程?');" class="color-grey-c mr15 DelCorrelationCourse">删除</a> <a href="javascript:void(0)" onclick="delete_confirm_box_2('<%= ec_course_path(course) %>','是否确定删除当前课程?');" class="color-grey-c mr15 DelCorrelationCourse">删除</a>
<% end %> <% end %>
<% redirect_url = course_targets == 0 ? ec_course_support_setting_ec_course_path(course) : ( <% redirect_url = course_targets == 0 ? ec_course_support_setting_ec_course_path(course) : (

@ -13,7 +13,7 @@
</li> </li>
<% end %> <% end %>
</ul> </ul>
<% elsif @ec_training_objective.present? %> <% elsif @ec_training_objective.present? && @template_major && @sub_training_objectives.count == 0 %>
<form id="edit_training_subitems"> <form id="edit_training_subitems">
<ul class="edu-back-white padding10-30" id="SubentryNewPanel"> <ul class="edu-back-white padding10-30" id="SubentryNewPanel">
<li class="df mb10"> <li class="df mb10">

@ -12,7 +12,7 @@
<a href="javascript:void(0)" class="defalutCancelbtn mr20 fr" onclick="CancelEditBtn();">取消</a> <a href="javascript:void(0)" class="defalutCancelbtn mr20 fr" onclick="CancelEditBtn();">取消</a>
</p> </p>
</div> </div>
<% else %> <% elsif @template_major %>
<div class="clearfix" id="targetEdit"> <div class="clearfix" id="targetEdit">
<textarea class="winput-100-130 mb10" id="training_obejctive"></textarea> <textarea class="winput-100-130 mb10" id="training_obejctive"></textarea>
<p class="clearfix"> <p class="clearfix">

@ -29,7 +29,7 @@
</p> </p>
</span> </span>
<span class="column-5"> <span class="column-5">
<% if major_manager %> <% if @is_school_manager %>
<a href="javascript:void(0)" class="mr15 color-grey-c" onclick="delete_confirm_box_2('<%= ec_major_school_path(major_school) %>','是否确认删除')">删除</a> <a href="javascript:void(0)" class="mr15 color-grey-c" onclick="delete_confirm_box_2('<%= ec_major_school_path(major_school) %>','是否确认删除')">删除</a>
<% end %> <% end %>
<a href="<%= ec_major_school_path(major_school) %>" class="color-blue"><%= major_manager ? "配置" : "查看" %></a> <a href="<%= ec_major_school_path(major_school) %>" class="color-blue"><%= major_manager ? "配置" : "查看" %></a>

@ -2,8 +2,11 @@
<%= 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="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="<%= params[:action] == "index" && params[:controller] == "subjects" ? " active" : "" %>"><%= link_to "实训课程", subjects_path %></li> <li class="<%= params[:action] == "index" && params[:controller] == "subjects" ? " active" : "" %>"><%= link_to "实训课程", subjects_path %></li>
<li class="<%= params[:action] == "index" && params[:controller] == "courses" ? " 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>
<% careers = Career.published.order("created_at asc") %> <% careers = Career.published.order("created_at asc") %>
<% if careers.present? %> <% if careers.present? %>
<li class="fl edu-menu-panel headIcon careershover <%= params[:action] == "index" && params[:controller] == "careers" ? " active" : "" %>" style="cursor: auto;"> <li class="fl edu-menu-panel headIcon careershover <%= params[:action] == "index" && params[:controller] == "careers" ? " active" : "" %>" style="cursor: auto;">
@ -15,12 +18,12 @@
</ul> </ul>
</li> </li>
<% end %> <% end %>
<li class="<%= params[:action] == "index" && params[:controller] == "courses" ? " active" : "" %>"><%= link_to "课堂", courses_path %></li>
<li class="<%= params[:action] == "index" && params[:controller] == "competitions" ? " active" : "" %>"><%= link_to "竞赛", competitions_path %></li> <li class="<%= params[:action] == "index" && 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[:action] == "index" && params[:controller] == "forums" ? " active" : "" %>"><%= link_to "问答", forums_path %></li>
<% ec_user = EcSchoolUser.where(:user_id => User.current.id).first %> <% if User.current.ec_school.present? %>
<% if ec_user %> <li class="<%= params[:controller] == "ecs" ? " active" : "" %>" id="ec_banner">
<li class="<%= params[:controller] == "ecs" ? " active" : "" %>" id="ec_banner"><%= link_to "认证", department_ecs_path(:school_id => ec_user.school_id) %></li> <%= link_to "认证", department_ecs_path(:school_id => User.current.ec_school) %>
</li>
<% end %> <% end %>
</ul> </ul>
<div class="posi-search" id="posi-search" style="display: none"> <div class="posi-search" id="posi-search" style="display: none">

@ -3,11 +3,13 @@
<div class="head-nav pr"> <div class="head-nav pr">
<ul id="header-nav"> <ul id="header-nav">
<li class="active" style="display: none"><%= link_to "首页", home_path %></li> <li class="active" style="display: none"><%= link_to "首页", home_path %></li>
<li><%= link_to "实训课程", subjects_path %></li>
<li><%= link_to "翻转课堂", courses_path %></li>
<li class="pr"> <li class="pr">
<%= link_to "精选实训", shixuns_path %> <%= link_to "开发社区", shixuns_path %>
<img src="/images/educoder/hot-h.png" class="nav-img" /> <img src="/images/educoder/hot-h.png" class="nav-img" />
</li> </li>
<li><%= link_to "实训课程", subjects_path %></li>
<% careers = Career.published.order("created_at asc") %> <% careers = Career.published.order("created_at asc") %>
<% if careers.present? %> <% if careers.present? %>
<li class="fl edu-menu-panel headIcon careershover" style="cursor: auto;"> <li class="fl edu-menu-panel headIcon careershover" style="cursor: auto;">
@ -19,7 +21,6 @@
</ul> </ul>
</li> </li>
<% end %> <% end %>
<li><%= link_to "课堂", courses_path %></li>
<li><%= link_to "竞赛", competitions_path %></li> <li><%= link_to "竞赛", competitions_path %></li>
<li><%= link_to "问答", forums_path %></li> <li><%= link_to "问答", forums_path %></li>
<!--<li><%#= link_to "活动竞赛", competitions_path %></li>--> <!--<li><%#= link_to "活动竞赛", competitions_path %></li>-->

@ -55,7 +55,7 @@
<tr> <tr>
<td>第<%= index + 1 %>关</td> <td>第<%= index + 1 %>关</td>
<td class="<%= game.status == 2 && game.end_time > @homework.end_time ? 'color-red' : '' %>"><%= game.status == 2 ? format_time(game.end_time) : '- -' %></td> <td class="<%= game.status == 2 && game.end_time > @homework.end_time ? 'color-red' : '' %>"><%= game.status == 2 ? format_time(game.end_time) : '- -' %></td>
<td><%= game.status == 2 ? game_spend_time(game.end_time.to_i - game.open_time.to_i) : '- -' %></td> <td><%= game.consumes_time %></td>
<td><%= game.status == 2 ? (game.final_score < 0 ? 0 : cha.score) : '- -' %></td> <td><%= game.status == 2 ? (game.final_score < 0 ? 0 : cha.score) : '- -' %></td>
</tr> </tr>
<% end %> <% end %>

@ -1,9 +0,0 @@
Gitlab.configure do |config|
# config.endpoint = 'http://192.168.41.130:3000/trustie/api/v3' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT']
# config.private_token = 'cK15gUDwvt8EEkzwQ_63' # user's private token, default: ENV['GITLAB_API_PRIVATE_TOKEN']
config.endpoint = 'http://testbdgit.trustie.net/api/v3' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT']
config.private_token = 's89kqsMPtF8YLZSLyVmF' # user's private token, default: ENV['GITLAB_API_PRIVATE_TOKEN']
# Optional
# config.user_agent = 'Custom User Agent' # user agent, default: 'Gitlab Ruby Gem [version]'
# config.sudo = 'user' # username for sudo mode, default: nil
end

@ -33,11 +33,11 @@ RedmineApp::Application.routes.draw do ## oauth相关
match 'oauth/cb', to: 'oauth#test_callback', :via => :get match 'oauth/cb', to: 'oauth#test_callback', :via => :get
match 'oauth/userinfo', to: 'oauth#get_userinfo', :via => :get match 'oauth/userinfo', to: 'oauth#get_userinfo', :via => :get
match 'ecloud/ecloud_login_callback', to: 'ecloud#ecloud_login_callback', :via => :get get 'ecloud/ecloud_login', to: 'ecloud#ecloud_login_callback'
match 'ecloud/bs_new', to: 'ecloud#bs_new', :via => :post post 'ecloud/bs_new', to: 'ecloud#bs_new'
match 'ecloud/bs_edit', to: 'ecloud#bs_edit', :via => :post post 'ecloud/bs_update', to: 'ecloud#bs_update'
match 'ecloud/ps_new', to: 'ecloud#ps_new', :via => :post post 'ecloud/ps_new', to: 'ecloud#ps_new'
match 'ecloud/ps_edit', to: 'ecloud#ps_edit', :via => :post post 'ecloud/ps_update', to: 'ecloud#ps_update'
resources :ec_course_evaluations do resources :ec_course_evaluations do
@ -68,6 +68,7 @@ RedmineApp::Application.routes.draw do ## oauth相关
post 'add_manager' post 'add_manager'
delete 'delete_manager' delete 'delete_manager'
get "ec_course_support_setting" get "ec_course_support_setting"
get "ec_course_support_setting_data"
get "ec_course_reach_setting" get "ec_course_reach_setting"
get "evaluation_methods" get "evaluation_methods"
match "search_courses", :via => [:get, :post] match "search_courses", :via => [:get, :post]
@ -81,6 +82,7 @@ RedmineApp::Application.routes.draw do ## oauth相关
post 'crud_targets' post 'crud_targets'
post 'crud_score_level' post 'crud_score_level'
get 'score_level' get 'score_level'
get 'score_level_data'
end end
collection do collection do
get 'get_calculation_data' get 'get_calculation_data'
@ -143,6 +145,7 @@ RedmineApp::Application.routes.draw do ## oauth相关
resources :ec_years, :path => "academic_years" do resources :ec_years, :path => "academic_years" do
member do member do
get 'student_lists' get 'student_lists'
get 'student_lists_data'
match 'import_students', :via => [:post] match 'import_students', :via => [:post]
get 'training_objectives' get 'training_objectives'
get 'graduation_requirement' get 'graduation_requirement'

@ -0,0 +1,40 @@
class AddPassedScoreForUsers < ActiveRecord::Migration
def up
games = Game.where("final_score = 0 and status = 2 and answer_open = 0 and created_at > '2019-03-09 00:00:00'").includes(:challenge)
puts "game_count: #{games.count}"
games.find_each do |game|
puts "#{game.id}"
challenge = game.challenge
# 选择题和实践题的分数
score = challenge.choose_score
user = game.user
game.update_column(:final_score, score)
# 奖励金币和提供记录
grade = Grade.where(:user_id => user.id, :container_id => game.id, :container_type => "Game").first
if grade.nil?
Grade.create!(:user_id => user.id,
:container_id => game.id,
:container_type => "Game",
:score => score,
:created_at => game.end_time || Time.now,
:updated_at => game.end_time || Time.now)
user.update_column(:grade, (score + user.grade.to_i))
end
# 经验奖励
experience = Experience.where(:user_id => user.id, :container_id => game.id, :container_type => "Game").first
if experience.nil?
Experience.create!(:user_id => user.id,
:container_id => game.id,
:container_type => "Game",
:score => score,
:created_at => game.end_time || Time.now,
:updated_at => game.end_time || Time.now)
user.update_column(:experience, (score + user.experience.to_i))
end
end
end
def down
end
end

@ -0,0 +1,5 @@
class AddEmailToEcloud < ActiveRecord::Migration
def change
add_column :eclouds, :email, :string
end
end

@ -0,0 +1,6 @@
class AddPackagecodeToEcloudServices < ActiveRecord::Migration
def change
add_column :ecloud_services, :packagecode, :string
add_column :ecloud_services, :bossorderid, :string
end
end

@ -0,0 +1,6 @@
class AddOperatimeToEcloud < ActiveRecord::Migration
def change
add_column :eclouds, :operatime, :string
add_column :eclouds, :effecttime, :string
end
end

@ -0,0 +1,5 @@
class RemoveIndexFromEcloud < ActiveRecord::Migration
def change
remove_index :eclouds, :name => 'ecorder_cust_code'
end
end

@ -0,0 +1,5 @@
class AddEcloudIdToEcloudUser < ActiveRecord::Migration
def change
add_column :ecloud_users, :ecloud_id, :integer
end
end

@ -1,88 +1,88 @@
{ {
"./static/js/0.f26528b1.chunk.js": "./static/js/0.f26528b1.chunk.js", "./static/js/0.6b9d3c60.chunk.js": "./static/js/0.6b9d3c60.chunk.js",
"./static/js/0.f26528b1.chunk.js.map": "./static/js/0.f26528b1.chunk.js.map", "./static/js/0.6b9d3c60.chunk.js.map": "./static/js/0.6b9d3c60.chunk.js.map",
"./static/js/1.cc33d6fc.chunk.js": "./static/js/1.cc33d6fc.chunk.js", "./static/js/1.5f152c98.chunk.js": "./static/js/1.5f152c98.chunk.js",
"./static/js/1.cc33d6fc.chunk.js.map": "./static/js/1.cc33d6fc.chunk.js.map", "./static/js/1.5f152c98.chunk.js.map": "./static/js/1.5f152c98.chunk.js.map",
"./static/js/10.ab08ae3d.chunk.js": "./static/js/10.ab08ae3d.chunk.js", "./static/js/10.2464b0fd.chunk.js": "./static/js/10.2464b0fd.chunk.js",
"./static/js/10.ab08ae3d.chunk.js.map": "./static/js/10.ab08ae3d.chunk.js.map", "./static/js/10.2464b0fd.chunk.js.map": "./static/js/10.2464b0fd.chunk.js.map",
"./static/js/11.c1a78f08.chunk.js": "./static/js/11.c1a78f08.chunk.js", "./static/js/11.03d0c22e.chunk.js": "./static/js/11.03d0c22e.chunk.js",
"./static/js/11.c1a78f08.chunk.js.map": "./static/js/11.c1a78f08.chunk.js.map", "./static/js/11.03d0c22e.chunk.js.map": "./static/js/11.03d0c22e.chunk.js.map",
"./static/js/12.fedd75c3.chunk.js": "./static/js/12.fedd75c3.chunk.js", "./static/js/12.ec0ef070.chunk.js": "./static/js/12.ec0ef070.chunk.js",
"./static/js/12.fedd75c3.chunk.js.map": "./static/js/12.fedd75c3.chunk.js.map", "./static/js/12.ec0ef070.chunk.js.map": "./static/js/12.ec0ef070.chunk.js.map",
"./static/js/13.a7e92c4a.chunk.js": "./static/js/13.a7e92c4a.chunk.js", "./static/js/13.8575d630.chunk.js": "./static/js/13.8575d630.chunk.js",
"./static/js/13.a7e92c4a.chunk.js.map": "./static/js/13.a7e92c4a.chunk.js.map", "./static/js/13.8575d630.chunk.js.map": "./static/js/13.8575d630.chunk.js.map",
"./static/js/14.97e6fd74.chunk.js": "./static/js/14.97e6fd74.chunk.js", "./static/js/14.29e80958.chunk.js": "./static/js/14.29e80958.chunk.js",
"./static/js/14.97e6fd74.chunk.js.map": "./static/js/14.97e6fd74.chunk.js.map", "./static/js/14.29e80958.chunk.js.map": "./static/js/14.29e80958.chunk.js.map",
"./static/js/15.05fc7db4.chunk.js": "./static/js/15.05fc7db4.chunk.js", "./static/js/15.0dcec662.chunk.js": "./static/js/15.0dcec662.chunk.js",
"./static/js/15.05fc7db4.chunk.js.map": "./static/js/15.05fc7db4.chunk.js.map", "./static/js/15.0dcec662.chunk.js.map": "./static/js/15.0dcec662.chunk.js.map",
"./static/js/16.efbbac6a.chunk.js": "./static/js/16.efbbac6a.chunk.js", "./static/js/16.e8e3aa00.chunk.js": "./static/js/16.e8e3aa00.chunk.js",
"./static/js/16.efbbac6a.chunk.js.map": "./static/js/16.efbbac6a.chunk.js.map", "./static/js/16.e8e3aa00.chunk.js.map": "./static/js/16.e8e3aa00.chunk.js.map",
"./static/js/17.6e20f18f.chunk.js": "./static/js/17.6e20f18f.chunk.js", "./static/js/17.d11660e2.chunk.js": "./static/js/17.d11660e2.chunk.js",
"./static/js/17.6e20f18f.chunk.js.map": "./static/js/17.6e20f18f.chunk.js.map", "./static/js/17.d11660e2.chunk.js.map": "./static/js/17.d11660e2.chunk.js.map",
"./static/js/18.ee48530e.chunk.js": "./static/js/18.ee48530e.chunk.js", "./static/js/18.5fe45ac4.chunk.js": "./static/js/18.5fe45ac4.chunk.js",
"./static/js/18.ee48530e.chunk.js.map": "./static/js/18.ee48530e.chunk.js.map", "./static/js/18.5fe45ac4.chunk.js.map": "./static/js/18.5fe45ac4.chunk.js.map",
"./static/js/19.cadd2a48.chunk.js": "./static/js/19.cadd2a48.chunk.js", "./static/js/19.5f9a9263.chunk.js": "./static/js/19.5f9a9263.chunk.js",
"./static/js/19.cadd2a48.chunk.js.map": "./static/js/19.cadd2a48.chunk.js.map", "./static/js/19.5f9a9263.chunk.js.map": "./static/js/19.5f9a9263.chunk.js.map",
"./static/js/2.9a1bdcfa.chunk.js": "./static/js/2.9a1bdcfa.chunk.js", "./static/js/2.eb0d1091.chunk.js": "./static/js/2.eb0d1091.chunk.js",
"./static/js/2.9a1bdcfa.chunk.js.map": "./static/js/2.9a1bdcfa.chunk.js.map", "./static/js/2.eb0d1091.chunk.js.map": "./static/js/2.eb0d1091.chunk.js.map",
"./static/js/20.5086cbe2.chunk.js": "./static/js/20.5086cbe2.chunk.js", "./static/js/20.6efcbe58.chunk.js": "./static/js/20.6efcbe58.chunk.js",
"./static/js/20.5086cbe2.chunk.js.map": "./static/js/20.5086cbe2.chunk.js.map", "./static/js/20.6efcbe58.chunk.js.map": "./static/js/20.6efcbe58.chunk.js.map",
"./static/js/21.d3d939d5.chunk.js": "./static/js/21.d3d939d5.chunk.js", "./static/js/21.6e5a22af.chunk.js": "./static/js/21.6e5a22af.chunk.js",
"./static/js/21.d3d939d5.chunk.js.map": "./static/js/21.d3d939d5.chunk.js.map", "./static/js/21.6e5a22af.chunk.js.map": "./static/js/21.6e5a22af.chunk.js.map",
"./static/js/22.234575f5.chunk.js": "./static/js/22.234575f5.chunk.js", "./static/js/22.7c073e45.chunk.js": "./static/js/22.7c073e45.chunk.js",
"./static/js/22.234575f5.chunk.js.map": "./static/js/22.234575f5.chunk.js.map", "./static/js/22.7c073e45.chunk.js.map": "./static/js/22.7c073e45.chunk.js.map",
"./static/js/23.67ab77f0.chunk.js": "./static/js/23.67ab77f0.chunk.js", "./static/js/23.0abe5b59.chunk.js": "./static/js/23.0abe5b59.chunk.js",
"./static/js/23.67ab77f0.chunk.js.map": "./static/js/23.67ab77f0.chunk.js.map", "./static/js/23.0abe5b59.chunk.js.map": "./static/js/23.0abe5b59.chunk.js.map",
"./static/js/24.27d7be07.chunk.js": "./static/js/24.27d7be07.chunk.js", "./static/js/24.e1553222.chunk.js": "./static/js/24.e1553222.chunk.js",
"./static/js/24.27d7be07.chunk.js.map": "./static/js/24.27d7be07.chunk.js.map", "./static/js/24.e1553222.chunk.js.map": "./static/js/24.e1553222.chunk.js.map",
"./static/js/25.c8a915ae.chunk.js": "./static/js/25.c8a915ae.chunk.js", "./static/js/25.7f05ced8.chunk.js": "./static/js/25.7f05ced8.chunk.js",
"./static/js/25.c8a915ae.chunk.js.map": "./static/js/25.c8a915ae.chunk.js.map", "./static/js/25.7f05ced8.chunk.js.map": "./static/js/25.7f05ced8.chunk.js.map",
"./static/js/26.488c5233.chunk.js": "./static/js/26.488c5233.chunk.js", "./static/js/26.e3927d38.chunk.js": "./static/js/26.e3927d38.chunk.js",
"./static/js/26.488c5233.chunk.js.map": "./static/js/26.488c5233.chunk.js.map", "./static/js/26.e3927d38.chunk.js.map": "./static/js/26.e3927d38.chunk.js.map",
"./static/js/27.ba45f1d3.chunk.js": "./static/js/27.ba45f1d3.chunk.js", "./static/js/27.d2f21a4d.chunk.js": "./static/js/27.d2f21a4d.chunk.js",
"./static/js/27.ba45f1d3.chunk.js.map": "./static/js/27.ba45f1d3.chunk.js.map", "./static/js/27.d2f21a4d.chunk.js.map": "./static/js/27.d2f21a4d.chunk.js.map",
"./static/js/28.8071de5d.chunk.js": "./static/js/28.8071de5d.chunk.js", "./static/js/28.db5cbded.chunk.js": "./static/js/28.db5cbded.chunk.js",
"./static/js/28.8071de5d.chunk.js.map": "./static/js/28.8071de5d.chunk.js.map", "./static/js/28.db5cbded.chunk.js.map": "./static/js/28.db5cbded.chunk.js.map",
"./static/js/29.67275bf0.chunk.js": "./static/js/29.67275bf0.chunk.js", "./static/js/29.95e5a009.chunk.js": "./static/js/29.95e5a009.chunk.js",
"./static/js/29.67275bf0.chunk.js.map": "./static/js/29.67275bf0.chunk.js.map", "./static/js/29.95e5a009.chunk.js.map": "./static/js/29.95e5a009.chunk.js.map",
"./static/js/3.935bae8c.chunk.js": "./static/js/3.935bae8c.chunk.js", "./static/js/3.123eae7e.chunk.js": "./static/js/3.123eae7e.chunk.js",
"./static/js/3.935bae8c.chunk.js.map": "./static/js/3.935bae8c.chunk.js.map", "./static/js/3.123eae7e.chunk.js.map": "./static/js/3.123eae7e.chunk.js.map",
"./static/js/30.4964944f.chunk.js": "./static/js/30.4964944f.chunk.js", "./static/js/30.92e2f4a6.chunk.js": "./static/js/30.92e2f4a6.chunk.js",
"./static/js/30.4964944f.chunk.js.map": "./static/js/30.4964944f.chunk.js.map", "./static/js/30.92e2f4a6.chunk.js.map": "./static/js/30.92e2f4a6.chunk.js.map",
"./static/js/31.5a1072f1.chunk.js": "./static/js/31.5a1072f1.chunk.js", "./static/js/31.3edb9173.chunk.js": "./static/js/31.3edb9173.chunk.js",
"./static/js/31.5a1072f1.chunk.js.map": "./static/js/31.5a1072f1.chunk.js.map", "./static/js/31.3edb9173.chunk.js.map": "./static/js/31.3edb9173.chunk.js.map",
"./static/js/32.2ff1fc95.chunk.js": "./static/js/32.2ff1fc95.chunk.js", "./static/js/32.23fc5ec4.chunk.js": "./static/js/32.23fc5ec4.chunk.js",
"./static/js/32.2ff1fc95.chunk.js.map": "./static/js/32.2ff1fc95.chunk.js.map", "./static/js/32.23fc5ec4.chunk.js.map": "./static/js/32.23fc5ec4.chunk.js.map",
"./static/js/4.017bf48d.chunk.js": "./static/js/4.017bf48d.chunk.js", "./static/js/4.a563b706.chunk.js": "./static/js/4.a563b706.chunk.js",
"./static/js/4.017bf48d.chunk.js.map": "./static/js/4.017bf48d.chunk.js.map", "./static/js/4.a563b706.chunk.js.map": "./static/js/4.a563b706.chunk.js.map",
"./static/js/5.27b42764.chunk.js": "./static/js/5.27b42764.chunk.js", "./static/js/5.459a49ba.chunk.js": "./static/js/5.459a49ba.chunk.js",
"./static/js/5.27b42764.chunk.js.map": "./static/js/5.27b42764.chunk.js.map", "./static/js/5.459a49ba.chunk.js.map": "./static/js/5.459a49ba.chunk.js.map",
"./static/js/6.1d80a66b.chunk.js": "./static/js/6.1d80a66b.chunk.js", "./static/js/6.83516b55.chunk.js": "./static/js/6.83516b55.chunk.js",
"./static/js/6.1d80a66b.chunk.js.map": "./static/js/6.1d80a66b.chunk.js.map", "./static/js/6.83516b55.chunk.js.map": "./static/js/6.83516b55.chunk.js.map",
"./static/js/7.03d1beb1.chunk.js": "./static/js/7.03d1beb1.chunk.js", "./static/js/7.accad232.chunk.js": "./static/js/7.accad232.chunk.js",
"./static/js/7.03d1beb1.chunk.js.map": "./static/js/7.03d1beb1.chunk.js.map", "./static/js/7.accad232.chunk.js.map": "./static/js/7.accad232.chunk.js.map",
"./static/js/8.ea688812.chunk.js": "./static/js/8.ea688812.chunk.js", "./static/js/8.69fefc71.chunk.js": "./static/js/8.69fefc71.chunk.js",
"./static/js/8.ea688812.chunk.js.map": "./static/js/8.ea688812.chunk.js.map", "./static/js/8.69fefc71.chunk.js.map": "./static/js/8.69fefc71.chunk.js.map",
"./static/js/9.2971266e.chunk.js": "./static/js/9.2971266e.chunk.js", "./static/js/9.e77edf45.chunk.js": "./static/js/9.e77edf45.chunk.js",
"./static/js/9.2971266e.chunk.js.map": "./static/js/9.2971266e.chunk.js.map", "./static/js/9.e77edf45.chunk.js.map": "./static/js/9.e77edf45.chunk.js.map",
"main.css": "./static/css/main.80b6ec5e.css", "main.css": "./static/css/main.c95e49c6.css",
"main.css.map": "./static/css/main.80b6ec5e.css.map", "main.css.map": "./static/css/main.c95e49c6.css.map",
"main.js": "./static/js/main.2958c8ba.js", "main.js": "./static/js/main.ea3ca4b2.js",
"main.js.map": "./static/js/main.2958c8ba.js.map", "main.js.map": "./static/js/main.ea3ca4b2.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.ee7cd8ed.svg", "static/media/logo.svg": "static/media/logo.5d5d9eef.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.a7af2a8f.svg", "static/media/message.svg": "static/media/message.c4f86b97.svg",
"static\\media\\messagegrey.svg": "static/media/messagegrey.8c1dff55.svg", "static/media/messagegrey.svg": "static/media/messagegrey.31dd74f4.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.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.2958c8ba.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.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>

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

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

Loading…
Cancel
Save