From db63c7574df8ff623a7328b610dd9974cbf1bce4 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 15:17:13 +0800 Subject: [PATCH 01/36] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../course_member_attendances_controller.rb | 17 +++++++++++------ app/models/course_member_attendance.rb | 2 +- ...0309071103_migrate_member_attendance_mode.rb | 5 +++++ 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20200309071103_migrate_member_attendance_mode.rb diff --git a/app/controllers/weapps/course_member_attendances_controller.rb b/app/controllers/weapps/course_member_attendances_controller.rb index 7e315fc85..196d20fda 100644 --- a/app/controllers/weapps/course_member_attendances_controller.rb +++ b/app/controllers/weapps/course_member_attendances_controller.rb @@ -29,18 +29,23 @@ class Weapps::CourseMemberAttendancesController < ApplicationController def create tip_exception("签到码不能为空") if params[:code].blank? - tip_exception("attendance_mode参数不对") unless ["NUMBER", "QRCODE"].include?(params[:attendance_mode]) + tip_exception("attendance_mode参数不对") unless ["NUMBER", "QRCODE", "QUICK"].include?(params[:attendance_mode]) - attendance = CourseAttendance.find_by(attendance_code: params[:code]) - tip_exception("签到码输入有误") if attendance.blank? || attendance.course.blank? + if params[:attendance_mode] == "QUICK" + attendance = CourseAttendance.find_by(id: params[:attendance_id]) + else + attendance = CourseAttendance.find_by(attendance_code: params[:code]) + end + tip_exception("该签到不存在") if attendance.blank? || attendance.course.blank? member = attendance.course.students.find_by(user_id: current_user.id) - tip_exception("签到码输入有误") if member.blank? + tip_exception("该签到不存在") if member.blank? tip_exception("不在签到时间内") unless attendance.current_attendance? - tip_exception("只支持数字签到") if attendance.mode != "ALL" && attendance.mode == "NUMBER" && params[:attendance_mode] == "QRCODE" - tip_exception("只支持二维码签到") if attendance.mode != "ALL" && attendance.mode == "QRCODE" && params[:attendance_mode] == "NUMBER" + tip_exception("只支持数字签到") if attendance.mode != "ALL" && attendance.mode == "NUMBER" && params[:attendance_mode] != "NUMBER" + tip_exception("只支持二维码签到") if attendance.mode != "ALL" && attendance.mode == "QRCODE" && params[:attendance_mode] != "QRCODE" + tip_exception("只支持快捷签到") if attendance.mode == "QUICK" && params[:attendance_mode] != "QUICK" current_attendance = attendance.course_member_attendances.find_by(user_id: current_user.id) if current_attendance.present? diff --git a/app/models/course_member_attendance.rb b/app/models/course_member_attendance.rb index 152bb48b6..b854acfe7 100644 --- a/app/models/course_member_attendance.rb +++ b/app/models/course_member_attendance.rb @@ -1,6 +1,6 @@ class CourseMemberAttendance < ApplicationRecord # attendance_mode :0 初始数据,1 二维码签到,2 数字签到,3 老师签到 - enum attendance_mode: { DEFAULT: 0, QRCODE: 1, NUMBER: 2, TEACHER: 3} + enum attendance_mode: { DEFAULT: 0, QRCODE: 1, NUMBER: 2, QUICK: 3, TEACHER: 4} # attendance_status :1 正常签到,2 请假,0 旷课 enum attendance_status: { NORMAL: 1, LEAVE: 2, ABSENCE: 0 } belongs_to :course_member diff --git a/db/migrate/20200309071103_migrate_member_attendance_mode.rb b/db/migrate/20200309071103_migrate_member_attendance_mode.rb new file mode 100644 index 000000000..41f81444a --- /dev/null +++ b/db/migrate/20200309071103_migrate_member_attendance_mode.rb @@ -0,0 +1,5 @@ +class MigrateMemberAttendanceMode < ActiveRecord::Migration[5.2] + def change + CourseMemberAttendance.where(attendance_mode: 3).update_all(attendance_mode: 4) + end +end From 8f37a385d709becc5efe32ca12c671a537487627 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 15:17:46 +0800 Subject: [PATCH 02/36] =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/courses_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index e9d6e4b06..ed76a4b0c 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -98,7 +98,7 @@ module CoursesHelper when "attachment" "/courses/#{course.id}/file/#{category.id}" when "video" - "/courses/#{course.id}/course_videos/#{category.id}" + "/courses/#{course.id}/course_video/#{category.id}" end end From cc15a21f7ef3109d595e1cc5a36ca8cf00ca394c Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 15:29:44 +0800 Subject: [PATCH 03/36] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index fe9d20d8d..e69f00380 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -104,7 +104,7 @@ class CoursesController < ApplicationController def course_videos videos = @course.videos if params[:category_id].present? && params[:category_id].to_i != 0 - videos = videos.where(course_second_category_id: params[:category_id].to_i) + videos = videos.where(course_videos: {course_second_category_id: params[:category_id].to_i}) end videos = custom_sort(videos, params[:sort_by], params[:sort_direction]) From 58fb55ed0266b2b5ef7d685d9998db38436f9615 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 15:45:27 +0800 Subject: [PATCH 04/36] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E7=9A=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../course_member_attendances_controller.rb | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/app/controllers/weapps/course_member_attendances_controller.rb b/app/controllers/weapps/course_member_attendances_controller.rb index 196d20fda..7e315fc85 100644 --- a/app/controllers/weapps/course_member_attendances_controller.rb +++ b/app/controllers/weapps/course_member_attendances_controller.rb @@ -29,23 +29,18 @@ class Weapps::CourseMemberAttendancesController < ApplicationController def create tip_exception("签到码不能为空") if params[:code].blank? - tip_exception("attendance_mode参数不对") unless ["NUMBER", "QRCODE", "QUICK"].include?(params[:attendance_mode]) + tip_exception("attendance_mode参数不对") unless ["NUMBER", "QRCODE"].include?(params[:attendance_mode]) - if params[:attendance_mode] == "QUICK" - attendance = CourseAttendance.find_by(id: params[:attendance_id]) - else - attendance = CourseAttendance.find_by(attendance_code: params[:code]) - end - tip_exception("该签到不存在") if attendance.blank? || attendance.course.blank? + attendance = CourseAttendance.find_by(attendance_code: params[:code]) + tip_exception("签到码输入有误") if attendance.blank? || attendance.course.blank? member = attendance.course.students.find_by(user_id: current_user.id) - tip_exception("该签到不存在") if member.blank? + tip_exception("签到码输入有误") if member.blank? tip_exception("不在签到时间内") unless attendance.current_attendance? - tip_exception("只支持数字签到") if attendance.mode != "ALL" && attendance.mode == "NUMBER" && params[:attendance_mode] != "NUMBER" - tip_exception("只支持二维码签到") if attendance.mode != "ALL" && attendance.mode == "QRCODE" && params[:attendance_mode] != "QRCODE" - tip_exception("只支持快捷签到") if attendance.mode == "QUICK" && params[:attendance_mode] != "QUICK" + tip_exception("只支持数字签到") if attendance.mode != "ALL" && attendance.mode == "NUMBER" && params[:attendance_mode] == "QRCODE" + tip_exception("只支持二维码签到") if attendance.mode != "ALL" && attendance.mode == "QRCODE" && params[:attendance_mode] == "NUMBER" current_attendance = attendance.course_member_attendances.find_by(user_id: current_user.id) if current_attendance.present? From 6b780d50fc3c8188ff19b73dec665d5c52360800 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 15:46:27 +0800 Subject: [PATCH 05/36] =?UTF-8?q?TPM=E5=85=B3=E5=8D=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E6=AF=8F=E4=B8=80=E5=85=B3=E5=8D=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=8C=91=E6=88=98=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/challenges/index.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index c53ab9c58..eb7ee900d 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -19,7 +19,7 @@ if @challenges.present? json.passed_count challenge.user_passed_count json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - #json.open_game challenge.open_game(@user.id, @shixun) + json.open_game challenge.open_game(@user.id, @shixun) if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) From 25956ec86ea60665aa1445d2f2cdc7e7faf2801d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 15:50:24 +0800 Subject: [PATCH 06/36] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E5=85=B3=E5=8D=A1?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E5=BC=80=E5=90=AF=E6=8C=91?= =?UTF-8?q?=E6=88=98=E7=9A=84=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/challenge.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 70fac990b..bc504a5bc 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -74,7 +74,7 @@ class Challenge < ApplicationRecord if game.present? shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : "" else - "/api/shixuns/#{shixun.identifier}/shixun_exec" + self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" end end From 9b44fff61f0fe24d657fc8dcb10bdf2be6f49acd Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 15:55:58 +0800 Subject: [PATCH 07/36] =?UTF-8?q?=E4=BA=8C=E7=BA=A7=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 3 +++ app/views/courses/course_videos.json.jbuilder | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e69f00380..825e18a41 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -103,7 +103,10 @@ class CoursesController < ApplicationController def course_videos videos = @course.videos + @video_module = @course.course_modules.find_by(module_type: "video") if params[:category_id].present? && params[:category_id].to_i != 0 + @category = @video_module&.course_second_categories.find_by(id: params[:category_id]) + tip_exception("子目录id有误") if !@category.present? videos = videos.where(course_videos: {course_second_category_id: params[:category_id].to_i}) end diff --git a/app/views/courses/course_videos.json.jbuilder b/app/views/courses/course_videos.json.jbuilder index 807ff92bb..db4f4006c 100644 --- a/app/views/courses/course_videos.json.jbuilder +++ b/app/views/courses/course_videos.json.jbuilder @@ -1,3 +1,8 @@ json.count @count json.videos @videos, partial: 'users/videos/video', as: :video -json.course_id @course.id \ No newline at end of file +json.course_id @course.id +if @category.present? + json.category_id @category.id + json.category_name @category.name +end +json.course_module_id @video_module&.id \ No newline at end of file From 961bfeb0bd7c429226a48a1bf233540b9121841a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Mon, 9 Mar 2020 16:17:14 +0800 Subject: [PATCH 08/36] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/modules/tpm/shixuns/shixun-search-bar/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/react/src/modules/tpm/shixuns/shixun-search-bar/index.jsx b/public/react/src/modules/tpm/shixuns/shixun-search-bar/index.jsx index 29a3b8485..c936de66d 100644 --- a/public/react/src/modules/tpm/shixuns/shixun-search-bar/index.jsx +++ b/public/react/src/modules/tpm/shixuns/shixun-search-bar/index.jsx @@ -91,7 +91,7 @@ export default ({ StatusEnquiry, allUpdatashixunlist, Updatasearchlist }) => {
方向:
- 全部 +
  • 全部
  • { navs.map((item, key) => { return ( From 5e65dc5b927c2c8ba5ece78abc4b7ace5faca3ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 9 Mar 2020 16:27:29 +0800 Subject: [PATCH 09/36] =?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/images/educoder/xcx/xuesqiandao.png | Bin 0 -> 150484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 public/images/educoder/xcx/xuesqiandao.png diff --git a/public/images/educoder/xcx/xuesqiandao.png b/public/images/educoder/xcx/xuesqiandao.png new file mode 100755 index 0000000000000000000000000000000000000000..7124615fd9cf540b1f1bc289c5eab85fff09e365 GIT binary patch literal 150484 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 Y(MmHVFpoObi8>D7Pm#Cv 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 Date: Mon, 9 Mar 2020 16:36:50 +0800 Subject: [PATCH 10/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 5 ++--- app/models/challenge.rb | 20 ++++++++++---------- app/views/challenges/index.json.jbuilder | 4 ++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 103c33aab..ce7b2dd38 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -155,9 +155,8 @@ class ChallengesController < ApplicationController def index uid_logger("identifier: #{params}") - - @challenges = @shixun.challenges.fields_for_list - + @challenges = @shixun.challenges.fields_for_list.joins(:games).where(games: {user_id: current_user.id}) + .select("challenges.*, games.identifier identifier, games.status status") @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index bc504a5bc..6f361e380 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -69,10 +69,10 @@ class Challenge < ApplicationRecord end # 开启挑战 - def open_game user_id, shixun - game = self.games.where(user_id: user_id).first - if game.present? - shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : "" + def open_game + identifier = self.identifier + if identifier.present? + shixun.task_pass || status != 3 ? "/tasks/#{identifier}" : "" else self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" end @@ -92,16 +92,16 @@ class Challenge < ApplicationRecord # end ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 - def user_tpi_status user_id + def user_tpi_status # todo: 以前没加索引导致相同关卡,同一用户有多个games # 允许跳关则直接开启 - game = games.where(user_id: user_id).take - if game.blank? - position == 1 ? 1 : 0 + identifier = self.identifier + if identifier.blank? + self.position == 1 ? 1 : 0 else - if game.status == 3 + if status == 3 shixun.task_pass ? 1 : 0 - elsif game.status == 2 + elsif status == 2 2 else 1 diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index eb7ee900d..693f3717f 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -19,7 +19,7 @@ if @challenges.present? json.passed_count challenge.user_passed_count json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - json.open_game challenge.open_game(@user.id, @shixun) + json.open_game challenge.open_game if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) @@ -27,6 +27,6 @@ if @challenges.present? json.down_url index_down_shixun_challenge_path(challenge, :shixun_identifier => @shixun.identifier) if @shixun.challenges_count != challenge.position end #json.passed challenge.has_passed?(@user.id) - json.status challenge.user_tpi_status @user.id + json.status challenge.user_tpi_status end end From 5490800b40ba9ffd6b4b086e8d5884dc004c0de2 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 16:43:25 +0800 Subject: [PATCH 11/36] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/challenge.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 6f361e380..d532d6d55 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -70,9 +70,10 @@ class Challenge < ApplicationRecord # 开启挑战 def open_game + # 这里的identifier,status是关联了games取了games的identifier,status identifier = self.identifier if identifier.present? - shixun.task_pass || status != 3 ? "/tasks/#{identifier}" : "" + shixun.task_pass || self.status != 3 ? "/tasks/#{identifier}" : "" else self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" end From 193e0bcf84cd9bfa410956318ec0ed54c221c8d7 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 16:49:26 +0800 Subject: [PATCH 12/36] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index ce7b2dd38..3eb972c38 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -155,8 +155,10 @@ class ChallengesController < ApplicationController def index uid_logger("identifier: #{params}") - @challenges = @shixun.challenges.fields_for_list.joins(:games).where(games: {user_id: current_user.id}) - .select("challenges.*, games.identifier identifier, games.status status") + bases_column = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, + challenges.shixun_id, games.identifier, games.status" + @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) + .select(bases_column) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From 6c0b3f15784742099a328bb35ad552bb135281eb Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 16:50:52 +0800 Subject: [PATCH 13/36] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- app/controllers/weapps/attendances_controller.rb | 14 ++++++++++++-- app/models/course_attendance.rb | 2 +- .../attendances/student_attendances.json.jbuilder | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 825e18a41..0a59c379a 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -130,7 +130,7 @@ class CoursesController < ApplicationController category = @course.course_second_categories.find_by(id: params[:new_category_id]) if params[:new_category_id].to_i == 0 || category.present? - videos = @course.course_videos.where(id: params[:video_ids]) + videos = @course.course_videos.where(video_id: params[:video_ids]) videos.update_all(course_second_category_id: params[:new_category_id]) normal_status(0, "操作成功") diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 3f0eec248..51649150d 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -58,12 +58,18 @@ class Weapps::AttendancesController < ApplicationController @history_attendances = @course.course_attendances.where(id: history_attendance_ids.uniq). where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < '#{current_end_time}')").order("id desc") - @current_attendance = @course.course_attendances.where(id: all_attendance_ids.uniq). + @current_attendances = @course.course_attendances.where(id: all_attendance_ids.uniq). where("attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}'") @history_count = @history_attendances.size + # 当前签到如果存在快捷签到,则直接签到 + quick_attendances = @current_attendances.where(mode: "QUICK") + if quick_attendances.present? + student_direct_attendance quick_attendances, member + end + student_attendance_ids = @history_attendances.pluck(:id) - student_attendance_ids += @current_attendance.present? ? @current_attendance.pluck(:id) : [] + student_attendance_ids += @current_attendances.present? ? @current_attendances.pluck(:id) : [] if student_attendance_ids.uniq.blank? @normal_count = 0 @@ -141,4 +147,8 @@ class Weapps::AttendancesController < ApplicationController def edit_auth tip_exception(403, "") unless @user_course_identity < Course::PROFESSOR || @attendance.user_id == current_user.id end + + def student_direct_attendance quick_attendances, member + + end end \ No newline at end of file diff --git a/app/models/course_attendance.rb b/app/models/course_attendance.rb index 28059efc1..3b7e07fdf 100644 --- a/app/models/course_attendance.rb +++ b/app/models/course_attendance.rb @@ -1,6 +1,6 @@ class CourseAttendance < ApplicationRecord # status: 0: 未开启,1:已开启,2:已截止 - # mode: 0 两种签到,1 二维码签到,2 数字签到 + # mode: 0 两种签到,1 二维码签到,2 数字签到,3 快捷签到 enum mode: { ALL: 0, QRCODE: 1, NUMBER: 2, QUICK: 3 } belongs_to :course diff --git a/app/views/weapps/attendances/student_attendances.json.jbuilder b/app/views/weapps/attendances/student_attendances.json.jbuilder index c2b9fca12..f0ee4c8f8 100644 --- a/app/views/weapps/attendances/student_attendances.json.jbuilder +++ b/app/views/weapps/attendances/student_attendances.json.jbuilder @@ -1,4 +1,4 @@ -json.current_attendance @current_attendance do |attendance| +json.current_attendance @current_attendances do |attendance| json.partial! 'student_attendance', locals: {attendance: attendance} end From d018b48c2d312632aff27b2f56d8cfb8a70a7475 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 16:54:50 +0800 Subject: [PATCH 14/36] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 9 ++++---- app/models/challenge.rb | 28 ++++++++++++++++++++++++ app/views/challenges/index.json.jbuilder | 6 +++-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 3eb972c38..cf8fc7cbf 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -155,10 +155,11 @@ class ChallengesController < ApplicationController def index uid_logger("identifier: #{params}") - bases_column = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, - challenges.shixun_id, games.identifier, games.status" - @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) - .select(bases_column) + #bases_column = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, + # challenges.shixun_id, games.identifier, games.status" + #@challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) + # .select(bases_column) + @challenges = @shixun.challenges.fields_for_list @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index d532d6d55..036f387b1 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -79,6 +79,16 @@ class Challenge < ApplicationRecord end end + # 开启挑战 + def open_game user_id, shixun + game = self.games.where(user_id: user_id).first + if game.present? + shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : "" + else + self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" + end + end + # # 开启挑战 # def open_game(user_id, shixun) # @@ -110,6 +120,24 @@ class Challenge < ApplicationRecord end end + ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 + def user_tpi_status user_id + # todo: 以前没加索引导致相同关卡,同一用户有多个games + # 允许跳关则直接开启 + game = games.where(user_id: user_id).take + if game.blank? + position == 1 ? 1 : 0 + else + if game.status == 3 + shixun.task_pass ? 1 : 0 + elsif game.status == 2 + 2 + else + 1 + end + end + end + def tags_show if self.challenge_tags.nil? "--" diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index 693f3717f..0ffaff0ad 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -19,7 +19,8 @@ if @challenges.present? json.passed_count challenge.user_passed_count json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - json.open_game challenge.open_game + #json.open_game challenge.open_game + challenge.open_game(@user.id, @shixun) if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) @@ -27,6 +28,7 @@ if @challenges.present? json.down_url index_down_shixun_challenge_path(challenge, :shixun_identifier => @shixun.identifier) if @shixun.challenges_count != challenge.position end #json.passed challenge.has_passed?(@user.id) - json.status challenge.user_tpi_status + #json.status challenge.user_tpi_status + json.status challenge.user_tpi_status @user.id end end From 9e7785e673ac0176be0ca8f6b879391ad8a37c6c Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 16:56:19 +0800 Subject: [PATCH 15/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/challenge.rb | 28 ------------------------ app/views/challenges/index.json.jbuilder | 6 ++--- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 036f387b1..d532d6d55 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -79,16 +79,6 @@ class Challenge < ApplicationRecord end end - # 开启挑战 - def open_game user_id, shixun - game = self.games.where(user_id: user_id).first - if game.present? - shixun.task_pass || game.status != 3 ? "/tasks/#{game.identifier}" : "" - else - self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" - end - end - # # 开启挑战 # def open_game(user_id, shixun) # @@ -120,24 +110,6 @@ class Challenge < ApplicationRecord end end - ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 - def user_tpi_status user_id - # todo: 以前没加索引导致相同关卡,同一用户有多个games - # 允许跳关则直接开启 - game = games.where(user_id: user_id).take - if game.blank? - position == 1 ? 1 : 0 - else - if game.status == 3 - shixun.task_pass ? 1 : 0 - elsif game.status == 2 - 2 - else - 1 - end - end - end - def tags_show if self.challenge_tags.nil? "--" diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index 0ffaff0ad..693f3717f 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -19,8 +19,7 @@ if @challenges.present? json.passed_count challenge.user_passed_count json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - #json.open_game challenge.open_game - challenge.open_game(@user.id, @shixun) + json.open_game challenge.open_game if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) @@ -28,7 +27,6 @@ if @challenges.present? json.down_url index_down_shixun_challenge_path(challenge, :shixun_identifier => @shixun.identifier) if @shixun.challenges_count != challenge.position end #json.passed challenge.has_passed?(@user.id) - #json.status challenge.user_tpi_status - json.status challenge.user_tpi_status @user.id + json.status challenge.user_tpi_status end end From 6270a90b0b0d096ebb46dff5a3104be473d238b5 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 16:57:34 +0800 Subject: [PATCH 16/36] fixbug --- app/controllers/challenges_controller.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index cf8fc7cbf..b7aa4b6e4 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -155,11 +155,10 @@ class ChallengesController < ApplicationController def index uid_logger("identifier: #{params}") - #bases_column = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, - # challenges.shixun_id, games.identifier, games.status" - #@challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) - # .select(bases_column) - @challenges = @shixun.challenges.fields_for_list + base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, + challenges.shixun_id, games.identifier, games.status" + @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) + .select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From 0dbbda3c3f91ccb784eade3645e4ddace60839f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 9 Mar 2020 16:58:15 +0800 Subject: [PATCH 17/36] =?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/images/educoder/xcx/fenxiangs.png | Bin 0 -> 1370 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 public/images/educoder/xcx/fenxiangs.png diff --git a/public/images/educoder/xcx/fenxiangs.png b/public/images/educoder/xcx/fenxiangs.png new file mode 100755 index 0000000000000000000000000000000000000000..f5b170bede3a7efa3d0764d4695be77335e765e7 GIT binary patch literal 1370 zcmV-g1*Q6lP)dl!?)k)X-o@?q+}-nR&-0uEpZ~VcukY)5 ze}6vr6)c{n?OLCn#T+Z!RQ`9diqpwfIp;J-Q;*Ib9phb9)(V_OcqJK;ZaaA-=M?PG z8JgxvF?b9J+6kV7&zK0?5@DW2MD50hV!A_>jrsm6JU<+f*URO|05-;SuEKs*ZYvky zhFt=*C&Ci5n=2UApMeF1{zicHBVl>JR32&W)9O=ya1dpQ-GWo~6L>4pE>GFb6O8IX zU|FHRLb}Re%}}R&S}d0=itEOJ!4A8{-0)N3nc;}MX*X9Wsx1ni12q~~ye68#aF@0K;tyVS_ey`udzY3Nj9f-!v+ zWwT{>gppcd`Cvp&=j@h%PRGbp8tgb$RT|^$G?ew0vBE&zKdcyhTrQaQ=?4fr+@n>A z6dwZ*6oKrenl;H*xmYp4;BH+aRcugbQn=2kk^<%$J{P#E$e7$c9A=&GfaZ=VFvdGY zyO>kb(*9d~2W*JyK7mKv<*?4CaK=}_&>nqI1AOQQT((BaKfo6?5W1NmRT}&PRM_Ji zU}&GVX_~kN+@C6Z2Be*Ui&78V3(PDM*H?Fr`~3kdp`IG79qyD*oWR|>S8o^-4gfcm zf-~1bUjR#}_gyl=Vkc)qCvd(j^yYEwH;S z7)VCs4m)s7+qGu&8U}$|iufNc2IpxPbxXa5sICwfo zRL{;NRL;kBK)2N^2T;!LDqyA5GrMqY4ecsarG)s=HZi}1XC7ApgK>QVgSRKVRR`-{ zIYkQXp}iV3ghK+evbOVM2FrfxlyG(Sa<;wUh0!fqnX-H9&w%4y^6_&3CKrzjip zeHA_!ZkIN90gI^z{mFJ|w$s?j_ynVBzPOfx*#B#~(nU+D7cgiU>J;XW`6)V2Fx#<9=)D9^Xqvw$u!1wo?-B- z#oX`dx>s1wGr-KXlN6@}X6F|*gyxZm^n0@CStRug(5#jH-nk2yk*O_oCnK`SFE~%f zU=AYNRTmq|v5^k>!B03}0R0B?Z46c#ELY#tF?cyZUIDbaC*#(qdp{JuqM+qXrvT3- z!}5k73QV;|FskOJ;?7bBUh@X-)%gwzzes>>s!Zxm*;E^CH(ub{?6s~-8;#r}e3XpH zLz%rtFs5IktgxGOI{0aT&BI}NEdyBQn&NceDQx4v)yl#n9rD|y-J_~B#OM`RJsoK# zw7FpZ$lTdBZ?#`Y(KFp41zt|H%M0U&W9~0i3GE}S%A?u)+v6sl%UIo$3VlYJ?jO74 c+roDK2U8Ald>;LW5&!@I07*qoM6N<$f Date: Mon, 9 Mar 2020 17:09:13 +0800 Subject: [PATCH 18/36] =?UTF-8?q?fix=E5=88=87=E6=8D=A2=20=E5=AE=9E?= =?UTF-8?q?=E8=AE=AD=E6=9C=AA=E6=9B=B4=E6=96=B0=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/redux/reducers/ojForUserReducer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/react/src/redux/reducers/ojForUserReducer.js b/public/react/src/redux/reducers/ojForUserReducer.js index d20656513..60c3dc7af 100644 --- a/public/react/src/redux/reducers/ojForUserReducer.js +++ b/public/react/src/redux/reducers/ojForUserReducer.js @@ -17,7 +17,6 @@ const initialState = { commitTestRecordDetail: {}, // 调试代码执行结果 commitRecordDetail: {}, // 提交成功后记录提交的详情 commitRecord: [], // 提交记录 - userCode: '', // 保存当前用户输入的代码 isUpdateCode: false, // 是否更新了代码内容 userCodeTab: 'task', // 学员测评tab位置: task | record | comment userTestInput: '', // 用户自定义输入值 @@ -59,7 +58,7 @@ const ojForUserReducer = (state = initialState, action) => { hack: Object.assign({}, hack), test_case: Object.assign({}, test_case), comment_identifier: hack.identifier, - userCode: tempCode + editor_code: tempCode } case types.COMMIT_RECORD_DETAIL: let result = action.payload.data; @@ -127,7 +126,8 @@ const ojForUserReducer = (state = initialState, action) => { } return { ...state, - recordDetail: tempDetail + recordDetail: tempDetail, + editor_code: tempDetail['code'] } case types.RESTORE_INITIAL_CODE: const curHack = state.hack; From 57cafc1dd457fed96229f738d0c52b981cf0ac49 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:32:33 +0800 Subject: [PATCH 19/36] =?UTF-8?q?=E6=8C=91=E6=88=98=E6=95=B0=E5=92=8C?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 6 ++++-- app/views/challenges/index.json.jbuilder | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index b7aa4b6e4..4a95e8ab6 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -157,8 +157,10 @@ class ChallengesController < ApplicationController uid_logger("identifier: #{params}") base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, challenges.shixun_id, games.identifier, games.status" - @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}) - .select(base_columns) + # 方便列表获取通关数 + @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count + @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count + @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index 693f3717f..ddf75c833 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -16,8 +16,8 @@ if @challenges.present? json.st challenge.st json.name challenge.subject json.score challenge.score - json.passed_count challenge.user_passed_count - json.playing_count challenge.playing_count + json.passed_count @pass_games_map.fetch(challenge.id, 0) + json.playing_count @play_games_map.fetch(challenge.id, 0) json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.open_game challenge.open_game if @editable From 82c78fca634a9faf2b60f3ef440735729de4ad2d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:38:37 +0800 Subject: [PATCH 20/36] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=B0=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 6 +++--- app/views/challenges/index.json.jbuilder | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 4a95e8ab6..164162fd6 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -157,9 +157,9 @@ class ChallengesController < ApplicationController uid_logger("identifier: #{params}") base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, challenges.shixun_id, games.identifier, games.status" - # 方便列表获取通关数 - @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count - @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count + # 方便列表获取通关数和游玩数 + #@pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count + #@play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index ddf75c833..87c6491bb 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -16,8 +16,10 @@ if @challenges.present? json.st challenge.st json.name challenge.subject json.score challenge.score - json.passed_count @pass_games_map.fetch(challenge.id, 0) - json.playing_count @play_games_map.fetch(challenge.id, 0) + #json.passed_count @pass_games_map.fetch(challenge.id, 0) + json.passed_count challenge.user_passed_count + #json.playing_count @play_games_map.fetch(challenge.id, 0) + json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.open_game challenge.open_game if @editable From e93decef82cacd23a3c3bf4e06f6e124e2ce454b Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:39:53 +0800 Subject: [PATCH 21/36] =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 4 ++-- app/views/challenges/index.json.jbuilder | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 164162fd6..d38a10efc 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -158,8 +158,8 @@ class ChallengesController < ApplicationController base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, challenges.shixun_id, games.identifier, games.status" # 方便列表获取通关数和游玩数 - #@pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count - #@play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count + @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count + @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index 87c6491bb..8accbf69b 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -16,10 +16,10 @@ if @challenges.present? json.st challenge.st json.name challenge.subject json.score challenge.score - #json.passed_count @pass_games_map.fetch(challenge.id, 0) - json.passed_count challenge.user_passed_count - #json.playing_count @play_games_map.fetch(challenge.id, 0) - json.playing_count challenge.playing_count + json.passed_count @pass_games_map.fetch(challenge.id, 0) + #json.passed_count challenge.user_passed_count + json.playing_count @play_games_map.fetch(challenge.id, 0) + #json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.open_game challenge.open_game if @editable From d9a75de3bdfb8b29774ef3cbb2c0dfee5293a0b7 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:46:20 +0800 Subject: [PATCH 22/36] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E5=85=B3=E5=8D=A1=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index d38a10efc..6b46ea7a9 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -157,9 +157,10 @@ class ChallengesController < ApplicationController uid_logger("identifier: #{params}") base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, challenges.shixun_id, games.identifier, games.status" - # 方便列表获取通关数和游玩数 + # 下面2个参数是为了解决列表获取通关人数与正在游玩人数的问题 @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count + @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user From be76fcec949ec83f1dd6c2736d3aabdbae44debc Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:56:52 +0800 Subject: [PATCH 23/36] 1 --- app/controllers/challenges_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 6b46ea7a9..31e8e198d 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -161,7 +161,7 @@ class ChallengesController < ApplicationController @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.joins(:games).where(games: {user_id: current_user.id}).select(base_columns) + @challenges = @shixun.challenges.left_joins(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From 6770f7854ed9b350dade3289c492126c17ba8db8 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 17:57:53 +0800 Subject: [PATCH 24/36] 1 --- app/controllers/challenges_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 31e8e198d..72a6c9e48 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -161,7 +161,7 @@ class ChallengesController < ApplicationController @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.left_joins(:games).where(games: {user_id: current_user.id}).select(base_columns) + @challenges = @shixun.challenges.includes(:games).where(games: {user_id: current_user.id}).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From 60e596552b085d7bfbbece529fe2e6e72f6b1a9a Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 18:02:46 +0800 Subject: [PATCH 25/36] =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index 72a6c9e48..eacec5fd8 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -161,7 +161,8 @@ class ChallengesController < ApplicationController @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.includes(:games).where(games: {user_id: current_user.id}).select(base_columns) + @challenges = @shixun.challenges.joins("join games on games.challenge_id = challenges.id and games.user_id = #{current_user.id}") + .select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From d5c0049b15011940b2911d692c54832bb042c0db Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 18:05:20 +0800 Subject: [PATCH 26/36] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index eacec5fd8..c6c62e922 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -161,8 +161,9 @@ class ChallengesController < ApplicationController @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.joins("join games on games.challenge_id = challenges.id and games.user_id = #{current_user.id}") + @challenges = @shixun.challenges.joins("left join games on games.challenge_id = challenges.id and games.user_id = #{current_user.id}") .select(base_columns) + @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) From b1936a69cbcb7646d4c40ba5a3a963fd9d9e4f78 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 18:16:06 +0800 Subject: [PATCH 27/36] =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/weapps/attendances_controller.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 51649150d..57e1e10df 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -149,6 +149,14 @@ class Weapps::AttendancesController < ApplicationController end def student_direct_attendance quick_attendances, member - + quick_attendances.each do |attendance| + current_attendance = attendance.course_member_attendances.find_by(user_id: member.user_id) + if current_attendance.present? + current_attendance.update!(attendance_status: "NORMAL", attendance_mode: "QUICK") + else + attendance.course_member_attendances.create!(course_member_id: member.id, user_id: member.user_id, course_id: attendance.course_id, + course_group_id: member.course_group_id, attendance_status: "NORMAL", attendance_mode: "QUICK") + end + end end end \ No newline at end of file From 38cf5d82be9a40d99a718602be1d53c7b3f2983d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 18:17:28 +0800 Subject: [PATCH 28/36] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 4 ++-- app/models/challenge.rb | 4 ++-- app/views/challenges/index.json.jbuilder | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index c6c62e922..c69f5bbfb 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -157,12 +157,12 @@ class ChallengesController < ApplicationController uid_logger("identifier: #{params}") base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, challenges.shixun_id, games.identifier, games.status" + join_sql = "LEFT JOIN games ON games.challenge_id = challenges.id AND games.user_id = #{current_user.id}" # 下面2个参数是为了解决列表获取通关人数与正在游玩人数的问题 @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.joins("left join games on games.challenge_id = challenges.id and games.user_id = #{current_user.id}") - .select(base_columns) + @challenges = @shixun.challenges.joins(join_sql).select(base_columns) @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user diff --git a/app/models/challenge.rb b/app/models/challenge.rb index d532d6d55..5646da363 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -69,7 +69,7 @@ class Challenge < ApplicationRecord end # 开启挑战 - def open_game + def open_game shixun # 这里的identifier,status是关联了games取了games的identifier,status identifier = self.identifier if identifier.present? @@ -93,7 +93,7 @@ class Challenge < ApplicationRecord # end ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 - def user_tpi_status + def user_tpi_status shixun # todo: 以前没加索引导致相同关卡,同一用户有多个games # 允许跳关则直接开启 identifier = self.identifier diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index 8accbf69b..d4f2a7f59 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -21,7 +21,7 @@ if @challenges.present? json.playing_count @play_games_map.fetch(challenge.id, 0) #json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - json.open_game challenge.open_game + json.open_game challenge.open_game(@shixun) if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) @@ -29,6 +29,6 @@ if @challenges.present? json.down_url index_down_shixun_challenge_path(challenge, :shixun_identifier => @shixun.identifier) if @shixun.challenges_count != challenge.position end #json.passed challenge.has_passed?(@user.id) - json.status challenge.user_tpi_status + json.status challenge.user_tpi_status(@shixun) end end From bbaadcaea4275328e8c32c3597624b6ee4f3670d Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 19:01:27 +0800 Subject: [PATCH 29/36] =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A4=96=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/course_videos_controller.rb | 31 +++++++++++++++++++ app/controllers/courses_controller.rb | 6 ++-- app/models/course_video.rb | 5 ++- app/views/courses/course_videos.json.jbuilder | 16 +++++++++- config/locales/zh-CN.yml | 3 ++ config/routes.rb | 2 ++ ...0200309101753_add_link_to_course_videos.rb | 8 +++++ 7 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 app/controllers/course_videos_controller.rb create mode 100644 db/migrate/20200309101753_add_link_to_course_videos.rb diff --git a/app/controllers/course_videos_controller.rb b/app/controllers/course_videos_controller.rb new file mode 100644 index 000000000..b5915e0ed --- /dev/null +++ b/app/controllers/course_videos_controller.rb @@ -0,0 +1,31 @@ +class CourseVideosController < ApplicationController + before_action :require_login + before_action :validate_params + before_action :find_course, only: [:create] + before_action :find_video, only: [:update] + before_action :teacher_allowed + + def create + title = params[:name].strip + link = params[:link].strip + @course.course_videos.create!(title: title, link: link, is_link: 1, user_id: current_user.id) + render_ok + end + + def update + + end + + private + + def validate_params + tip_exception("视频名称不能为空") if params[:name].blank? + tip_exception("链接地址不能为空") if params[:link].blank? + end + + def find_video + @video = CourseVideo.find params[:id] + @course = @video.course + end + +end \ No newline at end of file diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 0a59c379a..e29b177d6 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -102,17 +102,17 @@ class CoursesController < ApplicationController end def course_videos - videos = @course.videos + videos = @course.course_videos @video_module = @course.course_modules.find_by(module_type: "video") if params[:category_id].present? && params[:category_id].to_i != 0 @category = @video_module&.course_second_categories.find_by(id: params[:category_id]) tip_exception("子目录id有误") if !@category.present? - videos = videos.where(course_videos: {course_second_category_id: params[:category_id].to_i}) + videos = videos.where(course_second_category_id: params[:category_id].to_i) end videos = custom_sort(videos, params[:sort_by], params[:sort_direction]) @count = videos.count - @videos = paginate videos.includes(user: :user_extension) + @videos = paginate videos.includes(video: [user: :user_extension], user: :user_extension) end def delete_course_video diff --git a/app/models/course_video.rb b/app/models/course_video.rb index e61a439dc..246be34fd 100644 --- a/app/models/course_video.rb +++ b/app/models/course_video.rb @@ -1,4 +1,7 @@ class CourseVideo < ApplicationRecord belongs_to :course - belongs_to :video + belongs_to :video, optional: true + belongs_to :user, optional: true + + validates :title, length: { maximum: 60, too_long: "不能超过60个字符" } end diff --git a/app/views/courses/course_videos.json.jbuilder b/app/views/courses/course_videos.json.jbuilder index db4f4006c..627b0d6e9 100644 --- a/app/views/courses/course_videos.json.jbuilder +++ b/app/views/courses/course_videos.json.jbuilder @@ -1,5 +1,19 @@ json.count @count -json.videos @videos, partial: 'users/videos/video', as: :video + +json.videos @videos do |video| + Rails.logger.info("video@############{video.id}, #{video.is_link}") + if video.is_link + json.(video, :id, :title, :link, :user_id) + + user = video.user + json.user_name user&.real_name + json.user_img url_to_avatar(user) + json.user_login user&.login + else + json.partial! 'users/videos/video', locals: { video: video.video } + end +end + json.course_id @course.id if @category.present? json.category_id @category.id diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index f9671eec1..4c5c808ac 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -183,6 +183,9 @@ zh-CN: attendance_date: '签到日期' start_time: '开始时间' end_time: '结束时间' + course_video: + title: '视频名称' + link: '链接地址' diff --git a/config/routes.rb b/config/routes.rb index 1f9d4cfc4..7bf1b6c1b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -538,6 +538,8 @@ Rails.application.routes.draw do get 'search_slim' end + resources :course_videos, only:[:create, :update], shallow: true + resources :course_stages, shallow: true do member do post :up_position diff --git a/db/migrate/20200309101753_add_link_to_course_videos.rb b/db/migrate/20200309101753_add_link_to_course_videos.rb new file mode 100644 index 000000000..d5580d92e --- /dev/null +++ b/db/migrate/20200309101753_add_link_to_course_videos.rb @@ -0,0 +1,8 @@ +class AddLinkToCourseVideos < ActiveRecord::Migration[5.2] + def change + add_column :course_videos, :is_link, :boolean, default: 0 + add_column :course_videos, :title, :string + add_column :course_videos, :link, :string + add_column :course_videos, :user_id, :integer, index: true + end +end From 8a5f47108ab7881b9e6229b9a00168e14ec3eee6 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 19:35:12 +0800 Subject: [PATCH 30/36] =?UTF-8?q?=E8=A7=86=E9=A2=91=E7=9A=84=E5=A4=96?= =?UTF-8?q?=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/course_videos_controller.rb | 5 ++++- app/controllers/courses_controller.rb | 17 ++++++++++++----- app/views/courses/course_videos.json.jbuilder | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/controllers/course_videos_controller.rb b/app/controllers/course_videos_controller.rb index b5915e0ed..0d5a3e460 100644 --- a/app/controllers/course_videos_controller.rb +++ b/app/controllers/course_videos_controller.rb @@ -13,7 +13,10 @@ class CourseVideosController < ApplicationController end def update - + title = params[:name].strip + link = params[:link].strip + @video.update!(title: title, link: link) + render_ok end private diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e29b177d6..4a40c84b3 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -116,11 +116,18 @@ class CoursesController < ApplicationController end def delete_course_video - video = Video.find_by(id: params[:video_id]) - tip_exception(404, "找不到资源") if video.blank? - tip_exception(403, "...") unless (video.user_id == current_user.id || current_user.admin_or_business?) - video.destroy! - AliyunVod::Service.delete_video([video.uuid]) rescue nil + if params[:is_link] + video = @course.course_videos.find_by!(id: params[:video_id]) + tip_exception(403, "...") unless (video.user_id == current_user.id || current_user.admin_or_business?) + video.destroy! + else + video = Video.find_by(id: params[:video_id]) + tip_exception(404, "找不到资源") if video.blank? + tip_exception(403, "...") unless (video.user_id == current_user.id || current_user.admin_or_business?) + video.destroy! + AliyunVod::Service.delete_video([video.uuid]) rescue nil + end + render_ok end diff --git a/app/views/courses/course_videos.json.jbuilder b/app/views/courses/course_videos.json.jbuilder index 627b0d6e9..bee5e89cb 100644 --- a/app/views/courses/course_videos.json.jbuilder +++ b/app/views/courses/course_videos.json.jbuilder @@ -1,7 +1,6 @@ json.count @count json.videos @videos do |video| - Rails.logger.info("video@############{video.id}, #{video.is_link}") if video.is_link json.(video, :id, :title, :link, :user_id) @@ -19,4 +18,5 @@ if @category.present? json.category_id @category.id json.category_name @category.name end -json.course_module_id @video_module&.id \ No newline at end of file +json.course_module_id @video_module&.id +json.has_category @video_module.course_second_categories.size > 0 \ No newline at end of file From 466c3b90966621ec20367efd882f0e5fab440000 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 20:43:16 +0800 Subject: [PATCH 31/36] =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=A4=96=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 52 +++++++++++++------ .../20200309123121_add_link_to_attachments.rb | 5 ++ 2 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 db/migrate/20200309123121_add_link_to_attachments.rb diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 25e0de44a..fbf798c64 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -7,7 +7,7 @@ class FilesController < ApplicationController before_action :file_validate_sort_type, only: :index before_action :validate_send_message_to_course_params, only: :bulk_send before_action :set_pagination, only: %i[index public_with_course_and_project mine_with_course_and_project] - before_action :validate_upload_params, only: %i[upload import] + before_action :validate_upload_params, only: %i[import] before_action :find_file, only: %i[show setting update] before_action :publish_params, only: %i[upload import update] @@ -163,6 +163,7 @@ class FilesController < ApplicationController # 上传资源 def upload + find_course_second_category_id attachment_ids = params[:attachment_ids] course_second_category_id = params[:course_second_category_id] || 0 # 0: 为主目录, 其他为次目录id # is_unified_setting = params.has_key?(:is_unified_setting) ? params[:is_unified_setting] : true @@ -170,25 +171,42 @@ class FilesController < ApplicationController # course_group_publish_times = params[:course_group_publish_times] || [] begin - attachment_ids.each do |attchment_id| - attachment = Attachment.find_by_id attchment_id - unless attachment.nil? - attachment.container = @course - attachment.course_second_category_id = course_second_category_id - attachment.description = params[:description] - attachment.is_public = params[:is_public] && @course.is_public == 1 ? 1 : 0 - attachment.is_publish = @atta_is_publish - attachment.delay_publish = @atta_delay_publish - attachment.publish_time = @atta_publish_time - attachment.unified_setting = @unified_setting - if @unified_setting == 0 - attachment_group_setting attachment, params[:group_settings] + if attachment_ids.present? + attachment_ids.each do |attchment_id| + attachment = Attachment.find_by_id attchment_id + unless attachment.nil? + attachment.container = @course + attachment.course_second_category_id = course_second_category_id + attachment.description = params[:description] + attachment.is_public = params[:is_public] && @course.is_public == 1 ? 1 : 0 + attachment.is_publish = @atta_is_publish + attachment.delay_publish = @atta_delay_publish + attachment.publish_time = @atta_publish_time + attachment.unified_setting = @unified_setting + if @unified_setting == 0 + attachment_group_setting attachment, params[:group_settings] + end + # attachment.set_publish_time(publish_time) if is_unified_setting + # attachment.set_course_group_publish_time(@course, course_group_publish_times) if @course.course_groups.size > 0 && !is_unified_setting && publish_time.blank? + attachment.save! end - # attachment.set_publish_time(publish_time) if is_unified_setting - # attachment.set_course_group_publish_time(@course, course_group_publish_times) if @course.course_groups.size > 0 && !is_unified_setting && publish_time.blank? - attachment.save! end + else + attachment = Attachment.new + attachment.container = @course + attachment.course_second_category_id = course_second_category_id + attachment.description = params[:description] + attachment.is_public = params[:is_public] && @course.is_public == 1 ? 1 : 0 + attachment.is_publish = @atta_is_publish + attachment.delay_publish = @atta_delay_publish + attachment.publish_time = @atta_publish_time + attachment.unified_setting = @unified_setting + if @unified_setting == 0 + attachment_group_setting attachment, params[:group_settings] + end + attachment.save! end + rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/db/migrate/20200309123121_add_link_to_attachments.rb b/db/migrate/20200309123121_add_link_to_attachments.rb new file mode 100644 index 000000000..23510be26 --- /dev/null +++ b/db/migrate/20200309123121_add_link_to_attachments.rb @@ -0,0 +1,5 @@ +class AddLinkToAttachments < ActiveRecord::Migration[5.2] + def change + add_column :attachments, :link, :string + end +end From b9de59fdcfb1152930bac7d5ba818ab037df58dd Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 20:44:57 +0800 Subject: [PATCH 32/36] =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=A4=96=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index fbf798c64..b4604892d 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -195,6 +195,8 @@ class FilesController < ApplicationController attachment = Attachment.new attachment.container = @course attachment.course_second_category_id = course_second_category_id + attachment.filename = params[:name] + attachment.link = params[:link] attachment.description = params[:description] attachment.is_public = params[:is_public] && @course.is_public == 1 ? 1 : 0 attachment.is_publish = @atta_is_publish From 68c10b2897c286b380b5516fb48ccb9a4ffeca47 Mon Sep 17 00:00:00 2001 From: harry Date: Mon, 9 Mar 2020 20:46:14 +0800 Subject: [PATCH 33/36] =?UTF-8?q?fix=20issue/28444=20=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/components/comment/CommentForm.js | 19 ++++------ .../common/components/comment/CommentItem.js | 1 - .../src/common/quillForEditor/FillBlot.js | 12 +++---- .../src/common/quillForEditor/ImageBlot.js | 15 +------- .../react/src/common/quillForEditor/index.js | 36 +++++++++---------- .../src/common/quillForEditor/link-blot.js | 21 +++++++++++ 6 files changed, 48 insertions(+), 56 deletions(-) create mode 100644 public/react/src/common/quillForEditor/link-blot.js diff --git a/public/react/src/common/components/comment/CommentForm.js b/public/react/src/common/components/comment/CommentForm.js index 11eea72e2..058cceda7 100644 --- a/public/react/src/common/components/comment/CommentForm.js +++ b/public/react/src/common/components/comment/CommentForm.js @@ -10,11 +10,9 @@ import './index.scss'; import React, { useState } from 'react'; import { Form, Button, Input } from 'antd'; import QuillForEditor from '../../quillForEditor'; -// import { QuillDeltaToHtmlConverter } from 'quill-delta-to-html' -// import {formatDelta} from './util'; const FormItem = Form.Item; -function CommentForm (props) { +function CommentForm(props) { const { onCancel, @@ -28,9 +26,6 @@ function CommentForm (props) { const [focus, setFocus] = useState(false); const options = [ - // ['bold', 'italic', 'underline'], - // [{header: [1,2,3,false]}], - 'code-block', 'link', 'image', 'formula' @@ -52,12 +47,10 @@ function CommentForm (props) { // 编辑器内容变化时 const handleContentChange = (content) => { - console.log('编辑器内容', content); setCtx(content); try { // const _html = new QuillDeltaToHtmlConverter(content.ops, {}).convert(); - // props.form.setFieldsValue({'comment': _html.replace(/<\/?[^>]*>/g, '')}); - props.form.setFieldsValue({'comment': content}); + props.form.setFieldsValue({ 'comment': content }); } catch (error) { console.log(error); } @@ -69,7 +62,7 @@ function CommentForm (props) { if (!err) { setShowQuill(false); const content = ctx; - props.form.setFieldsValue({'comment': ''}); + props.form.setFieldsValue({ 'comment': '' }); setCtx(''); // const _html = formatDelta(content.ops); // console.log('保存的内容=====》》》》', content); @@ -95,7 +88,7 @@ function CommentForm (props) { { getFieldDecorator('comment', { rules: [ - { required: true, message: '评论内容不能为空'} + { required: true, message: '评论内容不能为空' } ], })( - + ); diff --git a/public/react/src/common/components/comment/CommentItem.js b/public/react/src/common/components/comment/CommentItem.js index a70a15e75..28351cac9 100644 --- a/public/react/src/common/components/comment/CommentItem.js +++ b/public/react/src/common/components/comment/CommentItem.js @@ -237,7 +237,6 @@ function CommentItem({ />
    - {/* 显示上传的图片信息 */}
    diff --git a/public/react/src/common/quillForEditor/FillBlot.js b/public/react/src/common/quillForEditor/FillBlot.js index 5e5e2aa77..07b8b4a47 100644 --- a/public/react/src/common/quillForEditor/FillBlot.js +++ b/public/react/src/common/quillForEditor/FillBlot.js @@ -8,19 +8,15 @@ */ import Quill from 'quill'; let Inline = Quill.import('blots/inline'); -// const BlockEmbed = Quill.import('blots/embed'); class FillBlot extends Inline { - static create (value) { + static create(value) { const node = super.cerate(value); - // node.classList.add('icon icon-bianji2'); - // node.setAttribute('data-fill', 'fill'); - console.log('编辑器值===》》》》》', value); node.setAttribute('data_index', value.data_index); - node.nodeValue = value.text; + node.nodeValue = value.text; return node; } - - static value (node) { + + static value(node) { return { // dataSet: node.getAttribute('data-fill'), data_index: node.getAttribute('data_index') diff --git a/public/react/src/common/quillForEditor/ImageBlot.js b/public/react/src/common/quillForEditor/ImageBlot.js index 5ff84b249..0a9bec733 100644 --- a/public/react/src/common/quillForEditor/ImageBlot.js +++ b/public/react/src/common/quillForEditor/ImageBlot.js @@ -17,7 +17,6 @@ export default class ImageBlot extends BlockEmbed { const node = super.create(); node.setAttribute('alt', value.alt); node.setAttribute('src', value.url); - // console.log('~~~~~~~~~~~', node, value); node.addEventListener('click', function () { value.onclick(value.url); }, false); @@ -33,25 +32,14 @@ export default class ImageBlot extends BlockEmbed { } // 宽度和高度都不存在时, if (!value.width && !value.height) { - // node.setAttribute('display', 'block'); node.setAttribute('width', '100%'); } - // node.setAttribute('style', { cursor: 'pointer' }); - - // if (node.onclick) { - // console.log('image 有图片点击事件======》》》》》》'); - // // node.setAttribute('onclick', node.onCLick); - // } - // 给图片添加点击事件 - // node.onclick = () => { - // value.onClick && value.onClick(value.url); - // } return node; } // 获取节点值 - static value (node) { + static value(node) { return { alt: node.getAttribute('alt'), @@ -61,7 +49,6 @@ export default class ImageBlot extends BlockEmbed { height: node.height, display: node.getAttribute('display'), id: node.id, - // style: node.style }; } } diff --git a/public/react/src/common/quillForEditor/index.js b/public/react/src/common/quillForEditor/index.js index ba37059ba..46b02b94e 100644 --- a/public/react/src/common/quillForEditor/index.js +++ b/public/react/src/common/quillForEditor/index.js @@ -20,16 +20,17 @@ import { fetchUploadImage } from '../../services/ojService.js'; import { getImageUrl } from 'educoder' import ImageBlot from './ImageBlot'; import FillBlot from './FillBlot'; +import LinkBlot from './link-blot' var Size = Quill.import('attributors/style/size'); -// const Color = Quill.import('attributes/style/color'); Size.whitelist = ['14px', '16px', '18px', '20px', false]; -var fonts = ['Microsoft-YaHei','SimSun', 'SimHei','KaiTi','FangSong']; +var fonts = ['Microsoft-YaHei', 'SimSun', 'SimHei', 'KaiTi', 'FangSong']; var Font = Quill.import('formats/font'); Font.whitelist = fonts; //将字体加入到白名单 window.Quill = Quill; window.katex = katex; Quill.register(ImageBlot); Quill.register(Size); +Quill.register(LinkBlot); Quill.register(Font, true); // Quill.register({'modules/toolbar': Toolbar}); Quill.register({ @@ -38,7 +39,7 @@ Quill.register({ // Quill.register(Color); -function QuillForEditor ({ +function QuillForEditor({ placeholder, readOnly, autoFocus = false, @@ -51,17 +52,16 @@ function QuillForEditor ({ onContentChange, addFill, // 点击填空成功的回调 deleteFill // 删除填空,返回删除的下标 - // getQuillContent }) { // toolbar 默认值 const defaultConfig = [ 'bold', 'italic', 'underline', - {size: ['14px', '16px', '18px', '20px']}, - {align: []}, {list: 'ordered'}, {list: 'bullet'}, // 列表 - {script: 'sub'}, {script: 'super'}, + { size: ['14px', '16px', '18px', '20px'] }, + { align: [] }, { list: 'ordered' }, { list: 'bullet' }, // 列表 + { script: 'sub' }, { script: 'super' }, { 'color': [] }, { 'background': [] }, - { 'font': []}, - {header: [1,2,3,4,5,false]}, + { 'font': [] }, + { header: [1, 2, 3, 4, 5, false] }, 'blockquote', 'code-block', 'link', 'image', 'video', 'formula', @@ -77,7 +77,6 @@ function QuillForEditor ({ // 文本内容变化时 const handleOnChange = content => { - // getQuillContent && getQuillContent(quill); onContentChange && onContentChange(content, quill); }; @@ -86,9 +85,7 @@ function QuillForEditor ({ const bindings = { tab: { key: 9, - handler: function () { - console.log('调用了tab=====>>>>'); - } + handler: function () { } }, backspace: { key: 'Backspace', @@ -104,11 +101,10 @@ function QuillForEditor ({ * index: 删除元素的位置 * length: 删除元素的个数 */ - const {index, length} = range; + const { index, length } = range; const _start = length === 0 ? index - 1 : index; const _length = length || 1; let delCtx = this.quill.getText(_start, _length); // 删除的元素 - // aa const reg = /▁/g; const delArrs = delCtx.match(reg); if (delArrs) { @@ -216,7 +212,7 @@ function QuillForEditor ({ const ops = value.ops || []; ops.forEach((item, i) => { if (item.insert['image']) { - item.insert['image'] = Object.assign({}, item.insert['image'], {style: { cursor: 'pointer' }, onclick: (url) => showUploadImage(url)}); + item.insert['image'] = Object.assign({}, item.insert['image'], { style: { cursor: 'pointer' }, onclick: (url) => showUploadImage(url) }); } }); } @@ -225,7 +221,7 @@ function QuillForEditor ({ if (!deepEqual(previous, current)) { setSelection(quill.getSelection()) if (typeof value === 'string' && value) { - // debugger + // debugger quill.clipboard.dangerouslyPasteHTML(value, 'api'); if (autoFocus) { quill.focus(); @@ -273,9 +269,9 @@ function QuillForEditor ({ // 返回结果 return ( -
    -
    -
    +
    +
    +
    ); } diff --git a/public/react/src/common/quillForEditor/link-blot.js b/public/react/src/common/quillForEditor/link-blot.js new file mode 100644 index 000000000..8f508dd34 --- /dev/null +++ b/public/react/src/common/quillForEditor/link-blot.js @@ -0,0 +1,21 @@ +import Quill from "quill"; +const Inline = Quill.import('blots/inline'); + +export default class LinkBlot extends Inline { + static create(value) { + let node = super.create() + let rs = value + if (rs.indexOf('http://') < 0) { + rs = 'http://' + rs + } + node.setAttribute('href', rs) + node.setAttribute('target', '_blank') + return node; + } + + static formats(node) { + return node.getAttribute('href'); + } +} +LinkBlot.blotName = 'link' +LinkBlot.tagName = 'a' \ No newline at end of file From 5b700a15e10397a48fc9b66869d580b094ebcd26 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 21:01:33 +0800 Subject: [PATCH 34/36] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index b4604892d..c1fa48be8 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -192,11 +192,15 @@ class FilesController < ApplicationController end end else + tip_exception("资源名称不能为空") if params[:name].blank? + tip_exception("资源名称不能超过60个字符") if params[:name].strip.length > 60 + tip_exception("链接地址不能为空") if params[:link].blank? attachment = Attachment.new attachment.container = @course attachment.course_second_category_id = course_second_category_id - attachment.filename = params[:name] - attachment.link = params[:link] + attachment.author_id = current_user.id + attachment.filename = params[:name].strip + attachment.link = params[:link].strip attachment.description = params[:description] attachment.is_public = params[:is_public] && @course.is_public == 1 ? 1 : 0 attachment.is_publish = @atta_is_publish From 88c3dbb284c8c08788cc3253d806d479d54f3481 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 9 Mar 2020 21:04:29 +0800 Subject: [PATCH 35/36] =?UTF-8?q?=E8=A7=86=E9=A2=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 4a40c84b3..2e94e435d 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -137,7 +137,7 @@ class CoursesController < ApplicationController category = @course.course_second_categories.find_by(id: params[:new_category_id]) if params[:new_category_id].to_i == 0 || category.present? - videos = @course.course_videos.where(video_id: params[:video_ids]) + videos = @course.course_videos.where(video_id: params[:video_ids]).or(@course.course_videos.where(id: params[:video_ids])) videos.update_all(course_second_category_id: params[:new_category_id]) normal_status(0, "操作成功") From e59665ccb1aecf02fe4a07372b7e68f06152d127 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 9 Mar 2020 21:11:05 +0800 Subject: [PATCH 36/36] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/videos_controller.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/controllers/users/videos_controller.rb b/app/controllers/users/videos_controller.rb index 0ae240dd7..645c25362 100644 --- a/app/controllers/users/videos_controller.rb +++ b/app/controllers/users/videos_controller.rb @@ -1,6 +1,6 @@ class Users::VideosController < Users::BaseController before_action :private_user_resources!, :check_account - before_action :require_teacher! + before_action :require_teacher!, except: [:destroy] before_action :require_auth_teacher!, except: [:index, :review] helper_method :current_video @@ -53,6 +53,19 @@ class Users::VideosController < Users::BaseController render_error(ex.message) end + def destroy + video = observed_user.videos.find_by(id: params[:video_id]) + render_forbidden unless video.user_id != observed_user.id || !current_user.admin_or_business? + return render_not_found if video.blank? + return render_error('该状态下不能删除视频') unless video.pending? + + video.destroy! + + AliyunVod::Service.delete_video([video.uuid]) rescue nil + + render_ok + end + private def current_video