diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb
index 544865fd..987f2b70 100644
--- a/app/controllers/account_controller.rb
+++ b/app/controllers/account_controller.rb
@@ -145,6 +145,7 @@ class AccountController < ApplicationController
@com_coop_img = CooImg.where(:img_type => 'com_coop').order("position asc")
@edu_coop_img = CooImg.where(:img_type => 'edu_coop').order("position asc")
+ @alliance_img = CooImg.where(:img_type => 'alliance_coop').order("position asc")
render :layout => 'base_edu'
end
@@ -152,6 +153,7 @@ class AccountController < ApplicationController
def update_help
@edu_coop = "edu_coop"
@com_coop = "com_coop"
+ @alliance_coop = "alliance_coop"
end
def update_agreement
@@ -232,7 +234,7 @@ class AccountController < ApplicationController
end
if File.exist?(diskfile1)
pos = CooImg.order("position asc").last.position
- CooImg.create(:src_states =>params[:img_url] ,:url_states => diskfile2,:img_type =>params[:sourse_type], :position => pos)
+ CooImg.create(:src_states =>params[:img_url] ,:url_states => diskfile2,:img_type => params[:sourse_type], :position => pos)
end
redirect_to help_path(:index => 3)
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index c3865f3f..601ebb8a 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -66,6 +66,8 @@ class ApplicationController < ActionController::Base
include Redmine::MenuManager::MenuController
helper Redmine::MenuManager::MenuHelper
+ helper_method :admin_or_business?
+
# 云启训练场(EduCoder)个人版 产品编码(appId) 9200108
# 产品名称 计费类型 套餐编码
# 云启训练场(EduCoder)个人版 固定包月 9200108001
@@ -133,7 +135,7 @@ class ApplicationController < ActionController::Base
end
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 ||
+ unless admin_or_business? || 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
@@ -376,7 +378,7 @@ class ApplicationController < ActionController::Base
def require_admin
return unless require_login
- if !User.current.admin? && @shixun.status > 1
+ if !User.current.admin?
render_403
return false
end
@@ -390,6 +392,10 @@ class ApplicationController < ActionController::Base
end
end
+ def admin_or_business?
+ User.current.business? || User.current.admin?
+ end
+
def deny_access
User.current.logged? ? render_403 : require_login
end
diff --git a/app/controllers/ec_course_achievement_methods_controller.rb b/app/controllers/ec_course_achievement_methods_controller.rb
index ecc74a67..5dcdfea8 100644
--- a/app/controllers/ec_course_achievement_methods_controller.rb
+++ b/app/controllers/ec_course_achievement_methods_controller.rb
@@ -309,7 +309,7 @@ class EcCourseAchievementMethodsController < ApplicationController
@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) ||
+ @template_major = admin_or_business? || @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
diff --git a/app/controllers/ec_course_evaluations_controller.rb b/app/controllers/ec_course_evaluations_controller.rb
index bf47d16e..f2a54e6f 100644
--- a/app/controllers/ec_course_evaluations_controller.rb
+++ b/app/controllers/ec_course_evaluations_controller.rb
@@ -298,7 +298,7 @@ class EcCourseEvaluationsController < ApplicationController
def find_course
@ec_course = EcCourse.find params[:ec_course_id]
ec_major_school = @ec_course.ec_year.ec_major_school
- @is_manager = User.current.admin? || ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) ||
+ @is_manager = admin_or_business? || 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) || @ec_course.ec_course_users.pluck(:user_id).include?(User.current.id)
end
@@ -306,7 +306,7 @@ class EcCourseEvaluationsController < ApplicationController
@ce = EcCourseEvaluation.find params[:id]
@ec_course = @ce.ec_course
ec_major_school = @ec_course.ec_year.ec_major_school
- @is_manager = User.current.admin? || ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id) ||
+ @is_manager = admin_or_business? || 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) || @ec_course.ec_course_users.pluck(:user_id).include?(User.current.id)
end
end
diff --git a/app/controllers/ec_course_supports_controller.rb b/app/controllers/ec_course_supports_controller.rb
index 6bb0288b..39b7d06b 100644
--- a/app/controllers/ec_course_supports_controller.rb
+++ b/app/controllers/ec_course_supports_controller.rb
@@ -50,7 +50,7 @@ class EcCourseSupportsController < ApplicationController
max_support_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)
+ is_manager = admin_or_business? || 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|
logger.info("#############index:#{i}#####_ec_gradiation_reqiorements: #{gr.id}")
subitems_count += gr.ec_graduation_subitems.count
diff --git a/app/controllers/ec_courses_controller.rb b/app/controllers/ec_courses_controller.rb
index e7e000bb..8ad9f4e4 100644
--- a/app/controllers/ec_courses_controller.rb
+++ b/app/controllers/ec_courses_controller.rb
@@ -346,7 +346,7 @@ class EcCoursesController < ApplicationController
# 关联课堂弹框-搜索
def search_courses
user = User.where(:id => params[:user_id]).first
- if user.try(:admin?)
+ if user.try(:admin?) || user.try(:business?)
courses = Course.where(:is_delete => 0)
else
course_ids = Member.where("user_id = #{user.try(:id)} and course_id != -1").pluck(:course_id)
@@ -588,7 +588,7 @@ class EcCoursesController < ApplicationController
@ec_course = EcCourse.find(params[: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) ||
+ @template_major = admin_or_business? || @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
@@ -596,7 +596,7 @@ class EcCoursesController < ApplicationController
def find_year
@year = EcYear.find(params[:ec_year_id])
@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) ||
+ @template_major = admin_or_business? || @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
diff --git a/app/controllers/ec_graduation_requirements_controller.rb b/app/controllers/ec_graduation_requirements_controller.rb
index ea0f5464..091588cd 100644
--- a/app/controllers/ec_graduation_requirements_controller.rb
+++ b/app/controllers/ec_graduation_requirements_controller.rb
@@ -34,7 +34,7 @@ class EcGraduationRequirementsController < ApplicationController
ActiveRecord::Base.transaction do
@year = EcYear.find params[:year_id]
position = @year.ec_graduation_requirements ? @year.ec_graduation_requirements.count + 1 : 1
- @template_major = User.current.admin? || @year.ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id)
+ @template_major = admin_or_business? || @year.ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id)
ec_requirement_id = EcGraduationRequirement.create(content: params[:requirement], :ec_year_id => @year.id, :position => position)
params[:subitems].try(:each_with_index) do |sub, index|
EcGraduationSubitem.create(content: sub, ec_graduation_requirement_id: ec_requirement_id.id, position: index+1)
@@ -48,7 +48,7 @@ class EcGraduationRequirementsController < ApplicationController
def update
requirement = EcGraduationRequirement.find params[:id]
@year = requirement.ec_year
- @template_major = User.current.admin? || @year.ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id)
+ @template_major = admin_or_business? || @year.ec_major_school.school.ec_school_users.pluck(:user_id).include?(User.current.id)
requirement.update_attribute(:content, params[:requirement])
requirement.ec_graduation_subitems.destroy_all
params[:subitems].try(:each_with_index) do |sub, index|
diff --git a/app/controllers/ec_major_schools_controller.rb b/app/controllers/ec_major_schools_controller.rb
index 445ce70f..dfeb9ce4 100644
--- a/app/controllers/ec_major_schools_controller.rb
+++ b/app/controllers/ec_major_schools_controller.rb
@@ -13,7 +13,7 @@ class EcMajorSchoolsController < ApplicationController
# 这个status 用于创建界别时,局部刷新的状态
@status = params[:status]
- @btn_text = @major_school.template_major && User.current.admin? ? "立即配置" :
+ @btn_text = @major_school.template_major && admin_or_business? ? "立即配置" :
(!@major_school.template_major && @major_manager ? "立即配置" : "查看")
if params[:search]
@@ -84,7 +84,7 @@ class EcMajorSchoolsController < ApplicationController
user_url = user_path(User.current)
year = @year.year
# 学校操作权限
- template_major = User.current.admin? || major.school.ec_school_users.pluck(:user_id).include?(User.current.id)
+ template_major = admin_or_business? || major.school.ec_school_users.pluck(:user_id).include?(User.current.id)
# 示例专业
example_major = major.template_major
ec_course_support_setting_url = ec_course_support_setting_ec_course_path(ec_course) if ec_course.present?
@@ -130,7 +130,7 @@ class EcMajorSchoolsController < ApplicationController
competition_calculation_info_url: competition_calculation_info_url,
score_level_setting_url: score_level_setting_url,
example_major: example_major,
- allow_visit: User.current.admin? || (User.current.ec_school.present? && User.current.ec_school == major.school.id)
+ allow_visit: admin_or_business? || (User.current.ec_school.present? && User.current.ec_school == major.school.id)
}
end
@@ -159,7 +159,7 @@ class EcMajorSchoolsController < ApplicationController
end
def add_manager
- @is_school_manager = User.current.admin? || @major_school.school.users.where(:id => User.current.id).count > 0 # 学校管理员
+ @is_school_manager = admin_or_business? || @major_school.school.users.where(:id => User.current.id).count > 0 # 学校管理员
if @is_school_manager || @major_school.ec_major_school_users.where(:user_id => User.current.id).count > 0
params[:user_id].each do |user_id|
if @major_school.ec_major_school_users.count < 5 && @major_school.ec_major_school_users.where(:user_id => user_id).count == 0
@@ -172,7 +172,7 @@ class EcMajorSchoolsController < ApplicationController
end
def delete_manager
- @is_school_manager = User.current.admin? || @major_school.school.users.where(:id => User.current.id).count > 0 # 学校管理员
+ @is_school_manager = admin_or_business? || @major_school.school.users.where(:id => User.current.id).count > 0 # 学校管理员
if @is_school_manager || @major_school.ec_major_school_users.where(:user_id => User.current.id).count > 0
@major_school.ec_major_school_users.where(:user_id => params[:user_id]).destroy_all
else
@@ -184,7 +184,7 @@ class EcMajorSchoolsController < ApplicationController
def find_major_school
@major_school = EcMajorSchool.find(params[: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)
+ @major_manager = admin_or_business? || @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
# 职业认证的权限判断
diff --git a/app/controllers/ec_years_controller.rb b/app/controllers/ec_years_controller.rb
index 548e3b6e..6baf5d58 100644
--- a/app/controllers/ec_years_controller.rb
+++ b/app/controllers/ec_years_controller.rb
@@ -25,7 +25,7 @@ class EcYearsController < ApplicationController
@status = 1
end
@major_manager = true
- @btn_text = @major_school.template_major && User.current.admin? ? "立即配置" :
+ @btn_text = @major_school.template_major && admin_or_business? ? "立即配置" :
(!@major_school.template_major && @major_manager ? "立即配置" : "查看")
@years = EcYear.where(:ec_major_school_id => @major_school.id)
@years = paginateHelper @years, 10
@@ -338,7 +338,7 @@ class EcYearsController < ApplicationController
@ec_major_school = EcMajorSchool.find(params[:ec_major_school_id])
@year = EcYear.find(params[: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)
+ @template_major = admin_or_business? || @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
# 职业认证的权限判断
diff --git a/app/controllers/ecs_controller.rb b/app/controllers/ecs_controller.rb
index 172d13fc..5d391a5d 100644
--- a/app/controllers/ecs_controller.rb
+++ b/app/controllers/ecs_controller.rb
@@ -7,7 +7,7 @@ class EcsController < ApplicationController
def department
@template_major = EcMajorSchool.where(:template_major => true).first
@school_managers = @school.users
- @is_school_manager = User.current.admin? || @school.users.where(:id => User.current.id).count > 0 # 学校管理员
+ @is_school_manager = User.current.admin? || User.current.business? || @school.users.where(:id => User.current.id).count > 0 # 学校管理员
@major_schools = @school.ec_major_schools.where(:template_major => false)
unless @is_school_manager
@@ -70,7 +70,7 @@ class EcsController < ApplicationController
end
def school_manager
- unless User.current.admin? || @school.users.where(:id => User.current.id).count > 0
+ unless User.current.admin? || User.current.business? || @school.users.where(:id => User.current.id).count > 0
render_403
end
end
diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb
index 13c24a3e..483a4ff3 100644
--- a/app/controllers/managements_controller.rb
+++ b/app/controllers/managements_controller.rb
@@ -2,11 +2,10 @@
class ManagementsController < ApplicationController
before_filter :require_business
before_filter :require_admin, :only => [:shixun_setting_list, :mirror_repository, :mirror_picture_shixuns, :editmd_template,
- :editmd_template, :subject_level_system, :subject_setting_list, :auto_users_trial,
- :evaluate_records, :identity_authentication, :identity_authentication, :professional_authentication,
- :shixun_authorization, :graduation_standard, :ec_template, :codemirror_template,
+ :editmd_template, :subject_level_system, :subject_setting_list,
+ :shixun_authorization, :ec_template, :codemirror_template,
:course_guide_template, :shixun_quality_score, :tech_system, :update_notice, :setting_banner,
- :training_2018]
+ :training_2018, :create_standard]
layout 'base_management'
include ManagementsHelper
include SortHelper
@@ -32,6 +31,15 @@ class ManagementsController < ApplicationController
# 实训课程等级体系
def subject_level_system
@levels = SubjectLevelSystem.all
+ respond_to do |format|
+ format.js
+ format.html
+ format.xls{
+ time = Time.now.strftime("%Y%m%d")
+ filename = "实训课程体系#{time}.xls"
+ send_data(export_subject_level_system(), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
+ }
+ end
end
# 创建课程等级体系
@@ -4152,7 +4160,7 @@ end
sheet1 = book.create_worksheet :name => "sheet"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
- sheet1.row(0).concat(["姓名", "手机号","邮箱","单位名称", "职位","专业", "学号", "支付方式","支付状态","支付时间", "发票类型", "发票抬头","税务登记号", "发票内容", "备注", "微信支付单号", "报名时间"])
+ sheet1.row(0).concat(["姓名", "手机号","邮箱","单位名称", "职位","专业", "学号", '授课/研究领域', "支付方式","支付状态","支付时间", "发票类型", "发票抬头","税务登记号", "发票内容", "备注", "微信支付单号", "报名时间"])
count_row = 1
trainings.find_each do |t|
sheet1[count_row, 0] = t.name
@@ -4162,16 +4170,17 @@ end
sheet1[count_row, 4] = t.position
sheet1[count_row, 5] = t.major
sheet1[count_row, 6] = t.student_id
- sheet1[count_row, 7] = t.training_payinfo.try(:pay_type_str)
- sheet1[count_row, 8] = t.training_payinfo.try(:pay_status_str)
- sheet1[count_row, 9] = format_time t.training_payinfo.try(:pay_time)
- sheet1[count_row, 10] = t.training_payinfo.try(:invoice_title).present? ? '需要' : '不需要'
- sheet1[count_row, 11] = t.training_payinfo.try(:invoice_title)
- sheet1[count_row, 12] = t.training_payinfo.try(:invoice_no)
- sheet1[count_row, 13] = t.training_payinfo.try(:invoice_content)
- sheet1[count_row, 14] = t.training_payinfo.try(:info)
- sheet1[count_row, 15] = t.training_payinfo.try(:out_trade_no)
- sheet1[count_row, 16] = format_time t.created_at
+ sheet1[count_row, 7] = t.research_field
+ sheet1[count_row, 8] = t.training_payinfo.try(:pay_type_str)
+ sheet1[count_row, 9] = t.training_payinfo.try(:pay_status_str)
+ sheet1[count_row, 10] = format_time t.training_payinfo.try(:pay_time)
+ sheet1[count_row, 11] = t.training_payinfo.try(:invoice_title).present? ? '需要' : '不需要'
+ sheet1[count_row, 12] = t.training_payinfo.try(:invoice_title)
+ sheet1[count_row, 13] = t.training_payinfo.try(:invoice_no)
+ sheet1[count_row, 14] = t.training_payinfo.try(:invoice_content)
+ sheet1[count_row, 15] = t.training_payinfo.try(:info)
+ sheet1[count_row, 16] = t.training_payinfo.try(:out_trade_no)
+ sheet1[count_row, 17] = format_time t.created_at
count_row += 1
end
book.write xls_report
@@ -4286,6 +4295,33 @@ end
return sheet.rows
end
+ def export_subject_level_system
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ sheet1 = book.create_worksheet :name => "实训课程等级体系"
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ sheet1.row(0).default_format = blue
+ count_row = 1
+ sheet1.row(0).concat(["序号", "等级", "实训课程名称", "实训课程url", "实训名称"])
+ levels = SubjectLevelSystem.includes(subjects: [stage_shixuns: :shixun]).where(nil)
+ levels.each_with_index do |level, i|
+ sheet1[count_row, 0] = i + 1
+ sheet1[count_row, 1] = level.name
+ level.subjects.each do |subject|
+ sheet1[count_row, 2] = subject.name
+ sheet1[count_row, 3] = "#{Setting.protocol}://#{Setting.host_name}#{subject_path(subject)}"
+ count_row += 1
+ subject.shixuns.each do |shixun|
+ sheet1[count_row, 4] = shixun.name
+ count_row += 1
+ end
+ end
+ count_row += 1
+ end
+ book.write xls_report
+ xls_report.string
+ end
+
def shixun_feedback_xls shixun_ids, beginTime, endTime
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index 96f45d3a..68e4b4b0 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -358,7 +358,7 @@ class MyshixunsController < ApplicationController
def vnc
vnc_password = Redmine::Configuration['vnc']
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
- host = Redmine::Configuration['tomcat_php']
+ host = Redmine::Configuration['vnc_url']
begin
uri = "#{shixun_tomcat}/bridge/vnc/getvnc"
shixun = @myshixun.shixun
@@ -368,7 +368,7 @@ class MyshixunsController < ApplicationController
raise("实训云平台繁忙(繁忙等级:99)")
end
# url = host + ":" + res['port'] + "?password=" + vnc_password
- url = host +":#{res['port']}/vnc.html"
+ url = "https://#{res['port']}.#{host}/vnc.html"
render :json => {:url => url}
rescue Exception => e
logger.error(e)
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 56766264..e47938ac 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -10,7 +10,7 @@ class ShixunsController < ApplicationController
before_filter :view_allow, :only => [:collaborators, :propaedeutics, :shixun_discuss, :ranking_list]
before_filter :require_manager, :only => [ :settings, :add_script, :publish, :collaborators_delete, :shixun_members_added, :add_collaborators, :update, :destroy]
before_filter :validation_email, :only => [:new]
- before_filter :require_admin, :only => [:destroy]
+ #before_filter :require_manager, :only => [:destroy]
# 移动云ToC模式权限控制
# before_filter :ecloud_auth, :except => [:show, :index]
@@ -1117,6 +1117,7 @@ class ShixunsController < ApplicationController
end
def destroy
+ render_403 if @shixun.status > 1 && !User.current.admin?
ActiveRecord::Base.transaction do
g = Gitlab.client
g.delete_project(@shixun.gpid) if @shixun.try(:gpid).present?
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 89fddb36..289c122b 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -496,7 +496,7 @@ class StudentWorkController < ApplicationController
def _index
# REDO:分班信息提前查出来,然后循环中根据匹配去取
- @is_teacher = User.current.logged? ? (User.current.allowed_to?(:as_teacher,@course) || User.current.admin?) : false
+ @is_teacher = User.current.logged? ? (User.current.allowed_to?(:as_teacher,@course) || User.current.admin? || User.current.business?) : false
@member = @course.members.where(:user_id => User.current.id).first
# 判断学生是否有权限查看(作业未发布、作业已发布但不是统一设置的未分班学生、分班设置的作业未发布)
if User.current.member_of_course?(@course) && !@is_teacher
diff --git a/app/controllers/trainings_controller.rb b/app/controllers/trainings_controller.rb
index 8d3b6355..8650a5a7 100644
--- a/app/controllers/trainings_controller.rb
+++ b/app/controllers/trainings_controller.rb
@@ -3,54 +3,53 @@ require 'base64'
class TrainingsController < ApplicationController
wechat_responder
- skip_before_filter :verify_signature, only: [:show, :create, :test]
+ skip_before_filter :check_if_login_required
+ skip_before_filter :verify_signature, except: [:auth, :auth_callback, :pay_callback]
ROOT_URL = ENV["wechat_url"] || "#{Setting.protocol}://#{Setting.host_name}"
before_filter :authenticate, except: [:auth, :auth_callback, :pay_callback]
- before_filter :find_training, only: [:show, :test]
- before_filter :valid_training, only: [:pay, :result, :pay_js]
+ before_filter :check_training_type, only: [:enroll]
+ before_filter :check_current_training, only: [:show, :update, :pay, :pay_js, :update_payinfo, :result]
layout 'base_trainings'
-
- TAG_ID = 'bigdata_hnjcxy_2019'
-
def show
@training = current_training
- url = nil
- if @training && !@training.pay?
- url = enroll_training_path(id: TAG_ID)
- elsif @training && @training.pay?
- url = result_training_path(id: TAG_ID)
- else
- url = enroll_training_path(id: TAG_ID)
+ if @training.training_payinfo.present? && !@training.training_payinfo.not_payed? && params[:disable_redirect].blank?
+ redirect_to result_training_path(id: friendly_id)
+ return
end
- redirect_to url
+ render 'trainingsInfo'
end
def enroll
@training = current_training || Training.new
- end
+ if params[:disable_redirect].blank?
+ if @training.training_payinfo.present?
+ redirect_to result_training_path(id: friendly_id)
+ return
+ end
+ unless @training.new_record?
+ redirect_to training_path(id: friendly_id)
+ return
+ end
+ end
+ end
def pay
- _pay_params
-
@training = current_training
- # 防止重复支付,对于已支付过的,不应该再到这个页来
- if @training.payed?
- redirect_to result_training_path(id: TAG_ID)
- return
+ if @training.training_payinfo.blank?
+ @training.build_training_payinfo
+ @training.training_payinfo.fee = @training.registration_fee
+ @training.training_payinfo.pay_type = params[:pay_type].presence || 3
end
-
- @training.training_payinfo ||= TrainingPayinfo.new
-
end
def pay_callback
@@ -93,30 +92,29 @@ class TrainingsController < ApplicationController
end
def result
- _pay_params
@training = current_training
- end
+ if @training.training_payinfo.blank?
+ redirect_to training_path(id: friendly_id)
+ return
+ end
+ end
def create
- @training = current_training || Training.new(params)
- @training.training_type = Training::Training_Type
+ @training = Training.new
+ @training.training_type = @training_type
@training.openid = session[:wechat_open_id]
- @training.save!
- redirect_to pay_training_path(id: TAG_ID)
- end
+ save_training
+ redirect_to training_path(id: friendly_id, disable_redirect: true)
+ end
def update
@training = current_training
- unless @training
- render_404
- return
- end
+ save_training
- @training.update_attributes(params)
- redirect_to pay_training_path(id: TAG_ID)
+ redirect_to training_path(id: friendly_id, disable_redirect: true)
end
@@ -126,49 +124,42 @@ class TrainingsController < ApplicationController
# 采用ajax调用方式,返回支付参数
def update_payinfo
@training = current_training
- unless @training
- render_404
- return
- end
-
- _pay_params
-
- attachment = nil
- if params[:image]
- attachment = Attachment.create!(file: params[:image], author: User.first)
- end
-
- #修改以前的订单信息
- training_info = @training.training_payinfo
- if training_info.present?
- training_info.update_attributes(params)
- else
- training_info = TrainingPayinfo.new(params)
- end
-
- training_info.num = params[:enlistN].to_i
- if training_info.num < 1
- training_info.num = 1
- end
-
- training_info.fee = (training_info.num * @pay_fee).to_i
+ training_info = @training.training_payinfo || @training.build_training_payinfo
+ training_info.assign_attributes(params)
+
+ ActiveRecord::Base.transaction do
+ if training_info.pay_type.to_i == TrainingPayinfo::PayType_bank
+ attachment = nil
+ attachment = Attachment.create!(file: params[:image], author: User.first) if params[:image]
+
+ if training_info.attachment.blank? && attachment.blank? && training_info.not_payed?
+ flash[:message] = '请先上传支付凭证'
+ render 'pay'
+ return
+ end
- training_info.attachment = attachment if attachment.present?
+ training_info.attachment = attachment if attachment.present?
+ end
- if training_info.pay_type.to_i == TrainingPayinfo::PayType_Wechat
- training_info.status = TrainingPayinfo::Status_None
- else
- training_info.status = TrainingPayinfo::Status_Wait
- end
+ if training_info.not_payed?
+ # 已支付不能修改人数
+ training_info.num = params[:enlistNum].to_i < 1 ? 1 : params[:enlistNum].to_i
+ training_info.fee = @training.registration_fee(training_info.num)
- training_info.training_id = @training.id
+ if training_info.pay_type.to_i == TrainingPayinfo::PayType_Wechat
+ training_info.status = TrainingPayinfo::Status_None
+ else
+ training_info.status = TrainingPayinfo::Status_Wait
+ end
+ end
- training_info.save!
+ training_info.save!
- if params[:js] == 'true'
- _pay_js(training_info.fee)
- else
- redirect_to url = result_training_path(id: TAG_ID)
+ if params[:js] == 'true' && training_info.not_payed?
+ _pay_js(training_info.fee)
+ else
+ redirect_to result_training_path(id: friendly_id)
+ end
end
end
@@ -180,6 +171,7 @@ class TrainingsController < ApplicationController
attachment = Attachment.create!(file: params[:image], author: User.first)
training_payinfo = @training.training_payinfo
training_payinfo.attachment = attachment
+ training_payinfo.status = TrainingPayinfo::Status_Wait if training_payinfo.status == TrainingPayinfo::Status_None
training_payinfo.save!
render json: {status: 0}
end
@@ -193,6 +185,7 @@ class TrainingsController < ApplicationController
#js获取支付参数
def _pay_js(fee)
+ Rails.logger.info("### start wechat pay => fee: #{fee}")
@training = current_training
js_function_call do
out_trade_no = Wechat.pay.gen_trade_no
@@ -201,7 +194,7 @@ class TrainingsController < ApplicationController
#
# 写入wechat_pay付费表
WechatPay.create!(training_id: @training.id, out_trade_no: out_trade_no)
- render json: {status: 0, data: unifiedorder(out_trade_no, fee)}
+ render json: {status: 0, data: unifiedorder(out_trade_no, fee, @training.pay_order_title)}
end
end
@@ -209,7 +202,7 @@ class TrainingsController < ApplicationController
# 用于权限跳转
def auth
state = params[:state]
- url = "#{ROOT_URL}/trainings/auth_callback"
+ url = CGI.escape("#{ROOT_URL}/trainings/auth_callback?return_url=#{params[:return_url]}")
authorize_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{url}&response_type=code&scope=snsapi_base&state=#{state}&connect_redirect=1#wechat_redirect"
redirect_to authorize_url
end
@@ -221,26 +214,9 @@ class TrainingsController < ApplicationController
render 'wechats/open_wechat', layout: nil and return
end
-
session[:wechat_open_id] = open_id
- # 考虑状态
- # 1. 无记录或未支付
- # 2. 已填写未付款
- #
- @training = current_training
-
- url = ''
- if !@training
- url = training_path(id: TAG_ID)
- elsif !@training.pay?
- url = enroll_training_path(id: TAG_ID)
- else
- url = result_training_path(id: TAG_ID)
- end
-
- redirect_to url
-
+ redirect_to params[:return_url].present? ? params[:return_url] : '/'
end
def test
@@ -248,40 +224,67 @@ class TrainingsController < ApplicationController
end
private
- def _pay_params
- @pay_fee = Redmine::Configuration['training_fee'].to_f || 5000
- end
def authenticate
if Rails.env.development?
- # session[:wechat_open_id] = "o5fSc0607iR3rp4-h_VnuBTp8CiM"
+ session[:wechat_open_id] = "o5fSc0607iR3rp4-h_VnuBTp8CiM"
end
unless session[:wechat_open_id].present?
- redirect_to auth_trainings_path
+ redirect_to auth_trainings_path(return_url: CGI.escape(request.path))
end
end
- def find_training
- if params[:id] == TAG_ID
- @training = current_training
- else
- render_404
+ def save_training
+ @training.assign_attributes(params)
+ @training.training_type = training_type
+
+ if @training.training_type == 3
+ @training.research_field = params[:research_field].select(&:present?).uniq.join(",")
end
+
+ @training.save!
end
- def current_training
- Training.where(openid: session[:wechat_open_id], training_type: Training::Training_Type).first
+ def friendly_id
+ @friendly_id ||= params[:friendly_id].presence || params[:id]
+ end
+
+ def training_type
+ @training_type ||=
+ case friendly_id
+ when 'aeee0601_2019' then 3
+ when 'ceeaa06_2019' then 4
+ end
end
- def valid_training
- unless current_training
- redirect_to training_path(id: TAG_ID)
+ def current_training
+ @_current_training ||= begin
+ Rails.logger.info("##########openid:#{session[:wechat_open_id]}, friendly_id: #{friendly_id}")
+
+ return if training_type.blank?
+
+ Training.where(openid: session[:wechat_open_id], training_type: training_type).first
end
end
+ def check_training_type
+ return if training_type.present?
- private
+ render_404
+ end
+
+ def check_current_training
+ if current_training.blank?
+ if training_type.blank?
+ render_404
+ return
+ end
+
+ redirect_to enroll_training_path(id: friendly_id)
+ return
+ end
+ end
def js_function_call
begin
@@ -321,14 +324,10 @@ class TrainingsController < ApplicationController
end
- def unifiedorder(out_trade_no, fee)
+ def unifiedorder(out_trade_no, fee, title)
@config = {}
- output = Wechat.pay.unifiedorder('湖南警察学院大数据培训会-报名费',
- (fee * 100).to_i,
- session[:wechat_open_id],
- client_ip,
- out_trade_no)
+ output = Wechat.pay.unifiedorder(title, (fee * 100).to_i, session[:wechat_open_id], client_ip, out_trade_no)
data = output.fetch("xml")
if data.nil?
raise "获取微信统一单错误"
@@ -356,5 +355,4 @@ class TrainingsController < ApplicationController
@config
end
-
end
diff --git a/app/models/training.rb b/app/models/training.rb
index 4c1f182e..58de07ab 100644
--- a/app/models/training.rb
+++ b/app/models/training.rb
@@ -3,7 +3,7 @@ class Training < ActiveRecord::Base
attr_accessible :address, :email, :name, :phone, :position, :school, :sex, :openid, :training_type,
:major, :student_id
- # training_type 1 2018-培训会 2 警察学院大数据培训会
+ # training_type 1 2018-培训会 2 警察学院大数据培训会 3 大数据和人工智能 4 工程教育认证
has_one :training_payinfo
@@ -21,4 +21,26 @@ class Training < ActiveRecord::Base
pay? && training_payinfo.payed?
end
+ def research_field_include?(str)
+ research_field.present? && research_field.split(',').include?(str)
+ end
+
+ def pay_order_title
+ case training_type
+ when 3 then '全国高校大数据和人工智能暑期师资培训会-报名费'
+ when 4 then '工程教育认证培训会-报名费'
+ end
+ end
+
+ def registration_fee(num = 1)
+ case training_type
+ when 3 then
+ # 三人以上 8折
+ num >= 3 ? 3000.0 * 0.8 * num : 3000.0 * num
+ when 4 then
+ 700.0 * num
+ else
+ raise ArgumentError
+ end
+ end
end
diff --git a/app/models/training_payinfo.rb b/app/models/training_payinfo.rb
index 3520c4c0..9882c095 100644
--- a/app/models/training_payinfo.rb
+++ b/app/models/training_payinfo.rb
@@ -15,7 +15,12 @@ class TrainingPayinfo < ActiveRecord::Base
PayType_bank = 3 #银行卡支付
def pay_type_str
- pay_type==PayType_Wechat ? '微信支付' : (pay_type==PayType_alipay ? '支付宝支付' : (pay_type==PayType_bank ? '银行卡支付' : ''))
+ case pay_type
+ when PayType_Wechat then '微信支付'
+ when PayType_alipay then '支付宝支付'
+ when PayType_bank then '银行卡支付'
+ else ''
+ end
end
def pay_status_str
@@ -30,13 +35,20 @@ class TrainingPayinfo < ActiveRecord::Base
end
def pay_time
- WechatPay.where(:out_trade_no => self.out_trade_no).first.try(:created_at)
+ WechatPay.where(out_trade_no: out_trade_no).first.try(:created_at)
end
def wechat_wait_pay?
pay_type.to_i == PayType_Wechat && status != Status_Payed
end
+ def not_payed?
+ status.nil? || status == Status_None
+ end
+
+ def offline_pay?
+ pay_type.to_i == PayType_bank
+ end
def payed?
status == Status_Payed
diff --git a/app/models/user.rb b/app/models/user.rb
index 52c4be8b..db1ff58a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1119,7 +1119,7 @@ class User < Principal
end
def member_of_course?(course)
- courses.to_a.include?(course)
+ courses.to_a.include?(course) || User.current.business?
end
def member_of_contest?(contest)
@@ -1323,7 +1323,7 @@ class User < Principal
if Project === context
return false unless context.allows_to?(action)
# Admin users are authorized for anything else
- return true if admin?
+ return true if admin? || business?
# 课程:作品关联项目的老师也可以访问私有项目
course_ids = context.student_work_projects.blank? ? "(-1)" : "(" + context.student_work_projects.map{|swp| swp.course_id}.join(",") + ")"
diff --git a/app/services/games_service.rb b/app/services/games_service.rb
index f513316e..d732bb48 100644
--- a/app/services/games_service.rb
+++ b/app/services/games_service.rb
@@ -80,14 +80,14 @@ class GamesService
if shixun.vnc
begin
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
- service_host = Redmine::Configuration['tomcat_php']
+ service_host = Redmine::Configuration['vnc_url']
uri = "#{shixun_tomcat}/bridge/vnc/getvnc"
params = {tpiID: myshixun.id, :containers => "#{Base64.urlsafe_encode64(container_limit(shixun.mirror_repositories))}"}
res = uri_exec uri, params
if res && res['code'].to_i != 0
raise("实训云平台繁忙(繁忙等级:99)")
end
- url = "#{service_host}" +":#{res['port']}/vnc_lite.html?password=headless"
+ url = "https://#{res['port']}.#{service_host}/vnc_lite.html?password=headless"
Rails.logger.info("66666666sssssss#{url}")
container = container.merge(:vnc_url => url)
Rails.logger.info("777777666sssssss#{container}")
diff --git a/app/tasks/statistic_school_daily_report_task.rb b/app/tasks/statistic_school_daily_report_task.rb
index 5d0db197..c533c55c 100644
--- a/app/tasks/statistic_school_daily_report_task.rb
+++ b/app/tasks/statistic_school_daily_report_task.rb
@@ -25,13 +25,12 @@ class StatisticSchoolDailyReportTask
.where(homework_type: 4, created_at: yesterday).count
# 新增实训评测数量
- shixun_evaluate_count = Output.joins(game: :challenge)
- .joins('LEFT JOIN homework_commons_shixuns hcs ON hcs.shixun_id = challenges.shixun_id')
+ shixun_evaluate_count = EvaluateRecord.joins('LEFT JOIN homework_commons_shixuns hcs ON hcs.shixun_id = evaluate_records.shixun_id')
.joins('LEFT JOIN homework_commons hc ON hcs.homework_common_id = hc.id AND hc.homework_type = 4')
- .joins('LEFT JOIN members ON members.user_id = games.user_id')
+ .joins('LEFT JOIN members ON members.user_id = evaluate_records.user_id')
.joins('LEFT JOIN courses ON members.course_id = courses.id AND hc.course_id = courses.id')
.where(courses: { school_id: school.id })
- .where(created_at: yesterday).count
+ .where(created_at: yesterday).reorder(nil).count
# 无有效数据时不记录
data = [teacher_count, student_count, course_count, shixun_count, active_user_count,
diff --git a/app/views/account/_cooperative_partner_show.erb b/app/views/account/_cooperative_partner_show.erb
index 67452b18..a358909c 100644
--- a/app/views/account/_cooperative_partner_show.erb
+++ b/app/views/account/_cooperative_partner_show.erb
@@ -1,8 +1,28 @@
<%= stylesheet_link_tag 'css/public','css/common'%>
合作伙伴
+
+
产学联盟
+
+ <% @alliance_img.each do |alliance_img| %>
+ -
+ <% if User.current.admin? %>
+
+ <% end %>
+
+
+
+
+ <% end %>
+ <% if User.current.admin? %>
+ - + 新建
+ <% end %>
+
+
+
+
-
企业合作
+
知名企业
<% @com_coop_img.each do |coop_img| %>
-
@@ -21,7 +41,7 @@
-
高校合作
+
各类院校
<% @edu_coop_img.each do |coop_img| %>
-
@@ -51,6 +71,8 @@
var id = 0;
var pos_1 = 0;
var id_1 = 0;
+ var pos_2 = 0;
+ var id_2 = 0;
$( "#sortable" ).sortable({
containment:".cooperation-item",
sort:function(e, ui){
@@ -121,7 +143,40 @@
});
$( "#sortable1" ).disableSelection();
+ $( "#sortable2" ).sortable({
+ containment:".cooperation-team",
+ sort:function(e, ui){
+ select_item = ui.item; //当前拖动的元素
+ pos_2 = $(select_item[0]).prev().attr("data-position");
+ id_2 = $(select_item[0]).attr("data-id");
+ if(pos == undefined || id == undefined){
+ pos_2 = 0;
+ }
+ },
+ stop:function(e, ui){
+ select_item = ui.item; //当前拖动的元素
+ console.log(ui.item);
+ pos_2 = $(select_item[0]).prev().attr("data-position");
+ id_2 = $(select_item[0]).attr("data-id");
+ if(pos_2 == undefined || id_2 == undefined){
+ pos_2 = 0;
+ }
+ console.log("pos: " + pos_2);
+ $.ajax({
+ url: "<%= change_coop_position_path %>",
+ data: {id: id_2, position: pos_2, type: "alliance_coop"},
+ success: function(data) {
+ if(data.status == 1){
+ console.log("更新成功!");
+ $(select_item[0]).attr("data-position", pos_2+1)
+ }
+
+ }
+ });
+ }
+ });
+ $( "#sortable2" ).disableSelection();
})
diff --git a/app/views/account/update_help.js.erb b/app/views/account/update_help.js.erb
index 39aa679a..d076eeed 100644
--- a/app/views/account/update_help.js.erb
+++ b/app/views/account/update_help.js.erb
@@ -1,7 +1,10 @@
<% if params[:tab] == '1' %>
var htmlvalue = "<%= escape_javascript(render :partial => 'account/new_coop',:locals => {:resubmit =>params[:resubmit],:sourse_type => @com_coop}) %>";
pop_box_new(htmlvalue, 400, 260);
-<% else %>
+<% elsif params[:tab] == '2' %>
var htmlvalue = "<%= escape_javascript(render :partial => 'account/new_coop',:locals => {:resubmit => params[:resubmit],:sourse_type => @edu_coop}) %>";
pop_box_new(htmlvalue, 400, 260);
+<% else %>
+var htmlvalue = "<%= escape_javascript(render :partial => 'account/new_coop',:locals => {:resubmit => params[:resubmit],:sourse_type => @alliance_coop}) %>";
+pop_box_new(htmlvalue, 400, 260);
<% end %>
\ No newline at end of file
diff --git a/app/views/ec_major_schools/_year_list.html.erb b/app/views/ec_major_schools/_year_list.html.erb
index 1e561782..5755d3f6 100644
--- a/app/views/ec_major_schools/_year_list.html.erb
+++ b/app/views/ec_major_schools/_year_list.html.erb
@@ -49,7 +49,7 @@
- <% if @major_manager && !@major_school.template_major || User.current.admin? %>
+ <% if @major_manager && !@major_school.template_major || User.current.admin? || User.current.business? %>
删除
<% 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: '您确定要删除吗' } %>
diff --git a/app/views/ec_major_schools/show.html.erb b/app/views/ec_major_schools/show.html.erb
index c3e4c924..92e100c2 100644
--- a/app/views/ec_major_schools/show.html.erb
+++ b/app/views/ec_major_schools/show.html.erb
@@ -8,7 +8,7 @@
-
<%= @major.name %>
- <% if @major.schools && User.current.admin? %>
+ <% if @major.schools && (User.current.admin? || User.current.business?) %>
diff --git a/app/views/exercise/_show_MCQ.html.erb b/app/views/exercise/_show_MCQ.html.erb
index e1767b3b..57c36496 100644
--- a/app/views/exercise/_show_MCQ.html.erb
+++ b/app/views/exercise/_show_MCQ.html.erb
@@ -20,7 +20,11 @@
<% exercise_question.exercise_choices.reorder("choice_position").each_with_index do |exercise_choice,index| %>
-
+
<% end %>
diff --git a/app/views/layouts/base_trainings.html.erb b/app/views/layouts/base_trainings.html.erb
index 4f7f4774..51115cb1 100644
--- a/app/views/layouts/base_trainings.html.erb
+++ b/app/views/layouts/base_trainings.html.erb
@@ -2,13 +2,16 @@
- <%= if params[:controller] == "trainings" && params[:action] == "enroll"
- "报名"
- elsif params[:controller] == "trainings" && params[:action] == "pay"
- "费用支付"
- elsif params[:controller] == "trainings" && params[:action] == "result"
- "支付状态"
- end %>
+
+ <%=
+ case "#{params[:controller]}-#{params[:action]}"
+ when 'trainings-show' then '报名信息'
+ when 'trainings-enroll' then '报名'
+ when 'trainings-pay' then '费用支付和发票信息'
+ when 'trainings-result' then '支付信息'
+ end
+ %>
+
diff --git a/app/views/managements/_subject_level_list.html.erb b/app/views/managements/_subject_level_list.html.erb
index 1a4bf6d7..0988bd6e 100644
--- a/app/views/managements/_subject_level_list.html.erb
+++ b/app/views/managements/_subject_level_list.html.erb
@@ -1,3 +1,6 @@
+
等级 |
diff --git a/app/views/managements/graduation_standard.html.erb b/app/views/managements/graduation_standard.html.erb
index c61e6bff..a667c7c2 100644
--- a/app/views/managements/graduation_standard.html.erb
+++ b/app/views/managements/graduation_standard.html.erb
@@ -1,16 +1,18 @@
毕业要求通用标准<%= @standards.count %>
-
+ 新增
-
-
- *1
-
-
-
- 取消
- 保存
-
-
+ <% if User.current.admin? %>
+
+ 新增
+
+
+ *1
+
+
+
+ 取消
+ 保存
+
+
+ <% end %>
diff --git a/app/views/managements/training_2018.html.erb b/app/views/managements/training_2018.html.erb
index ddce89ac..8ddea516 100644
--- a/app/views/managements/training_2018.html.erb
+++ b/app/views/managements/training_2018.html.erb
@@ -5,6 +5,8 @@
+
+