From d50634bb924448dd41638ec53aab320893002469 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Tue, 10 Dec 2019 12:45:46 +0800
Subject: [PATCH 01/29] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 public/react/src/modules/courses/Resource/index.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/react/src/modules/courses/Resource/index.js b/public/react/src/modules/courses/Resource/index.js
index c4ec4df02..ce4fb8dc2 100644
--- a/public/react/src/modules/courses/Resource/index.js
+++ b/public/react/src/modules/courses/Resource/index.js
@@ -756,7 +756,7 @@ class Fileslists extends Component{
 						Savesname={this.state.Savesname}
 						Cancel={this.state.Cancel}
 						Saves={this.state.Saves}
-						course_groups={this.state.course_groups}
+						// course_groups={this.state.course_groups}
 					/>:""}
 
           {/*发送*/}

From 6578478715ce58ac6268dc6fcb4035097ceafac8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Tue, 10 Dec 2019 14:26:51 +0800
Subject: [PATCH 02/29] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../react/src/modules/courses/coursesPublic/NewShixunModel.js  | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
index 99a8ad232..a20f7733c 100644
--- a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
+++ b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
@@ -428,6 +428,9 @@ class NewShixunModel extends Component{
 					   .ant-drawer-body {
 								padding:15px 24px 24px 0px;
 					  	}
+					  	.ant-dropdown {
+					  	  z-index:11000
+					  	}
 					  `
 					}
 				</style>

From 40fd4cdbb7643092680877664243c75bff024b72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Tue, 10 Dec 2019 15:10:09 +0800
Subject: [PATCH 03/29] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../react/src/modules/courses/elearning/YslDetailCards.js   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/react/src/modules/courses/elearning/YslDetailCards.js b/public/react/src/modules/courses/elearning/YslDetailCards.js
index e705894e6..55bed2b5e 100644
--- a/public/react/src/modules/courses/elearning/YslDetailCards.js
+++ b/public/react/src/modules/courses/elearning/YslDetailCards.js
@@ -492,13 +492,13 @@ class YslDetailCards extends Component{
 																					:<i className="iconfont icon-bofang progressRing-part font-18 mt10"></i>
 																			}
                                       </span>
-																				<span className={this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?"paragraph_name color204":"paragraph_name color-grey3"}>
+																				<span className={this.props.current_user&&this.props.current_user.admin===false&&this.props.current_user&&this.props.current_user.business===false&&line.shixun_status==="暂未公开"?"paragraph_name color204":"paragraph_name color-grey3"}>
                                         <span className="subject_stage_shixun_index">{key+1}</span>-{index+1}&nbsp;&nbsp;{line.shixun_name}
                                       </span>
 
 																			</li>
 																			{
-																				this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?
+																				this.props.current_user&&this.props.current_user.admin===false&&this.props.current_user&&this.props.current_user.business===false&&line.shixun_status==="暂未公开"?
 																					<li className="fr status_li"><span className="fr color204">暂未公开</span></li>
 																					:
 																					<li className={showparagraph===false?"none":"fr status_li"}>
@@ -512,7 +512,7 @@ class YslDetailCards extends Component{
 																					</li>
 																			}
 
-																			{this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?"":	<li className={showparagraph===false?"fr status_li":"fr status_li"}>
+																			{this.props.current_user&&this.props.current_user.admin===false&&this.props.current_user&&this.props.current_user.business===false&&line.shixun_status==="暂未公开"?"":	<li className={showparagraph===false?"fr status_li":"fr status_li"}>
 																				{
 																					showparagraphkey === key && showparagraphindex === index ? "" :
 																						<span className="fr color204">实验任务 <span

From 4105ed531038c2adfc9110887af63b6bc61aa1c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Tue, 10 Dec 2019 15:57:18 +0800
Subject: [PATCH 04/29] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 public/react/src/modules/home/shixunsHome.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/react/src/modules/home/shixunsHome.js b/public/react/src/modules/home/shixunsHome.js
index 260436807..3a75be6eb 100644
--- a/public/react/src/modules/home/shixunsHome.js
+++ b/public/react/src/modules/home/shixunsHome.js
@@ -159,7 +159,7 @@ class ShixunsHome extends Component {
 														}
 													</style>
                              <div className="clearfix edu-back-white pb40 pt30 mb20 banners" id="index-top" onMouseMove={this.bannaronmousemove} onMouseOut={this.bannaronmouseout}>
-                                <div className="educontent pr educontentSlider">
+                                <div className="educontent pr educontentSlider" style={{"width":'1200px'}}>
                                     {homedatalist===undefined?"":
                                     <Slider
                                         nextArrow={<CustomNextArrow />}
@@ -240,7 +240,7 @@ class ShixunsHome extends Component {
                                     <p className="color-dark edu-txt-center font-24" style={{lineHeight: '30px'}}>实践课程</p>
                                     <p className="color-grey-cd font-12">TRAINING COURSE</p>
                                 </div>
-                                <Link to={"/paths"} className="moreitem">更多<i className="fa fa-angle-right ml5"></i></Link>
+                                <Link to={"/paths"} className="moreitem mr18">更多<i className="fa fa-angle-right ml5"></i></Link>
 
                                 <div className="square-list clearfix" style={{'width':'100%','padding-left':'25px'}}>
 
@@ -319,7 +319,7 @@ class ShixunsHome extends Component {
                                     <p className="color-dark edu-txt-center font-24" style={{lineHeight: '30px'}}>实训项目</p>
                                     <p className="color-grey-cd font-12">DEVELOPMENT COMMUNITY</p>
                                 </div>
-                                <Link to={"/shixuns"} className="moreitem">更多<i className="fa fa-angle-right ml5"></i></Link>
+                                <Link to={"/shixuns"} className="moreitem mr18">更多<i className="fa fa-angle-right ml5"></i></Link>
 
                                 <div className="square-list clearfix" style={{'width':'100%','padding-left':'25px'}}>
 																	<style>

From feca7e315812f70aa8feaaa4d89a172d7d605194 Mon Sep 17 00:00:00 2001
From: SylorHuang <sylor_huang@126.com>
Date: Wed, 11 Dec 2019 15:33:19 +0800
Subject: [PATCH 05/29] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=90=8C=E6=AD=A5?=
 =?UTF-8?q?=E5=88=B0trustie?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/models/application_record.rb | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index 888c65423..60308f4d8 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -14,6 +14,7 @@ class ApplicationRecord < ActiveRecord::Base
   end
 
   def allow_sync_to_trustie?
-    Rails.env.production? && EduSetting.get('host_name') == 'https://www.educoder.net'
+    true
+    # Rails.env.production? && EduSetting.get('host_name') == 'https://www.educoder.net'
   end
 end

From 64bea22d70264a11493923ecdff45f28fd9d0c58 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Wed, 11 Dec 2019 15:35:46 +0800
Subject: [PATCH 06/29] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?=
 =?UTF-8?q?=E9=9B=86=E5=A4=B1=E8=B4=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/challenges_controller.rb      | 112 +++++++++---------
 ...0191211073142_modify_type_for_test_sets.rb |   7 ++
 2 files changed, 66 insertions(+), 53 deletions(-)
 create mode 100644 db/migrate/20191211073142_modify_type_for_test_sets.rb

diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb
index 0b5140743..4528b7b90 100644
--- a/app/controllers/challenges_controller.rb
+++ b/app/controllers/challenges_controller.rb
@@ -173,64 +173,70 @@ class ChallengesController < ApplicationController
 
   # tab 0:过关任务的更新; 1:评测设置的更新; 2:表示参考答案的更新;
   def update
-    ActiveRecord::Base.transaction do
-      tab = params[:tab].to_i
-      @challenge.update_attributes(challenge_params)
-      if tab == 0 && @challenge.st == 0
-        @challenge.challenge_tags.delete_all
-        if params[:challenge_tag].present?
-          params[:challenge_tag].each do |input|
-            ChallengeTag.create!(:name => input, :challenge_id => @challenge.id)
+    begin
+      ActiveRecord::Base.transaction do
+        tab = params[:tab].to_i
+        @challenge.update_attributes(challenge_params)
+        if tab == 0 && @challenge.st == 0
+          @challenge.challenge_tags.delete_all
+          if params[:challenge_tag].present?
+            params[:challenge_tag].each do |input|
+              ChallengeTag.create!(:name => input, :challenge_id => @challenge.id)
+            end
           end
-        end
-      elsif tab == 1
-        path = @challenge.path
-        exec_path = @challenge.exec_path
-        test_set = @challenge.test_sets
-        sets_output = test_set.map(&:output)
-        sets_input = test_set.map(&:input)
-        sets_open = test_set.map(&:is_public)
-        set_score = test_set.map(&:score)
-        set_match_rule = test_set.map(&:match_rule)
-        params_hidden = params[:test_set].map{|set| set[:hidden].to_i == 0}
-        params_output = params[:test_set].map{|set| set[:output] }
-        params_input = params[:test_set].map{|set| set[:input] }
-        params_score = params[:test_set].map{|set| set[:score]}
-        params_test_set = params[:test_set].map{|set| set[:match_rule]}
-        # 测试集变化则需要更新(输入、 输出、 是否隐藏)
-        if sets_output != params_output || sets_open != params_hidden || sets_input != params_input ||
-            set_score != params_score || params_test_set != set_match_rule
-          test_set.delete_all unless test_set.blank?
-          params[:test_set].each_with_index do |set, index|
-            # last: 末尾匹配, full: 全完匹配
-            logger.info("set: #{set}; match_rule : #{set[:match_rule]}")
-            match_rule = set[:match_rule] == 'last' ? 'last' : 'full'
-            TestSet.create(:challenge_id => @challenge.id,
-                           :input => "#{set[:input]}",
-                           :output => "#{set[:output]}",
-                           :is_public => params_hidden[index],
-                           :score => set[:score],
-                           :match_rule => "#{match_rule}",
-                           :position => (index + 1))
+        elsif tab == 1
+          path = @challenge.path
+          exec_path = @challenge.exec_path
+          test_set = @challenge.test_sets
+          sets_output = test_set.map(&:output)
+          sets_input = test_set.map(&:input)
+          sets_open = test_set.map(&:is_public)
+          set_score = test_set.map(&:score)
+          set_match_rule = test_set.map(&:match_rule)
+          params_hidden = params[:test_set].map{|set| set[:hidden].to_i == 0}
+          params_output = params[:test_set].map{|set| set[:output] }
+          params_input = params[:test_set].map{|set| set[:input] }
+          params_score = params[:test_set].map{|set| set[:score]}
+          params_test_set = params[:test_set].map{|set| set[:match_rule]}
+          # 测试集变化则需要更新(输入、 输出、 是否隐藏)
+          if sets_output != params_output || sets_open != params_hidden || sets_input != params_input ||
+              set_score != params_score || params_test_set != set_match_rule
+            test_set.delete_all unless test_set.blank?
+            params[:test_set].each_with_index do |set, index|
+              # last: 末尾匹配, full: 全完匹配
+              logger.info("set: #{set}; match_rule : #{set[:match_rule]}")
+              match_rule = set[:match_rule] == 'last' ? 'last' : 'full'
+              TestSet.create(:challenge_id => @challenge.id,
+                             :input => "#{set[:input]}",
+                             :output => "#{set[:output]}",
+                             :is_public => params_hidden[index],
+                             :score => set[:score],
+                             :match_rule => "#{match_rule}",
+                             :position => (index + 1))
+            end
+            @challenge.update_column(:modify_time, Time.now)
+            # 测试集的
+            @shixun.myshixuns.update_all(:system_tip => 0)
           end
-          @challenge.update_column(:modify_time, Time.now)
-          # 测试集的
-          @shixun.myshixuns.update_all(:system_tip => 0)
-        end
-        if params[:challenge][:show_type].to_i == -1
-          @challenge.update_attributes(picture_path: nil, web_route: nil, expect_picture_path: nil, original_picture_path: nil)
+          if params[:challenge][:show_type].to_i == -1
+            @challenge.update_attributes(picture_path: nil, web_route: nil, expect_picture_path: nil, original_picture_path: nil)
+          end
+          # 关卡评测执行文件如果被修改,需要修改脚本内容
+          script = modify_shixun_script @shixun, @shixun.evaluate_script
+          @shixun.shixun_info.update_column(:evaluate_script, script)
+          # TODO:
+          # if path != params[:challenge][:path]
+          #   shixun_modify_status_without_publish(@shixun, 1)
+          # end
+          #Attachment.attach_files(@challenge, params[:attachments])
         end
-        # 关卡评测执行文件如果被修改,需要修改脚本内容
-        script = modify_shixun_script @shixun, @shixun.evaluate_script
-        @shixun.shixun_info.update_column(:evaluate_script, script)
-        # TODO:
-        # if path != params[:challenge][:path]
-        #   shixun_modify_status_without_publish(@shixun, 1)
-        # end
-        #Attachment.attach_files(@challenge, params[:attachments])
-      end
 
+      end
+    rescue => e
+      logger_error("##update_challenges: ##{e.message}")
+      tip_exception("更新失败!")
     end
+
   end
 
   # 参考答案的'增,删,改'
diff --git a/db/migrate/20191211073142_modify_type_for_test_sets.rb b/db/migrate/20191211073142_modify_type_for_test_sets.rb
new file mode 100644
index 000000000..7b5c8dfef
--- /dev/null
+++ b/db/migrate/20191211073142_modify_type_for_test_sets.rb
@@ -0,0 +1,7 @@
+class ModifyTypeForTestSets < ActiveRecord::Migration[5.2]
+  def change
+    change_column :test_sets, :input, :longtext
+    change_column :test_sets, :output, :longtext
+
+  end
+end

From e8a1045316d17e0fc7031a3f297c59d1c517cbaf Mon Sep 17 00:00:00 2001
From: SylorHuang <sylor_huang@126.com>
Date: Wed, 11 Dec 2019 16:10:00 +0800
Subject: [PATCH 07/29] =?UTF-8?q?=E4=BF=AE=E6=94=B9sync=5Ftrustie=5Fjob.rb?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/jobs/sync_trustie_job.rb | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/app/jobs/sync_trustie_job.rb b/app/jobs/sync_trustie_job.rb
index 33df5b529..dec09debc 100644
--- a/app/jobs/sync_trustie_job.rb
+++ b/app/jobs/sync_trustie_job.rb
@@ -17,10 +17,17 @@ class SyncTrustieJob < ApplicationJob
       "number": count
     }
     uri = URI.parse(url)
+    # http = Net::HTTP.new(uri.hostname, uri.port)
+
     if api_host
       http = Net::HTTP.new(uri.hostname, uri.port)
-      http.send_request('PUT', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'})
-      Rails.logger.info("#######_________response__sync__end_____#########")
+
+      if api_host.include?("https://")
+        http.use_ssl = true
+      end
+
+      response = http.send_request('PUT', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'})
+      Rails.logger.info("#######_________response__sync__end_____#########{response.body}")
     end
   end
 end

From 7b304da2da39d187c4292dbe7347aa168431f285 Mon Sep 17 00:00:00 2001
From: SylorHuang <sylor_huang@126.com>
Date: Wed, 11 Dec 2019 16:13:02 +0800
Subject: [PATCH 08/29] =?UTF-8?q?=E4=BF=AE=E6=94=B9application=5Frecord?=
 =?UTF-8?q?=E9=87=8C=E7=9A=84allow=5Fsync=5Fto=5Ftrusti?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/models/application_record.rb | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index 60308f4d8..888c65423 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -14,7 +14,6 @@ class ApplicationRecord < ActiveRecord::Base
   end
 
   def allow_sync_to_trustie?
-    true
-    # Rails.env.production? && EduSetting.get('host_name') == 'https://www.educoder.net'
+    Rails.env.production? && EduSetting.get('host_name') == 'https://www.educoder.net'
   end
 end

From 20bff9a125120867d5dae2486fafa519a299511f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Wed, 11 Dec 2019 21:27:16 +0800
Subject: [PATCH 09/29] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 public/react/src/modules/page/VNCContainer.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/public/react/src/modules/page/VNCContainer.js b/public/react/src/modules/page/VNCContainer.js
index 8164f052a..aa4d82e78 100644
--- a/public/react/src/modules/page/VNCContainer.js
+++ b/public/react/src/modules/page/VNCContainer.js
@@ -38,9 +38,9 @@ class VNCContainer extends Component {
 
 	}
 
-	shouldComponentUpdate () {
-		return false;
-	}
+	// shouldComponentUpdate () {
+	// 	return false;
+	// }
 
 	getSecondDrawerWidth = () => {
 		return $('#game_right_contents').width() - firstDrawerWidth
@@ -337,11 +337,11 @@ class VNCContainer extends Component {
 						width={firstDrawerWidth}
 						closable={false}
 						onClose={this.onBottomDrawerClose}
-						visible={this.state.bottomDrawer}
+						visible={this.state.bottomDrawer===undefined?false:this.state.bottomDrawer}
 						className={'codeEvaluateDrawer'}
 						placement="bottom"
 						getContainer={false}
-						style={{ position: 'absolute', bottom: '25px', zIndex: 1 }}
+						style={{ position: 'absolute', bottom: '-25px', zIndex: 1 }}
 						afterVisibleChange={(visible) => {
 							if (visible) {
 								const canvas = $('.vncDisply canvas')[0]

From 187925a71ba9dd2fb2038479b3eb08b85b7f186d Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 09:46:36 +0800
Subject: [PATCH 10/29] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=88=86=E7=8F=AD?=
 =?UTF-8?q?=E5=AD=A6=E7=94=9F=E6=88=90=E7=BB=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/helpers/export_helper.rb | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb
index 31e1ecf45..12f1ccdae 100644
--- a/app/helpers/export_helper.rb
+++ b/app/helpers/export_helper.rb
@@ -163,9 +163,12 @@ module ExportHelper
     count_2 = common_homeworks.size
     count_3 = group_homeworks.size
     count_4 = tasks.size
+
+    all_user_ids = all_members.pluck(:user_id)
+
     #实训作业
     shixun_homeworks.each_with_index do |s,index|
-      all_student_works = s.score_student_works   #该实训题的全部用户回答
+      all_student_works = s.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #该实训题的全部用户回答
       title_no = index.to_i + 1
       student_work_to_xlsx(all_student_works,s)
       shixun_work_display_name = format_sheet_name (title_no.to_s + "." + s.name).strip.first(30)
@@ -175,7 +178,7 @@ module ExportHelper
 
     #普通作业
     common_homeworks.each_with_index do |c,index|
-      all_student_works = c.score_student_works   #当前用户的对该作业的回答
+      all_student_works = c.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
       title_no = count_1 + index.to_i + 1
       student_work_to_xlsx(all_student_works,c)
 
@@ -187,7 +190,7 @@ module ExportHelper
 
     #分组作业
     group_homeworks.each_with_index do |c,index|
-      all_student_works = c.score_student_works   #当前用户的对该作业的回答
+      all_student_works = c.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + index.to_i + 1
       student_work_to_xlsx(all_student_works,c)
       work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
@@ -197,7 +200,7 @@ module ExportHelper
 
     #毕设任务
     tasks.each_with_index do |c,index|
-      all_student_works = c.score_graduation_works   #当前用户的对该作业的回答
+      all_student_works = c.score_graduation_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + count_3 + index.to_i + 1
       graduation_work_to_xlsx(all_student_works,c,current_user)
       work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
@@ -207,7 +210,7 @@ module ExportHelper
 
     #试卷的导出
     exercises.each_with_index do |c,index|
-      all_student_works = c.score_exercise_users   #当前用户的对该作业的回答
+      all_student_works = c.score_exercise_users.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + count_3 + count_4 + index.to_i + 1
       get_export_users(c,course,all_student_works)
       work_name = format_sheet_name (title_no.to_s + "." + c.exercise_name).strip.first(30)

From ea9be0110bebd8a284e172a97906a7f6f347dc9b Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 10:28:19 +0800
Subject: [PATCH 11/29] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=88=86=E7=8F=AD?=
 =?UTF-8?q?=E5=AD=A6=E7=94=9F=E6=88=90=E7=BB=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/courses_controller.rb |  2 +-
 app/helpers/export_helper.rb          | 20 ++++++++++----------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index b08ba2dbd..c360972c3 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -1318,7 +1318,7 @@ class CoursesController < ApplicationController
           @c_tasks = @course.graduation_tasks.task_published.order("graduation_tasks.publish_time asc, graduation_tasks.created_at asc")
 
           set_export_cookies
-          member_to_xlsx(@course, @all_members, @c_homeworks, @c_exercises, @c_tasks)
+          member_to_xlsx(@course, @all_members.includes(user: :user_extension), @c_homeworks, @c_exercises, @c_tasks)
           filename_ = "#{current_user.real_name}_#{@course.name}_总成绩_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
           render xlsx: "#{format_sheet_name filename_.strip}",template: "courses/export_member_scores_excel.xlsx.axlsx",
                  locals: {course_scores:@course_user_scores,shixun_works:@shixun_work_arrays,
diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb
index 12f1ccdae..ef6f3255c 100644
--- a/app/helpers/export_helper.rb
+++ b/app/helpers/export_helper.rb
@@ -22,21 +22,21 @@ module ExportHelper
       end
     end
 
-    shixun_homeworks = shixun_homeworks&.includes(score_student_works: :user)
+    shixun_homeworks = shixun_homeworks&.includes(:score_student_works)
 
     common_homeworks = homeworks.search_homework_type(1) #全部普通作业
     common_titles = common_homeworks.pluck(:name)+ ["总得分"]
-    common_homeworks = common_homeworks&.includes(score_student_works: :user)
+    common_homeworks = common_homeworks&.includes(:score_student_works)
 
     group_homeworks = homeworks.search_homework_type(3)  #全部分组作业
     group_titles = group_homeworks.pluck(:name)+ ["总得分"]
-    group_homeworks = group_homeworks&.includes(score_student_works: :user)
+    group_homeworks = group_homeworks&.includes(:score_student_works)
 
     task_titles = tasks.pluck(:name) + ["总得分"]
-    tasks = tasks&.includes(user: :user_extension, score_graduation_works: :user)
+    tasks = tasks&.includes(:score_graduation_works)
 
     exercise_titles = exercises.pluck(:exercise_name) + ["总得分"]
-    exercises = exercises&.includes(user: :user_extension, score_exercise_users: :user)
+    exercises = exercises&.includes(:score_exercise_users)
 
     total_user_score_array = []   #学生总成绩集合
 
@@ -168,7 +168,7 @@ module ExportHelper
 
     #实训作业
     shixun_homeworks.each_with_index do |s,index|
-      all_student_works = s.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #该实训题的全部用户回答
+      all_student_works = s.score_student_works.where(user_id: all_user_ids)   #该实训题的全部用户回答
       title_no = index.to_i + 1
       student_work_to_xlsx(all_student_works,s)
       shixun_work_display_name = format_sheet_name (title_no.to_s + "." + s.name).strip.first(30)
@@ -178,7 +178,7 @@ module ExportHelper
 
     #普通作业
     common_homeworks.each_with_index do |c,index|
-      all_student_works = c.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
+      all_student_works = c.score_student_works.where(user_id: all_user_ids)    #当前用户的对该作业的回答
       title_no = count_1 + index.to_i + 1
       student_work_to_xlsx(all_student_works,c)
 
@@ -190,7 +190,7 @@ module ExportHelper
 
     #分组作业
     group_homeworks.each_with_index do |c,index|
-      all_student_works = c.score_student_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
+      all_student_works = c.score_student_works.where(user_id: all_user_ids)   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + index.to_i + 1
       student_work_to_xlsx(all_student_works,c)
       work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
@@ -200,7 +200,7 @@ module ExportHelper
 
     #毕设任务
     tasks.each_with_index do |c,index|
-      all_student_works = c.score_graduation_works.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
+      all_student_works = c.score_graduation_works.where(user_id: all_user_ids)   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + count_3 + index.to_i + 1
       graduation_work_to_xlsx(all_student_works,c,current_user)
       work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
@@ -210,7 +210,7 @@ module ExportHelper
 
     #试卷的导出
     exercises.each_with_index do |c,index|
-      all_student_works = c.score_exercise_users.select{|work| all_user_ids.include?(work.user_id)}   #当前用户的对该作业的回答
+      all_student_works = c.score_exercise_users.where(user_id: all_user_ids)   #当前用户的对该作业的回答
       title_no = count_1 + count_2 + count_3 + count_4 + index.to_i + 1
       get_export_users(c,course,all_student_works)
       work_name = format_sheet_name (title_no.to_s + "." + c.exercise_name).strip.first(30)

From 747ec3f858fe8087b8aaaee7f13282b810e9c13f Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 10:59:35 +0800
Subject: [PATCH 12/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/models/shixun.rb                                     | 1 +
 db/migrate/20191212025227_add_public_status_to_shixun.rb | 4 ++++
 2 files changed, 5 insertions(+)
 create mode 100644 db/migrate/20191212025227_add_public_status_to_shixun.rb

diff --git a/app/models/shixun.rb b/app/models/shixun.rb
index 0f9842739..08ddee08e 100644
--- a/app/models/shixun.rb
+++ b/app/models/shixun.rb
@@ -3,6 +3,7 @@ class Shixun < ApplicationRecord
   attr_accessor :page_no  #管理员页面 实训配置更新状态时,需要接受page_no参数
 
   # status: 0:编辑   1:申请发布   2:正式发布  3:关闭  -1:软删除
+  #
   # hide_code: 隐藏代码窗口
   # code_hidden: 隐藏代码目录
   # task_pass: 跳关
diff --git a/db/migrate/20191212025227_add_public_status_to_shixun.rb b/db/migrate/20191212025227_add_public_status_to_shixun.rb
new file mode 100644
index 000000000..0111db6ec
--- /dev/null
+++ b/db/migrate/20191212025227_add_public_status_to_shixun.rb
@@ -0,0 +1,4 @@
+class AddPublicStatusToShixun < ActiveRecord::Migration[5.2]
+  def change
+  end
+end

From e1bcd4b4856225f145a6c487450ec547481fb28a Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 11:05:29 +0800
Subject: [PATCH 13/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=AF=BC=E5=87=BApdf?=
 =?UTF-8?q?=E6=88=90=E7=BB=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/student_works_controller.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb
index 637155a1a..680c067f7 100644
--- a/app/controllers/student_works_controller.rb
+++ b/app/controllers/student_works_controller.rb
@@ -530,7 +530,7 @@ class StudentWorksController < ApplicationController
     @myself_eff = @echart_data[:efficiency_list].find { |item| item.last == @user.id }
     @myself_consume = @echart_data[:consume_list].find { |item| item.last == @user.id }
     filename_ = "#{@use&.student_id}_#{@use&.real_name}_#{@shixun&.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
-    filename = Base64.urlsafe_encode64(filename_.strip)
+    filename = filename_.strip.tr("+/", "-_")
     stylesheets = %w(shixun_work/shixun_work.css shared/codemirror.css)
     if params[:export].present? && params[:export]
       normal_status(0,"正在下载中")

From 0481aa11a25e688afd385dc675d4bc2f8e6f9e5b Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 11:09:52 +0800
Subject: [PATCH 14/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=AF=BC=E5=87=BApdf?=
 =?UTF-8?q?=E6=88=90=E7=BB=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/student_works_controller.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb
index 680c067f7..dfdce7bd2 100644
--- a/app/controllers/student_works_controller.rb
+++ b/app/controllers/student_works_controller.rb
@@ -529,7 +529,7 @@ class StudentWorksController < ApplicationController
     @echart_data = student_efficiency(@homework, @work)
     @myself_eff = @echart_data[:efficiency_list].find { |item| item.last == @user.id }
     @myself_consume = @echart_data[:consume_list].find { |item| item.last == @user.id }
-    filename_ = "#{@use&.student_id}_#{@use&.real_name}_#{@shixun&.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
+    filename_ = "#{@use&.student_id}_#{@use&.real_name}_#{@shixun&.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}.pdf"
     filename = filename_.strip.tr("+/", "-_")
     stylesheets = %w(shixun_work/shixun_work.css shared/codemirror.css)
     if params[:export].present? && params[:export]

From 6a25f12cc57467c3b3b035c1a0d71af647b688dd Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 15:55:03 +0800
Subject: [PATCH 15/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E6=B5=81=E7=A8=8B?=
 =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/admins/shixuns_controller.rb  |  3 +
 app/controllers/shixuns_controller.rb         | 82 +++++++++++--------
 app/helpers/shixuns_helper.rb                 | 11 +++
 app/models/shixun.rb                          |  3 +-
 app/queries/admins/shixun_query.rb            | 10 +++
 .../shixun_auths/agree_apply_service.rb       |  2 +-
 .../shixun_auths/refuse_apply_service.rb      |  2 +-
 app/services/search_service.rb                |  3 +-
 app/views/admins/shixuns/index.html.erb       | 16 ++--
 .../admins/shixuns/shared/_list.html.erb      |  6 +-
 app/views/shixuns/_top.json.jbuilder          |  2 +
 config/routes.rb                              |  1 +
 ...91212025227_add_public_status_to_shixun.rb |  1 +
 .../20191212034354_migrate_shixun_status.rb   |  9 ++
 14 files changed, 105 insertions(+), 46 deletions(-)
 create mode 100644 db/migrate/20191212034354_migrate_shixun_status.rb

diff --git a/app/controllers/admins/shixuns_controller.rb b/app/controllers/admins/shixuns_controller.rb
index e2d2830ad..6593f27c2 100644
--- a/app/controllers/admins/shixuns_controller.rb
+++ b/app/controllers/admins/shixuns_controller.rb
@@ -8,6 +8,9 @@ class Admins::ShixunsController < Admins::BaseController
     @pending_shixuns = shixuns.where(status:1).size
     @processed_shixuns = shixuns.where(status:2).size
     @closed_shixuns = shixuns.where(status:3).size
+    @none_public_shixuns = shixuns.where(public:0).size
+    @pending_public_shixuns = shixuns.where(public:1).size
+    @processed_pubic_shixuns = shixuns.where(public:2).size
     @shixuns_type_check = MirrorRepository.pluck(:type_name,:id)
     @params_page = params[:page] || 1
     @shixuns = paginate shixuns.preload(:user,:challenges)
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 03fdbf97f..f2a382e65 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -19,14 +19,14 @@ class ShixunsController < ApplicationController
 
 	before_action :allowed, only:  [:update, :close, :update_propaedeutics, :settings, :publish,
 																  :shixun_members_added, :change_manager, :collaborators_delete,
-																	:cancel_publish, :add_collaborators, :add_file]
+																	:cancel_apply_public, :cancel_publish, :add_collaborators, :add_file]
 	before_action :portion_allowed, only: [:copy]
 
 	before_action :special_allowed, only: [:send_to_course, :search_user_courses]
 
 	## 获取课程列表
   def index
-		@shixuns = current_laboratory.shixuns.unhidden
+		@shixuns = current_laboratory.shixuns.unhidden.publiced
 
 		## 方向
 		if params[:tag_level].present? && params[:tag_id].present?
@@ -818,37 +818,41 @@ class ShixunsController < ApplicationController
 		@status = 0
 		@position = []
 		begin
-			if @shixun.challenges.count == 0
-				@status = 4
-			else
-				@shixun.challenges.each do |challenge|
-					if challenge.challenge_tags.count == 0
-						@status = 3
-						@position << challenge.position
+			unless @shixun.is_jupyter?
+				if @shixun.challenges.count == 0
+					@status = 4
+				else
+					@shixun.challenges.each do |challenge|
+						if challenge.challenge_tags.count == 0
+							@status = 3
+							@position << challenge.position
+						end
 					end
-				end
-				unfinish_challenge = @shixun.challenges.where(:st => 0, :path => nil)
-				if unfinish_challenge.count > 0 && !@shixun.is_choice_type?
-					@status = 2
-					@pos = []
-					unfinish_challenge.each do |challenge|
-						@pos << challenge.position
+					unfinish_challenge = @shixun.challenges.where(:st => 0, :path => nil)
+					if unfinish_challenge.count > 0 && !@shixun.is_choice_type?
+						@status = 2
+						@pos = []
+						unfinish_challenge.each do |challenge|
+							@pos << challenge.position
+						end
 					end
 				end
 			end
 			if @status == 0
-				@shixun.update_attributes!(:status => 1)
-				apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
-				if apply && apply.status == 0
-					@status = 0
-				else
-					ApplyAction.create(:container_type => "ApplyShixun", :container_id => @shixun.id, :user_id => current_user.id, :status => 0)
-					#begin
-					#	status = Trustie::Sms.send(mobile: '18711011226', send_type:'publish_shixun' , name: '管理员')
-					#rescue => e
-					#	Rails.logger.error "发送验证码出错: #{e}"
-					#end
-					@status = 1
+				ActiveRecord::Base.transaction do
+					@shixun.update_attributes!(:status => 2)
+					apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
+					if apply && apply.status == 0
+						@status = 0
+					else
+						ApplyAction.create(:container_type => "ApplyShixun", :container_id => @shixun.id, :user_id => current_user.id, :status => 0)
+						#begin
+						#	status = Trustie::Sms.send(mobile: '18711011226', send_type:'publish_shixun' , name: '管理员')
+						#rescue => e
+						#	Rails.logger.error "发送验证码出错: #{e}"
+						#end
+						@status = 1
+					end
 				end
 			end
 		rescue Exception => e
@@ -993,14 +997,24 @@ class ShixunsController < ApplicationController
 							:disposition => 'attachment'    #inline can open in browser
 	end
 
+	# 撤销申请公开
+	def cancel_apply_public
+		tip_exception("实训已经公开,无法撤销") if @shixun.public == 2
+		ActiveRecord::Base.transaction do
+			apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
+			if apply && apply.status == 0
+				apply.update_attributes!(status: 3)
+				apply.tidings&.destroy_all
+			end
+			@shixun.update_column(:public, 0)
+		end
+		normal_status(0, "成功撤销申请")
+	end
+
 	# 撤销发布
 	def cancel_publish
-		tip_exception("实训已经发布,无法撤销") if @shixun.status == 2
-		apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
-		if apply && apply.status == 0
-			apply.update_attribute(:status, 3)
-			apply.tidings.destroy_all
-		end
+		tip_exception("请先撤销申请公开,再撤销发布") if @shixun.public == 1
+		tip_exception("实训已经公开,无法撤销") if @shixun.public == 2
 		@shixun.update_column(:status, 0)
 	end
 
diff --git a/app/helpers/shixuns_helper.rb b/app/helpers/shixuns_helper.rb
index b41750bed..655a7ed04 100644
--- a/app/helpers/shixuns_helper.rb
+++ b/app/helpers/shixuns_helper.rb
@@ -27,6 +27,17 @@ module ShixunsHelper
 		end
 	end
 
+	def shixun_public_status shixun
+		case shixun.try(:public)
+		when 0,nil
+			"未公开"
+		when 1
+			"待审核"
+		when 2
+			"已公开"
+		end
+	end
+
 	# 已完成实训所获得的经验值
 	def myshixun_exp myshixun
 		score = 0
diff --git a/app/models/shixun.rb b/app/models/shixun.rb
index 08ddee08e..dc5348450 100644
--- a/app/models/shixun.rb
+++ b/app/models/shixun.rb
@@ -3,7 +3,7 @@ class Shixun < ApplicationRecord
   attr_accessor :page_no  #管理员页面 实训配置更新状态时,需要接受page_no参数
 
   # status: 0:编辑   1:申请发布   2:正式发布  3:关闭  -1:软删除
-  #
+  # public: 0:未公开   1:申请公开   2:公开
   # hide_code: 隐藏代码窗口
   # code_hidden: 隐藏代码目录
   # task_pass: 跳关
@@ -77,6 +77,7 @@ class Shixun < ApplicationRecord
   scope :published_closed, lambda{ where(status: [2, 3]) }
   scope :none_closed, lambda{ where(status: [0, 1, 2]) }
   scope :unhidden, lambda{ where(hidden: 0, status: 2) }
+  scope :publiced, lambda{ where(public: 2) }
   scope :field_for_recommend, lambda{ select([:id, :name, :identifier, :myshixuns_count]) }
   scope :find_by_ids,lambda{|k| where(id:k)}
 
diff --git a/app/queries/admins/shixun_query.rb b/app/queries/admins/shixun_query.rb
index 0d726f267..0f8523599 100644
--- a/app/queries/admins/shixun_query.rb
+++ b/app/queries/admins/shixun_query.rb
@@ -21,7 +21,17 @@ class Admins::ShixunQuery < ApplicationQuery
           [0,1,2,3]
         end
 
+    public =
+      case params[:public]
+      when "editing" then [0]
+      when "pending" then [1]
+      when "processed" then [2]
+      else
+        [0,1,2]
+      end
+
     all_shixuns = all_shixuns.where(status: status) if status.present?
+    all_shixuns = all_shixuns.where(public: public) if public.present?
 
     if params[:tag].present?
       all_shixuns = all_shixuns.joins(:mirror_repositories).where("mirror_repositories.id = ?",params[:tag].to_i)
diff --git a/app/services/admins/shixun_auths/agree_apply_service.rb b/app/services/admins/shixun_auths/agree_apply_service.rb
index 4734e03bb..b8875cf09 100644
--- a/app/services/admins/shixun_auths/agree_apply_service.rb
+++ b/app/services/admins/shixun_auths/agree_apply_service.rb
@@ -10,7 +10,7 @@ class Admins::ShixunAuths::AgreeApplyService < ApplicationService
   def call
     ActiveRecord::Base.transaction do
       apply.update!(status: 1, dealer_id: user.id)
-      shixun.update!(status: 2, publish_time: Time.now)
+      shixun.update!(public: 2, publish_time: Time.now)
 
       # 奖励金币、经验
       reward_grade_and_experience!
diff --git a/app/services/admins/shixun_auths/refuse_apply_service.rb b/app/services/admins/shixun_auths/refuse_apply_service.rb
index 49416a2b0..76d420e53 100644
--- a/app/services/admins/shixun_auths/refuse_apply_service.rb
+++ b/app/services/admins/shixun_auths/refuse_apply_service.rb
@@ -10,7 +10,7 @@ class Admins::ShixunAuths::RefuseApplyService < ApplicationService
 
   def call
     ActiveRecord::Base.transaction do
-      shixun.update!(status: 0)
+      shixun.update!(public: 0)
       apply.update!(status: 2, reason: reason, dealer_id: user.id)
 
       deal_tiding!
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index 5eb11f398..7947ce5d8 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -30,7 +30,6 @@ class SearchService < ApplicationService
     model_options = {
       includes: modal_name.searchable_includes
     }
-    model_options.deep_merge!(where: { status: 2 }) if modal_name == Shixun
     model_options.deep_merge!(extra_options)
 
     model_options.deep_merge!(default_options)
@@ -40,7 +39,7 @@ class SearchService < ApplicationService
   def extra_options
     case params[:type].to_s.strip
     when 'shixun' then
-      { where: { id: Laboratory.current.shixuns.pluck(:id) } }
+      { where: { id: Laboratory.current.shixuns.where(public: 2, status: 2, fork_from: nil).or(Laboratory.current.shixuns.where(status: 2, id: current_user.shixuns)).pluck(:id) } }
     when 'subject' then
       { where: { id: Laboratory.current.subjects.pluck(:id) } }
     when 'course' then
diff --git a/app/views/admins/shixuns/index.html.erb b/app/views/admins/shixuns/index.html.erb
index d9f8086d8..d04257927 100644
--- a/app/views/admins/shixuns/index.html.erb
+++ b/app/views/admins/shixuns/index.html.erb
@@ -4,25 +4,31 @@
 
 <div class="box search-form-container shixuns-list-form">
   <%= form_tag(admins_shixuns_path, method: :get, class: 'form-inline search-form',id:"shixuns-search-form",remote:true) do %>
-    <div class="form-group mr-2">
+    <div class="form-group">
       <label for="status">状态:</label>
       <% status_options = [['全部', ''], ["编辑中(#{@editing_shixuns})", "editing"], ["待审核(#{@pending_shixuns})", 'pending'], ["已发布(#{@processed_shixuns})", 'processed'],["已关闭(#{@closed_shixuns})",'closed']] %>
       <%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
     </div>
 
+    <div class="form-group">
+      <label for="status">公开:</label>
+      <% public_options = [['全部', ''], ["未公开(#{@none_public_shixuns})", "editing"], ["待审核(#{@pending_public_shixuns})", 'pending'], ["已公开(#{@processed_pubic_shixuns})", 'processed']] %>
+      <%= select_tag(:public, options_for_select(public_options), class: 'form-control') %>
+    </div>
+
     <div class="form-group mr-2">
       <label for="tag-choosed">技术平台:</label>
       <%= select_tag(:tag, options_for_select(@shixuns_type_check.unshift(["",nil])), class: 'form-control',id:"tag-choosed") %>
     </div>
 
-    <div class="form-group ml-3">
+    <div class="form-group">
       <label>搜索类型:</label>
       <% auto_trial_options = [['创建者姓名', 0], ['实训名称', 1], ['学校名称', 2]] %>
       <%= select_tag(:search_type, options_for_select(auto_trial_options), class: 'form-control') %>
     </div>
-    <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2 ml-3', placeholder: '输入关键字搜索') %>
-    <%= submit_tag('搜索', class: 'btn btn-primary ml-3','data-disable-with': '搜索中...') %>
-    <%= link_to "清除",admins_shixuns_path,class: "btn btn-default",id:"shixuns-clear-search",'data-disable-with': '清除中...' %>
+    <%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2', placeholder: '输入关键字搜索') %>
+    <%= submit_tag('搜索', class: 'btn btn-primary','data-disable-with': '搜索中...') %>
+    <%= link_to "清除", admins_shixuns_path,class: "btn btn-default",id:"shixuns-clear-search",'data-disable-with': '清除中...' %>
 <% end %>
   <a href="javascript:void(0)" class="btn btn-primary" id="shixuns-export" data-disable-with = '导出中...'>导出</a>
 </div>
diff --git a/app/views/admins/shixuns/shared/_list.html.erb b/app/views/admins/shixuns/shared/_list.html.erb
index 7503d8fd2..9ee44ece3 100644
--- a/app/views/admins/shixuns/shared/_list.html.erb
+++ b/app/views/admins/shixuns/shared/_list.html.erb
@@ -2,14 +2,15 @@
   <thead class="thead-light">
   <th width="4%">序号</th>
   <th width="8%">ID</th>
-  <th width="28%" class="text-left">实训名称</th>
+  <th width="24%" class="text-left">实训名称</th>
   <th width="8%">技术平台</th>
   <th width="5%">Fork源</th>
   <th width="5%">实践</th>
   <th width="5%">选择</th>
   <th width="6%">状态</th>
+  <th width="6%">公开</th>
   <th width="7%">创建者</th>
-  <th width="13%"><%= sort_tag('创建于', name: 'created_at', path: admins_shixuns_path) %></th>
+  <th width="11%"><%= sort_tag('创建于', name: 'created_at', path: admins_shixuns_path) %></th>
   <th width="5%">单测</th>
   <th width="6%">操作</th>
   </thead>
@@ -33,6 +34,7 @@
         <td><%= shixun.challenges.where(:st => 0).size %></td>
         <td><%= shixun.challenges.where(:st => 1).size %></td>
         <td class="shixuns-status-<%= shixun.status %>"><%= shixun_authentication_status shixun %></td>
+        <td class="shixuns-status-<%= shixun.public %>"><%= shixun_public_status shixun %></td>
         <td><%= link_to shixun.user.try(:real_name),"/users/#{shixun.user.try(:login)}",target:'_blank' %></td>
         <td><%= format_time shixun.created_at %></td>
         <td class="homepage_teacher">
diff --git a/app/views/shixuns/_top.json.jbuilder b/app/views/shixuns/_top.json.jbuilder
index ebb77ec74..32c00cc79 100644
--- a/app/views/shixuns/_top.json.jbuilder
+++ b/app/views/shixuns/_top.json.jbuilder
@@ -16,3 +16,5 @@ json.diffcult       diff_to_s(shixun.trainee)
 json.score_info     shixun.shixun_preference_info # todo: 这块可以改成只显示实训的平均分,不用每次都去取每种星的分数了。
 # 用于是否显示导航栏中的'背景知识'
 json.propaedeutics  shixun.propaedeutics.present?
+
+json.public shixun.public
diff --git a/config/routes.rb b/config/routes.rb
index 3d4495edc..a6e9a3421 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -256,6 +256,7 @@ Rails.application.routes.draw do
         post :send_to_course
         delete :collaborators_delete
         get :cancel_publish
+        get :cancel_apply_public
         get :publish
         get :shixun_exec
         post :review_shixun
diff --git a/db/migrate/20191212025227_add_public_status_to_shixun.rb b/db/migrate/20191212025227_add_public_status_to_shixun.rb
index 0111db6ec..d1d817fb8 100644
--- a/db/migrate/20191212025227_add_public_status_to_shixun.rb
+++ b/db/migrate/20191212025227_add_public_status_to_shixun.rb
@@ -1,4 +1,5 @@
 class AddPublicStatusToShixun < ActiveRecord::Migration[5.2]
   def change
+    add_column :shixuns, :public, :integer, default: 0
   end
 end
diff --git a/db/migrate/20191212034354_migrate_shixun_status.rb b/db/migrate/20191212034354_migrate_shixun_status.rb
new file mode 100644
index 000000000..bb977f173
--- /dev/null
+++ b/db/migrate/20191212034354_migrate_shixun_status.rb
@@ -0,0 +1,9 @@
+class MigrateShixunStatus < ActiveRecord::Migration[5.2]
+  def change
+    # 平台上所有已发布且未隐藏的实训都设为公开
+    Shixun.unhidden.update_all(public: 2)
+
+    # 所有已申请发布的实训状态都改为已发布,申请发布改为申请公开
+    Shixun.where(status: 1, id: ApplyAction.where(container_type: 'ApplyShixun', status: 0).pluck(:container_id)).update_all(status: 2, public: 1)
+  end
+end

From ef9596d48a1e94def8671f406fdd67b15e8e2019 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 16:18:22 +0800
Subject: [PATCH 16/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=8F=91=E5=B8=83?=
 =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/services/search_service.rb        | 2 +-
 app/services/shixun_search_service.rb | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index 7947ce5d8..a45875e07 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -39,7 +39,7 @@ class SearchService < ApplicationService
   def extra_options
     case params[:type].to_s.strip
     when 'shixun' then
-      { where: { id: Laboratory.current.shixuns.where(public: 2, status: 2, fork_from: nil).or(Laboratory.current.shixuns.where(status: 2, id: current_user.shixuns)).pluck(:id) } }
+      { where: { id: Laboratory.current.shixuns.where(public: 2, status: 2, fork_from: nil).or(Laboratory.current.shixuns.where(status: 2, id: User.current.shixuns)).pluck(:id) } }
     when 'subject' then
       { where: { id: Laboratory.current.subjects.pluck(:id) } }
     when 'course' then
diff --git a/app/services/shixun_search_service.rb b/app/services/shixun_search_service.rb
index 580208dfe..649de87bf 100644
--- a/app/services/shixun_search_service.rb
+++ b/app/services/shixun_search_service.rb
@@ -25,7 +25,7 @@ class ShixunSearchService < ApplicationService
       else
         none_shixun_ids = ShixunSchool.where("school_id != #{User.current.school_id}").pluck(:shixun_id)
 
-        @shixuns = @shixuns.where.not(id: none_shixun_ids).where(hidden: 0)
+        @shixuns = @shixuns.where.not(id: none_shixun_ids).where(hidden: 0, status: 2, public: 2).or(@shixuns.where(id: current_user.shixuns))
       end
     end
 

From 7ad3538839ccefef4b62489d5ef9f1b38144c571 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 16:46:51 +0800
Subject: [PATCH 17/29] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=A8=A1=E5=9D=97?=
 =?UTF-8?q?=E7=9A=84=E6=88=90=E7=BB=A9=E8=AE=A1=E7=AE=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/courses_controller.rb | 14 ++++++++++++--
 config/routes.rb                      |  1 +
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index de24f7a8e..4f82a4c9b 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -29,7 +29,7 @@ class CoursesController < ApplicationController
                                      :informs, :update_informs, :online_learning, :update_task_position, :tasks_list,
                                     :join_excellent_course, :export_couser_info, :export_member_act_score, :new_informs,
                                     :delete_informs, :change_member_role, :course_groups, :join_course_group, :statistics,
-                                    :work_score, :act_score]
+                                    :work_score, :act_score, :calculate_all_shixun_scores]
   before_action :user_course_identity, except: [:join_excellent_course, :index, :create, :new, :apply_to_join_course,
                                                 :search_course_list, :get_historical_course_students, :mine, :search_slim, :board_list]
   before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate,
@@ -48,7 +48,7 @@ class CoursesController < ApplicationController
   before_action :validate_page_size, only: :mine
   before_action :course_tasks, only: [:tasks_list, :update_task_position]
   before_action :validate_inform_params, only: [:update_informs, :new_informs]
-  before_action :course_member_allowed, only: [:statistics, :work_score, :act_score]
+  before_action :course_member_allowed, only: [:statistics, :work_score, :act_score, :calculate_all_shixun_scores]
 
   if RUBY_PLATFORM =~ /linux/
     require 'simple_xlsx_reader'
@@ -1332,6 +1332,16 @@ class CoursesController < ApplicationController
     end
   end
 
+  # 计算课堂所有已发布的实训作业成绩
+  def calculate_all_shixun_scores
+    tip_exception(-1, "课堂已结束") if @course.is_end
+    shixun_homeworks = @course.homework_commons.homework_published.where(homework_type: 4)
+    shixun_homeworks.includes(:homework_challenge_settings, :published_settings, :homework_commons_shixun).each do |homework|
+      homework.update_homework_work_score
+    end
+    normal_status(0, "更新成功")
+  end
+
   def search_slim
     courses = current_user.manage_courses.not_deleted.processing
 
diff --git a/config/routes.rb b/config/routes.rb
index a6e9a3421..919fd9e70 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -420,6 +420,7 @@ Rails.application.routes.draw do
         get 'statistics'
         post :inform_up
         post :inform_down
+        get :calculate_all_shixun_scores
       end
 
       collection do

From baec0f86d789b8fc7739bff453da02ef80429ca3 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 12 Dec 2019 17:57:41 +0800
Subject: [PATCH 18/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E4=BD=9C=E4=B8=9A?=
 =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E7=AD=94=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/models/game.rb                                       | 6 ++++++
 app/models/myshixun.rb                                   | 5 +++--
 app/views/student_works/shixun_work_report.json.jbuilder | 2 +-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/app/models/game.rb b/app/models/game.rb
index d82392a59..ca7339352 100644
--- a/app/models/game.rb
+++ b/app/models/game.rb
@@ -119,6 +119,12 @@ class Game < ApplicationRecord
   #  self.outputs.pluck(:query_index).first
   #end
 
+  # 是否查看了答案(通关的是否在通关前看的答案)
+  def view_answer
+    answer_exists = Grade.exists?("container_type = 'Answer' and container_id = #{id} and created_at < '#{end_time}'")
+    answer_open != 0 ? (status == 2 ? answer_exists : true) : false
+  end
+
   # 用户关卡得分
   def get_user_final_score
 
diff --git a/app/models/myshixun.rb b/app/models/myshixun.rb
index 54dcf9011..9b824c0d8 100644
--- a/app/models/myshixun.rb
+++ b/app/models/myshixun.rb
@@ -83,9 +83,10 @@ class Myshixun < ApplicationRecord
     self.games.select{|game| game.status == 2}.size
   end
 
-  # 查看答案的关卡数
+  # 查看答案的关卡数,只统计通关前看的关卡
   def view_answer_count
-    self.games.select{|game| game.status == 2 && game.answer_open != 0}.size
+    answer_ids = user.grades.joins("join games on grades.container_id = games.id").where("container_type = 'Answer' and games.status=2 and games.end_time > grades.created_at").pluck(:container_id)
+    self.games.select{|game| game.status == 2 && game.answer_open != 0 && answer_ids.include?(game.id)}.size
   end
 
   # 通关时间
diff --git a/app/views/student_works/shixun_work_report.json.jbuilder b/app/views/student_works/shixun_work_report.json.jbuilder
index 162e2ab1c..068151856 100644
--- a/app/views/student_works/shixun_work_report.json.jbuilder
+++ b/app/views/student_works/shixun_work_report.json.jbuilder
@@ -42,7 +42,7 @@ if @shixun
       json.challenge_comment challenge_comment&.comment
       json.challenge_comment_hidden @user_course_identity < Course::STUDENT ? challenge_comment&.hidden_comment : nil
       json.comment_id challenge_comment&.id
-      json.view_answer game ? game.answer_open != 0 : 0
+      json.view_answer game ? game.view_answer : false
     end
   end
 

From 071ca422b12396dae59647e6e1f7aea2a999804a Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 12 Dec 2019 19:43:56 +0800
Subject: [PATCH 19/29] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E6=8A=A5?=
 =?UTF-8?q?=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/myshixuns_controller.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index b5c8af1f3..d40fc8237 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -217,7 +217,7 @@ class MyshixunsController < ApplicationController
       shixun_tomcat = edu_setting('tomcat_webssh')
       uri = "#{shixun_tomcat}/bridge/webssh/getConnectInfo"
       # 由于中间层采用混合云的方式,因为local参数表示在有文件生成的实训是在本地生成,还是在其他云端生成评测文件
-      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh), local: @myshixun.shixun.show_type != -1,
+      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh)#, local: @myshixun.shixun.show_type != -1,
                 containers:(Base64.urlsafe_encode64(shixun_container_limit @myshixun.shixun))}
       res = uri_post uri, params
       if res && res['code'].to_i != 0

From 8209f4d78d088d92d97afc23e15f403529475322 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 12 Dec 2019 19:44:33 +0800
Subject: [PATCH 20/29] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E6=8A=A5?=
 =?UTF-8?q?=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/myshixuns_controller.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index d40fc8237..6d7386e2f 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -217,7 +217,7 @@ class MyshixunsController < ApplicationController
       shixun_tomcat = edu_setting('tomcat_webssh')
       uri = "#{shixun_tomcat}/bridge/webssh/getConnectInfo"
       # 由于中间层采用混合云的方式,因为local参数表示在有文件生成的实训是在本地生成,还是在其他云端生成评测文件
-      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh)#, local: @myshixun.shixun.show_type != -1,
+      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh), #local: @myshixun.shixun.show_type != -1,
                 containers:(Base64.urlsafe_encode64(shixun_container_limit @myshixun.shixun))}
       res = uri_post uri, params
       if res && res['code'].to_i != 0

From d94c79cb061c58458fa5fca0b7e4dd9d6aee23e1 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 12 Dec 2019 20:40:21 +0800
Subject: [PATCH 21/29] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=A2=9E?=
 =?UTF-8?q?=E5=8A=A0local=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/myshixuns_controller.rb | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index b5c8af1f3..d603b557e 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -217,7 +217,8 @@ class MyshixunsController < ApplicationController
       shixun_tomcat = edu_setting('tomcat_webssh')
       uri = "#{shixun_tomcat}/bridge/webssh/getConnectInfo"
       # 由于中间层采用混合云的方式,因为local参数表示在有文件生成的实训是在本地生成,还是在其他云端生成评测文件
-      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh), local: @myshixun.shixun.show_type != -1,
+      local = @myshixun.shixun.challenges.where.not(show_type: -1).count == 0
+      params = {tpiID:@myshixun.id, podType:@myshixun.shixun.try(:webssh), local: local,
                 containers:(Base64.urlsafe_encode64(shixun_container_limit @myshixun.shixun))}
       res = uri_post uri, params
       if res && res['code'].to_i != 0

From 0aa695d7f1c1ce89780e6eef3d08d3029df7a148 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Thu, 12 Dec 2019 23:46:25 +0800
Subject: [PATCH 22/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=BC=B9=E6=A1=86=20?=
 =?UTF-8?q?=E5=A1=9E=E9=80=89=E6=94=B9=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../courses/coursesPublic/NewShixunModel.js   |  72 +++++++++---
 .../courses/coursesPublic/Newshixunmodel.css  | 108 +++++++++++++++++-
 2 files changed, 164 insertions(+), 16 deletions(-)

diff --git a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
index a20f7733c..462df7608 100644
--- a/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
+++ b/public/react/src/modules/courses/coursesPublic/NewShixunModel.js
@@ -19,7 +19,8 @@ class NewShixunModel extends Component{
 			order:'desc',
 			diff:0,
 			limit:15,
-			sort:"myshixuns_count"
+			sort:"myshixuns_count",
+			belongtoindex:0,
 		}
 	}
 	componentDidMount() {
@@ -161,7 +162,17 @@ class NewShixunModel extends Component{
 		})
 		let{status,order,diff,limit,sort}=this.state;
 		if(this.props.type==='shixuns'){
-			this.getdatalist(1,value,status,undefined,order,diff,limit)
+			this.getdatalist(1,value,status,undefined,order,diff,limit);
+			if(value==="all"){
+				this.setState({
+					belongtoindex:0
+				})
+			}else{
+				this.setState({
+					belongtoindex:1
+				})
+			}
+
 		}else{
 			this.getdatalist(1,value,undefined,undefined,order,undefined,limit,undefined,sort)
 		}
@@ -322,6 +333,7 @@ class NewShixunModel extends Component{
 		this.getdatalist(page,type,status,keyword,order,diff,limit)
 	}
 
+
 	updatepathlist=(sorts,orders)=>{
 		let{page,type,keyword,order,diff,limit,status,sort}=this.state;
 		let seartorders;
@@ -352,7 +364,7 @@ class NewShixunModel extends Component{
 	}
 	render() {
 
-	  let {diff,Grouplist,status,shixun_list,shixuns_count,page,type,order,sort}=this.state;
+	  let {diff,Grouplist,status,shixun_list,shixuns_count,page,type,order,sort,belongtoindex}=this.state;
 		// let {visible,patheditarry}=this.props;
     //   console.log(Grouplist)
 		// 	console.log(allGrouplist)
@@ -446,7 +458,7 @@ class NewShixunModel extends Component{
 					<Spin spinning={this.state.isspinning}>
 					<div className={"clearfix educontent pr mb60shixun"}>
 
-						<div className={"square-list clearfix"}>
+						<div className={"square-list clearfix verticallayout"}>
 
 							<div className="newshixunheadersear">
 								<div style={{height:"53px"}}></div>
@@ -472,7 +484,36 @@ class NewShixunModel extends Component{
 									onSearch={ (value)=>this.setdatafuns(value)} />
 							</div>
 
-							 <div className="clearfix font-12 mt30">
+
+
+
+
+
+
+							{this.props.type==='shixuns'?
+								<div className="clearfix sortinxdirection mt30 intermediatecenterysls">
+									<p className="nandu">筛选:</p>
+									<p className={belongtoindex===0?"clickbutstwo ml13":"clickbutstwos ml13"} onClick={()=>this.belongto("all")}>全部实训</p>
+									<p className={belongtoindex===1?"clickbutstwo ml20":"clickbutstwos ml20"} onClick={()=>this.belongto("mine")}>普通实训</p>
+								</div>:""
+							}
+							{/*{this.props.type==='shixuns'? <Dropdown overlay={menus}>*/}
+							{/* <a className="ant-dropdown-link  color-grey-6">*/}
+							{/*	 {diff===0?"难度":diff===1?"初级":diff===2?"中级":diff===3?"高级":diff===4?"顶级":""}<Icon type="down" className={"color-grey-6"}/>*/}
+							{/* </a>*/}
+							{/*</Dropdown>:""}*/}
+							{this.props.type==='shixuns'?
+								<div className="clearfix sortinxdirection mt20 intermediatecenterysls">
+									<p className="nandu">难度:</p>
+									<p className={diff===0?"clickbuts ml13":"clickbutst ml13"} onClick={()=>this.DropdownClick(0)}>全部</p>
+									<p className={diff===1?"clickbuts ml30":"clickbutst ml30"} onClick={()=>this.DropdownClick(1)}>初级</p>
+									<p className={diff===2?"clickbuts ml30":"clickbutst ml30"} onClick={()=>this.DropdownClick(2)}>中级</p>
+									<p className={diff===3?"clickbuts ml30":"clickbutst ml30"}  onClick={()=>this.DropdownClick(3)}>高级</p>
+									<p className={diff===4?"clickbuts ml30":"clickbutst ml30"} onClick={()=>this.DropdownClick(4)}>顶级</p>
+								</div>:""
+							}
+
+							 <div className={this.props.type==='shixuns'?"clearfix font-12 mt20":"clearfix font-12 mt30"}>
 
 								<div className="font-12 ml5 fl">
 
@@ -509,17 +550,18 @@ class NewShixunModel extends Component{
 										</a>
 									</Dropdown>:"":""}
 
-									{this.props.type==='shixuns'? <Dropdown overlay={menus}>
-										<a className="ant-dropdown-link  color-grey-6">
-											{diff===0?"难度":diff===1?"初级":diff===2?"中级":diff===3?"高级":diff===4?"顶级":""}<Icon type="down" className={"color-grey-6"}/>
-										</a>
-									</Dropdown>:""}
+
 								</div>
 
-								<div className="font-12 alltopiscright ml25 fr">
-									{/*<span className={"fr pointer color-grey-3"}  onClick={()=>this.props.hideNewShixunModelType()}>返回</span>*/}
-									<span className={type==="mine"?"fr topcsactive pointer color-grey-3 color-blue":"fr pointer color-grey-3"} onClick={()=>this.belongto("mine")}>我的{this.props.type==='shixuns'?'实训':"课程"}</span>
-									<span className={type==="all"?"fr mr30 topcsactive pointer color-grey-3 color-blue":"fr mr30 pointer color-grey-3"}  onClick={()=>this.belongto("all")}>全部{this.props.type==='shixuns'?'实训':"课程"}</span>
+								<div className="font-12 alltopiscright ml25 fl">
+
+									{this.props.type==='shixuns'?"":
+										<span className={type==="mine"?"fr topcsactive pointer color-grey-3 color-blue":"fr pointer color-grey-3"} onClick={()=>this.belongto("mine")}>我的课程</span>
+									}
+
+									{this.props.type==='shixuns'?"":
+										<span className={type==="all"?"fr mr30 topcsactive pointer color-grey-3 color-blue":"fr mr30 pointer color-grey-3"}  onClick={()=>this.belongto("all")}>全部课程</span>
+									}
 								</div>
 
 							</div>
@@ -684,4 +726,4 @@ export default NewShixunModel;
 // 			<span dangerouslySetInnerHTML={{__html: item}}>{}</span>
 // 		)
 // 	})}
-// </div>}
\ No newline at end of file
+// </div>}
diff --git a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css
index 42595bf29..307035602 100644
--- a/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css
+++ b/public/react/src/modules/courses/coursesPublic/Newshixunmodel.css
@@ -384,4 +384,110 @@
 
 .newshixunmodels{
     margin: 0 auto;
-}
\ No newline at end of file
+}
+
+/* 中间居中 */
+.intermediatecenter{
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+/* 简单居中 */
+.intermediatecenterysls{
+    display: flex;
+    align-items: center;
+}
+.spacearound{
+    display: flex;
+    justify-content: space-around;
+
+}
+.spacebetween{
+    display: flex;
+    justify-content: space-between;
+}
+/* 头顶部居中 */
+.topcenter{
+    display: -webkit-flex;
+    flex-direction: column;
+    align-items: center;
+
+}
+
+
+/* x轴正方向排序 */
+/* 一 二 三 四 五 六 七 八 */
+.sortinxdirection{
+    display: flex;
+    flex-direction:row;
+}
+/* x轴反方向排序 */
+/* 八    七   六  五   四  三  二 一 */
+.xaxisreverseorder{
+    display: flex;
+    flex-direction:row-reverse;
+}
+/* 垂直布局 正方向*/
+/* 一
+ 二
+ 三
+ 四
+ 五
+ 六
+ 七
+ 八 */
+.verticallayout{
+    display: flex;
+    flex-direction:column;
+}
+/* 垂直布局 反方向*/
+.reversedirection{
+    display: flex;
+    flex-direction:column-reverse;
+}
+
+.nandu{
+    width: 42px;
+    height: 19px;
+    font-size: 14px;
+    color: #000000;
+    line-height: 19px;
+    margin-left: 6px;
+}
+
+.clickbuts{
+    text-align: center;
+    width: 60px;
+    height: 32px;
+    background: #4CACFF;
+    border-radius: 16px;
+    line-height: 30px;
+    color: #FFFFFF;
+    cursor:pointer;
+}
+.clickbutst{
+    height:19px;
+    font-size:14px;
+    color:#505050;
+    line-height:19px;
+    cursor:pointer;
+}
+
+.clickbutstwo{
+    text-align: center;
+    width: 85px;
+    height: 32px;
+    background: #4CACFF;
+    border-radius: 16px;
+    line-height: 30px;
+    color: #FFFFFF;
+    cursor:pointer;
+}
+.clickbutstwos{
+    height:19px;
+    font-size:14px;
+    color:#505050;
+    line-height:19px;
+    cursor:pointer;
+}

From fe3c794a2063feee9a1cf7e815ed8bc1e686ad33 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Fri, 13 Dec 2019 09:53:30 +0800
Subject: [PATCH 23/29] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=8F=91=E5=B8=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/hacks_controller.rb                  | 10 ++++++++--
 app/views/hack_user_lastest_codes/show.json.jbuilder |  2 +-
 app/views/hacks/index.json.jbuilder                  |  2 +-
 config/routes.rb                                     |  1 +
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/app/controllers/hacks_controller.rb b/app/controllers/hacks_controller.rb
index 657ad0f2a..cab952a04 100644
--- a/app/controllers/hacks_controller.rb
+++ b/app/controllers/hacks_controller.rb
@@ -1,8 +1,8 @@
 class HacksController < ApplicationController
   before_action :require_login, except: [:index]
-  before_action :find_hack, only: [:edit, :update, :publish, :start, :update_set, :delete_set, :destroy]
+  before_action :find_hack, only: [:edit, :update, :publish, :start, :update_set, :delete_set, :destroy, :cancel_publish]
   before_action :require_teacher_identity, only: [:create]
-  before_action :require_auth_identity, only: [:update, :edit, :publish, :update_set, :delete_set, :destroy]
+  before_action :require_auth_identity, only: [:update, :edit, :publish, :update_set, :delete_set, :destroy, :cancel_publish]
 
 
   # 开启编程,如果第一次开启,创建一条记录,如果已经开启过的话,直接返回标识即可
@@ -99,6 +99,12 @@ class HacksController < ApplicationController
     render_ok
   end
 
+  # 取消发布
+  def cancel_publish
+    @hack.update_attribute(:status, 0)
+    render_ok
+  end
+
   # 发布列表
   def unpulished_list
     limit = params[:limit] || 16
diff --git a/app/views/hack_user_lastest_codes/show.json.jbuilder b/app/views/hack_user_lastest_codes/show.json.jbuilder
index 2d7ffd2bf..cfdc87d25 100644
--- a/app/views/hack_user_lastest_codes/show.json.jbuilder
+++ b/app/views/hack_user_lastest_codes/show.json.jbuilder
@@ -1,5 +1,5 @@
 json.hack do
-  json.(@hack, :name, :difficult, :time_limit, :description, :score, :identifier)
+  json.(@hack, :name, :difficult, :time_limit, :description, :score, :identifier, :status)
   json.language @hack.language
   json.username @hack.user.real_name
   json.code @my_hack.code
diff --git a/app/views/hacks/index.json.jbuilder b/app/views/hacks/index.json.jbuilder
index c86884a41..2b4a8b8c7 100644
--- a/app/views/hacks/index.json.jbuilder
+++ b/app/views/hacks/index.json.jbuilder
@@ -8,6 +8,6 @@ end
 json.hacks_count @hacks_count
 json.hacks_list do
   json.array! @hacks do |hack|
-    json.(hack,:identifier, :name , :hack_user_lastest_codes_count, :difficult, :passed_rate, :category)
+    json.(hack,:identifier, :name , :hack_user_lastest_codes_count, :difficult, :passed_rate, :category, :open_or_not, :status)
   end
 end
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 972579201..19cbe4058 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -41,6 +41,7 @@ Rails.application.routes.draw do
       end
       member do
         post :publish
+        post :cancel_publish
         get :start
         post :update_set
         delete :delete_set

From f93347f6ca51a002970966a96ce9a92cd7528d70 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Fri, 13 Dec 2019 11:19:53 +0800
Subject: [PATCH 24/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E7=9A=84=E7=94=B3?=
 =?UTF-8?q?=E8=AF=B7=E5=85=AC=E5=BC=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/shixuns_controller.rb | 32 +++++++++++++--------------
 config/routes.rb                      |  1 +
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index f2a382e65..63bf059e0 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -17,7 +17,7 @@ class ShixunsController < ApplicationController
 																								 :get_mirror_script, :download_file, :shixun_list, :batch_send_to_course]
 	before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy, :add_file]
 
-	before_action :allowed, only:  [:update, :close, :update_propaedeutics, :settings, :publish,
+	before_action :allowed, only:  [:update, :close, :update_propaedeutics, :settings, :publish, :apply_public,
 																  :shixun_members_added, :change_manager, :collaborators_delete,
 																	:cancel_apply_public, :cancel_publish, :add_collaborators, :add_file]
 	before_action :portion_allowed, only: [:copy]
@@ -839,27 +839,27 @@ class ShixunsController < ApplicationController
 				end
 			end
 			if @status == 0
-				ActiveRecord::Base.transaction do
-					@shixun.update_attributes!(:status => 2)
-					apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
-					if apply && apply.status == 0
-						@status = 0
-					else
-						ApplyAction.create(:container_type => "ApplyShixun", :container_id => @shixun.id, :user_id => current_user.id, :status => 0)
-						#begin
-						#	status = Trustie::Sms.send(mobile: '18711011226', send_type:'publish_shixun' , name: '管理员')
-						#rescue => e
-						#	Rails.logger.error "发送验证码出错: #{e}"
-						#end
-						@status = 1
-					end
-				end
+				@shixun.update_attributes!(:status => 2)
 			end
 		rescue Exception => e
 			logger.error("pushlish game #{e}")
 		end
 	end
 
+	def apply_public
+		tip_exception(-1, "请先发布实训再申请公开") if @shixun.status != 2
+		ActiveRecord::Base.transaction do
+			@shixun.update_attributes!(pubic: 1)
+			apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
+			if apply && apply.status == 0
+				@status = 0
+			else
+				ApplyAction.create(:container_type => "ApplyShixun", :container_id => @shixun.id, :user_id => current_user.id, :status => 0)
+			end
+		end
+		normal_status(0, "申请成功")
+	end
+
 	# 设置私密版本库的在tpm中的目录
 	def set_secret_dir
 		raise("设置路径不能为空") if params[:secret_dir_path].blank?
diff --git a/config/routes.rb b/config/routes.rb
index 972579201..b89976c89 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -259,6 +259,7 @@ Rails.application.routes.draw do
         get :cancel_publish
         get :cancel_apply_public
         get :publish
+        get :apply_public
         get :shixun_exec
         post :review_shixun
         get :review_newest_record

From 114d78255802c69b324f8da62c81b881a392fa2a Mon Sep 17 00:00:00 2001
From: jingquan huang <huang.jingquan@163.com>
Date: Fri, 13 Dec 2019 11:53:43 +0800
Subject: [PATCH 25/29] RequestStore for current user and current laboratory

---
 Gemfile                                   |  3 +++
 app/controllers/application_controller.rb |  2 +-
 app/models/laboratory.rb                  | 14 +++++++++++---
 app/models/user.rb                        | 12 ++++++++++--
 4 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/Gemfile b/Gemfile
index 55030971d..55478816f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -103,3 +103,6 @@ gem 'diffy'
 # oauth2
 gem 'omniauth', '~> 1.9.0'
 gem 'omniauth-oauth2', '~> 1.6.0'
+
+# global var
+gem 'request_store'
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 3ec8ad0f7..b3a0e123a 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -303,7 +303,7 @@ class ApplicationController < ActionController::Base
 		current_domain_session = session[:"#{default_yun_session}"]
 		if current_domain_session
 			# existing session
-			(User.active.find(current_domain_session) rescue nil)
+			User.current = (User.active.find(current_domain_session) rescue nil)
 		elsif autologin_user = try_to_autologin
 			autologin_user
 		elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth?
diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb
index 2ba86ed90..dab2f6f39 100644
--- a/app/models/laboratory.rb
+++ b/app/models/laboratory.rb
@@ -38,12 +38,20 @@ class Laboratory < ApplicationRecord
     find_by_identifier(subdomain)
   end
 
-  def self.current=(laboratory)
-    Thread.current[:current_laboratory] = laboratory
+  # def self.current=(laboratory)
+  #   Thread.current[:current_laboratory] = laboratory
+  # end
+  #
+  # def self.current
+  #   Thread.current[:current_laboratory] ||= Laboratory.find(1)
+  # end
+
+  def self.current=(user)
+    RequestStore.store[:current_laboratory] = user
   end
 
   def self.current
-    Thread.current[:current_laboratory] ||= Laboratory.find(1)
+    RequestStore.store[:current_laboratory] ||= User.anonymous
   end
 
   def shixuns
diff --git a/app/models/user.rb b/app/models/user.rb
index eb3ece0a4..a9b2f0b3a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -540,12 +540,20 @@ class User < ApplicationRecord
     mail.present?
   end
 
+  # def self.current=(user)
+  #   Thread.current[:current_user] = user
+  # end
+  #
+  # def self.current
+  #   Thread.current[:current_user] ||= User.anonymous
+  # end
+
   def self.current=(user)
-    Thread.current[:current_user] = user
+    RequestStore.store[:current_user] = user
   end
 
   def self.current
-    Thread.current[:current_user] ||= User.anonymous
+    RequestStore.store[:current_user] ||= User.anonymous
   end
 
   def self.anonymous

From 9de3195e3a2754459f8d9382a9b582d00cec1cf5 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Fri, 13 Dec 2019 11:55:24 +0800
Subject: [PATCH 26/29] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E7=94=B3=E8=AF=B7?=
 =?UTF-8?q?=E5=85=AC=E5=BC=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/shixuns_controller.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index 63bf059e0..caa716f16 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -849,7 +849,7 @@ class ShixunsController < ApplicationController
 	def apply_public
 		tip_exception(-1, "请先发布实训再申请公开") if @shixun.status != 2
 		ActiveRecord::Base.transaction do
-			@shixun.update_attributes!(pubic: 1)
+			@shixun.update_attributes!(public: 1)
 			apply = ApplyAction.where(:container_type => "ApplyShixun", :container_id => @shixun.id).order("created_at desc").first
 			if apply && apply.status == 0
 				@status = 0

From 331f3bdea1ba1a3b5f910ec656396d353f797a88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Fri, 13 Dec 2019 15:42:22 +0800
Subject: [PATCH 27/29] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=91=E5=B8=83?=
 =?UTF-8?q?=E6=97=B6=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../modules/courses/busyWork/CommonWorkItem.js    | 15 ++++++++-------
 .../courses/shixunHomework/ShixunhomeWorkItem.js  |  8 --------
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/public/react/src/modules/courses/busyWork/CommonWorkItem.js b/public/react/src/modules/courses/busyWork/CommonWorkItem.js
index 75676557a..82e2d2d96 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkItem.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkItem.js
@@ -205,15 +205,16 @@ class CommonWorkItem extends Component{
 									{item.uncommit_count===undefined?"":<span className="mr20 fl">{item.uncommit_count} 未交</span>}
                   {
                     item.status_time!="" && 
-                    <Tooltip placement="bottom" title={ item.status.indexOf('提交中') != -1 ? '提交剩余时间' :
-                        item.status.indexOf('补交中') != -1 ? '补交剩余时间' : 
-                        item.status.indexOf('申诉中') != -1 ? '申诉剩余时间' : 
-                        item.status.indexOf('匿评中') != -1 ? '匿评剩余时间' : 
-                        item.status.indexOf('匿评申诉中') != -1 ? '匿评申诉剩余时间' : ''}>
+
                       <span className="mr20 fl">{item.status_time}</span>
-                    </Tooltip>
-                  }
 
+                  }
+                  {/*<Tooltip placement="bottom" title={ item.status.indexOf('提交中') != -1 ? '提交剩余时间' :*/}
+                  {/*  item.status.indexOf('补交中') != -1 ? '补交剩余时间' :*/}
+                  {/*    item.status.indexOf('申诉中') != -1 ? '申诉剩余时间' :*/}
+                  {/*      item.status.indexOf('匿评中') != -1 ? '匿评剩余时间' :*/}
+                  {/*        item.status.indexOf('匿评申诉中') != -1 ? '匿评申诉剩余时间' : ''}>*/}
+                  {/*</Tooltip>*/}
                   {isAdmin && <div className="fr">
                       <WordsBtn style="blue" className="fl font-16 ml28" onClick={ () => { this.props.toEditPage(this.props.match.params, item.homework_id) }}>编辑</WordsBtn> 
                       <WordsBtn style="blue" className="fl font-16 ml28" onClick={ () => { this.props.toWorkSettingPage(this.props.match.params, item.homework_id) }}>设置</WordsBtn> 
diff --git a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js
index dc59d93ed..f5f06c037 100644
--- a/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js
+++ b/public/react/src/modules/courses/shixunHomework/ShixunhomeWorkItem.js
@@ -393,21 +393,13 @@ class ShixunhomeWorkItem extends Component{
 
                 {
                   discussMessage.time_status===1?
-                    <Tooltip title={"提交剩余时间"} placement="bottom">
                       <span className="mr15 color-grey9">{discussMessage.status_time}</span>
-                    </Tooltip>
                   :discussMessage.time_status===2?
-                    <Tooltip title={"补交剩余时间"} placement="bottom">
                       <span className="mr15 color-grey9">{discussMessage.status_time}</span>
-                    </Tooltip>
                   :discussMessage.time_status===3?
-                      <Tooltip title={"匿评剩余时间"} placement="bottom">
                         <span className="mr15 color-grey9">{discussMessage.status_time}</span>
-                      </Tooltip>
                   :discussMessage.time_status===4?
-                        <Tooltip title={"申诉剩余时间"} placement="bottom">
                           <span className="mr15 color-grey9">{discussMessage.status_time}</span>
-                        </Tooltip>
                   :
                    <span className="mr15 color-grey9">{discussMessage.status_time}</span>
                 }

From 75634252cea448b34efb1efa376b3a95dfdcd3ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Fri, 13 Dec 2019 15:48:17 +0800
Subject: [PATCH 28/29] =?UTF-8?q?=E5=BC=80=E6=94=BE=E5=AE=9E=E8=AE=AD?=
 =?UTF-8?q?=E6=8A=A5=E5=91=8A=E5=AF=BC=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/modules/courses/shixunHomework/ShixunWorkReport.js    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js b/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js
index 23f590dcd..1bf7ac181 100644
--- a/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js
+++ b/public/react/src/modules/courses/shixunHomework/ShixunWorkReport.js
@@ -366,10 +366,10 @@ class ShixunWorkReport extends Component {
 						<p className=" fl color-black mt25 summaryname">{data&&data.shixun_name}</p>
 						{/*{this.props.isAdmin()?<a className=" fr font-14 ml30 mt10 mr20 color-grey-9 ">导出实训报告数据</a>:""}*/}
 						<a onClick={this.goback} className="color-grey-6 fr font-14 ml20 mt15">返回</a>
-						{this.props.isAdmin() ? <a
+					 <a
 							className=" color-blue font-14 fr  ml20 mt15"
 							onClick={()=>this.confirmysl(`/student_works/${homeworkid}/export_shixun_work_report.pdf`)}
-						> <Spin size="small" spinning={this.state.isspinning}>导出实训报告数据</Spin></a> : ""}
+						> <Spin size="small" spinning={this.state.isspinning}>导出实训报告数据</Spin></a>
 						{/*{this.props.isAdmin() ?work_comment_hidden===true? "":<a*/}
 							{/*className=" color-blue font-14 fr  ml20 mt15"*/}
 							{/*onClick={()=>this.showAppraiseModal(1)}*/}

From 0f5b4941b221b5d58bc4ee637187dcf3563e0e54 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Fri, 13 Dec 2019 15:50:23 +0800
Subject: [PATCH 29/29] =?UTF-8?q?=E9=80=89=E7=94=A8=E5=AE=9E=E8=AE=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/services/shixun_search_service.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/services/shixun_search_service.rb b/app/services/shixun_search_service.rb
index 649de87bf..fce8a2fd5 100644
--- a/app/services/shixun_search_service.rb
+++ b/app/services/shixun_search_service.rb
@@ -25,7 +25,7 @@ class ShixunSearchService < ApplicationService
       else
         none_shixun_ids = ShixunSchool.where("school_id != #{User.current.school_id}").pluck(:shixun_id)
 
-        @shixuns = @shixuns.where.not(id: none_shixun_ids).where(hidden: 0, status: 2, public: 2).or(@shixuns.where(id: current_user.shixuns))
+        @shixuns = @shixuns.where.not(id: none_shixun_ids).where(hidden: 0, status: 2, public: 2).or(@shixuns.where(id: User.current.shixuns))
       end
     end