From 0b3e469275f32b7cbb74ea67205bc63e5e627572 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 14 Nov 2019 16:30:35 +0800
Subject: [PATCH 1/8] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=9A=84?=
=?UTF-8?q?=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../weapps/course_stickies_controller.rb | 20 ++++++++++---------
app/controllers/weapps/homes_controller.rb | 9 +++++----
app/views/weapps/homes/show.json.jbuilder | 4 +++-
3 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/app/controllers/weapps/course_stickies_controller.rb b/app/controllers/weapps/course_stickies_controller.rb
index d045cb40f..82048add9 100644
--- a/app/controllers/weapps/course_stickies_controller.rb
+++ b/app/controllers/weapps/course_stickies_controller.rb
@@ -1,17 +1,18 @@
class Weapps::CourseStickiesController < Weapps::BaseController
- before_action :require_wechat_login!
- before_action :teacher_allowed
+ # before_action :require_wechat_login!
def create
- manage_course = current_user.manage_courses.order("sticky=1 desc, sticky_time desc, created_at desc").first
- return render_error("该课堂已置顶,请勿重复操作") if current_course.sticky && manage_course&.id.to_i == current_course.id
- current_course.update!(sticky: 1, sticky_time: Time.now)
+ courses = params[:category] == "study" ? current_user.as_student_courses.started : current_user.manage_courses
+ courses = courses.order("course_members.sticky=1 desc, course_members.sticky_time desc, courses.created_at desc").first
+
+ return render_error("该课堂已置顶,请勿重复操作") if course_member.sticky && courses&.id.to_i == current_course.id
+ course_member.update!(sticky: 1, sticky_time: Time.now)
render_ok
end
def cancel_sticky
- return render_error("该课堂未置顶,无法取消") unless current_course.sticky
- current_course.update!(sticky: 1, sticky_time: Time.now)
+ return render_error("该课堂未置顶,无法取消") unless course_member.sticky
+ course_member.update!(sticky: 0, sticky_time: nil)
render_ok
end
@@ -21,7 +22,8 @@ class Weapps::CourseStickiesController < Weapps::BaseController
@_current_course = Course.find params[:course_id]
end
- def teacher_allowed
- render_forbidden if current_user.course_identity(current_course) > Course::ASSISTANT_PROFESSOR
+ def course_member
+ @_course_member = params[:category] == "study" ? current_course.students.find_by!(user_id: current_user.id) :
+ current_course.teachers.find_by!(user_id: current_user.id)
end
end
\ No newline at end of file
diff --git a/app/controllers/weapps/homes_controller.rb b/app/controllers/weapps/homes_controller.rb
index 987518677..a164adcfc 100644
--- a/app/controllers/weapps/homes_controller.rb
+++ b/app/controllers/weapps/homes_controller.rb
@@ -1,5 +1,5 @@
class Weapps::HomesController < Weapps::BaseController
- before_action :require_wechat_login!
+ # before_action :require_wechat_login!
def show
# banner
@@ -8,8 +8,8 @@ class Weapps::HomesController < Weapps::BaseController
@advert = WeappSettings::Advert.only_online.first
# 我的课堂
- category = params[:category] && ["manage", "study"].include?(params[:category]) ? params[:category] : (current_user.is_teacher? ? "manage" : "study")
- @courses = case category
+ @category = params[:category] && ["manage", "study"].include?(params[:category]) ? params[:category] : (current_user.is_teacher? ? "manage" : "study")
+ @courses = case @category
when 'study' then
current_user.as_student_courses.started
when 'manage' then
@@ -17,7 +17,8 @@ class Weapps::HomesController < Weapps::BaseController
end
@courses = @courses.not_deleted.not_excellent
@course_count = @courses.count
- order_str = category == "study" ? "created_at desc" : "sticky=1 desc, sticky_time desc, created_at desc"
+ order_str = "course_members.sticky=1 desc, course_members.sticky_time desc, courses.created_at desc"
@courses = paginate(@courses.order(order_str).includes(:teacher, :school))
+ @user = current_user
end
end
\ No newline at end of file
diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder
index c7f50212d..7d14da6ed 100644
--- a/app/views/weapps/homes/show.json.jbuilder
+++ b/app/views/weapps/homes/show.json.jbuilder
@@ -18,8 +18,10 @@ end
json.course_count @course_count
json.courses @courses.each do |course|
- json.(course, :id, :name, :visits, :course_members_count, :sticky, :sticky_time)
+ json.(course, :id, :name, :visits, :course_members_count)
json.creator course.teacher.real_name
json.school course.school&.name
+ course_member = @category == "study" ? course.students.where(user_id: @user.id).first : course.teachers.where(user_id: @user.id).first
+ json.sticky course_member.sticky
end
From 09da308c99e650d1047ead6dc7181009703cf9c4 Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 14 Nov 2019 16:52:33 +0800
Subject: [PATCH 2/8] =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E7=9A=84?=
=?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/messages_controller.rb | 7 ++++++-
app/views/messages/index.json.jbuilder | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 0e67d9fa0..9f3f71099 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -20,7 +20,12 @@ class MessagesController < ApplicationController
sort = params[:sort].to_i == 1 ? 'asc' : 'desc'
sort_type = params[:sort_type] || 'time'
- messages = @board.messages.root_nodes.by_keywords(params[:search])
+ if @board.parent_id == 0
+ messages = Message.where(board_id: @course.boards.pluck(:id))
+ else
+ messages = @board.messages
+ end
+ messages = messages.root_nodes.by_keywords(params[:search])
messages = messages.reorder('(sticky = 1) DESC') # 置顶
diff --git a/app/views/messages/index.json.jbuilder b/app/views/messages/index.json.jbuilder
index ae54a1172..4d191cc9d 100644
--- a/app/views/messages/index.json.jbuilder
+++ b/app/views/messages/index.json.jbuilder
@@ -8,7 +8,7 @@ json.data do
json.array! @messages do |message|
json.extract! message, :id, :parent_id, :subject, :created_on, :total_replies_count,
:praises_count, :visits, :sticky, :is_hidden, :is_public, :board_id
- json.category_name message.board&.name
+ json.category_name message.board&.name if @board.parent_id == 0 && message.board_id != @board.id
json.total_praises_count @praises_count_map.fetch(message.id, 0)
From b420d1ef0108f6a299a676fa1c6626efc5b3db4e Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 14 Nov 2019 16:54:12 +0800
Subject: [PATCH 3/8] =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E7=9A=84?=
=?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/messages_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 9f3f71099..153598990 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -21,7 +21,7 @@ class MessagesController < ApplicationController
sort_type = params[:sort_type] || 'time'
if @board.parent_id == 0
- messages = Message.where(board_id: @course.boards.pluck(:id))
+ messages = Message.where(board_id: @board.course.boards.pluck(:id))
else
messages = @board.messages
end
From 6ce9d01ffbf786083c45d08a5fd0078378b32ba2 Mon Sep 17 00:00:00 2001
From: tangjiang <465264938@qq.com>
Date: Thu, 14 Nov 2019 17:40:01 +0800
Subject: [PATCH 4/8] =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E6=A8=A1=E5=9D=97?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=80=E5=B1=9E=E7=9B=AE=E5=BD=95=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/courses/boards/BoardsListItem.js | 41 ++++++++++++-------
.../modules/courses/boards/boardsListItem.css | 9 ++++
.../react/src/modules/courses/boards/index.js | 6 +--
3 files changed, 38 insertions(+), 18 deletions(-)
create mode 100644 public/react/src/modules/courses/boards/boardsListItem.css
diff --git a/public/react/src/modules/courses/boards/BoardsListItem.js b/public/react/src/modules/courses/boards/BoardsListItem.js
index 2b9c05126..0df7675a3 100644
--- a/public/react/src/modules/courses/boards/BoardsListItem.js
+++ b/public/react/src/modules/courses/boards/BoardsListItem.js
@@ -1,7 +1,8 @@
import React,{ Component } from "react";
import {Tooltip} from 'antd'
import moment from 'moment'
-import { getUrl, WordsBtn } from 'educoder'
+import { getUrl, WordsBtn, ConditionToolTip } from 'educoder'
+import './boardsListItem.css';
class BoardsListItem extends Component{
constructor(props){
super(props);
@@ -75,6 +76,16 @@ class BoardsListItem extends Component{
) : ""
}
+
+
+ {(isAdmin || discussMessage.author.login == current_user.login) &&
+ { this.props.toEditPage(this.props.match.params.coursesId, this.props.match.params.boardId, discussMessage.id )} }>编辑 }
+
+ { isAdmin && { debugger; onSticky(discussMessage); e.cancelBubble = true; e.stopPropagation();}}>
+ { discussMessage.sticky ? '取消置顶' : '置顶' } }
+
@@ -88,20 +99,20 @@ class BoardsListItem extends Component{
{moment(discussMessage.created_on).fromNow()}
-
- {(isAdmin || discussMessage.author.login == current_user.login) &&
- { this.props.toEditPage(this.props.match.params.coursesId, this.props.match.params.boardId, discussMessage.id )} }>编辑 }
-
- { isAdmin && { debugger; onSticky(discussMessage); e.cancelBubble = true; e.stopPropagation();}}>
- { discussMessage.sticky ? '取消置顶' : '置顶' } }
-
-
-
-
-
-
+ {
+ discussMessage.category_name &&
+
+
+ {
+ 所属目录:{discussMessage.category_name}
+
+ }
+
+
+ }
+
{/* { (isAdmin || discussMessage.author.login == current_user.login) &&
diff --git a/public/react/src/modules/courses/boards/boardsListItem.css b/public/react/src/modules/courses/boards/boardsListItem.css
new file mode 100644
index 000000000..3a1771349
--- /dev/null
+++ b/public/react/src/modules/courses/boards/boardsListItem.css
@@ -0,0 +1,9 @@
+.directory_style {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ maxSize: 20px;
+ overflow: hidden;
+ whiteSpace: nowrap;
+ textOverflow: ellipsis
+}
\ No newline at end of file
diff --git a/public/react/src/modules/courses/boards/index.js b/public/react/src/modules/courses/boards/index.js
index 3879bbd64..5cfbbeba3 100644
--- a/public/react/src/modules/courses/boards/index.js
+++ b/public/react/src/modules/courses/boards/index.js
@@ -386,8 +386,8 @@ class Boards extends Component{
{
boards && boards.filter((item)=> {
return item.id != bid && (!this.state.dirSearchValue || item.name.indexOf(this.state.dirSearchValue) != -1)
- }).map( (item) => {
- return - this.moveTo(item)} title={item.name}>{item.name}
+ }).map( (item, index) => {
+ return - this.moveTo(item)} title={item.name}>{item.name}
})
}
{ isAdmin && !isCourseEnd &&
@@ -427,7 +427,7 @@ class Boards extends Component{
{ messages.map((item, index) => {
return (
-
+
Date: Thu, 14 Nov 2019 19:20:47 +0800
Subject: [PATCH 5/8] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=88=9B?=
=?UTF-8?q?=E5=BB=BA=E8=AF=BE=E5=A0=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/weapps/courses_controller.rb | 21 +++++++++++++-
app/controllers/weapps/homes_controller.rb | 2 +-
app/forms/weapps/create_course_form.rb | 20 +++++++++++++
app/services/weapps/create_course_service.rb | 30 ++++++++++++++++++++
app/views/weapps/homes/show.json.jbuilder | 1 +
config/routes.rb | 2 ++
6 files changed, 74 insertions(+), 2 deletions(-)
create mode 100644 app/forms/weapps/create_course_form.rb
create mode 100644 app/services/weapps/create_course_service.rb
diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb
index 41e00f63e..c7ecb89c9 100644
--- a/app/controllers/weapps/courses_controller.rb
+++ b/app/controllers/weapps/courses_controller.rb
@@ -1,8 +1,27 @@
class Weapps::CoursesController < Weapps::BaseController
- before_action :require_wechat_login!
+ # before_action :require_wechat_login!
def create
return render_error("只有老师身份才能创建课堂") unless current_user.is_teacher?
+ course = Course.new(tea_id: current_user.id)
+ Weapps::CreateCourseService.call(course, course_params)
+ render_ok
+ rescue ApplicationService::Error => ex
+ render_error(ex.message)
+ end
+
+ def edit
+
+ end
+
+ def update
+
+ end
+
+ private
+
+ def course_params
+ params.permit(:name, :course_list_name, :credit, course_module_types: [])
end
end
\ No newline at end of file
diff --git a/app/controllers/weapps/homes_controller.rb b/app/controllers/weapps/homes_controller.rb
index a164adcfc..a99bb15c2 100644
--- a/app/controllers/weapps/homes_controller.rb
+++ b/app/controllers/weapps/homes_controller.rb
@@ -1,5 +1,5 @@
class Weapps::HomesController < Weapps::BaseController
- # before_action :require_wechat_login!
+ before_action :require_wechat_login!
def show
# banner
diff --git a/app/forms/weapps/create_course_form.rb b/app/forms/weapps/create_course_form.rb
new file mode 100644
index 000000000..9244096ab
--- /dev/null
+++ b/app/forms/weapps/create_course_form.rb
@@ -0,0 +1,20 @@
+class Weapps::CreateCourseForm
+ include ActiveModel::Model
+
+ attr_accessor :course
+ attr_accessor :name, :course_list_name, :credit, :course_module_types
+
+ validates :name, presence: true
+ validates :course_list_name, presence: true
+
+ validate :course_name_prefix
+ validate :check_course_modules
+
+ def course_name_prefix
+ raise '课堂名称应以课程名称开头' unless name.index(course_list_name) && name.index(course_list_name) == 0
+ end
+
+ def check_course_modules
+ raise '请至少添加一个课堂模块' if course_module_types.blank?
+ end
+end
\ No newline at end of file
diff --git a/app/services/weapps/create_course_service.rb b/app/services/weapps/create_course_service.rb
new file mode 100644
index 000000000..d7dd81ffe
--- /dev/null
+++ b/app/services/weapps/create_course_service.rb
@@ -0,0 +1,30 @@
+class Weapps::CreateCourseService < ApplicationService
+ attr_reader :course, :params
+
+ def initialize(course, params)
+ @course = course
+ @params = params
+ end
+
+ def call
+ Weapps::CreateCourseForm.new(form_params).validate!
+
+ ActiveRecord::Base.transaction do
+ course.name = params[:name].to_s.strip
+ course.school_id = course.teacher&.school_id
+ course.is_public = 0
+ course.credit = params[:credit].blank? ? nil : params[:credit]
+ course.save!
+
+ course.generate_invite_code
+ CourseMember.create!(course_id: course.id, user_id: course.tea_id, role: 1)
+ course.create_course_modules(params[:course_module_types])
+ end
+ end
+
+ private
+
+ def form_params
+ params.merge(course: course)
+ end
+end
\ No newline at end of file
diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder
index 7d14da6ed..089c70dbb 100644
--- a/app/views/weapps/homes/show.json.jbuilder
+++ b/app/views/weapps/homes/show.json.jbuilder
@@ -20,6 +20,7 @@ json.course_count @course_count
json.courses @courses.each do |course|
json.(course, :id, :name, :visits, :course_members_count)
json.creator course.teacher.real_name
+ json.avatar_url url_to_avatar(course.teacher)
json.school course.school&.name
course_member = @category == "study" ? course.students.where(user_id: @user.id).first : course.teachers.where(user_id: @user.id).first
json.sticky course_member.sticky
diff --git a/config/routes.rb b/config/routes.rb
index 930349d9b..6b9c83bc8 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -879,6 +879,8 @@ Rails.application.routes.draw do
resources :course_stickies, only: [:create] do
post :cancel_sticky, on: :collection
end
+
+ resources :courses, only: [:create, :update, :edit]
end
resources :users_for_partners, only: [:index]
From 6cdd9120f9c5ea0835ba8c37a3ca7ace651531da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 14 Nov 2019 19:32:03 +0800
Subject: [PATCH 6/8] =?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/moop_cases/CaseItem.js | 56 ++++++++++---------
.../src/modules/osshackathon/Osshackathon.js | 24 +++++---
2 files changed, 45 insertions(+), 35 deletions(-)
diff --git a/public/react/src/modules/moop_cases/CaseItem.js b/public/react/src/modules/moop_cases/CaseItem.js
index ac076379c..d72c0c321 100644
--- a/public/react/src/modules/moop_cases/CaseItem.js
+++ b/public/react/src/modules/moop_cases/CaseItem.js
@@ -19,33 +19,35 @@ class CaseItem extends Component{
{
libraries && libraries.map((item,key)=>{
return(
- -
-
-
-
- {item.title}
-
-
-
- {item.author_name}
- {item.author_school_name}
-
- {
- item.visited_count && item.visited_count != 0 ?
- {item.visited_count} 浏览:""
- }
- {
- item.praise_count && item.praise_count != 0 ?
- {item.praise_count} 赞:""
- }
- {
- item.download_count && item.download_count != 0 ?
- {item.download_count} 下载:""
- }
-
-
-
-
+
+ -
+
+
+
+ {item.title}
+
+
+
+ {item.author_name}
+ {item.author_school_name}
+
+ {
+ item.visited_count && item.visited_count != 0 ?
+ {item.visited_count} 浏览:""
+ }
+ {
+ item.praise_count && item.praise_count != 0 ?
+ {item.praise_count} 赞:""
+ }
+ {
+ item.download_count && item.download_count != 0 ?
+ {item.download_count} 下载:""
+ }
+
+
+
+
+
)
})
}
diff --git a/public/react/src/modules/osshackathon/Osshackathon.js b/public/react/src/modules/osshackathon/Osshackathon.js
index 46a35ea4f..4fc73850f 100644
--- a/public/react/src/modules/osshackathon/Osshackathon.js
+++ b/public/react/src/modules/osshackathon/Osshackathon.js
@@ -20,7 +20,8 @@ class Osshackathon extends Component {
hackathonedit:false,
Osshackathonmodeltype:false,
spinning:false,
- opentitletype:true
+ opentitletype:true,
+ boxoffsetHeigh:0
}
}
@@ -54,6 +55,7 @@ class Osshackathon extends Component {
spinning:true
})
})
+
}
@@ -67,9 +69,16 @@ class Osshackathon extends Component {
}
- componentDidUpdate = (prevProps) => {
-
-
+ componentDidUpdate = (prevProps,prevState) => {
+ if(prevState.data!=this.state.data){
+ //防止陷入无限循环
+ let box=document.getElementById("Osshackathonfontlists");
+ if(box){
+ this.setState({
+ boxoffsetHeigh:box.offsetHeight
+ })
+ }
+ }
}
PaginationTask=(pageNumber)=>{
@@ -228,7 +237,6 @@ class Osshackathon extends Component {
render() {
let {page,data,hackathonedit,opentitletype}=this.state;
-
return (
:""}
- {hackathonedit===true?"":
+ {hackathonedit===true?"":
{data&&data.hackathon.description===null?"":
}
}
- {opentitletype===true?
this.opentitle()} className={"pointer Breadcrumbfont"}>展开阅读全文:""}
+ {opentitletype===true&&this.state.boxoffsetHeigh===180?
this.opentitle()} className={"pointer Breadcrumbfont"}>展开阅读全文:""}
{hackathonedit===true?
this.getosshackathonlist()}
From 91068b0c388d991f7eef98ae47d607c08f8f5f5e Mon Sep 17 00:00:00 2001
From: SylorHuang
Date: Thu, 14 Nov 2019 19:45:24 +0800
Subject: [PATCH 7/8] =?UTF-8?q?=E8=AF=95=E5=8D=B7=E7=AB=8B=E5=8D=B3?=
=?UTF-8?q?=E6=88=AA=E6=AD=A2=E7=9A=84=E5=87=BA=E7=8E=B0=E4=B8=8E=E9=9A=90?=
=?UTF-8?q?=E8=97=8F=E5=88=A4=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/exercises_controller.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb
index 102469043..c4f32c438 100644
--- a/app/controllers/exercises_controller.rb
+++ b/app/controllers/exercises_controller.rb
@@ -1627,8 +1627,9 @@ class ExercisesController < ApplicationController
ex_and_user = user_groups_id & ex_group_settings #用户已设置的分班
unpublish_group = unpublish_group + ex_and_user - ex_ended_groups #已发布的全部班级减去截止的全部班级
else
+ ex_ended_groups = ex_all_group_settings.exercise_group_ended.pluck(:course_group_id).uniq
ex_and_user = user_groups_id & ex_group_settings #用户已设置的分班
- unpublish_group = unpublish_group + ex_and_user
+ unpublish_group = unpublish_group + ex_and_user - ex_ended_groups
end
end
end
From 5d36f8c9ed04451717d8483be14a33f7c5eb017b Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Thu, 14 Nov 2019 19:49:11 +0800
Subject: [PATCH 8/8] =?UTF-8?q?=E8=AF=BE=E5=A0=82=E6=9B=B4=E6=96=B0?=
=?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/weapps/courses_controller.rb | 14 +++++++--
app/forms/weapps/update_course_form.rb | 15 ++++++++++
app/services/weapps/create_course_service.rb | 7 +++++
app/services/weapps/update_course_service.rb | 31 ++++++++++++++++++++
app/views/weapps/courses/edit.json.jbuilder | 2 ++
5 files changed, 67 insertions(+), 2 deletions(-)
create mode 100644 app/forms/weapps/update_course_form.rb
create mode 100644 app/services/weapps/update_course_service.rb
create mode 100644 app/views/weapps/courses/edit.json.jbuilder
diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb
index c7ecb89c9..38f1b99f9 100644
--- a/app/controllers/weapps/courses_controller.rb
+++ b/app/controllers/weapps/courses_controller.rb
@@ -1,5 +1,6 @@
class Weapps::CoursesController < Weapps::BaseController
# before_action :require_wechat_login!
+ before_action :teacher_allowed, except: [:create]
def create
return render_error("只有老师身份才能创建课堂") unless current_user.is_teacher?
@@ -12,11 +13,12 @@ class Weapps::CoursesController < Weapps::BaseController
end
def edit
-
+ @course = current_course
end
def update
-
+ Weapps::UpdateCourseService.call(current_course, course_params)
+ render_ok
end
private
@@ -24,4 +26,12 @@ class Weapps::CoursesController < Weapps::BaseController
def course_params
params.permit(:name, :course_list_name, :credit, course_module_types: [])
end
+
+ def current_course
+ @_current_course = Course.find params[:id]
+ end
+
+ def teacher_allowed
+ return render_forbidden unless current_user.course_identity(current_course) < Course::STUDENT
+ end
end
\ No newline at end of file
diff --git a/app/forms/weapps/update_course_form.rb b/app/forms/weapps/update_course_form.rb
new file mode 100644
index 000000000..6fb1d81d9
--- /dev/null
+++ b/app/forms/weapps/update_course_form.rb
@@ -0,0 +1,15 @@
+class Weapps::UpdateCourseForm
+ include ActiveModel::Model
+
+ attr_accessor :course
+ attr_accessor :name, :course_list_name, :credit
+
+ validates :name, presence: true
+ validates :course_list_name, presence: true
+
+ validate :course_name_prefix
+
+ def course_name_prefix
+ raise '课堂名称应以课程名称开头' unless name.index(course_list_name) && name.index(course_list_name) == 0
+ end
+end
\ No newline at end of file
diff --git a/app/services/weapps/create_course_service.rb b/app/services/weapps/create_course_service.rb
index d7dd81ffe..196533bb6 100644
--- a/app/services/weapps/create_course_service.rb
+++ b/app/services/weapps/create_course_service.rb
@@ -14,6 +14,13 @@ class Weapps::CreateCourseService < ApplicationService
course.school_id = course.teacher&.school_id
course.is_public = 0
course.credit = params[:credit].blank? ? nil : params[:credit]
+ course_list = CourseList.find_by(name: params[:course_list_name].to_s.strip)
+ if course_list
+ course.course_list_id = course_list.id
+ else
+ new_course_list = CourseList.create!(name: params[:course_list_name].to_s.strip, user_id: course.tea_id, is_admin: 0)
+ course.course_list_id = new_course_list.id
+ end
course.save!
course.generate_invite_code
diff --git a/app/services/weapps/update_course_service.rb b/app/services/weapps/update_course_service.rb
new file mode 100644
index 000000000..4f2fa4676
--- /dev/null
+++ b/app/services/weapps/update_course_service.rb
@@ -0,0 +1,31 @@
+class Weapps::UpdateCourseService < ApplicationService
+ attr_reader :course, :params
+
+ def initialize(course, params)
+ @course = course
+ @params = params
+ end
+
+ def call
+ Weapps::UpdateCourseForm.new(form_params).validate!
+
+ ActiveRecord::Base.transaction do
+ course.name = params[:name].to_s.strip
+ course.credit = params[:credit].blank? ? nil : params[:credit]
+ course_list = CourseList.find_by(name: params[:course_list_name].to_s.strip)
+ if course_list
+ course.course_list_id = course_list.id
+ else
+ new_course_list = CourseList.create!(name: params[:course_list_name].to_s.strip, user_id: course.tea_id, is_admin: 0)
+ course.course_list_id = new_course_list.id
+ end
+ course.save!
+ end
+ end
+
+ private
+
+ def form_params
+ params.merge(course: course)
+ end
+end
\ No newline at end of file
diff --git a/app/views/weapps/courses/edit.json.jbuilder b/app/views/weapps/courses/edit.json.jbuilder
new file mode 100644
index 000000000..ef7a28a42
--- /dev/null
+++ b/app/views/weapps/courses/edit.json.jbuilder
@@ -0,0 +1,2 @@
+json.(@course, :id, :name, :credit)
+json.course_list_name @course.course_list&.name
\ No newline at end of file