diff --git a/.access_token b/.access_token
deleted file mode 100644
index 2e228963c..000000000
--- a/.access_token
+++ /dev/null
@@ -1 +0,0 @@
-{"access_token":"b_Pc60Dd5eyg_ut3cHbsjQO9EJJdj2Qj5F99o9LH9ltKSme7_FZ3Of22lWLL-K2V0siWzv-bd9PO0Dn-L1PBvIy9LhXa0qPVaFl6vTtZHR2kA8qjo1ps2ancya0t7KmzURGbAFAAXM","expires_in":7200,"got_token_at":1467976842}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 1ef7e63ce..8a40f3ca7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,4 @@ public/javascripts/wechat/node_modules/
.ruby-version
.access_token
tmux*.log
+config/wechat.yml
diff --git a/Gemfile b/Gemfile
index 03dbb5785..1c1edfd35 100644
--- a/Gemfile
+++ b/Gemfile
@@ -49,6 +49,8 @@ gem 'kaminari'
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
+#rails 3.2.22.2 bug
+gem "test-unit", "~>3.0"
### profile
gem 'oneapm_rpm'
diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb
index 9b4bdb5d6..3ff9895a6 100644
--- a/app/api/mobile/api.rb
+++ b/app/api/mobile/api.rb
@@ -20,13 +20,14 @@ module Mobile
require_relative 'apis/praise'
require_relative 'apis/resources'
require_relative 'apis/syllabuses'
+ require_relative 'apis/projects'
class API < Grape::API
version 'v1', using: :path
format :json
content_type :json, "application/json;charset=UTF-8"
use ActionDispatch::Session::CookieStore
- use Mobile::Middleware::ErrorHandler
+ use Middleware::ErrorHandler
helpers do
def logger
@@ -42,9 +43,9 @@ module Mobile
end
def current_user
- openid = params[:openid]
+ openid = session[:wechat_openid]
if openid
- uw = UserWechat.find_by_openid(params[:openid])
+ uw = UserWechat.find_by_openid(openid)
return uw.user if uw
end
@@ -75,6 +76,7 @@ module Mobile
mount Apis::Praise
mount Apis::Resources
mount Apis::Syllabuses
+ mount Apis::Projects
add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb
index 60e00280e..eec6e8ead 100644
--- a/app/api/mobile/apis/courses.rb
+++ b/app/api/mobile/apis/courses.rb
@@ -419,6 +419,53 @@ module Mobile
end
+ desc "获取班级某成员角色信息"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ requires :user_id, type: Integer
+ end
+ post 'get_member_info' do
+ authenticate!
+
+ c = Course.find("#{params[:id]}")
+
+ my_member = c.member_principals.where("users.id=#{params[:user_id]}").first
+
+ if my_member && my_member.roles[0]
+ present :course_id,params[:id]
+ present :user_id,params[:user_id]
+ present :member_info,my_member, with: Mobile::Entities::ProjectMember
+ present :status, 0
+ else
+ present :status, -1
+ end
+
+ end
+
+ desc "修改班级某成员角色信息"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ requires :user_id, type: Integer
+ requires :role_id, type: Integer
+ end
+ post 'edit_member_role' do
+ authenticate!
+
+ c = Course.find("#{params[:id]}")
+
+ #7教辅 9教师 10学生
+ if c.tea_id == params[:user_id] || c.tea_id != current_user.id || !(params[:role_id] == 7 || params[:role_id] == 9 || params[:role_id] == 10)
+ present :status, -1
+ else
+
+ cs = CoursesService.new
+ status = cs.modify_user_course_role params
+ present :status, status
+ end
+ end
+
end
end
end
diff --git a/app/api/mobile/apis/projects.rb b/app/api/mobile/apis/projects.rb
new file mode 100644
index 000000000..5ab0878d0
--- /dev/null
+++ b/app/api/mobile/apis/projects.rb
@@ -0,0 +1,181 @@
+#coding=utf-8
+
+module Mobile
+ module Apis
+ class Projects < Grape::API
+
+ resources :projects do
+ desc "获取项目列表"
+ params do
+ requires :token, type: String
+ end
+ get do
+ authenticate!
+
+ ps = ProjectsService.new
+ projects = ps.user_projects(current_user)
+ present :data, projects, with: Mobile::Entities::Project,user: current_user
+ present :status, 0
+ end
+
+ desc "返回单个项目"
+ params do
+ requires :id, type: Integer
+ requires :token,type:String
+ end
+ route_param :id do
+ get do
+ # course = Course.find(params[:id])
+ ps = ProjectsService.new
+ project = ps.show_project(params,current_user)
+
+ if project[:status] == 9
+ {status:-1, message: '该项目不存在或已被删除啦' }
+ else
+ present :data, project, with: Mobile::Entities::Project,user: current_user
+ present :status, 0
+ end
+ end
+ end
+
+ desc "获取项目动态"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ end
+ post 'activities' do
+ authenticate!
+
+ user = current_user
+
+ project_types = "('Message','Issue','Project')"
+ activities = UserActivity.where("(container_type = 'Project' and container_id = #{params[:id]} and act_type in #{project_types})").order('updated_at desc')
+
+ page = params[:page] ? params[:page] : 0
+ all_count = activities.count
+ activities = activities.limit(10).offset(page * 10)
+ count = activities.count
+ present :data, activities, with: Mobile::Entities::Activity,user: user
+ present :all_count, all_count
+ present :count, count
+ present :page, page
+ present :status, 0
+ end
+
+ desc "获取项目成员"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ end
+ post 'members' do
+ authenticate!
+
+ project = Project.find("#{params[:id]}")
+ members = project.member_principals
+
+ master_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=3").all.sort
+
+ master_members.each do |m|
+ if m.user_id == project.user_id
+ master_members.delete(m)
+ master_members.insert(0,m)
+ break
+ end
+ end
+
+ develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort
+ report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort
+
+ present :master_members,master_members, with: Mobile::Entities::ProjectMember
+ present :develop_members,develop_members, with: Mobile::Entities::ProjectMember
+ present :report_members,report_members, with: Mobile::Entities::ProjectMember
+ present :status, 0
+ end
+
+ desc "获取项目某成员角色信息"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ requires :user_id, type: Integer
+ end
+ post 'get_member_info' do
+ authenticate!
+
+ project = Project.find("#{params[:id]}")
+
+ my_member = project.member_principals.where("users.id=#{params[:user_id]}").first
+
+ if my_member && my_member.roles[0]
+ present :project_id,params[:id]
+ present :user_id,params[:user_id]
+ present :member_info,my_member, with: Mobile::Entities::ProjectMember
+ present :status, 0
+ else
+ present :status, -1
+ end
+
+ end
+
+ desc "修改项目某成员角色信息"
+ params do
+ requires :id, type: Integer
+ requires :token, type: String
+ requires :user_id, type: Integer
+ requires :role_id, type: Integer
+ end
+ post 'edit_member_role' do
+ authenticate!
+
+ project = Project.find("#{params[:id]}")
+
+ my_member = project.member_principals.where("users.id=#{current_user.id}").first
+
+ #3管理 4开发 5报告
+ if !(my_member && my_member.roles[0] && my_member.roles[0].id == 3 ) || project.user_id == params[:user_id] || !(params[:role_id] == 3 || params[:role_id] == 4 || params[:role_id] == 5)
+ present :status, -1
+ else
+ ps = ProjectsService.new
+
+ status = ps.modify_user_project_role params
+
+ present :status, status
+ end
+ end
+
+ desc "新建项目"
+ params do
+ requires :token, type: String
+ requires :name, type: String, desc: '项目名称'
+ end
+ post 'create' do
+ authenticate!
+
+ ps = ProjectsService.new
+
+ status = ps.createNewProject params,current_user
+
+
+ present :status, 0
+
+ end
+
+ desc "加入项目"
+ params do
+ requires :token, type: String
+ requires :invite_code, type: String, desc: '邀请码'
+ end
+ post "join" do
+ authenticate!
+
+ # ps = ProjectsService.new
+ # status = ps.join_project({role: "5", openid: params[:openid], invite_code: params[:invite_code]}, current_user)
+ #
+ # present :status, status
+
+ {status:-1, message: '该功能将在近日开放,敬请期待!' }
+ end
+
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb
index e34bae63f..9b1be37c3 100644
--- a/app/api/mobile/apis/users.rb
+++ b/app/api/mobile/apis/users.rb
@@ -42,7 +42,7 @@ module Mobile
user: user
)
ws = WechatService.new
- ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, Time.now.strftime("%Y-%m-%d"))
+ ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.login, Time.now.strftime("%Y-%m-%d"))
present status: 0, message: '您已成功绑定Trustie平台'
end
@@ -68,7 +68,7 @@ module Mobile
user: user
)
ws = WechatService.new
- ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, Time.now.strftime("%Y-%m-%d"))
+ ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.login, Time.now.strftime("%Y-%m-%d"))
present :data, user, with: Mobile::Entities::User
present :status, 0
end
diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb
index db1e7e269..9d03eed9f 100644
--- a/app/api/mobile/apis/whomeworks.rb
+++ b/app/api/mobile/apis/whomeworks.rb
@@ -13,8 +13,14 @@ module Mobile
#0一级回复的更多 1 二级回复的更多
type = params[:type] || 0
page = params[:page] || 0
- homework = HomeworkCommon.find params[:id]
- present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page
+
+ if type == 0
+ homework = HomeworkCommon.find params[:id]
+ present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page,comment_type: "homework"
+ else
+ jour = JournalsForMessage.find params[:id]
+ present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page,comment_type: "homework"
+ end
present :type, type
present :page, page
present :status, 0
diff --git a/app/api/mobile/entities/blog_comment.rb b/app/api/mobile/entities/blog_comment.rb
index 3f58e901f..726949bb5 100644
--- a/app/api/mobile/entities/blog_comment.rb
+++ b/app/api/mobile/entities/blog_comment.rb
@@ -51,9 +51,8 @@ module Mobile
blog_comment_expose :id
blog_comment_expose :locked
blog_comment_expose :praise_count
- expose :blog_comment_children, using:Mobile::Entities::BlogComment do |c,opt|
+ expose :all_children, using:Mobile::Entities::BlogComment do |c,opt|
if c.is_a? (::BlogComment)
- ##自己的父回复为空 才有子回复
if !opt[:children]
if c.parent.nil? && opt[:type] == 0
opt[:children] = true
@@ -86,7 +85,7 @@ module Mobile
#取二级回复的底楼层
parents_reply = []
parents_reply = get_reply_parents_no_root(parents_reply, c)
- if parents_reply.count > 0 && !opt[:bottom]
+ if parents_reply.count > 0 && parents_reply.count != 2 && !opt[:bottom]
if opt[:type] == 1
# opt[:bottom] = true
# parents_reply[opt[:page]..opt[:page]]
@@ -105,7 +104,7 @@ module Mobile
#取二级回复的顶楼层
parents_reply = []
parents_reply = get_reply_parents_no_root(parents_reply, c)
- if parents_reply.count > 0 && !opt[:top]
+ if parents_reply.count >= 2 && !opt[:top]
if opt[:type] == 1
opt[:bottom] = true
tStart = (opt[:page]-1)*5+2
diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb
index 88c8ba144..aaf5dd78b 100644
--- a/app/api/mobile/entities/course.rb
+++ b/app/api/mobile/entities/course.rb
@@ -86,6 +86,15 @@ module Mobile
expose :my_homework,using: Mobile::Entities::Homework do |f, opt|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
end
+ expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options|
+ if instance[:course]
+ course = instance[:course]
+ else
+ course = instance
+ end
+ current_user = options[:user]
+ course.tea_id == current_user.id
+ end
course_expose :current_user_is_member
course_expose :current_user_is_teacher
course_expose :work_unit
diff --git a/app/api/mobile/entities/issue.rb b/app/api/mobile/entities/issue.rb
index b99ea03a5..dc4fd0567 100644
--- a/app/api/mobile/entities/issue.rb
+++ b/app/api/mobile/entities/issue.rb
@@ -22,10 +22,10 @@ module Mobile
(get_user(issue.assigned_to_id)).login
when :issue_status
IssueStatus.find(issue.status_id).name
- when :journals_count
- # issue.journals.where("notes is not null and notes != ''").count
- all_comments = []
- get_all_children(all_comments, f).count
+ when :comment_count
+ issue.journals.where("notes is not null and notes != ''").count
+ # all_comments = []
+ # get_all_children(all_comments, f).count
when :project_name
issue.project.name
when :praise_count
@@ -49,7 +49,7 @@ module Mobile
issue_expose :issue_priority
issue_expose :issue_assigned_to
issue_expose :issue_status
- issue_expose :journals_count
+ issue_expose :comment_count
issue_expose :project_name
issue_expose :praise_count
expose :issue_journals, using: Mobile::Entities::Journal do |f, opt|
diff --git a/app/api/mobile/entities/jours.rb b/app/api/mobile/entities/jours.rb
index f98d7a9ed..0e4c699c2 100644
--- a/app/api/mobile/entities/jours.rb
+++ b/app/api/mobile/entities/jours.rb
@@ -17,7 +17,7 @@ module Mobile
case field
when :lasted_comment
time_from_now f.created_on
- when :reply_count
+ when :comment_count
# f.children.count
all_comments = []
get_all_children(all_comments, f).count
@@ -27,6 +27,8 @@ module Mobile
'JournalsForMessage'
when :act_id
f.id
+ when :content
+ f.notes
end
end
end
@@ -42,10 +44,10 @@ module Mobile
end
jours_expose :created_on
jours_expose :lasted_comment
- jours_expose :notes
+ jours_expose :content
jours_expose :m_reply_id
jours_expose :m_parent_id
- jours_expose :reply_count
+ jours_expose :comment_count
jours_expose :praise_count
expose :course,using:Mobile::Entities::Course do |f,opt|
if f.is_a?(::JournalsForMessage) && f[:jour_type] == "Course"
@@ -55,9 +57,20 @@ module Mobile
expose :reply_user,using: Mobile::Entities::User do |f, opt|
f.at_user
end
- expose :child_reply,using: Mobile::Entities::Jours do |f, opt|
+ expose :all_children,using: Mobile::Entities::Jours do |f, opt|
if f.is_a?(::JournalsForMessage)
- f.children.reverse
+ # f.children.reverse
+ if !opt[:children] && opt[:comment_type].nil?
+ if f.parent.nil? && opt[:type] == 0
+ opt[:children] = true
+ all_comments = []
+ tStart = opt[:page]*5
+ tEnd = (opt[:page]+1)*5 - 1
+
+ all_comments = get_all_children(all_comments, f)[tStart..tEnd]
+ all_comments
+ end
+ end
end
end
expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options|
@@ -67,6 +80,78 @@ module Mobile
has_praise = obj.empty? ? false : true
has_praise
end
+
+ expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options|
+ parents_reply = []
+
+ if options[:comment_type].nil?
+ parents_reply = get_reply_parents_no_root(parents_reply, instance)
+ elsif options[:comment_type] == "homework"
+ parents_reply = get_reply_parents(parents_reply, instance)
+ end
+ parents_reply.count
+ end
+
+ expose :parents_reply_bottom, using:Mobile::Entities::Jours do |f,opt|
+ if f.is_a? (::JournalsForMessage)
+ #取二级回复的底楼层
+ parents_reply = []
+ if opt[:comment_type].nil?
+ parents_reply = get_reply_parents_no_root(parents_reply, f)
+ elsif opt[:comment_type] == "homework"
+ parents_reply = get_reply_parents(parents_reply, f)
+ end
+ if parents_reply.count > 0 && parents_reply.count != 2 && !opt[:bottom]
+ if opt[:type] == 1
+ # opt[:bottom] = true
+ # parents_reply[opt[:page]..opt[:page]]
+ else
+ opt[:bottom] = true
+ parents_reply[0..0]
+ end
+ else
+ []
+ end
+ end
+ end
+
+ expose :parents_reply_top, using:Mobile::Entities::Jours do |f,opt|
+ if f.is_a? (::JournalsForMessage)
+ #取二级回复的顶楼层
+ parents_reply = []
+
+ if opt[:comment_type].nil?
+ parents_reply = get_reply_parents_no_root(parents_reply, f)
+ elsif opt[:comment_type] == "homework"
+ parents_reply = get_reply_parents(parents_reply, f)
+ end
+ if parents_reply.count >= 2 && !opt[:top]
+ if opt[:type] == 1
+ opt[:bottom] = true
+ tStart = (opt[:page]-1)*5+2
+ tEnd = (opt[:page])*5+2 - 1
+
+ if tEnd >= parents_reply.count - 1
+ tEnd = parents_reply.count - 2
+ end
+
+ if tStart <= parents_reply.count - 2
+ parents_reply = parents_reply.reverse[tStart..tEnd]
+ parents_reply.reverse
+ else
+ []
+ end
+ else
+ opt[:top] = true
+ parents_reply = parents_reply.reverse[0..1]
+ parents_reply.reverse
+ end
+ else
+ []
+ end
+ end
+ end
+
end
end
end
diff --git a/app/api/mobile/entities/message.rb b/app/api/mobile/entities/message.rb
index d58192378..c2744f63a 100644
--- a/app/api/mobile/entities/message.rb
+++ b/app/api/mobile/entities/message.rb
@@ -30,7 +30,7 @@ module Mobile
'Message'
when :act_id
u.id
- when :replies_count
+ when :comment_count
all_comments = []
get_all_children(all_comments, u).count
end
@@ -51,15 +51,26 @@ module Mobile
message_expose :board_id
message_expose :subject
message_expose :content
- message_expose :replies_count
+ message_expose :comment_count
message_expose :praise_count
message_expose :created_on
message_expose :locked
message_expose :id
message_expose :lasted_comment
- expose :message_children,using:Mobile::Entities::Message do |c,opt|
+ expose :all_children,using:Mobile::Entities::Message do |c,opt|
if c.is_a? (::Message)
- c.children.reverse
+ # c.children.reverse
+ if !opt[:children]
+ if c.parent.nil? && opt[:type] == 0
+ opt[:children] = true
+ all_comments = []
+ tStart = opt[:page]*5
+ tEnd = (opt[:page]+1)*5 - 1
+
+ all_comments = get_all_children(all_comments, c)[tStart..tEnd]
+ all_comments
+ end
+ end
end
end
expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options|
@@ -69,6 +80,63 @@ module Mobile
has_praise = obj.empty? ? false : true
has_praise
end
+
+ expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options|
+ parents_reply = []
+ parents_reply = get_reply_parents_no_root(parents_reply, instance)
+ parents_reply.count
+ end
+
+ expose :parents_reply_bottom, using:Mobile::Entities::Message do |c,opt|
+ if c.is_a? (::Message)
+ #取二级回复的底楼层
+ parents_reply = []
+ parents_reply = get_reply_parents_no_root(parents_reply, c)
+ if parents_reply.count > 0 && parents_reply.count != 2 && !opt[:bottom]
+ if opt[:type] == 1
+ # opt[:bottom] = true
+ # parents_reply[opt[:page]..opt[:page]]
+ else
+ opt[:bottom] = true
+ parents_reply[0..0]
+ end
+ else
+ []
+ end
+ end
+ end
+
+ expose :parents_reply_top, using:Mobile::Entities::Message do |c,opt|
+ if c.is_a? (::Message)
+ #取二级回复的顶楼层
+ parents_reply = []
+ parents_reply = get_reply_parents_no_root(parents_reply, c)
+ if parents_reply.count >= 2 && !opt[:top]
+ if opt[:type] == 1
+ opt[:bottom] = true
+ tStart = (opt[:page]-1)*5+2
+ tEnd = (opt[:page])*5+2 - 1
+
+ if tEnd >= parents_reply.count - 1
+ tEnd = parents_reply.count - 2
+ end
+
+ if tStart <= parents_reply.count - 2
+ parents_reply = parents_reply.reverse[tStart..tEnd]
+ parents_reply.reverse
+ else
+ []
+ end
+ else
+ opt[:top] = true
+ parents_reply = parents_reply.reverse[0..1]
+ parents_reply.reverse
+ end
+ else
+ []
+ end
+ end
+ end
end
end
end
\ No newline at end of file
diff --git a/app/api/mobile/entities/news.rb b/app/api/mobile/entities/news.rb
index ff1452b1c..be9fa3ceb 100644
--- a/app/api/mobile/entities/news.rb
+++ b/app/api/mobile/entities/news.rb
@@ -24,9 +24,8 @@ module Mobile
'News'
when :act_id
f.id
- when :comments_count
- all_comments = []
- get_all_children(all_comments, f).count
+ when :comment_count
+ f.comments.count
end
end
elsif f.is_a?(Hash) && !f.key?(field)
@@ -70,7 +69,7 @@ module Mobile
#发布时间
news_expose :created_on
#评论数量
- news_expose :comments_count
+ news_expose :comment_count
news_expose :praise_count
#课程名字
news_expose :course_name
diff --git a/app/api/mobile/entities/project.rb b/app/api/mobile/entities/project.rb
new file mode 100644
index 000000000..3e1899caa
--- /dev/null
+++ b/app/api/mobile/entities/project.rb
@@ -0,0 +1,32 @@
+module Mobile
+ module Entities
+ class Project < Grape::Entity
+ expose :name
+ expose :id
+ expose :user_id
+ # expose :invite_code
+ # expose :qrcode
+ expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options|
+ current_user = options[:user]
+
+ my_member = instance.member_principals.where("users.id=#{current_user.id}").first
+ can_setting = false
+ if my_member && my_member.roles[0] && my_member.roles[0].id == 3
+ can_setting = true
+ end
+ can_setting
+ end
+
+ expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options|
+ current_user = options[:user]
+
+ current_user.id == instance.user_id
+ end
+
+
+ expose :member_count, if: lambda { |instance, options| options[:user] } do |instance, options|
+ instance.members.count
+ end
+ end
+ end
+end
diff --git a/app/api/mobile/entities/project_member.rb b/app/api/mobile/entities/project_member.rb
new file mode 100644
index 000000000..58edf7ea7
--- /dev/null
+++ b/app/api/mobile/entities/project_member.rb
@@ -0,0 +1,35 @@
+module Mobile
+ module Entities
+ class ProjectMember < Grape::Entity
+ include Redmine::I18n
+ include ApplicationHelper
+ include ApiHelper
+ def self.member_expose(f)
+ expose f do |u,opt|
+ if u.is_a?(Hash) && u.key?(f)
+ u[f]
+ elsif u.is_a?(::Member)
+ if u.respond_to?(f)
+ u.send(f)
+ else
+ case f
+ when :roles_id
+ u.roles[0].id
+ end
+ end
+ end
+
+ end
+ end
+
+ expose :user, using: Mobile::Entities::User do |c, opt|
+ if c.is_a?(::Member)
+ c.user
+ end
+ end
+
+ member_expose :roles_id
+
+ end
+ end
+end
diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb
index 2eb20f0db..dcdf48d3b 100644
--- a/app/api/mobile/entities/user.rb
+++ b/app/api/mobile/entities/user.rb
@@ -24,10 +24,12 @@ module Mobile
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.brief_introduction
when :student_num
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id
- when :realname
- u.nil? ? "" : get_user_realname(u)
+ when :real_name
+ u.nil? ? "" : get_user_realname(u).gsub(/\s*/,"");
when :name
u.nil? ? "" : u.show_name
+ when :roles_id
+ u[:roles_id].nil? ? nil : u.roles_id
end
end
end
@@ -37,11 +39,13 @@ module Mobile
expose :id
#头像
- user_expose :img_url
- #昵称
expose :nickname
#真名
- user_expose :realname
+ user_expose :img_url
+ #昵称
+ expose :realname
+ #昵称
+ user_expose :real_name
#性别
user_expose :gender
#我的二维码
@@ -62,6 +66,8 @@ module Mobile
user_expose :role_name
+ user_expose :roles_id
+
user_expose :name
end
diff --git a/app/api/mobile/entities/whomework.rb b/app/api/mobile/entities/whomework.rb
index 8985f3d60..7178ff67d 100644
--- a/app/api/mobile/entities/whomework.rb
+++ b/app/api/mobile/entities/whomework.rb
@@ -26,7 +26,7 @@ module Mobile
wh.nil? || wh.homework_detail_manual.nil? ? nil : convert_to_time(wh.homework_detail_manual.evaluation_end, 1)
when :praise_count
get_activity_praise_num(wh)
- when :whomework_journal_count
+ when :comment_count
wh.journals_for_messages.count
when :course_name
wh.course.name
@@ -58,6 +58,7 @@ module Mobile
expose :anonymous_comment
expose :quotes
expose :is_open
+ expose :id
whomework_expose :act_type
whomework_expose :act_id
whomework_expose :course_name
@@ -66,11 +67,19 @@ module Mobile
whomework_expose :evaluation_start
whomework_expose :evaluation_end
whomework_expose :praise_count
- whomework_expose :whomework_journal_count
- expose :journals_for_messages, using: Mobile::Entities::Jours do |f, opt|
+ whomework_expose :comment_count
+ expose :all_children, using: Mobile::Entities::Jours do |f, opt|
#f[:journals_for_messages] if f.is_a?(Hash) && f.key?(:journals_for_messages)
if f.is_a?(::HomeworkCommon)
- f.journals_for_messages.reverse
+ # f.journals_for_messages.reverse
+ if !opt[:children] && opt[:type] == 0
+ opt[:children] = true
+ tStart = opt[:page]*5
+ tEnd = (opt[:page]+1)*5 - 1
+
+ all_comments = f.journals_for_messages.reorder("created_on desc")
+ all_comments[tStart..tEnd]
+ end
end
end
expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options|
diff --git a/app/api/mobile/exceptions/auth_exception.rb b/app/api/mobile/exceptions/auth_exception.rb
new file mode 100644
index 000000000..5dceab572
--- /dev/null
+++ b/app/api/mobile/exceptions/auth_exception.rb
@@ -0,0 +1,13 @@
+#coding=utf-8
+#
+module Mobile
+ module Exceptions
+ class AuthException < StandardError
+ attr_reader :err_code, :msg
+ def initialize(code, msg)
+ @err_code = code
+ @msg = msg
+ end
+ end
+ end
+end
diff --git a/app/api/mobile/middleware/error_handler.rb b/app/api/mobile/middleware/error_handler.rb
index 699dd1537..94d74e568 100644
--- a/app/api/mobile/middleware/error_handler.rb
+++ b/app/api/mobile/middleware/error_handler.rb
@@ -1,3 +1,6 @@
+#coding=utf-8
+
+
module Mobile
module Middleware
class ErrorHandler < Grape::Middleware::Base
@@ -6,7 +9,10 @@ module Mobile
begin
@app.call(@env)
rescue =>e
- message = {status: 1, message: e.message }.to_json
+ code = 1
+
+ message = {status: code, message: e.message }.to_json
+
Rails.logger.error e.inspect
Rails.logger.error e.backtrace.join("\n")
status = 200
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 6c62c642a..935ca1d71 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -154,6 +154,19 @@ class AdminController < ApplicationController
end
end
+ # 单位名称列表下的已审批按照名字排序
+ def apply_shcool_sort
+ @order = ""
+ @sort = ""
+ if params[:sort] && (params[:order] == 'name')
+ # courses = School.find_by_sql("SELECT c.*,count(c.id) FROM courses c,course_activities ca WHERE c.id = ca.course_id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY count(c.id) #{params[:sort]}, c.id desc")
+ school = School.find_by_sql(" SELECT aas.name FROM apply_add_schools aas where aas.status = '0' ORDER BY CONVERT(aas.name USING gbk) #{params[:sort]}, aas.id asc ")
+ @order = params[:order]
+ @sort = params[:sort]
+ end
+ redirect_to unapplied_schools_url
+ end
+
#精品课程下的全部课程
def excellent_all_courses
name = params[:name]
@@ -598,6 +611,119 @@ class AdminController < ApplicationController
format.html
end
end
+
+ # 获取申请的高校列表
+ # status: 0 未审批; 1 已批阅;
+ def applied_schools
+ @name = params[:name] || ""
+ condition = "#{@name.strip}".gsub(" ","")
+
+ @apply_status = ApplyAddSchools.where("status = 0 and name like '%#{condition}%'").order('created_at desc')
+ @apply_count = @apply_status.count
+
+ @apply_pages = Paginator.new @apply_count, 30, params['page'] || 1
+ @apply_status = paginateHelper @apply_status, 30
+
+ @page = (params['page'] || 1).to_i - 1
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ def has_applied_schools
+ @name = params[:name] || ""
+ condition = "#{@name.strip}".gsub(" ","")
+
+ @has_apply_status = ApplyAddSchools.where("(status = 1 or status = 2) and name like '%#{condition}%'").order('created_at desc')
+ @has_apply_count = @has_apply_status.count
+
+ @has_apply_pages = Paginator.new @has_apply_count, 30, params['page'] || 1
+ @has_apply_status = paginateHelper @has_apply_status, 30
+
+ @page = (params['page'] || 1).to_i - 1
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ # 批准未审批的高校
+ # 消息发送,发送对象为申请人
+ # status: 0表示未批准; status:1表示已批准; status: 2表示已更改; status: 3表示已拒绝
+ def approve_applied_schools
+ applied_school = ApplyAddSchools.find params[:id]
+ applied_school.update_column('status', 1) unless applied_school.nil?
+ school = applied_school.school
+ school.update_attribute("province", applied_school.province)
+ AppliedMessage.create(:user_id => applied_school.user_id, :status => 1, :viewed => true, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
+ # School.create(:user_id => applied_school.user_id, :status => 1, :viewed => true, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
+ respond_to do |format|
+ format.html{ redirect_to unapplied_schools_url }
+ end
+ end
+
+ # 更改申请的高校名称
+ # REDO: 修改该字段
+ # REDO: 同步修改使用了改名称的用户单位
+ def edit_applied_schools
+ aas = ApplyAddSchools.find(params[:applied_id])
+ # aas.update_attribute(:name, params[:name])
+ #applied_add_school = ApplyAddSchools.where(:name => aas.name)
+ school = School.find params[:school_id]
+ begin
+ aas.update_attribute(:status, 2)
+ AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => true, :applied_id => aas.id, :applied_type => "ApplyAddSchools", :name => school[0].name )
+ users = UserExtensions.where("school_id = #{aas.school_id}")
+ users.each do |user|
+ user.update_column("school_id", school[0].id)
+ end
+ aas.school.destroy
+ aas.update_attribute(:school_id, school[0].id)
+ rescue Exception => e
+ puts e
+ end
+ # applied_schools = ApplyAddSchools.find params[:applied_id]
+ # applied_schools.update_column('name', params[:name])
+ redirect_to unapplied_schools_url
+ end
+
+ def all_schools
+ apply_schools = ApplyAddSchools.where("status != 1")
+ apply_school_ids = apply_schools.empty? ? "(-1)" : "(" + apply_schools.map{|sc| sc.school_id}.join(',') + ")"
+ if !params[:search].nil?
+ search = "%#{params[:search].to_s.strip.downcase}%"
+ @schools = School.where("id not in #{apply_school_ids} and #{School.table_name}.name like :p",:p=>search)
+ #@schools = School.all
+ else
+ #@course = @user.courses.where("is_delete = 0 and #{Course.table_name}.id != #{homework.course_id}").select { |course| @user.allowed_to?(:as_teacher,course)}
+ @schools = School.where("id not in #{apply_school_ids}")
+ end
+ @edit_id = params[:school_id]
+ @search = params[:search]
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ # 删除申请的高校
+ # REDO: destroy关联删除
+ # REDO: 删除确认提示,是否删除
+ # REDO: 给申请人发送消息
+ def delete_applied_schools
+ applied_school = ApplyAddSchools.find(params[:id])
+ applied_school.update_attribute(:status, 3)
+ AppliedMessage.create(:user_id => applied_school.user_id, :status => 3, :viewed => true, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
+ users = UserExtensions.where("school_id = #{applied_school.school_id}")
+ users.each do |user|
+ user.update_column("school_id", nil)
+ end
+ applied_school.school.destroy
+ if params[:tip] == "unapplied"
+ redirect_to unapplied_schools_url
+ elsif params[:tip] == "applied"
+ redirect_to applied_schools_url
+ end
+ end
+
#移动端版本管理
def mobile_version
@versions = PhoneAppVersion.reorder('created_at desc')
diff --git a/app/controllers/applied_project_controller.rb b/app/controllers/applied_project_controller.rb
index b9824976b..883fd1c68 100644
--- a/app/controllers/applied_project_controller.rb
+++ b/app/controllers/applied_project_controller.rb
@@ -1,44 +1,72 @@
class AppliedProjectController < ApplicationController
-
+ helper :watchers
#申请加入项目
def applied_join_project
- @user_id = params[:user_id]
- @project = Project.find_by_id(params[:project_id])
- if params[:project_join]
- if @project
- user = User.find @user_id
- if user.member_of?(@project)
- @status = 3
- else
- @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
- if @applieds.count == 0
- appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
- Mailer.run.applied_project(appliedproject)
- @status = 2
- else
- @status = 1
- end
- end
- else
- @status = 0
- end
- respond_to do |format|
- format.js
- end
- return
+ if params[:object_id]
+ @project = Project.find_by_id(params[:object_id])
end
+ # @user_id = params[:user_id]
+ # if params[:project_join]
+ # if @project
+ # user = User.find @user_id
+ # if user.member_of?(@project)
+ # @status = 3
+ # else
+ # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
+ # if @applieds.count == 0
+ # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
+ # Mailer.run.applied_project(appliedproject)
+ # @status = 2
+ # else
+ # @status = 1
+ # end
+ # end
+ # else
+ # @status = 0
+ # end
+ # respond_to do |format|
+ # format.js
+ # end
+ # return
+ # end
+ #
+ # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
+ # if @applieds.count == 0
+ # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
+ # Mailer.run.applied_project(appliedproject)
+ # end
+ #
+ # #redirect_to project_path(params[:project_id])
+ # #redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
+ # respond_to do |format|
+ # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
+ # format.js { render :partial => 'set_applied'}
+ # end
+ end
- @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
- if @applieds.count == 0
- appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
- Mailer.run.applied_project(appliedproject)
+ # @flage:提示语标志(1:邀请码错误;2:已经是项目成员; 3:角色没有选择; 4:申请成功)
+ # role:成员角色 => 0(4:管理人员;5:开发人员;6:报告人员)
+ # 申请成功则发送消息
+ def applied_project_info
+ if params[:project_id].nil?
+ @project = Project.where(:invite_code => params[:invite_code]).first
+ else
+ @project = Project.find(params[:project_id])
end
-
- #redirect_to project_path(params[:project_id])
- #redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
- respond_to do |format|
- format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
- format.js { render :partial => 'set_applied'}
+ if !@project || params[:invite_code].to_s != @project.invite_code
+ @flag = 1
+ elsif User.current.member_of?(@project)
+ @flag = 2
+ elsif params[:member].nil?
+ @flag = 3
+ elsif !AppliedProject.where(:project_id => @project.id, :user_id => User.current.id).first.nil?
+ @flag = 5
+ else
+ @flag = 4
+ role = params[:member] == "member_manager" ? 3 : (params[:member] == "member_developer" ? 4 :5)
+ applied_project = AppliedProject.create(:user_id => User.current.id, :project_id => @project.id, :role => role)
+ # 申请成功则给项目管理员发送邮件及发送消息
+ # Mailer.run.applied_project(applied_project)
end
end
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 21dac6ada..2614b6271 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -23,7 +23,7 @@ class CoursesController < ApplicationController
before_filter :can_show_course, :except => []
before_filter :logged_user_by_apptoken,:only => [:show,:feedback]
- before_filter :find_course, :except => [ :index, :search, :new,:join,:unjoin, :create, :new_join, :course,:join_private_courses]
+ before_filter :find_course, :except => [ :index, :search, :new,:join,:unjoin, :create, :new_join, :course,:join_private_courses, :join_course_multi_role]
before_filter :authorize_course, :only => [:show, :settings, :update, :course]
before_filter :authorize_course_global, :only => [:new,:create]
before_filter :toggleCourse, :only => [:finishcourse, :restartcourse]
@@ -81,6 +81,22 @@ class CoursesController < ApplicationController
end
+ def join_course_multi_role
+ if User.current.logged?
+ cs = CoursesService.new
+ @user = User.current
+ join = cs.join_course_roles params,@user
+ @state = join[:state]
+ @course = join[:course]
+ else
+ @state = 5 #未登录
+ end
+ @object_id = @course.id if @course
+ respond_to do |format|
+ format.js
+ end
+ end
+
def unjoin
if User.current.logged?
cs = CoursesService.new
@@ -636,8 +652,11 @@ class CoursesController < ApplicationController
end
if @course
#发送微信消息
- ss = SyllabusesService.new
- ss.send_wechat_create_class_notice User.current,@course
+ count = ShieldWechatMessage.where("container_type='User' and container_id=#{User.current.id} and shield_type='Course' and shield_id=#{@course.id}").count
+ if count == 0
+ ss = SyllabusesService.new
+ ss.send_wechat_create_class_notice User.current,@course
+ end
respond_to do |format|
flash[:notice] = l(:notice_successful_create)
format.html {redirect_to course_url(@course)}
@@ -1133,6 +1152,21 @@ class CoursesController < ApplicationController
end
end
+ #切换身份
+ def switch_role
+ members = @course.members.where("user_id = #{params[:user_id]}")
+ unless members.blank?
+ #role = MemberRole.where("member_id = #{members.first.id} and role_id = #{params[:role]}").first
+ curr_role = MemberRole.find_by_member_id_and_role_id(members.first.id, params[:curr_role])
+ tar_role = MemberRole.find_by_member_id_and_role_id(members.first.id, params[:tar_role])
+ unless (curr_role.nil? || tar_role.nil?)
+ curr_role.update_column('is_current', 0)
+ tar_role.update_column('is_current', 1)
+ end
+ end
+ redirect_to course_path(@course)
+ end
+
private
def update_quotes attachment
if attachment.copy_from
diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb
index 4dc2c52f5..0a76cfb78 100644
--- a/app/controllers/members_controller.rb
+++ b/app/controllers/members_controller.rb
@@ -17,10 +17,11 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class MembersController < ApplicationController
+ helper :users
model_object Member
- before_filter :find_model_object, :except => [:index, :create, :autocomplete]
+ before_filter :find_model_object, :except => [:index, :create, :autocomplete, :allow_to_join_project, :refused_allow_to_join_project]
#before_filter :find_model_object_contest, :except => [:index, :create, :autocomplete]
- before_filter :find_project_from_association, :except => [:index, :create, :autocomplete]
+ before_filter :find_project_from_association, :except => [:index, :create, :autocomplete, :allow_to_join_project, :refused_allow_to_join_project]
before_filter :find_project_by_project_id, :only => [:index, :create, :autocomplete]
before_filter :authorize
accept_api_auth :index, :show, :create, :update, :destroy
@@ -49,6 +50,62 @@ class MembersController < ApplicationController
end
end
+ # 同意消息中申请加入项目
+ # 之所以role不在参数中传送是考虑到安全问题
+ # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:决绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息)
+ def allow_to_join_project
+ @applied_message = AppliedMessage.find(params[:applied_message_id])
+ applied_project = @applied_message.applied
+ user = User.find(@applied_message.applied_user_id)
+ project = Project.find(applied_project.project_id)
+ if user.member_of?(project)
+ @flash_message = "您已经是项目成员了"
+ @applied_message.update_attribute(:status, 2)
+ else
+ ap_role = applied_project.try(:role)
+ if ap_role
+ begin
+ members = []
+ user_grades = []
+ project_info = []
+ members << Member.new(:role_ids => ["#{ap_role}"], :user_id => @applied_message.applied_user_id)
+ user_grades << UserGrade.new(:user_id => @applied_message.applied_user_id, :project_id => project.id)
+ role = Role.find(ap_role)
+ project_info << ProjectInfo.new(:project_id => project.id, :user_id => @applied_message.applied_user_id) if role.allowed_to?(:is_manager)
+ project.members << members
+ project.project_infos << project_info
+ project.user_grades << user_grades unless user_grades.first.user_id.nil?
+ @applied_message.update_attribute(:status, 2)
+ # 添加成功后,申请人收到消息
+ AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,
+ :status => 6, :viewed => true, :applied_user_id => @applied_message.user_id, :role => applied_project.role, :project_id => applied_project.project_id)
+ # 添加成功后,批准人收到消息
+ AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,
+ :status => 7, :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
+ rescue Exception => e
+ puts e
+ end
+ end
+ end
+ end
+
+ # 同意消息中拒绝加入项目
+ # params[:user_id]为申请者ID
+ # params[:send_id]为拒绝人ID
+ # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:拒绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息)
+ def refused_allow_to_join_project
+ @applied_message = AppliedMessage.find(params[:applied_message_id])
+ @applied_message.update_attribute(:status, 3)
+ applied_project = @applied_message.applied
+ # 发送消息给被拒者,user_id对应的收到信息的用户
+ AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 4,
+ :viewed => true, :applied_user_id => @applied_message.user_id, :role => applied_project.role, :project_id => applied_project.project_id)
+ # 发送消息给拒绝者
+ AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 5,
+ :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
+ applied_project.delete
+ end
+
def create
if params[:refusal_button]
members = []
@@ -154,9 +211,11 @@ class MembersController < ApplicationController
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
- role = Role.find_by_id(params[:membership][:role_ids])
+
+ role_ids = attrs.delete(:role_ids)
+ #role = Role.find(params[:membership][:role_ids])
# 这里的判断只能通过角色名,可以弄成常量
- if role && (role.name == "学生" || role.name == "Student")
+ if role_ids && role_ids.include?("10")
StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id)
end
@@ -252,7 +311,10 @@ class MembersController < ApplicationController
if (params[:membership][:role_ids])
role = Role.find(params[:membership][:role_ids][0])
# 这里的判断只能通过角色名,可以弄成常量
- if role.name == "学生" || role.name == "Student"
+ attrs = params[:membership].dup
+ role_ids = attrs.delete(:role_ids)
+
+ if role_ids && role_ids.include?("10")
StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id)
else
joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id)
@@ -313,6 +375,11 @@ class MembersController < ApplicationController
grade.destroy
end
end
+ # 移出的时候删除申请消息,不需要删除消息,所以不必要关联删除
+ applied_projects = AppliedProject.where(:project_id => @project.id, :user_id => @member.user_id).first
+ unless applied_projects.nil?
+ applied_projects.delete
+ end
#移出项目发送消息
ForgeMessage.create(:user_id => @member.user_id, :project_id => @project.id, :forge_message_type => "RemoveFromProject", :viewed => false, :forge_message_id => User.current.id)
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index d8c174bc3..5dcf493ee 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -238,6 +238,10 @@ class ProjectsController < ApplicationController
#end
@project.members << m
@project.project_infos << project_info
+
+ p = Project.find("#{@project.id}")
+ ps = ProjectsService.new
+ ps.send_wechat_create_project_notice User.current,p
#end
respond_to do |format|
format.html {
@@ -788,6 +792,11 @@ class ProjectsController < ApplicationController
members = Member.where(:user_id => User.current.id, :project_id=>params[:id]).first
if members != nil && members.roles.first.to_s != "Manager"
members.destroy
+ # 移出的时候删除申请消息,不需要删除消息,所以不必要关联删除
+ applied_projects = AppliedProject.where(:project_id => @project.id, :user_id => members.user_id).first
+ unless applied_projects.nil?
+ applied_projects.delete
+ end
end
respond_to do |format|
format.js
diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb
index 80c5a2468..c9873ade4 100644
--- a/app/controllers/quality_analysis_controller.rb
+++ b/app/controllers/quality_analysis_controller.rb
@@ -37,7 +37,7 @@ class QualityAnalysisController < ApplicationController
quality_an.delete unless quality_an.blank?
end
# Checks if the given job exists in Jenkins.
- unless @client.job.exists?(job_name)
+ # unless @client.job.exists?(job_name)
@g = Gitlab.client
branch = params[:branch]
language = swith_language_type(params[:language])
@@ -111,7 +111,7 @@ class QualityAnalysisController < ApplicationController
end
end
end
- end
+ # end
rescue => e
@message = e.message
end
diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb
index dab752afb..76d149f94 100644
--- a/app/controllers/school_controller.rb
+++ b/app/controllers/school_controller.rb
@@ -169,6 +169,7 @@ class SchoolController < ApplicationController
school = School.new
school.name = params[:name].strip
school.pinyin = Pinyin.t(params[:name].strip, splitter: '')
+ school.province = params[:province]
#status 0未处理 1通过 2拒绝
applyschool = ApplyAddSchools.new
@@ -180,9 +181,18 @@ class SchoolController < ApplicationController
applyschool.city = params[:city]
applyschool.address = params[:address]
applyschool.remarks = params[:remarks]
-
+ applyschool.user_id = User.current.id
if applyschool.save
data[:school_id] = school.id
+ user_extention= User.current.extensions
+ user_extention.school_id = school.id
+ user_extention.save!
+
+ # status=4 向管理员发送信息
+ users = User.where(:admin => 1)
+ users.each do |user|
+ AppliedMessage.create(:user_id => user.id, :status => 4, :applied_user_id => User.current.id, :viewed => true, :applied_id => school.id, :applied_type => "ApplyAddSchools", :name => school.name )
+ end
else
data[:result] = 3
end
@@ -203,6 +213,72 @@ class SchoolController < ApplicationController
end
end
+
render :json =>status
end
+
+ def edit_apply_name
+ name = params[:name] || ""
+ status = -1
+
+ if name != ""
+ applyschool = ApplyAddSchools.where("id=?",params[:id]).first
+
+ applyschool.name = name.strip
+
+ if applyschool.school
+ applyschool.school.name = name
+ applyschool.school.pinyin = Pinyin.t(name.strip, splitter: '')
+ applyschool.school.save!
+ end
+ applyschool.save!
+ status = 0
+ end
+
+ render :json=>{:status=>status,:id=>params[:id],:name=>name}
+ end
+
+ def edit_apply_address
+ address = params[:address] || ""
+
+ status = -1
+
+ if address != ""
+ applyschool = ApplyAddSchools.where("id=?",params[:id]).first
+ applyschool.address = address
+ applyschool.save!
+ status = 0
+ end
+
+ render :json=>{:status=>status,:id=>params[:id],:address=>address}
+ end
+
+ def edit_apply_province
+ province = params[:province] || ""
+ city = params[:city] || ""
+ status = -1
+
+ if(province != "") &&(city != "")
+ applyschool = ApplyAddSchools.where("id=?",params[:id]).first
+ applyschool.province = province
+ applyschool.city = city
+
+ if applyschool.school
+ applyschool.school.province = province
+ applyschool.school.save!
+ end
+ applyschool.save!
+
+ if applyschool.user_id && applyschool.user_id != 0
+ user = User.find(applyschool.user_id)
+ user_extention= user.extensions
+ user_extention.location = province
+ user_extention.location_city = city
+ user_extention.save!
+ end
+ status = 0
+ end
+
+ render :json=>{:status=>status,:id=>params[:id],:province=>province,:city=>city}
+ end
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 5e968e854..2f1d6a4db 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -41,7 +41,7 @@ class UsersController < ApplicationController
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,:user_resource,
:user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction,
- :user_import_homeworks,:user_search_homeworks,:user_import_resource, :user_system_messages,:choose_user_course,:user_courselist,:user_projectlist]
+ :user_import_homeworks,:user_search_homeworks,:user_import_resource, :user_system_messages,:choose_user_course,:user_courselist,:user_projectlist,:sort_syllabus_list]
before_filter :auth_user_extension, only: :show
#before_filter :rest_user_score, only: :show
#before_filter :select_entry, only: :user_projects
@@ -133,6 +133,7 @@ class UsersController < ApplicationController
@user_activity_id = params[:user_activity_id]
@activity_id = params[:activity_id]
@homepage = params[:homepage]
+ @user_id = params[:user_id]
@type = 'BlogComment'
when 'OrgDocumentComment'
@reply = OrgDocumentComment.find params[:reply_id]
@@ -149,6 +150,9 @@ class UsersController < ApplicationController
@user_activity_id = params[:user_activity_id]
@activity_id = params[:activity_id]
@type = 'Issue'
+ when 'Syllabus'
+ @reply = JournalsForMessage.find params[:reply_id]
+ @type = 'Syllabus'
end
respond_to do |format|
format.js
@@ -351,15 +355,21 @@ class UsersController < ApplicationController
case params[:agree]
when 'Y'
apply_user = User.find(@msg.course_message_id)
-
+ ids = @msg.content.split(",") # [@msg.content] msg content保存的是申请的职位角色
+ integer_ids = []
+ ids.each do |role_id|
+ integer_ids << role_id.to_i
+ end
if apply_user.member_of_course?(Course.find(@msg.course_id))
#将角色改为老师或者教辅
member = Course.find(@msg.course_id).members.where(:user_id=>apply_user.id).all[0]
- member.role_ids = [@msg.content] # msg content保存的是申请的职位角色
- #删除为学生的记录
- joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id)
- joined.each do |join|
- join.delete
+ member.role_ids = integer_ids
+ #删除为学生的记录
+ unless member.role_ids.include?(10)
+ joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id)
+ joined.each do |join|
+ join.delete
+ end
end
member.course_group_id = 0
@@ -368,7 +378,7 @@ class UsersController < ApplicationController
@msg.update_attributes(:status=>1,:viewed=>1)
else
members = []
- members << Member.new(:role_ids => [@msg.content.to_i], :user_id => @msg.course_message_id)
+ members << Member.new(:role_ids => integer_ids, :user_id => @msg.course_message_id)
Course.find(@msg.course_id).members << members
CourseMessage.create(:user_id => @msg.course_message_id, :course_id => @msg.course_id, :viewed => false,:content=> @msg.content,:course_message_id=>User.current.id,:content=>@msg.content,:course_message_type=>'CourseRequestDealResult',:status=>1)
@msg.update_attributes(:status=>1,:viewed=>1)
@@ -3225,7 +3235,35 @@ class UsersController < ApplicationController
end
def user_courselist
- @order, @c_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1
+ @order, @c_sort, @type, @list_type = 1, 2, 1, 1
+
+ @my_syllabuses = @user.syllabuses
+
+ sy_courses = @user.courses.visible.where("is_delete =? and tea_id != ?", 0, @user.id)
+ syllabus_ids = sy_courses.empty? ? '(-1)' : "(" + sy_courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
+ @join_syllabuses = Syllabus.where("id in #{syllabus_ids} and user_id != #{@user.id}")
+
+ @my_syllabuses = syllabus_course_list_sort @my_syllabuses
+ @join_syllabuses = syllabus_course_list_sort @join_syllabuses
+ @my_syllabuses = @my_syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]}
+ @join_syllabuses = @join_syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]}
+
+ #分页
+ # @limit = 10
+ # @is_remote = true
+ # @atta_count = @syllabus.count
+ # @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
+ # @offset ||= @atta_pages.offset
+ # @syllabus = paginateHelper @syllabus,@limit
+
+ respond_to do |format|
+ format.html {render :layout => 'new_base_user'}
+ end
+ end
+
+ #课程列表的排序
+ def sort_syllabus_list
+ @order, @c_sort, @type, @list_type = params[:order] || 1, params[:sort] || 1, params[:type] || 1, params[:list_type] || 1
#确定 sort_type
if @order.to_i == @type.to_i
@@ -3235,40 +3273,48 @@ class UsersController < ApplicationController
end
sort_name = "updated_at"
- sort_type = @c_sort == 1 ? "asc" : "desc"
- @courses = @user.courses.visible.where("is_delete =?", 0)
- syllabus_ids = @courses.empty? ? '(-1)' : "(" + @courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
- @syllabus = Syllabus.where("id in #{syllabus_ids} or user_id = #{User.current.id}").order("#{sort_name} #{sort_type}")
+ if @list_type.to_i == 1
+ @syllabuses = @user.syllabuses.order("updated_at desc")
+ else
+ sy_courses = @user.courses.visible.where("is_delete =? and tea_id != ?", 0, @user.id)
+ syllabus_ids = sy_courses.empty? ? '(-1)' : "(" + sy_courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
+ @syllabuses = Syllabus.where("id in #{syllabus_ids} and user_id != #{@user.id}").order("updated_at desc")
+ end
- #根据 作业+资源数排序
- if @order.to_i == 2
+ if @order.to_i == 1 #根据 班级更新时间排序
+ @syllabuses = syllabus_course_list_sort @syllabuses
+ @c_sort == 1 ? (@syllabuses = @syllabuses.sort{|x,y| x[:last_update] <=> y[:last_update] }) : (@syllabuses = @syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]})
+ @type = 1
+ elsif @order.to_i == 2 #根据 作业+资源数排序
@type = 2
- @syllabus.each do |syllabus|
+ @syllabuses.each do |syllabus|
count = 0
- courses = @courses.where("syllabus_id = #{syllabus.id}")
+ courses = syllabus.courses.not_deleted
courses.each do |c|
count += (User.current.admin? || User.current.allowed_to?(:as_teacher,c)) ? (c.homework_commons.count + visable_attachemnts_incourse(c).count) : (c.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(c).count)
end
syllabus[:infocount] = count
end
- @c_sort == 1 ? (@syllabus = @syllabus.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@syllabus = @syllabus.sort{|x,y| y[:infocount] <=> x[:infocount]})
- @syllabus = sortby_time_countcommon_nosticky @syllabus,sort_name
+ @c_sort == 1 ? (@syllabuses = @syllabuses.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@syllabuses = @syllabuses.sort{|x,y| y[:infocount] <=> x[:infocount]})
+ @syllabuses = sortby_time_countcommon_nosticky @syllabuses,sort_name
else
@type = 1
end
- #分页
- @limit = 10
- @is_remote = true
- @atta_count = @syllabus.count
- @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
- @offset ||= @atta_pages.offset
- @syllabus = paginateHelper @syllabus,@limit
-
respond_to do |format|
format.js
- format.html {render :layout => 'new_base_user'}
+ end
+ end
+
+ #展开课程下的班级
+ def expand_courses
+ @syllabus = Syllabus.where("id = #{params[:syllabus_id]}").first
+ unless @syllabus.nil?
+ @courses = @syllabus.courses.not_deleted.select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS updatetime").order("updatetime desc")
+ respond_to do |format|
+ format.js
+ end
end
end
@@ -3342,6 +3388,8 @@ class UsersController < ApplicationController
when 'Syllabus'
obj = Syllabus.where('id = ?', params[:id].to_i).first
@journals = obj.journals_for_messages.reorder("created_on desc")
+ @type = 'Syllabus'
+ @user_activity_id = params[:div_id].to_i if params[:div_id]
when 'JournalsForMessage'
obj = JournalsForMessage.where('id = ?', params[:id].to_i).first
journals = []
@@ -3358,6 +3406,7 @@ class UsersController < ApplicationController
@user_activity_id = params[:div_id].to_i if params[:div_id]
@homepage = params[:homepage].to_i
@type = 'BlogComment'
+ @user_id = obj.author_id
comments = []
@journals = get_all_children(comments, obj)
when 'HomeworkCommon'
diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb
index 6b1e3010d..23a443925 100644
--- a/app/controllers/wechats_controller.rb
+++ b/app/controllers/wechats_controller.rb
@@ -8,10 +8,12 @@ class WechatsController < ActionController::Base
# default text responder when no other match
on :text do |request, content|
#邀请码
- if join_request(request)
+ if join_class_request(request)
sendBindClass(request, {invite_code: content})
+ # elsif join_project_request(request)
+ # sendBindProject(request, {invite_code: content})
else
- request.reply.text '您的意见已收到,感谢您的反馈!'
+ request.reply.text "您的意见已收到,非常感谢~ \n更多问题可以通过以下方式联系我们:\n官方QQ群:173184401\n我们会认真聆听您的意见和建议。"
end
end
@@ -143,11 +145,17 @@ class WechatsController < ActionController::Base
end
on :click, with: 'PROJECT' do |request, key|
- request.reply.text "此功能正在开发中,很快就会上线,谢谢!"
+ request.reply.text "该功能将在近日开放,敬请期待!"
end
on :click, with: 'JOIN_PROJECT' do |request, key|
- request.reply.text "此功能正在开发中,很快就会上线,谢谢!"
+ request.reply.text "该功能将在近日开放,敬请期待!"
+ # uw = user_binded?(request[:FromUserName])
+ # unless uw
+ # sendBind(request)
+ # else
+ # request.reply.text "请直接回复6位项目邀请码\n(不区分大小写):"
+ # end
end
on :click, with: 'JOIN_CLASS' do |request, key|
@@ -159,12 +167,18 @@ class WechatsController < ActionController::Base
end
end
- def join_request(request)
+ def join_class_request(request)
openid = request[:FromUserName]
wl = WechatLog.where("openid = '#{openid}' and request_raw like '%\"Event\":\"click\"%'").order('id desc').first
wl && JSON(wl.request_raw)["EventKey"] == 'JOIN_CLASS'
end
+ def join_project_request(request)
+ openid = request[:FromUserName]
+ wl = WechatLog.where("openid = '#{openid}' and request_raw like '%\"Event\":\"click\"%'").order('id desc').first
+ wl && JSON(wl.request_raw)["EventKey"] == 'JOIN_PROJECT'
+ end
+
def sendBindClass(request, params)
begin
uw = user_binded?(request[:FromUserName])
@@ -180,6 +194,21 @@ class WechatsController < ActionController::Base
end
end
+ def sendBindProject(request, params)
+ begin
+ uw = user_binded?(request[:FromUserName])
+ if !uw
+ return sendBind(request)
+ else
+ return join_project(params, uw.user, request)
+ end
+ rescue => e
+ logger.error e.inspect
+ logger.error e.backtrace.join("\n")
+ return request.reply.text e
+ end
+ end
+
def default_msg(request)
uw = user_binded?(request[:FromUserName])
if uw && uw.user
@@ -234,6 +263,36 @@ class WechatsController < ActionController::Base
end
+ def join_project(params, user, request)
+ project = nil
+ project = Project.where(qrcode: params[:ticket]).first if params[:ticket]
+ project = Project.where(invite_code: params[:invite_code]).first if params[:invite_code]
+ raise "项目不存在,请确认您的邀请码是否输入正确,谢谢!" unless project
+
+ #取出用户角色类型
+ role = 5
+
+ ps = ProjectsService.new
+ status = ps.join_project({invite_code: project.invite_code}, user)
+ if status[:state] != 0
+ raise ProjectService::JoinProjectError.message(status)
+ end
+
+ creator = User.find(project.user_id)
+
+ news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入项目,开始研发吧!',
+ content: "项目名称:#{project.name}\n发起人:#{creator.name}\n进入项目,和小伙伴轻松的研发吧!"} }
+ return request.reply.news(news) do |article, n, index| # article is return object
+ url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities#/project?id='+project.id.to_s}&response_type=code&scope=snsapi_base&state=myproject#wechat_redirect"
+ pic_url = "#{ROOT_URL}/images/wechat/class.jpg"
+ article.item title: "#{n[:title]}",
+ description: n[:content],
+ pic_url: pic_url,
+ url: url
+ end
+
+ end
+
### controller method
module Controllers
def get_bind
@@ -288,8 +347,7 @@ class WechatsController < ActionController::Base
session[:wechat_code] = params[:code] if params[:code]
openid = get_openid_from_code(params[:code])
@wechat_user = user_binded?(openid)
-
- render 'wechats/login', layout: 'base_wechat'
+ render 'wechats/user_activities', layout: nil
end
def user_activities
@@ -299,13 +357,20 @@ class WechatsController < ActionController::Base
unless open_id
render 'wechats/open_wechat', layout: nil and return
end
- if params[:state] == 'myclass'
- @course_id = params[:id];
- end
+
+ unless user_binded?(open_id)
+ @path = '/login'
+ else
+ if params[:state] == 'myclass'
+ @course_id = params[:id];
+ elsif params[:state] == 'myproject'
+ @project_id = params[:id];
+ end
- session[:wechat_openid] = open_id
- if params[:code]
- redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return
+ session[:wechat_openid] = open_id
+ if params[:code]
+ redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return
+ end
end
render 'wechats/user_activities', layout: nil
end
diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb
index 828739cc4..499272706 100644
--- a/app/controllers/words_controller.rb
+++ b/app/controllers/words_controller.rb
@@ -112,6 +112,10 @@ class WordsController < ApplicationController
end
@is_in_course = params[:is_in_course].to_i
@course_activity = params[:course_activity].to_i
+ elsif @journal_destroyed.jour_type == 'Syllabus'
+ @syllabus = Syllabus.find @journal_destroyed.jour_id
+ @count = @syllabus.journals_for_messages.count
+ @comments = @syllabus.journals_for_messages.reorder("created_on desc").limit(3)
end
respond_to do |format|
format.js
@@ -352,6 +356,35 @@ class WordsController < ApplicationController
render_403
end
end
+
+ #课程大纲的二级回复
+ def reply_to_syllabus
+ if User.current.logged?
+ @user = User.current
+ reply = JournalsForMessage.find params[:id].to_i
+ @syllabus = Syllabus.find reply.jour_id
+ if params[:reply_message].size>0 && User.current.logged? && @user
+ options = {:notes => params[:reply_message], :reply_id => reply.user_id,:user_id => @user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i}
+ feedback = Syllabus.add_syllabus_jour(@user, params[:reply_message], reply.jour_id, options)
+ if (feedback.errors.empty?)
+ if params[:asset_id]
+ ids = params[:asset_id].split(',')
+ update_kindeditor_assets_owner ids,feedback[:id],OwnerTypeHelper::JOURNALSFORMESSAGE
+ end
+ @syllabus.update_column('updated_at', Time.now)
+ @count = @syllabus.journals_for_messages.count
+ @comments = @syllabus.journals_for_messages.reorder("created_on desc").limit(3)
+ respond_to do |format|
+ format.js
+ end
+ else
+ flash[:error] = feedback.errors.full_messages[0]
+ end
+ end
+ else
+ render_403
+ end
+ end
def add_brief_introdution
user = User.current
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index e1dda3554..b3e946f95 100644
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -274,14 +274,19 @@ module CoursesHelper
#searchPeopleByRoles(project, TeacherRoles)
members = []
project.members.includes(:user).each do |m|
- members << m if m && m.user && m.user.allowed_to?(:as_teacher,project)
+ #members << m if m && m.user && m.user.allowed_to?(:as_teacher,project)
+ members << m if m && m.user && m.user.has_teacher_role(project)
end
members
end
def TeacherAndAssistantCount course
- students_count = course.student.count
- number = course.members.count - students_count
+ #students_count = course.student.count
+ #number = course.members.count - students_count
+ member_ids = course.members.includes(:user).blank? ? "(-1)" : "(" + course.members.includes(:user).map { |mem| mem.id}.join(",") + ")"
+ role_ids = "(3, 7, 9)"
+ number = MemberRole.where("member_id in #{member_ids} and role_id in #{role_ids}").count
+ #number = (searchTeacherAndAssistant course).count
end
def search_student_in_group(project, course_group_id)
@@ -789,7 +794,7 @@ module CoursesHelper
if user.logged?
joined = course.members.includes(:user).map{|member| member.user_id}.include? user.id
text = joined ? l(:label_course_exit_student) : l(:label_course_join_student)
- url = joined ? join_path(:object_id => course.id) : try_join_path(:object_id => course.id)
+ url = joined ? join_path(:object_id => course.id) : join_private_courses_courses_path()
method = joined ? 'delete' : 'post'
if joined
link = link_to(text, url, :remote => true, :method => method, :class => "sy_btn_grey fl", :id => "#{course.id}", :confirm => l(:text_are_you_sure_out))
@@ -831,6 +836,10 @@ module CoursesHelper
result = l(:label_student)
elsif role == "Manager"
result = l(:field_admin)
+ elsif role.include?("TeachingAsistant") && role.include?("Student")
+ result = l(:label_TA) + " " + l(:label_student)
+ elsif role.include?("Teacher") && role.include?("Student")
+ result = l(:label_teacher) + " " + l(:label_student)
end
result
end
@@ -914,5 +923,15 @@ module CoursesHelper
resource_num*5 + journal_num + homework_journal_num ) desc limit 3;")
end
+ #用户在该课程是否具有某个角色
+ def get_user_member_roles_course course, user, role
+ members = course.members.where("user_id = #{user.id}")
+ result = false
+ unless members.blank?
+ m_roles = MemberRole.where("member_id = #{members.first.id} and role_id = #{role}")
+ end
+ result = !m_roles.blank?
+ result
+ end
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 98b993183..91743289a 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -54,6 +54,44 @@ module UsersHelper
end
end
+ # 获取消息角色
+ def applied_project_message_type role
+ case role
+ when 3
+ "管理员"
+ when 4
+ "开发人员"
+ when 5
+ "报告人员"
+ end
+ end
+
+ # 判断当前用户能否对消息进行操作
+ def allow_to_show applied_message
+ (User.current.id == applied_message.user_id && applied_message.status == 1) ? true : false
+ end
+
+ # 项目申请消息通过状态判断用户
+ # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:拒绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息)
+ def applied_project_users applied_message
+ # case applied_message.status
+ # when 3,2,1,5,4,7,6
+ user = User.find(applied_message.applied_user_id)
+ # end
+ end
+
+ # 项目申请消息通过状态判断tip描述
+ def applied_project_tip applied_message
+ case applied_message.status
+ when 4
+ "拒绝申请加入项目:"
+ when 5,3,2,1,7
+ "申请加入项目:"
+ when 6
+ "同意申请加入项目"
+ end
+ end
+
def get_resource_origin attach
type = attach.container_type
content = attach.container
@@ -690,4 +728,18 @@ module UsersHelper
end
result_ids
end
+
+ #课程的班级列表最近更新时间
+ def syllabus_course_list_sort syllabuses
+ syllabuses.each do |sy|
+ updated_at = sy.updated_at
+ courses = sy.courses.not_deleted
+ unless courses.empty?
+ course_ids = "(" + courses.map { |course| course.id}.join(",") + ")"
+ updated_at = CourseActivity.where("course_id in #{course_ids}").order("updated_at desc").first.updated_at
+ end
+ sy[:last_update] = updated_at
+ end
+ syllabuses
+ end
end
diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb
index 52f2ea119..d846071b5 100644
--- a/app/helpers/watchers_helper.rb
+++ b/app/helpers/watchers_helper.rb
@@ -364,22 +364,29 @@ module WatchersHelper
:class => "pr_join_a" ,:id=>id
end
- #申请加入项目
+ # 申请加入项目
def join_in_project_link(project, user, options=[])
- return '' unless user && user.logged?
applied = project.applied_projects.find_by_user_id(user.id)
text = applied ? l(:label_unapply_project) : l(:label_apply_project)
- @applied_flag = project.instance_of?(Project)
+ url = applied_join_project_path(:object_id => project.id)
+ method = 'post'
+ @applied_flag = project.instance_of?(Project)
if applied
- appliedid = applied.id
+ link = "#{text} "
+ else
+ link = link_to(text, url, :remote => true, :method => method, :id => "#{project.id}", :class => "pr_join_a")
end
- id = applied_css(project)
- url = appliedproject_path(
- :id=>appliedid,
- :user_id => user.id,
- :project_id => project.id)
- method = applied ? 'delete' : 'post'
- link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id
+ link.html_safe
+ # if applied
+ # appliedid = applied.id
+ # end
+ # id = applied_css(project)
+ # url = appliedproject_path(
+ # :id=>appliedid,
+ # :user_id => user.id,
+ # :project_id => project.id)
+ # method = applied ? 'delete' : 'post'
+ # link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id
end
def paginateHelper obj, pre_size=20
diff --git a/app/models/applied_message.rb b/app/models/applied_message.rb
new file mode 100644
index 000000000..cbba74f95
--- /dev/null
+++ b/app/models/applied_message.rb
@@ -0,0 +1,22 @@
+class AppliedMessage < ActiveRecord::Base
+ # status: 0表示未批准; status:1表示已批准; status: 2表示已拒绝
+
+ attr_accessible :applied_id, :applied_type, :status, :user_id, :viewed, :applied_user_id, :role, :project_id, :name
+ belongs_to :applied ,:polymorphic => true
+ belongs_to :apply_add_schools
+ belongs_to :user
+ has_many :message_alls, :class_name => 'MessageAll', :as =>:message, :dependent => :destroy
+
+ validates :user_id,presence: true
+ validates :applied_id,presence: true
+ validates :applied_type, presence: true
+ after_create :add_user_message
+
+ # 因为要排序所以需要写入总表
+ def add_user_message
+ if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil?
+ self.message_alls << MessageAll.new(:user_id => self.user_id, :viewed => false)
+ end
+ end
+
+end
diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb
index fb8bf90af..b1945a937 100644
--- a/app/models/applied_project.rb
+++ b/app/models/applied_project.rb
@@ -1,18 +1,16 @@
class AppliedProject < ActiveRecord::Base
- attr_accessible :project_id, :user_id
+ attr_accessible :project_id, :user_id, :role
belongs_to :user
belongs_to :project
- has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy
+ has_many :applied_messages, :class_name => 'AppliedMessage', :as => :applied, :dependent => :destroy
after_create :send_appliled_message
+ # 仅仅给项目管理人员发送消息
def send_appliled_message
- # if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil?
- self.project.members.each do |m|
- if m.roles.first.to_s.include?("Manager")
- self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.project_id, :viewed => false)
- end
+ self.project.managers.each do |member|
+ self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false, :applied_user_id => self.user_id, :role => self.role, :project_id => self.project_id)
end
# end
end
diff --git a/app/models/apply_add_schools.rb b/app/models/apply_add_schools.rb
index efa56e808..573a494ef 100644
--- a/app/models/apply_add_schools.rb
+++ b/app/models/apply_add_schools.rb
@@ -1,4 +1,16 @@
class ApplyAddSchools < ActiveRecord::Base
+ # status:0 未审批 ; 1 已批阅
attr_accessible :address, :city, :name, :province, :remarks, :school_id, :status
+ has_many :applied_messages, :class_name =>'AppliedMessage', :as => :applied
belongs_to :school
+
+ after_create :send_massage
+
+ #给系统所有管理发送消息
+ def send_massage
+ users = User.where(:admin => 1)
+ users.each do |user|
+ self.applied_messages << AppliedMessage.new(:user_id => user.id, :viewed => false, :status => false)
+ end
+ end
end
diff --git a/app/models/member.rb b/app/models/member.rb
index 3cb70a8fe..cb15e067b 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -53,7 +53,15 @@ class Member < ActiveRecord::Base
new_role_ids = ids - role_ids
# Add new roles
- new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) }
+ if new_role_ids.include?(7) && new_role_ids.include?(10)
+ member_roles << MemberRole.new(:role_id => 7)
+ member_roles << MemberRole.new(:role_id => 10, :is_current => 0)
+ elsif new_role_ids.include?(9) && new_role_ids.include?(10)
+ member_roles << MemberRole.new(:role_id => 9)
+ member_roles << MemberRole.new(:role_id => 10, :is_current => 0)
+ else
+ new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) }
+ end
# Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)}
if member_roles_to_destroy.any?
diff --git a/app/models/member_role.rb b/app/models/member_role.rb
index 4d493cb27..799720833 100644
--- a/app/models/member_role.rb
+++ b/app/models/member_role.rb
@@ -16,6 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class MemberRole < ActiveRecord::Base
+ # multi_role 课程中的多重角色 0:单角色/学生,1:管理员&学生,2:教师&学生,3:教辅&学生
belongs_to :member
belongs_to :role
diff --git a/app/models/project.rb b/app/models/project.rb
index bbc639f3d..67f010210 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -165,6 +165,7 @@ class Project < ActiveRecord::Base
scope :has_module, lambda {|mod|
where("#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s)
}
+ scope :not_deleted, lambda{where("status<>9")}
scope :active, lambda { where(:status => STATUS_ACTIVE) }
scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) }
scope :all_public, lambda { where(:is_public => true) }
@@ -268,6 +269,11 @@ class Project < ActiveRecord::Base
notified.collect(&:mail)
end
+ # 返回为member类型数组
+ def managers
+ self.members.includes(:roles).select{|member| member.roles[0].try(:name) == "Manager"}
+ end
+
def initialize(attributes=nil, *args)
super
@@ -904,6 +910,24 @@ class Project < ActiveRecord::Base
User.find(self.user_id)
end
+ # 延迟生成邀请码
+ def invite_code
+ return generate_invite_code
+ end
+
+ # 生成邀请码
+ # 如果已有改邀请码,则重新生成
+ CODES = %W(2 3 4 5 6 7 8 9 A B C D E F G H J K L N M O P Q R S T U V W X Y Z)
+ def generate_invite_code
+ code = read_attribute(:invite_code)
+ if !code || code.size <6
+ code = CODES.sample(6).join
+ return generate_invite_code if Project.where(invite_code: code).present?
+ update_attribute(:invite_code, code)
+ end
+ code
+ end
+
private
def after_parent_changed(parent_was)
diff --git a/app/models/user.rb b/app/models/user.rb
index 996aa9be7..a4b7f3b25 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -42,12 +42,12 @@ class User < Principal
# Different ways of displaying/sorting users
USER_FORMATS = {
:firstname_lastname => {
- :string => '#{firstname} #{lastname}',
+ :string => '#{firstname}#{lastname}',
:order => %w(firstname lastname id),
:setting_order => 1
},
:firstname_lastinitial => {
- :string => '#{firstname} #{lastname.to_s.chars.first}.',
+ :string => '#{firstname}#{lastname.to_s.chars.first}.',
:order => %w(firstname lastname id),
:setting_order => 2
},
@@ -57,7 +57,7 @@ class User < Principal
:setting_order => 3
},
:lastname_firstname => {
- :string => '#{lastname} #{firstname}',
+ :string => '#{lastname}#{firstname}',
:order => %w(lastname firstname id),
:setting_order => 4
},
@@ -369,7 +369,8 @@ class User < Principal
system_messages_count = SystemMessage.where("created_at >?", onclick_time).count
at_count = AtMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
org_count = OrgMessage.where("user_id=? and viewed =? and created_at >?", user.id,0, onclick_time).count
- messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count + org_count
+ applied_count = AppliedMessage.where("user_id=? and viewed =? and created_at >?", user.id, 0, onclick_time).count
+ messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count + org_count + applied_count
end
# 查询指派给我的缺陷记录
@@ -823,7 +824,7 @@ class User < Principal
# Find course membership
membership = coursemembership(course)
if membership
- roles = membership.roles
+ roles = membership.roles.where("is_current = 1")
else
@role_non_member ||= Role.non_member
roles << @role_non_member
@@ -918,6 +919,12 @@ class User < Principal
end
end
+ #是否具有老师角色
+ def has_teacher_role(course)
+ member = course.members.where("user_id = #{self.id}").first
+ role = MemberRole.where("member_id = #{member.id} and role_id in (3, 7, 9)")
+ !role.blank?
+ end
# Return true if the user is allowed to do the specified action on a specific context
# Action can be:
diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb
index d864b6462..ce3157d5f 100644
--- a/app/services/courses_service.rb
+++ b/app/services/courses_service.rb
@@ -89,7 +89,8 @@ class CoursesService
@members = searchTeacherAndAssistant(c)
when '2'
#@subPage_title = l :label_student_list
- @members = searchStudent(c)
+ # @members = searchStudent(c)
+ @members = searchmember_by_name(student_homework_score(0,c.id, 0,"desc"),"")
else
#@subPage_title = ''
@members = c.member_principals.includes(:roles, :principal).all.sort
@@ -104,6 +105,7 @@ class CoursesService
:work_unit => work_unit, :mail => m.user.mail, :location => location,
role_name: m.roles.first.name,
name: m.user.show_name,
+ roles_id: m.roles[0].id,
:brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname}
end
users
@@ -389,6 +391,103 @@ class CoursesService
{:state => @state,:course => course}
end
+ #多个角色加入课程
+ def join_course_roles params,current_user
+ course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code]
+
+ @state = 10
+ if course
+ if course_endTime_timeout? course
+ @state = 2
+ elsif course[:is_delete] == 1
+ @state = 11
+ else
+ if current_user.member_of_course?(course) #如果已经是成员
+ @state = 3
+ # member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0]
+ # role_ids = params[:role]
+ # #roleName = member.roles[0].name if member
+ # #roleName = member.roles.map{|role| role.name}.join(",") if member
+ # if params[:invite_code].present?
+ # #如果加入角色为学生 并且当前是学生
+ # if role_ids == "10" && roleName.include?("Student") && !roleName.include?("Teacher") && !roleName.include?("TeachingAsistant")&& !roleName.include?("Manager")
+ # @state = 3
+ # #如果加入的角色为老师,并且当前已经是老师
+ # elsif role_ids == "9" && roleName.include?("Teacher") && !roleName.include?("Student")
+ # @state = 8
+ # #如果加入的角色教辅并且当前为教辅
+ # elsif role_ids == "7" && roleName.include?("TeachingAsistant") && !roleName.include?("Student")
+ # @state = 9
+ # elsif roleName.include?("Manager")
+ # @state = 10
+ # #如果加入角色为教师或者教辅,并且当前是学生,或者是要成为教辅,当前不是教辅,或者要成为教师,当前不是教师。那么要发送请求
+ # elsif (params[:role] != "10" && roleName == "Student") || (params[:role] == "7" && roleName != "TeachingAsistant" ) || (params[:role] == "9" && roleName != "Teacher" )
+ # #如果已经发送过消息了,那么就要给个提示
+ # if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = #{params[:role]} and course_message_id = #{User.current.id} and course_id = #{course.id} and status = 0 ").count != 0
+ # @state = 7
+ # else
+ # Mailer.run.join_course_request(course, User.current, params[:role])
+ # CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> params[:role],:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest',:status=>0)
+ # @state = 6
+ # end
+ # #如果加入角色是学生,但是是当前课程的教师或者教辅
+ # elsif params[:role] == "10" && roleName != "Student"
+ # member.role_ids = [params[:role]]
+ # member.save
+ # StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id)
+ # @state = 0
+ # end
+ # else
+ # @state = 1
+ # end
+ else
+ if params[:invite_code].present?
+ role_ids = params[:role]
+ role_str = role_ids.join(",")
+ if role_ids.include?("10") && !role_ids.include?("7") && !role_ids.include?("9")
+ members = []
+ members << Member.new(:role_ids => [10], :user_id => current_user.id)
+ course.members << members
+ StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id)
+ @state = 0
+ else
+ is_stu = false
+ if role_ids.include?("10")
+ members = []
+ members << Member.new(:role_ids => [10], :user_id => current_user.id)
+ course.members << members
+ StudentsForCourse.create(:student_id => current_user.id, :course_id =>course.id)
+ is_stu = true
+ end
+ #如果已经发送过消息了,那么就要给个提示
+ if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = '#{role_str}' and course_message_id = #{User.current.id} and course_id = #{course.id} and status = 0").count != 0
+ if is_stu
+ @state = 12
+ else
+ @state = 7
+ end
+ else
+ Mailer.run.join_course_request(course, User.current, params[:role])
+ CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> role_str,:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest',:status=>0)
+ if is_stu
+ @state = 13
+ else
+ @state = 6
+ end
+ end
+ end
+ else
+ @state = 1
+ end
+ end
+ end
+ else
+ @state = 4
+ end
+ {:state => @state,:course => course}
+ end
+
+
#作业列表
#已提交的作业数量获取 bid.homeworks.count
#学生提问数量获取 bid.commit.nil? ? 0 : bid.commit
@@ -954,5 +1053,49 @@ class CoursesService
# student_works[index + 1 .. index + n]
# end
+ #修改班级成员角色
+ def modify_user_course_role params
+ status = -1
+
+ c = Course.find("#{params[:id]}")
+
+ member = c.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first
+
+ if member
+ role = Role.find(params[:role_id])
+
+ member.member_roles[0].role_id = params[:role_id]
+
+ # 这里的判断只能通过角色名,可以弄成常量
+ if params[:role_id] == 10
+ StudentsForCourse.create(:student_id => params[:user_id], :course_id =>params[:id])
+ else
+ joined = StudentsForCourse.where('student_id = ? and course_id = ?', params[:user_id],params[:id])
+ joined.each do |join|
+ join.delete
+ end
+ member.course_group_id = 0
+ end
+ if role.allowed_to?(:is_manager)
+ courseInfo = CourseInfos.new(:user_id => params[:user_id], :course_id => params[:id])
+ courseInfo.save
+ else
+ user_admin = CourseInfos.where("user_id = ? and course_id = ?", params[:user_id], params[:id])
+ if user_admin.size > 0
+ user_admin.each do |user|
+ user.destroy
+ end
+ end
+ end
+
+ Role.givable.all[3..5]
+
+ if member.member_roles[0].save
+ status = 0
+ end
+ end
+ status
+ end
+
end
diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb
new file mode 100644
index 000000000..2441ea9e5
--- /dev/null
+++ b/app/services/projects_service.rb
@@ -0,0 +1,145 @@
+#coding=utf-8
+
+class ProjectsService
+
+ include ApplicationHelper
+
+ #获取指定用户的项目列表
+ def user_projects(user)
+ projects = user.projects.not_deleted.select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updated_at ").order("updated_at desc")
+ projects
+ end
+
+ #显示项目
+ def show_project(params,current_user)
+ project = Project.find(params[:id])
+ # project.generate_invite_code
+ # project.generate_qrcode
+
+ project
+ end
+
+ def send_wechat_create_project_notice user,project
+ count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Project' and shield_id=#{project.id}").count
+ Rails.logger.info "!!!!!!!!!!!!!!!!!!!!!!#{project}"
+ if count == 0
+ ws = WechatService.new
+ title = "恭喜您创建项目成功。"
+ ws.create_project_notice user.id, "create_project_notice", project.id,title, project.name, format_time(project.created_on),"点击查看项目详情。"
+ end
+ end
+
+
+ def createNewProject params,user
+ status = -1
+ issue_custom_fields = IssueCustomField.sorted.all
+ trackers = Tracker.sorted.all
+ project = Project.new
+
+ project[:name] = params[:name]
+ project[:description] = ''
+ project[:is_public] = '0' #公开
+ project[:project_type] = 0
+ project[:project_new_type] = 1
+ project[:identifier] = Project.next_identifier if Setting.sequential_project_identifiers?
+
+ project.organization_id = params[:organization_id]
+ project.user_id = user.id
+
+ # if validate_parent_id && @project.save
+ if project.save
+ p = Project.find("#{project.id}")
+ send_wechat_create_project_notice user,p
+ r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
+ m = Member.new(:user => user, :roles => [r])
+ # project's score
+ if ProjectScore.where("project_id=?", project.id).first.nil?
+ ProjectScore.create(:project_id => project.id, :score => false)
+ end
+ # end
+ project_info = ProjectInfo.new(:user_id => user.id, :project_id => project.id)
+ user_grades = UserGrade.create(:user_id => user.id, :project_id => project.id)
+ project_status = ProjectStatus.create(:project_id => project.id, :watchers_count => 0, :changesets_count => 0, :project_type => project.project_type,:grade => 0)
+ project.members << m
+ project.project_infos << project_info
+ status = 0
+ end
+ status
+ end
+
+ #修改项目成员角色
+ def modify_user_project_role params
+ status = -1
+
+ project = Project.find("#{params[:id]}")
+
+ member = project.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first
+
+ if member
+ member.member_roles[0].role_id = params[:role_id]
+
+
+ role = Role.find(params[:role_id])
+ if role.allowed_to?(:is_manager)
+ projectInfo = ProjectInfo.new(:user_id => member.user_id, :project_id => project.id)
+ projectInfo.save
+ else
+ user_admin = ProjectInfo.where("user_id = ? and project_id = ?", member.user_id, project.id)
+ if user_admin.size > 0
+ user_admin.each do |user|
+ user.destroy
+ end
+ end
+ end
+
+ if member.member_roles[0].save
+ status = 0
+ end
+ end
+ status
+ end
+
+ class JoinProjectError < Errors
+ define_error [
+ 0, '加入成功',
+ 1, '您的邀请码不正确',
+ 2, '您还未登录',
+ 3, '您已经是该项目的管理人员',
+ 4, '您已经是该项目的开发人员',
+ 5, '您已经是该项目的报告人员',
+ 6, '该项目不存在或已被删除啦',
+ '未知错误,请稍后再试'
+ ]
+ end
+
+ def join_project params,current_user
+ status = -1
+ project = project.find_by_invite_code(params[:invite_code]) if params[:invite_code]
+
+ if project
+ if project[:is_delete] == 1
+ status = 6
+ else
+ if current_user.member_of?(project) #如果已经是成员
+ member = project.member_principals.includes(:roles, :principal).where("user_id=?",current_user.id).first
+ status = member.member_roles[0].role_id
+ else
+ if params[:invite_code].present?
+ members = []
+ members << Member.new(:role_ids => [5], :user_id => current_user.id)
+ project.members << members
+ projectInfo = ProjectInfo.new(:user_id => current_user.id, :project_id => project.id)
+ projectInfo.save
+ status = 0
+ else
+ status = 4
+ end
+ end
+ end
+ else
+ status = 4
+ end
+ status
+ end
+
+end
diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb
index 7ac4e99d3..5f52aea49 100644
--- a/app/services/wechat_service.rb
+++ b/app/services/wechat_service.rb
@@ -323,4 +323,41 @@ class WechatService
end
end
+ def create_project_notice(user_id, type, id, first, key1, key2,remark="")
+ uw = UserWechat.where(user_id: user_id).first
+ unless uw.nil?
+ data = {
+ touser:uw.openid,
+ template_id:Wechat.config.create_project_notice,
+ url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/project?id="+id.to_s,
+ topcolor:"#FF0000",
+ data:{
+ first: {
+ value:first,
+ color:"#707070"
+ },
+ keyword1:{
+ value:key1,
+ color:"#707070"
+ },
+ keyword2:{
+ value:key2,
+ color:"#707070"
+ },
+ remark:{
+ value:remark,
+ color:"#707070"
+ }
+ }
+ }
+ #data = three_keys_template uw.openid,Wechat.config.create_class_notice, type, id, first, key1, key2, key3, remark
+ begin
+ req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+ rescue Exception => e
+ Rails.logger.error "[wechat_create_project_notice] ===> #{e}"
+ end
+ Rails.logger.info "send over. #{req}"
+ end
+ end
+
end
\ No newline at end of file
diff --git a/app/views/admin/_all_schools.html.erb b/app/views/admin/_all_schools.html.erb
new file mode 100644
index 000000000..d4cf916f5
--- /dev/null
+++ b/app/views/admin/_all_schools.html.erb
@@ -0,0 +1,55 @@
+<%= stylesheet_link_tag 'css/common','css/popup' %>
+
+
更改为
+
+
+
+
+
+
+
+ <%= render :partial => "admin/update_school_form", :locals => {:schools => schools, :edit_id => edit_id} %>
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/_courselist_detail_tr.html.erb b/app/views/admin/_courselist_detail_tr.html.erb
index 83b7904ce..6bec90845 100644
--- a/app/views/admin/_courselist_detail_tr.html.erb
+++ b/app/views/admin/_courselist_detail_tr.html.erb
@@ -7,7 +7,7 @@
- <%= link_to(course.teacher.show_name.truncate(6, omission: '...'), user_path(course.teacher)) %>
+ <%= link_to(course.teacher.show_name, user_path(course.teacher)) %>
<%= course.class_period %>
diff --git a/app/views/admin/_tab_has_applied_applied.erb b/app/views/admin/_tab_has_applied_applied.erb
new file mode 100644
index 000000000..6ae501b0c
--- /dev/null
+++ b/app/views/admin/_tab_has_applied_applied.erb
@@ -0,0 +1,6 @@
+
+
+ <%= link_to '未审批', {:action => 'applied_schools'}, class: "#{current_page?(unapplied_schools_path)? 'selected' : nil }" %>
+ <%= link_to '已审批', {:action => 'has_applied_schools'}, class: "#{current_page?(applied_schools_path)? 'selected' : nil }" %>
+
+
\ No newline at end of file
diff --git a/app/views/admin/_update_school_form.html.erb b/app/views/admin/_update_school_form.html.erb
new file mode 100644
index 000000000..f006dcdc0
--- /dev/null
+++ b/app/views/admin/_update_school_form.html.erb
@@ -0,0 +1,27 @@
+<%= form_tag admin_edit_applied_schools_path(:applied_id =>edit_id), :id => 'schools_list_form' %>
+
+ <%#= hidden_field_tag(:send_id, edit_id) %>
+
+ <% if !schools.empty? %>
+ <% schools.each do |school| %>
+
+ <% end %>
+ <% end %>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/all_schools.js.erb b/app/views/admin/all_schools.js.erb
new file mode 100644
index 000000000..7a53a25dc
--- /dev/null
+++ b/app/views/admin/all_schools.js.erb
@@ -0,0 +1,11 @@
+<% if params[:search].nil? %>
+$("#ajax-modal").html('<%= escape_javascript( render :partial => 'admin/all_schools', :locals => {:schools => @schools, :edit_id => @edit_id}) %>');
+showModal('ajax-modal', '452px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before(" ");
+$('#ajax-modal').parent().css("top","50%").css("left","50%");
+$('#ajax-modal').parent().addClass("popbox").addClass("resourceUploadPopup");
+$('#ajax-modal').css("padding-left","16px").css("padding-bottom","16px");
+<% else %>
+$("#schools_list").html("<%= escape_javascript(render :partial => 'admin/update_school_form', :locals => {:schools => @schools, :edit_id => @edit_id}) %>");
+<% end %>
\ No newline at end of file
diff --git a/app/views/admin/applied_schools.html.erb b/app/views/admin/applied_schools.html.erb
new file mode 100644
index 000000000..2f139ca72
--- /dev/null
+++ b/app/views/admin/applied_schools.html.erb
@@ -0,0 +1,147 @@
+
+ <%=l(:label_applied_shcools)%>
+
+
+<%= render 'tab_has_applied_applied' %>
+
+<%= form_tag({}, :method => :get) do %>
+
+
+ 单位名称:
+
+ <%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '输入单位名称进行搜索' %>
+ <%= submit_tag l(:button_apply ), :class => "small", :name => nil %>
+ <%= link_to l(:button_clear), {:controller => 'admin', :action => 'applied_shcools'}, :class => 'icon icon-reload' %>
+
+<% end %>
+
+
+
+
+ <%= pagination_links_full @apply_pages, @apply_count ,:per_page_links => true, :remote => false, :flag => true %>
+
\ No newline at end of file
diff --git a/app/views/admin/has_applied_schools.html.erb b/app/views/admin/has_applied_schools.html.erb
new file mode 100644
index 000000000..5be3517c8
--- /dev/null
+++ b/app/views/admin/has_applied_schools.html.erb
@@ -0,0 +1,143 @@
+
+ <%=l(:label_applied_shcools)%>
+
+
+<%= render 'tab_has_applied_applied' %>
+
+<%= form_tag({}, :method => :get) do %>
+
+
+ 单位名称:
+
+ <%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '输入单位名称进行搜索' %>
+ <%= submit_tag l(:button_apply ), :class => "small", :name => nil %>
+ <%= link_to l(:button_clear), {:controller => 'admin', :action => 'applied_shcools'}, :class => 'icon icon-reload' %>
+
+<% end %>
+
+
+
+
+ <%= pagination_links_full @has_apply_pages, @has_apply_count ,:per_page_links => true, :remote => false, :flag => true %>
+
\ No newline at end of file
diff --git a/app/views/admin/non_syllabus_courses.html.erb b/app/views/admin/non_syllabus_courses.html.erb
index 1be979eeb..c5a2c81ec 100644
--- a/app/views/admin/non_syllabus_courses.html.erb
+++ b/app/views/admin/non_syllabus_courses.html.erb
@@ -72,7 +72,7 @@
- <%= link_to(course.teacher.show_name.truncate(6, omission: '...'), user_path(course.teacher)) %>
+ <%= link_to(course.teacher.show_name, user_path(course.teacher)) %>
<%= course.class_period %>
diff --git a/app/views/admin/syllabuses.html.erb b/app/views/admin/syllabuses.html.erb
index 194091abc..5098131da 100644
--- a/app/views/admin/syllabuses.html.erb
+++ b/app/views/admin/syllabuses.html.erb
@@ -52,7 +52,7 @@
- <%= link_to(syllabus.try(:user).try(:realname).truncate(6, omission: '...'), user_path(syllabus.user)) %>
+ <%= link_to syllabus.user.show_name, user_path(syllabus.user) %>
<%= format_date(syllabus.created_at) %>
@@ -70,7 +70,7 @@
<%= render :partial => 'admin/rename_course_name', :locals => {:course => course} %>
- <%= link_to(course.try(:teacher).try(:realname).truncate(6, omission: '...'), user_path(course.teacher)) %>
+ <%= link_to(course.teacher.show_name, user_path(course.teacher)) %>
<%= format_date(course.created_at) %>
diff --git a/app/views/applied_project/_applied_join_project.html.erb b/app/views/applied_project/_applied_join_project.html.erb
new file mode 100644
index 000000000..e2c447992
--- /dev/null
+++ b/app/views/applied_project/_applied_join_project.html.erb
@@ -0,0 +1,29 @@
+
+
diff --git a/app/views/applied_project/_applied_project_tip.js.erb b/app/views/applied_project/_applied_project_tip.js.erb
new file mode 100644
index 000000000..c2bc555db
--- /dev/null
+++ b/app/views/applied_project/_applied_project_tip.js.erb
@@ -0,0 +1,27 @@
+
\ No newline at end of file
diff --git a/app/views/applied_project/applied_join_project.js.erb b/app/views/applied_project/applied_join_project.js.erb
index ae9d3f467..5d9f7f87a 100644
--- a/app/views/applied_project/applied_join_project.js.erb
+++ b/app/views/applied_project/applied_join_project.js.erb
@@ -1,14 +1,3 @@
-// @status: 0 该项目不存在;1 不重复加入;2 成功加入; 3 已是项目成员;其它 加入失败
-<% if @status == 0%>
- alert("<%= l('project.join.tips.notexist') %>");
-<% elsif @status == 1%>
- alert("<%= l('project.join.tips.repeat') %>");
-<% elsif @status == 2%>
- alert("<%= l('project.join.tips.success') %>");
- hideModal($("#popbox"));
- $("#applied_project_link_<%= @project.id%>").replaceWith("<%=escape_javascript(link_to '取消申请',appliedproject_applied_path(:project_id => @project.id,:user_id => User.current.id),:class => "blue_n_btn fr mt20", :remote => "true",:method => "delete",:id => "applied_project_link_#{@project.id}")%>");
-<% elsif @status == 3%>
- alert("<%= l('project.join.tips.has') %>");
-<%else%>
- alert("<%= l('project.join.tips.fail') %>");
-<%end%>
\ No newline at end of file
+var htmlvalue = "<%= escape_javascript(render :partial => 'applied_join_project', locals: {:project_id => (@project.nil? ? nil : @project.id)}) %>";
+pop_box_new(htmlvalue,460,40,50);
+
diff --git a/app/views/applied_project/applied_project_info.js.erb b/app/views/applied_project/applied_project_info.js.erb
new file mode 100644
index 000000000..ab3cb396d
--- /dev/null
+++ b/app/views/applied_project/applied_project_info.js.erb
@@ -0,0 +1,5 @@
+<% if @project %>
+$("#join_in_project_applied").html('<%= escape_javascript( render :partial => 'projects/applied_status') %>');
+<% end %>
+var htmlvalue = "<%= escape_javascript(render :partial => 'applied_project/applied_project_tip') %>";
+pop_box_new(htmlvalue,380,40,50);
diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb
index 0f7e8a012..759a9a735 100644
--- a/app/views/attachments/_project_file_links.html.erb
+++ b/app/views/attachments/_project_file_links.html.erb
@@ -92,7 +92,7 @@
<% end %>
<% if options[:author] %>
- <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange" %>,
+ <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "link-blue" %>,
<%= format_time(attachment.created_on) %>
<% end %>
diff --git a/app/views/blog_comments/destroy.js.erb b/app/views/blog_comments/destroy.js.erb
index c34986977..52ecbb925 100644
--- a/app/views/blog_comments/destroy.js.erb
+++ b/app/views/blog_comments/destroy.js.erb
@@ -1,5 +1,5 @@
<% if @in_user_homepage %>
- <% homepage = BlogComment.find(User.current.blog.homepage_id) %>
+ <% homepage = BlogComment.find(@user.blog.homepage_id) %>
$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'blogs/homepage', :locals => {:activity => @blog_comment, :user_activity_id => homepage.id}) %>");
<% else%>
$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/user_blog', :locals => {:activity => @blog_comment,:user_activity_id =>@user_activity_id}) %>");
diff --git a/app/views/blogs/_homepage.html.erb b/app/views/blogs/_homepage.html.erb
index ea83b9576..a076ed15c 100644
--- a/app/views/blogs/_homepage.html.erb
+++ b/app/views/blogs/_homepage.html.erb
@@ -54,7 +54,7 @@
<% comments = get_all_children(all_comments, activity)[0..2] %>
<% if count > 0 %>
- <%= render :partial => 'users/message_replies', :locals => {:comments => comments, :user_activity_id => user_activity_id, :type => 'BlogComment', :activity_id =>activity.id, :homepage => 1}%>
+ <%= render :partial => 'users/message_replies', :locals => {:comments => comments, :user_activity_id => user_activity_id, :type => 'BlogComment', :activity_id =>activity.id, :homepage => 1, :user_id => activity.author_id}%>
<% end %>
diff --git a/app/views/courses/_copy_course.html.erb b/app/views/courses/_copy_course.html.erb
index 55217017b..9f45172bc 100644
--- a/app/views/courses/_copy_course.html.erb
+++ b/app/views/courses/_copy_course.html.erb
@@ -114,7 +114,7 @@
资源
- 复制到新班级的资源将在1个月后发布,请您调整资源的发布时间,否则学生可能看不到资源。
+ 复制到新班级的资源将在1个月后发布,请您调整资源的发布时间,否则学生将看不到资源。
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb
index ec5d18c7e..f95129903 100644
--- a/app/views/courses/_join_private_course.html.erb
+++ b/app/views/courses/_join_private_course.html.erb
@@ -1,100 +1,52 @@
-
-
-
-
- 快速进入班级通道
-
-
-
+
+
+
+
+ 确 定
+ 取 消
-
-
-
-
-
快速加入班级通道
-
只要持有班级邀请码,就可以快速加入所在班级。班级页面搜索不到的私有班级只能从此通道进入哦!
-
-
-
+
+
+
+ <% end %>
+
-
-
-
+
\ No newline at end of file
diff --git a/app/views/courses/_member.html.erb b/app/views/courses/_member.html.erb
index 95177c92c..9e6abcf4f 100644
--- a/app/views/courses/_member.html.erb
+++ b/app/views/courses/_member.html.erb
@@ -10,7 +10,7 @@
) do |f| %>
<% @roles.each do |role| %>
- <%= radio_button_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
+ <%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :id => "edit_member_role_#{member.id}_#{role.id}",
:disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
<%= zh_course_role(h role) %>
@@ -35,4 +35,25 @@
:data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %>
<% end%>
-<% end%>
\ No newline at end of file
+
+
+<% end%>
diff --git a/app/views/courses/_tool_expand.html.erb b/app/views/courses/_tool_expand.html.erb
index c41edf680..5f9e512d7 100644
--- a/app/views/courses/_tool_expand.html.erb
+++ b/app/views/courses/_tool_expand.html.erb
@@ -29,7 +29,7 @@
<% if show_nav?(course_feedback_count) %>
留言
- <%= link_to "", course_feedback_path(@course), :class => 'sy_class_add', :title =>"#{l(:label_course_feedback)}", :id => "course_jour_count"%>
+ <%= link_to "", course_feedback_path(@course), :class => 'sy_class_add', :title =>"#{l(:label_course_feedback)}"%>
<% end %>
<% if show_nav?(course_poll_count) %>
diff --git a/app/views/courses/join.js.erb b/app/views/courses/join.js.erb
index ac8b717d1..52c1347a5 100644
--- a/app/views/courses/join.js.erb
+++ b/app/views/courses/join.js.erb
@@ -36,6 +36,10 @@ window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/co
alert("您已经是该班级的管理员了");
hidden_join_course_form();
window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 11%>
+alert("该班级已被删除");
+hidden_join_course_form();
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
<% else %>
alert("未知错误,请稍后再试");
<% end %>
diff --git a/app/views/courses/join_course_multi_role.js.erb b/app/views/courses/join_course_multi_role.js.erb
new file mode 100644
index 000000000..97d6b33ce
--- /dev/null
+++ b/app/views/courses/join_course_multi_role.js.erb
@@ -0,0 +1,52 @@
+<% if @object_id && @state != 6 && @state !=4 %>
+$("#join_in_course_header").html("<%= escape_javascript(join_in_course_header(@course, @user)) %>");
+<% end %>
+<% if @state %>
+<% if @state == 0 %>
+alert("加入成功");
+hideModal();
+$("#try_join_course_link").replaceWith(" 'index',:course=>@course.id, :host=>Setting.host_course)%>' target='_blank' class='blue_n_btn fr mt20'>提交作品 ");
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 1 %>
+alert("密码错误");
+<% elsif @state == 2 %>
+alert("班级已过期\n请联系班级管理员重启班级。(在配置班级处)");
+<% elsif @state == 3 %>
+alert("您已经加入了班级");
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 4 %>
+alert("您加入的班级不存在");
+<% elsif @state == 5 %>
+alert("您还未登录");
+<% elsif @state == 6 %>
+alert("申请成功,请等待审核");
+hidden_join_course_form();
+<% elsif @state == 7%>
+alert("您已经发送过申请了,请耐心等待");
+hidden_join_course_form();
+<% elsif @state == 8%>
+alert("您已经是该班级的教师了");
+hidden_join_course_form();
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 9%>
+alert("您已经是该班级的教辅了");
+hidden_join_course_form();
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 10%>
+alert("您已经是该班级的管理员了");
+hidden_join_course_form();
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 11%>
+alert("该班级已被删除");
+hidden_join_course_form();
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 12 %>
+alert("您已经发送过申请了,请耐心等待");
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% elsif @state == 13 %>
+alert("申请成功,请等待审核");
+window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>"
+<% else %>
+alert("未知错误,请稍后再试");
+<% end %>
+<% end %>
diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb
index 199cfb5ae..14402a9ff 100644
--- a/app/views/courses/join_private_courses.js.erb
+++ b/app/views/courses/join_private_courses.js.erb
@@ -1,11 +1,2 @@
-$('#topnav_course_menu').hide();
-$('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>');
-showModal('ajax-modal', '540px');
-$('#ajax-modal').css('height','390px');
-//$('#ajax-modal').siblings().remove();
-$('#ajax-modal').siblings().hide();
-$('#ajax-modal').before("" +
- " ");
-$('#ajax-modal').parent().removeClass("alert_praise");
-$('#ajax-modal').parent().css("top","").css("left","").css("border","3px solid #269ac9");
-$('#ajax-modal').parent().addClass("alert_box");
+var htmlvalue = "<%= escape_javascript(render :partial => 'join_private_course') %>";
+pop_box_new(htmlvalue,460,40,50);
diff --git a/app/views/courses/new.html.erb b/app/views/courses/new.html.erb
index fe6b3e596..f53c8c716 100644
--- a/app/views/courses/new.html.erb
+++ b/app/views/courses/new.html.erb
@@ -17,13 +17,13 @@
* <%= l(:label_tags_course_name)%> :
-
+
班级名称不能为空且至少有两个字符
* <%= l(:label_class_period)%> :
-
+
diff --git a/app/views/issues/_detail.html.erb b/app/views/issues/_detail.html.erb
index ec9a0bc54..ac912a71c 100644
--- a/app/views/issues/_detail.html.erb
+++ b/app/views/issues/_detail.html.erb
@@ -20,7 +20,7 @@
<%= get_issue_priority(@issue.priority_id)[1] %>
- 由<%= @issue.author %> 添加于 <%= format_time(@issue.created_on).html_safe %>
+ 由<%=link_to @issue.author, user_path(@issue.author), :class => "link-blue" %>添加于 <%= format_time(@issue.created_on).html_safe %>
diff --git a/app/views/layouts/_base_course_old.html.erb b/app/views/layouts/_base_course_old.html.erb
deleted file mode 100644
index 4b2077cf8..000000000
--- a/app/views/layouts/_base_course_old.html.erb
+++ /dev/null
@@ -1,278 +0,0 @@
-<%# course_model %>
-<% course_file_num = visable_attachemnts_incourse(@course).count%>
-<% is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course)) %>
-<% homework_num = visable_course_homework @course %>
-
-
-
-
-
-
- <%= h html_title %>
-
-
-
- <%= csrf_meta_tag %>
- <%= favicon %>
- <%= javascript_heads %>
- <%= heads_for_theme %>
- <%= call_hook :view_layouts_base_html_head %>
- <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2','css/common','css/public', 'css/structure','prettify', 'css/courses','css/popup'%>
- <%= javascript_include_tag "course","sy_public", "syllabus","header","attachments",'prettify' %>
-
- <%= yield :header_tags -%>
-
-
-
-
-
-
-
-
-
-
-
- <% if User.current.logged? %>
- <%= render :partial => 'layouts/logined_header' %>
- <% else%>
- <%= render :partial => 'layouts/unlogin_header' %>
- <% end%>
-
-
-
-
-
-
- <%=render :partial=>'layouts/project_info' %>
-
-
-
-
- <%= l(:label_main_teacher)%> : <%= link_to(@course.teacher.lastname+@course.teacher.firstname, user_path(@course.teacher), :class => 'c_dblue') %>
- <%= l(:label_class_period)%> : <%= @course.class_period %> <%= l(:label_class_hour) %>
- <%= l(:label_main_term)%> : <%= current_time_and_term @course %>
- <% if @course.school%>
- <%= l(:label_course_organizers)%> : <%= @course.school%>
- <% end%>
-
-
-
- <%# 更新访问数,刷新的时候更新访问次数 %>
- <% update_visiti_count @course %>
- <%# over %>
-
-
- <% unless show_nav?(@course.course_activities.count) %>
-
- <%= link_to l(:label_activity), course_path(@course), :class => "f14 c_blue02" %>
-
- <%= link_to "(#{@course.course_activities.count})", course_path(@course), :class => "subnav_num c_orange"%>
-
- <% end %>
- <% unless show_nav?(@course.homework_commons.count) %>
-
- <%= link_to l(:label_homework), homework_common_index_path(:course => @course.id), :class => "f14 c_blue02"%>
- <%= link_to "(#{homework_num})", homework_common_index_path(:course => @course.id), :class => "subnav_num c_orange"%>
- <%= link_to( "", homework_common_index_path(:course => @course.id,:is_new => 1), :class => 'courseMenuSetting', :title =>"#{l(:label_course_homework_new)}") if is_teacher %>
-
- <% end %>
- <% unless show_nav?(@course.news.count) %>
-
- <%= link_to "通知", course_news_index_path(@course), :class => "f14 c_blue02" %>
- <%= link_to "(#{@course.news.count})", course_news_index_path(@course), :class => "subnav_num c_orange"%>
- <%= link_to( "", new_course_news_path(@course,:is_new=>1), :class => 'courseMenuSetting', :title =>"#{l(:label_course_news_new)}") if is_teacher %>
-
- <% end %>
- <% unless show_nav?(course_file_num) %>
-
- <%= link_to l(:label_course_file), course_files_path(@course), :class => "f14 c_blue02" %>
- <%= link_to "(#{course_file_num})", course_files_path(@course), :class => "subnav_num c_orange",:id=>'courses_files_count_nav' %>
- <% if is_teacher || (@course.publish_resource == 1 && User.current.member_of_course?(@course)) %>
-
-
- <% end %>
-
- <% end %>
- <% unless show_nav?(@course.boards.first ? @course.boards.first.topics.count : 0) %>
-
- <%= link_to l(:label_course_board), course_boards_path(@course), :class => "f14 c_blue02" %>
- <%= link_to "(#{@course.boards.first ? (@course.boards.first.topics.count + Message.where("board_id =? and parent_id is not ?", @course.boards.first.id, nil).count) : 0})", course_boards_path(@course), :class => "subnav_num c_orange" %>
- <%= link_to( "",course_boards_path(@course, :flag => true, :is_new => 1), :class => 'courseMenuSetting', :title =>"#{l(:label_message_new)}") %>
-
- <% end %>
- <% unless show_nav?(course_feedback_count) %>
-
- <%= link_to l(:label_course_feedback), course_feedback_path(@course), :class => "f14 c_blue02" %>
- <%= link_to "(#{course_feedback_count})", course_feedback_path(@course), :class => "subnav_num c_orange", :id => "course_jour_count"%>
- <%= link_to "", course_feedback_path(@course), :class => 'courseMenuSetting', :title =>"#{l(:label_course_feedback)}", :id => "course_jour_count"%>
-
- <% end %>
- <% unless show_nav?(course_poll_count) %>
-
- <%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id), :class => " f14 c_blue02"%>
- <%= link_to "(#{course_poll_count})", poll_index_path(:polls_type => "Course", :polls_group_id => @course.id), :class => "subnav_num c_orange" %>
- <%= link_to( "", new_poll_path(:polls_type => "Course",:polls_group_id => @course.id), :class => 'courseMenuSetting', :title =>"#{l(:label_new_poll)}") if is_teacher %>
-
- <% end %>
- <% unless show_nav?(User.current.allowed_to?(:as_teacher,@course)? @course.exercises.count : @course.exercises.where("exercise_status <> 1").count) %>
-
- <%= link_to "在线测验", exercise_index_path(:course_id => @course.id), :class => " f14 c_blue02"%>
- <%= link_to "(#{User.current.allowed_to?(:as_teacher,@course)? @course.exercises.count : @course.exercises.where("exercise_status <> 1").count})", exercise_index_path(:course_id => @course.id), :class => "subnav_num c_orange" %>
- <%= link_to( "", new_exercise_path(:course_id => @course.id), :class => 'courseMenuSetting', :title =>"新建试卷") if is_teacher %>
-
- <% end %>
- <%# 工具栏展开 %>
- <% if @course.homework_commons.count == 0 || @course.news.count == 0 || course_file_num == 0 || course_poll_count == 0 || @course.exercises.count == 0 ||
- course_feedback_count == 0 || @course.exercises.count == 0 || (@course.boards.first ? @course.boards.first.topics.count : 0) == 0 %>
-
-
<%= l(:label_project_more) %>
-
- <%= render 'courses/tool_expand', :locals => {:is_teacher => is_teacher, :course_file_num => course_file_num} %>
-
- <% end %>
-
- <%# 课程活跃度 %>
-
- <%= render :partial => 'courses/course_activity_users', :locals => {:course => @course} %>
- <%# 课程英雄榜 %>
- <%= render :partial => 'courses/course_heroes', :locals => {:course => @course} %>
-
- <% if @course.description && !@course.description.blank? %>
-
-
-
<%= l(:label_course_brief_introduction)%>:
-
- <%= textilizable(@course.description) if @course.description && !@course.description.blank? %>
-
-
-
-
- <% end %>
-
-
<%= l(:label_tag)%>:
-
- <%= render :partial => 'tags/new_tag', :locals => {:obj => @course, :object_flag => "9"} %>
-
-
-
-
- <%= render :partial => 'courses/recommendation', :locals => {:course => @course} %>
-
访问计数 <%= @course.visits.to_i %> (自2016年5月)
-
-
-
- <%= yield %>
- <%#= render_flash_messages %>
- <%#= call_hook :view_layouts_base_content %>
-
-
-
-
-
-
-
-
-<%= render :partial => 'layouts/footer' %>
-
-
-<%= render :partial => 'layouts/new_feedback' %>
-
- <%= l(:label_loading) %>
-
-
-<%= call_hook :view_layouts_base_body_bottom %>
-
-
-
-
\ No newline at end of file
diff --git a/app/views/layouts/_base_syllabus_old.html.erb b/app/views/layouts/_base_syllabus_old.html.erb
deleted file mode 100644
index 45e77dbad..000000000
--- a/app/views/layouts/_base_syllabus_old.html.erb
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
- <%= h html_title %>
-
-
- <%= csrf_meta_tag %>
- <%= favicon %>
- <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'syllabus','css/common','css/public','css/structure','css/courses','css/popup','prettify',:media => 'all' %>
- <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
- <%= javascript_heads %>
- <%= javascript_include_tag "bootstrap","avatars","course",'attachments','prettify','syllabus'%>
- <%= heads_for_theme %>
- <%= call_hook :view_layouts_base_html_head %>
- <%= yield :header_tags -%>
-
-
-
-
-
-
-
-<% is_current_user = User.current.logged?%>
-
- <% if User.current.logged? %>
- <%= render :partial => 'layouts/logined_header' %>
- <% else%>
- <%= render :partial => 'layouts/unlogin_header' %>
- <% end%>
-
-
-
-
-
-
- <%=render :partial => 'layouts/syllabus_info' %>
-
- <% update_visiti_count @syllabus %>
-
-
-
-
-
-
-
标签:
-
- <%= render :partial => 'tags/syllabus_tag', :locals => {:obj => @syllabus,:object_flag => "11"}%>
-
-
-
-
访问计数 <%=@syllabus.visits %> (自2016年7月)
-
-
-
-
- <%= render :partial => 'layouts/new_feedback' %>
-
-
-<%= render :partial => 'layouts/footer' %>
-
-
-
-
- <%= l(:label_loading) %>
-
-
-
-
diff --git a/app/views/layouts/_course_base_info.html.erb b/app/views/layouts/_course_base_info.html.erb
index 761b79297..1c01ecf53 100644
--- a/app/views/layouts/_course_base_info.html.erb
+++ b/app/views/layouts/_course_base_info.html.erb
@@ -15,12 +15,9 @@
- <%= link_to "班级配置", {:controller => 'courses', :action => 'settings', :id => @course}, :class => "sy_class_option" %>
<%= link_to @course.is_public == 0 ? "设为公开" : "设为私有", {:controller => 'courses', :action => 'private_or_public', :id => @course},:remote=>true,:confirm=>"您确定要设置为"+(@course.is_public == 0 ? "公开" : "私有")+"吗", :class => "sy_class_option" %>
- <%= link_to "复制学期", copy_course_course_path(@course.id),:remote=>true, :class => "sy_class_option" %>
- <% if @course.syllabus %>
- <%= link_to "进入课程", syllabus_path(@course.syllabus), :class => "sy_class_option", :target => "_blank" %>
- <% end %>
+ <%= link_to "复制班级", copy_course_course_path(@course.id),:remote=>true, :class => "sy_class_option" %>
+ <%= link_to "进入课程", syllabus_path(@course.syllabus), :class => "sy_class_option", :target => "_blank" %>
@@ -32,12 +29,20 @@
<%= image_tag(url_to_avatar(@course), :width => "110", :height => "110", :alt => "班级logo") %>
-
邀请码<%=@course.generate_invite_code %>
+
邀 请 码
+
+ <% if User.current.admin? || User.current.member_of_course?(@course) %>
+ <%=@course.generate_invite_code %>
+ <% else %>
+ 请询问老师
+ <% end %>
+
+
<%=@course.name %>
-
<%=@course.is_public == 0 ? '私有' : '公开' %>
+
教师:<%= course_teacher_link teacher_num %>
学生:<%= course_student_link student_num %>
@@ -51,8 +56,18 @@
学期:<%= current_time_and_term @course %>
单位:<%= get_occupation_from_user(@course.teacher).blank? ? '无' : get_occupation_from_user(@course.teacher) %>
-
- <% unless is_teacher %>
+ <% if is_teacher %>
+ <%= link_to "班级设置", {:controller => 'courses', :action => 'settings', :id => @course}, :class => "sy_btn_grey mr10 fl" %>
+ <% end %>
+ <% is_TA = get_user_member_roles_course @course, User.current, 7 %>
+ <% is_TE = get_user_member_roles_course @course, User.current, 9 %>
+ <% is_ST = get_user_member_roles_course @course, User.current, 10 %>
+ <% if !is_teacher && (is_TA || is_TE) %>
+ <%= link_to '教师身份', switch_role_course_path(@course, :user_id => User.current.id, :curr_role => 10, :tar_role => (is_TA ? 7 : 9)), :class => "sy_btn_orange mr10 fl", :title => "由学生身份切换至教师身份" %>
+ <% elsif is_teacher && is_ST %>
+ <%= link_to '学生身份', switch_role_course_path(@course, :user_id => User.current.id, :curr_role => (is_TA ? 7 : 9), :tar_role => 10), :class => "sy_btn_orange mr10 fl", :title => "由教师身份切换至学生身份" %>
+ <% end %>
+ <% unless (is_teacher || is_TA || is_TE) %>
<% end %>
diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb
index 35d8f87ef..7d2f1b4d2 100644
--- a/app/views/layouts/_join_exit_project.html.erb
+++ b/app/views/layouts/_join_exit_project.html.erb
@@ -1,12 +1,8 @@
- <% if !User.current.member_of?(@project) && User.current.login? && !User.current.admin %>
-
<%= watcher_link_for_project(@project, User.current) %>
- <% end %>
-
- <% if !User.current.member_of?(@project) && User.current.login? && !User.current.admin %>
- <%= join_in_project_link(@project, User.current) %>
- <% end %>
+
+ <%= render :partial => "projects/applied_status" %>
+
<% if User.current.admin? || User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project) %>
<%= link_to "
#{l(:button_configure)}".html_safe, settings_project_path(@project), :class => "pr_join_a" %>
diff --git a/app/views/layouts/base_admin.html.erb b/app/views/layouts/base_admin.html.erb
index 81cc2df9d..7f62da514 100644
--- a/app/views/layouts/base_admin.html.erb
+++ b/app/views/layouts/base_admin.html.erb
@@ -62,3 +62,10 @@
<%= call_hook :view_layouts_base_body_bottom %>