diff --git a/.access_token b/.access_token
new file mode 100644
index 000000000..610b08d2e
--- /dev/null
+++ b/.access_token
@@ -0,0 +1 @@
+{"access_token":"oEEf8ZKAB8Y2G0o_xnTPkPJHKKk8iHkLC-f5ptvQ2nCMj9IpC86ivLD2-p38GfOkuG-HuQp3pWZqhs3NJXUMdPLWsr5k67hPZYuqg4ozLccx0xdLswapj0mn8ovZhK1tKIKiAFAOMO","expires_in":7200,"got_token_at":1467012449}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index ba7890841..dbc349c80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,4 @@ vendor/cache
/config/initializers/gitlab_config.rb
1234567
public/javascripts/wechat/node_modules/
+.ruby-version
diff --git a/Gemfile b/Gemfile
index d392c6561..bb94100a5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,13 +1,19 @@
source 'https://ruby.taobao.org/'
-### ����ִ��bundle config mirror.https://rubygems.org https://gems.ruby-china.org �л���ruby-chinaԴ
unless RUBY_PLATFORM =~ /w32/
# unix-like only
gem 'iconv'
+ if RUBY_PLATFORM =~ /darwin/
+ gem "rmagick", "= 2.15.4" ## osx must be this version
+ else
+ gem "rmagick", "= 2.13.1" ## centos yum install ImageMagick-devel
+ end
+ gem 'certified'
+ gem 'net-ssh', '2.9.1'
+ gem 'jenkins_api_client'
+ gem 'nokogiri'
end
-gem 'certified'
-
gem 'wechat',path: 'lib/wechat'
gem 'grack', path:'lib/grack'
gem 'gitlab', path: 'lib/gitlab-cli'
@@ -31,7 +37,6 @@ gem 'acts-as-taggable-on', '2.4.1'
gem 'spreadsheet'
gem 'ruby-ole'
gem 'rails_kindeditor',path:'lib/rails_kindeditor'
-#gem "rmagick", ">= 2.0.0"
gem 'binding_of_caller'
gem 'chinese_pinyin'
# gem 'sunspot_rails', '~> 1.3.3'
@@ -81,7 +86,7 @@ group :assets do
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
- gem 'therubyracer', :platforms => :ruby
+ # gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb
index c86a36d05..c555eb633 100644
--- a/app/api/mobile/api.rb
+++ b/app/api/mobile/api.rb
@@ -18,11 +18,13 @@ module Mobile
require_relative 'apis/blog_comments'
require_relative 'apis/new_comment'
require_relative 'apis/praise'
+ require_relative 'apis/resources'
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
helpers do
@@ -34,6 +36,10 @@ module Mobile
raise('Unauthorized. 用户认证失败.') unless current_user
end
+ def session
+ env['rack.session']
+ end
+
def current_user
openid = params[:openid]
if openid
@@ -66,9 +72,9 @@ module Mobile
mount Apis::BlogComments
mount Apis::NewComment
mount Apis::Praise
+ mount Apis::Resources
- #add_swagger_documentation ({api_version: 'v1', base_path: 'http://u06.shellinfo.cn/trustie/api'})
- #add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
+ add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
end
end
diff --git a/app/api/mobile/apis/activities.rb b/app/api/mobile/apis/activities.rb
index 49fdaff8f..661925012 100644
--- a/app/api/mobile/apis/activities.rb
+++ b/app/api/mobile/apis/activities.rb
@@ -9,7 +9,7 @@ module Mobile
params do
requires :page, type: Integer
- requires :openid, type: String
+ requires :token, type: String
end
post do
authenticate!
diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb
index 3a36a9e37..42303b63d 100644
--- a/app/api/mobile/apis/courses.rb
+++ b/app/api/mobile/apis/courses.rb
@@ -14,8 +14,9 @@ module Mobile
optional :token, type: String
end
get do
+ authenticate!
cs = CoursesService.new
- courses = cs.course_list(params,current_user.nil? ? User.find(2):current_user)
+ courses = cs.user_courses_list(current_user)
present :data, courses, with: Mobile::Entities::Course
present :status, 0
end
@@ -97,25 +98,20 @@ module Mobile
desc "加入课程"
params do
- requires :course_password, type: String
+ requires :token, type: String
+ requires :invite_code, type: String, desc: '邀请码'
end
- post ":id" do
+ post "join" do
authenticate!
cs = CoursesService.new
- status = cs.join_course({:object_id => params[:id],:course_password => params[:course_password]},current_user)
- out = {status: status[:state]}
- message = case status[:state]
- when 0; "加入成功"
- when 1; "密码错误"
- when 2; "课程已过期 请联系课程管理员重启课程。(在配置课程处)"
- when 3; "您已经加入了课程"
- when 4; "您加入的课程不存在"
- when 5; "您还未登录"
- else; "未知错误,请稍后再试"
- end
- out.merge(message: message)
+ status = cs.join_course({role: "10", openid: params[:openid], invite_code: params[:invite_code]}, current_user)
+ {
+ status: status[:state],
+ messsge:CoursesService::JoinCourseError.message(status[:state])
+ }
end
+
desc "退出课程"
params do
requires :token, type: String
@@ -201,6 +197,7 @@ module Mobile
end
route_param :id do
get do
+ authenticate!
cs = CoursesService.new
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
#course = Course.find(params[:id])
@@ -388,7 +385,16 @@ module Mobile
end
-
+ desc '获取测验列表'
+ params do
+ requires :token, type:String
+ end
+ get ':course_id/exercises' do
+ authenticate!
+ exercises = Course.find(params[:course_id]).exercises
+ present :data,exercises,with:Mobile::Entities::Exercise
+ present :status,0
+ end
end
end
diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb
index b767bd768..4a6417cb4 100644
--- a/app/api/mobile/apis/issues.rb
+++ b/app/api/mobile/apis/issues.rb
@@ -8,7 +8,8 @@ module Mobile
desc "get special issuse"
get ':id' do
- user = UserWechat.find_by_openid(params[:openid]).user
+ authenticate!
+ user = current_user
issue = Issue.find params[:id]
present :data, issue, with: Mobile::Entities::Issue,user: user
present :status, 0
diff --git a/app/api/mobile/apis/journal_for_messages.rb b/app/api/mobile/apis/journal_for_messages.rb
index 15a571a82..5f2d01185 100644
--- a/app/api/mobile/apis/journal_for_messages.rb
+++ b/app/api/mobile/apis/journal_for_messages.rb
@@ -7,7 +7,8 @@ module Mobile
desc "get special journal"
get ':id' do
- user = UserWechat.find_by_openid(params[:openid]).user
+ authenticate!
+ user = current_user
jour = JournalsForMessage.find params[:id]
present :data, jour, with: Mobile::Entities::Jours,user: user
present :status, 0
diff --git a/app/api/mobile/apis/messages.rb b/app/api/mobile/apis/messages.rb
index ae2f9a39c..bab82de8d 100644
--- a/app/api/mobile/apis/messages.rb
+++ b/app/api/mobile/apis/messages.rb
@@ -7,7 +7,8 @@ module Mobile
desc "get special topic"
get ':id' do
- user = UserWechat.find_by_openid(params[:openid]).user
+ authenticate!
+ user = current_user
message = Message.find params[:id]
present :data, message, with: Mobile::Entities::Message,user: user
present :status, 0
diff --git a/app/api/mobile/apis/new_comment.rb b/app/api/mobile/apis/new_comment.rb
index 694ec0613..5b7159301 100644
--- a/app/api/mobile/apis/new_comment.rb
+++ b/app/api/mobile/apis/new_comment.rb
@@ -11,12 +11,12 @@ module Mobile
params do
requires :type, type: String
requires :content, type: String
- requires :openid, type: String
+ requires :token, type: String
end
post ':id' do
+ authenticate!
type = params[:type]
result = 1
- current_user = UserWechat.find_by_openid(params[:openid]).user
if params[:content]!="" && current_user
case type
when "HomeworkCommon"
diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb
index 8bdd460cc..d42177783 100644
--- a/app/api/mobile/apis/newss.rb
+++ b/app/api/mobile/apis/newss.rb
@@ -7,7 +7,8 @@ module Mobile
desc "get special news"
get ':id' do
- user = UserWechat.find_by_openid(params[:openid]).user
+ authenticate!
+ user = current_user
news = News.find params[:id]
present :data, news, with: Mobile::Entities::News,user: user
present :status, 0
diff --git a/app/api/mobile/apis/praise.rb b/app/api/mobile/apis/praise.rb
index 57dbd0729..834d1195b 100644
--- a/app/api/mobile/apis/praise.rb
+++ b/app/api/mobile/apis/praise.rb
@@ -9,12 +9,13 @@ module Mobile
params do
requires :type, type: String
- requires :openid, type: String
+ requires :token, type: String
end
post ':id' do
+ authenticate!
obj_id = params[:id]
obj_type = params[:type]
- user = UserWechat.find_by_openid(params[:openid]).user
+ user = current_user
pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",obj_id,obj_type.to_s,user.id).first
if pts.blank?
praise_or_cancel(obj_type,obj_id,user,1)
diff --git a/app/api/mobile/apis/resources.rb b/app/api/mobile/apis/resources.rb
new file mode 100644
index 000000000..fca94a642
--- /dev/null
+++ b/app/api/mobile/apis/resources.rb
@@ -0,0 +1,55 @@
+#coding=utf-8
+module Mobile
+ module Apis
+ class Resources < Grape::API
+
+ resource :resources do
+
+ desc '获取所有课件'
+ params do
+ requires :token, type: String
+ end
+ get do
+ authenticate!
+ data = current_user.course_attachments
+ present :data, data, with: Mobile::Entities::Attachment
+ present :status, 0
+
+ end
+
+
+
+ desc '获取所有作业'
+ params do
+ requires :token, type: String
+ end
+ get 'homeworks' do
+ authenticate!
+
+ homeworks = current_user.homework_commons
+
+ present :data, homeworks, with: Mobile::Entities::Homework
+ present :status, 0
+
+ end
+
+ desc '获取所有测验'
+ params do
+ requires :token, type: String
+ end
+ get 'exercies' do
+ authenticate!
+
+ exercises = current_user.exercises
+ present :data, exercises, with: Mobile::Entities::Exercise
+ present :status, 0
+ 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 6ce3cacbb..b5ee14d19 100644
--- a/app/api/mobile/apis/users.rb
+++ b/app/api/mobile/apis/users.rb
@@ -4,6 +4,48 @@ module Mobile
class Users < Grape::API
resource :users do
+ desc "查询是否已绑定"
+ params do
+ requires :openid, type: String, desc: 'wechat openid'
+ end
+ post 'isbind' do
+ openid = params[:openid]
+ uw = UserWechat.where(openid: openid).first
+ raise "还未绑定trustie帐户" unless uw
+
+ user = uw.user
+ ::ApiKey.delete_all(user_id: user.id)
+ key = ::ApiKey.create!(user_id: user.id)
+ present status: 0, token: key.access_token
+ end
+
+ desc "绑定微信用户"
+ params do
+ requires :login, type: String, desc: 'username'
+ requires :password, type: String, desc: 'password'
+ end
+ post 'wxbind' do
+ openid = session[:wechat_openid]
+ logger.debug "openid ============== #{openid}"
+ raise "无法获取到openid,请在微信中打开本页面" unless openid
+ uw = UserWechat.where(openid: openid).first
+ raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw
+
+ user, last_login_on = User.try_to_login(params[:login], params[:password])
+ raise "用户名或密码错误,请重新输入" unless user
+ #补全用户信息
+
+ raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat
+
+ UserWechat.create!(
+ openid: openid,
+ user: user
+ )
+ # ws = WechatService.new
+ # ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, format_time(Time.now))
+ present status: 0, message: '您已成功绑定Trustie平台'
+ end
+
desc "注册用户"
params do
requires :login, type: String, desc: 'username'
diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb
index a88d509a3..c8377aa0d 100644
--- a/app/api/mobile/apis/whomeworks.rb
+++ b/app/api/mobile/apis/whomeworks.rb
@@ -7,7 +7,8 @@ module Mobile
desc "get one homework"
get ':id' do
- user = UserWechat.find_by_openid(params[:openid]).user
+ authenticate!
+ user = current_user
homework = HomeworkCommon.find params[:id]
present :data, homework, with: Mobile::Entities::Whomework,user: user
present :status, 0
diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb
index 50812b349..487a75c4d 100644
--- a/app/api/mobile/entities/course.rb
+++ b/app/api/mobile/entities/course.rb
@@ -45,6 +45,8 @@ module Mobile
course_expose :tea_id
course_expose :term
course_expose :time
+ course_expose :invite_code
+ course_expose :qrcode
course_expose :updated_at
course_expose :course_student_num
expose :teacher, using: Mobile::Entities::User do |c, opt|
diff --git a/app/api/mobile/entities/exercise.rb b/app/api/mobile/entities/exercise.rb
new file mode 100644
index 000000000..3218264fb
--- /dev/null
+++ b/app/api/mobile/entities/exercise.rb
@@ -0,0 +1,8 @@
+module Mobile
+ module Entities
+ class Exercise < Grape::Entity
+ expose :exercise_name
+ expose :exercise_description
+ end
+ end
+end
diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb
index 8c6a839b3..2eb20f0db 100644
--- a/app/api/mobile/entities/user.rb
+++ b/app/api/mobile/entities/user.rb
@@ -26,6 +26,8 @@ module Mobile
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id
when :realname
u.nil? ? "" : get_user_realname(u)
+ when :name
+ u.nil? ? "" : u.show_name
end
end
end
@@ -57,6 +59,11 @@ module Mobile
user_expose :student_num
# 活跃值
user_expose :active_count
+
+ user_expose :role_name
+
+ user_expose :name
+
end
end
diff --git a/app/assets/javascripts/quality_analyses.js.coffee b/app/assets/javascripts/quality_analyses.js.coffee
new file mode 100644
index 000000000..761567942
--- /dev/null
+++ b/app/assets/javascripts/quality_analyses.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
diff --git a/app/assets/stylesheets/quality_analyses.css.scss b/app/assets/stylesheets/quality_analyses.css.scss
new file mode 100644
index 000000000..9404eb70f
--- /dev/null
+++ b/app/assets/stylesheets/quality_analyses.css.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the QualityAnalyses controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb
index 33d988e35..8187055be 100644
--- a/app/controllers/account_controller.rb
+++ b/app/controllers/account_controller.rb
@@ -239,14 +239,23 @@ class AccountController < ApplicationController
end
def resendmail
+ result = {:status=>1, :email=>""}
user = User.find(params[:user]) if params[:user]
+ result[:email] = user.mail
token = Token.new(:user => user, :action => "register")
if token.save
- Mailer.run.register(token)
-
+ # Mailer.run.register(token)
+ Mailer.register(token).deliver
else
yield if block_given?
+ result[:status] = 0
end
+ render :json => result
+ end
+
+ def email_activation
+
+
end
private
@@ -264,6 +273,7 @@ class AccountController < ApplicationController
if user.nil?
invalid_credentials
elsif user.status == 2
+ @user = user
invalid_credentials_new
elsif user.new_record?
onthefly_creation_failed(user, {:login => user.login, :auth_source_id => user.auth_source_id })
@@ -375,8 +385,9 @@ class AccountController < ApplicationController
def invalid_credentials_new
logger.warn "Failed login for '#{params[:username]}' from #{request.remote_ip} at #{Time.now.utc}"
- flash[:error] = l(:notice_account_invalid_creditentials_new)
- render signin_path(:login=>true)
+ # flash[:error] = l(:notice_account_invalid_creditentials_new)
+ # render signin_path(:login=>true)
+ render :action => 'email_activation'
end
# Register a user for email activation.
diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb
index 960bc61e6..a6b5f09cf 100644
--- a/app/controllers/attachments_controller.rb
+++ b/app/controllers/attachments_controller.rb
@@ -612,7 +612,7 @@ class AttachmentsController < ApplicationController
@attachment.container.board.course)
@course = @attachment.container.board.course
else
- unless @attachment.container_type == 'Bid' || @attachment.container_type == 'Organization' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' || @attachment.container_type == 'PhoneAppVersion' || @attachment.container_type == 'StudentWorksScore'|| @attachment.container_type == 'StudentWork'
+ unless @attachment.container_type == 'Syllabus' || @attachment.container_type == 'Bid' || @attachment.container_type == 'Organization' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' || @attachment.container_type == 'PhoneAppVersion' || @attachment.container_type == 'StudentWorksScore'|| @attachment.container_type == 'StudentWork'
@project = @attachment.project
end
end
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index e421b8c69..e81251f63 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -74,7 +74,7 @@ class CoursesController < ApplicationController
else
@state = 5 #未登录
end
- @object_id = params[:object_id]
+ @object_id = @course.id if @course
respond_to do |format|
format.js #{ render :partial => 'set_join', :locals => {:user => @user, :course => @course, :object_id => params[:object_id]} }
end
@@ -715,6 +715,7 @@ class CoursesController < ApplicationController
@trackers = Tracker.sorted.all
@course = Course.new
@course.safe_attributes = params[:course]
+ @syllabus = Syllabus.where("id = #{params[:syllabus_id].to_i}").first if params[:syllabus_id]
# month = Time.now.month
render :layout => 'new_base'
else
@@ -1224,7 +1225,7 @@ class CoursesController < ApplicationController
def member_to_xls homeworks, course, members,groups
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
- sheet1 = book.create_worksheet :name => "student"
+ sheet1 = book.create_worksheet :name => "总成绩"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
#sheet1.row(0).default_format = blue
#sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_class),l(:excel_f_score),l(:excel_commit_time)])
@@ -1268,6 +1269,121 @@ class CoursesController < ApplicationController
count_row += 1
end
+ homeworks.each_with_index do |home, i|
+ sheet = book.create_worksheet :name => "第#{i+1}次作业"
+ sheet[0,0] = "课程编号"
+ sheet[0,1] = course.id
+ sheet[1,0] = "课程学期"
+ sheet[1,1] = course.time.to_s+"年"+course.term
+ sheet[2,0] = "课程名称"
+ sheet[2,1] = course.name
+ sheet[3,0] = "教师团队"
+ sheet[3,1] = (searchTeacherAndAssistant course).map{|member| member.user.show_name}.join('、')
+ sheet[4,0] = "主讲教师"
+ sheet[4,1] = course.teacher.show_name
+ sheet[4,0] = "作业批次"
+ sheet[4,1] = "第#{i+1}次作业"
+ sheet[4,0] = "作业名称"
+ sheet[4,1] = home.name
+ if home.homework_type == 1 #普通作业
+ if home.anonymous_comment ==0
+ sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
+ count_row = 6
+ items = home.student_works.order("work_score desc")
+ items.each_with_index do |stu, j|
+ sheet[count_row,0]= j + 1
+ sheet[count_row,1] = stu.user.show_name
+ sheet[count_row,2] = stu.user.login
+ sheet[count_row,3] = stu.user.user_extensions.student_id
+ sheet[count_row,4] = stu.name
+ sheet[count_row,5] = strip_html stu.description
+ sheet[count_row,6] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(2)
+ sheet[count_row,7] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(2)
+ if home.anonymous_comment ==0
+ sheet[count_row,8] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(2)
+ sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty
+ sheet[count_row,10] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,11] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,12] = format_time(stu.created_at)
+ else
+ sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,9] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,10] = format_time(stu.created_at)
+ end
+ count_row += 1
+ end
+ elsif home.homework_type == 2 #编程作业
+ if home.anonymous_comment ==0
+ sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
+ count_row = 6
+ items = home.student_works.order("work_score desc")
+ items.each_with_index do |stu, j|
+ sheet[count_row,0]= j + 1
+ sheet[count_row,1] = stu.user.show_name
+ sheet[count_row,2] = stu.user.login
+ sheet[count_row,3] = stu.user.user_extensions.student_id
+ sheet[count_row,4] = stu.name
+ sheet[count_row,5] = stu.description
+ sheet[count_row,6] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(2)
+ sheet[count_row,7] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(2)
+ sheet[count_row,8] = stu.system_score.nil? ? l(:label_without_score) : stu.system_score.round(2)
+ if home.anonymous_comment ==0
+ sheet[count_row,9] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(2)
+ sheet[count_row,10] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty
+ sheet[count_row,11] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,12] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,13] = format_time(stu.created_at)
+ else
+ sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,10] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,11] = format_time(stu.created_at)
+ end
+ count_row += 1
+ end
+ elsif home.homework_type == 3 #分组作业
+ if home.anonymous_comment ==0
+ sheet.row(5).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet.row(5).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
+ count_row = 6
+ items = home.student_works.order("work_score desc")
+ items.each_with_index do |stu, j|
+ sheet[count_row,0] = j + 1
+ sheet[count_row,1] = get_group_member_names stu
+ sheet[count_row,2] = stu.name
+ sheet[count_row,3] = (stu.project_id == 0 || stu.project_id.nil?) ? l(:excel_no_project) : stu.project.name
+ sheet[count_row,4] = strip_html stu.description
+ sheet[count_row,5] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(2)
+ sheet[count_row,6] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(2)
+ if home.anonymous_comment ==0
+ sheet[count_row,7] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(2)
+ sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty
+ sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,10] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,11] = format_time(stu.created_at)
+ else
+ sheet[count_row,7] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty
+ sheet[count_row,8] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2)
+ sheet[count_row,9] = format_time(stu.created_at)
+ end
+ count_row += 1
+ end
+ end
+ end
+
=begin
group0 = CourseGroup.new();
group0.id = 0;
diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb
index 0883b3799..32c605516 100644
--- a/app/controllers/my_controller.rb
+++ b/app/controllers/my_controller.rb
@@ -127,12 +127,14 @@ class MyController < ApplicationController
end
@user.safe_attributes = params[:user]
+ @user.lastname = params[:lastname]
+ @user.firstname = ""
@user.pref.attributes = params[:pref]
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
#@user.login = params[:login]
unless @user.user_extensions.nil?
if @user.user_extensions.identity == 2
- @user.firstname = params[:enterprise_name]
+ # @user.firstname = params[:enterprise_name]
end
end
@@ -144,7 +146,7 @@ class MyController < ApplicationController
# end
@se.school_id = params[:occupation]
- @se.gender = params[:gender]
+ @se.gender = params[:sex]
@se.location = params[:province] if params[:province]
@se.location_city = params[:city] if params[:city]
@se.identity = params[:identity].to_i if params[:identity]
diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb
index b6eb54d2f..9f0fe41c8 100644
--- a/app/controllers/praise_tread_controller.rb
+++ b/app/controllers/praise_tread_controller.rb
@@ -131,6 +131,8 @@ class PraiseTreadController < ApplicationController
@obj = Bid.find_by_id(id)
when 'Contest'
@obj = Contest.find_by_id(id)
+ when 'Syllabus'
+ @obj = Syllabus.find_by_id(id)
else
@obj = nil
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index c8b272480..8664a1372 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -100,8 +100,8 @@ class ProjectsController < ApplicationController
render_404
end
- def course
- render_404
+ def courserender_404
+
end
# Time 2015-01-29 11:19:11
@@ -299,6 +299,8 @@ class ProjectsController < ApplicationController
if params[:jump] && redirect_to_project_menu_item(@project, params[:jump])
return
end
+
+ logger.debug "111111111"*100
# over
@author = params[:user_id].blank? ? nil : User.active.find(params[:user_id])
@page = params[:page] ? params[:page].to_i + 1 : 0
@@ -319,6 +321,7 @@ class ProjectsController < ApplicationController
else
@events_pages = ForgeActivity.includes(:project).where("forge_activities.project_id = ? and projects.is_public = ? and forge_act_type != ? ",@project,1, "Document").order("created_at desc").page(params['page'|| 1]).per(10);
end
+ logger.debug "2"*100
# g = Gitlab.client
unless @project.gpid.nil? || @project.project_score.changeset_num == 0
# rep_statics_commit = @project.rep_statics.order("commits_num desc")
@@ -332,12 +335,20 @@ class ProjectsController < ApplicationController
@a_commits_del = rep_statics_code.map {|s| s.del.to_i }
@a_commits_changeset = rep_statics_code.map {|s| s.changeset.to_i }
g = Gitlab.client
+ logger.debug "3"*100
begin
- g_branch = g.project(@project.gpid).default_branch.to_s
- rescue
- logger.error("get gitlab project failed!")
+ gid = @project.gpid
+ logger.debug "31"*100
+ g_branch = g.project(gid)
+ logger.debug "4"*100
+ g_branch = g_branch.default_branch.to_s
+ logger.debug "5"*100
+ rescue =>e
+ logger.error("get gitlab project failed: " + e)
end
+ logger.debug "6"*100
@rev = g_branch.nil? ? "master" : g_branch
+ logger.debug "7"*100
end
# 根据对应的请求,返回对应的数据
respond_to do |format|
@@ -393,7 +404,7 @@ class ProjectsController < ApplicationController
unless @project.gpid.nil?
g = Gitlab.client
@gitlab_branches = g.branches(@project.gpid)
- @branch_names = g.branches(@project.gpid).map{|b| b.name}
+ @branch_names = @gitlab_branches.map{|b| b.name}
@gitlab_default_branch = g.project(@project.gpid).default_branch
end
end
@@ -645,7 +656,7 @@ class ProjectsController < ApplicationController
params[:project][:is_public] ? @project.is_public = 1 : @project.is_public = 0
params[:project][:hidden_repo] ? @project.hidden_repo = 1 : @project.hidden_repo = 0
# 更新公开私有时同步gitlab公开私有
- unless @project.gpid.nil?
+ if !@project.gpid.nil? && @project.is_public != (params[:project][:is_public] == "on" ? true : false)
g = Gitlab.client
params[:project][:is_public] ? g.edit_project(@project.gpid, 20, params[:branch]) : g.edit_project(@project.gpid, 0, params[:branch])
end
diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb
new file mode 100644
index 000000000..2c55f780c
--- /dev/null
+++ b/app/controllers/quality_analysis_controller.rb
@@ -0,0 +1,227 @@
+class QualityAnalysisController < ApplicationController
+ before_filter :find_project_by_project_id#, :except => [:getattachtype]
+ before_filter :find_quality_analysis, :only => [:edit, :update_jenkins_job]
+ before_filter :authorize
+ before_filter :connect_jenkins, :only => [:create, :edit, :update_jenkins_job, :index]
+ layout "base_projects"
+ include ApplicationHelper
+ include QualityAnalysisHelper
+ require 'jenkins_api_client'
+ require 'nokogiri'
+ require 'json'
+ require 'open-uri'
+
+ def show
+
+ end
+
+ # params 说明:{identifier:版本库名}
+ def create
+ begin
+ user_name = User.find(params[:user_id]).try(:login)
+ identifier = params[:identifier]
+ rep_id = params[:rep_id]
+
+ # job_name and sonar_name 前者为job名字,后者为jenkins配置名
+ job_name = "#{user_name}-#{rep_id}"
+ sonar_name = "#{user_name}:#{rep_id}"
+
+ # Checks if the given job exists in Jenkins.
+ unless @client.job.exists?(job_name)
+ @g = Gitlab.client
+ branch = params[:branch]
+ language = swith_language_type(params[:language])
+ path = params[:path].blank? ? "./" : params[:path]
+ qa = QualityAnalysis.where(:project_id => @project.id, :author_login => user_name).first
+ version = qa.nil? ? 1 : qa.sonar_version + 1
+ properties = "sonar.projectKey=#{sonar_name}
+ sonar.projectName=#{sonar_name}
+ sonar.projectVersion=#{version}
+ sonar.sources=#{path}
+ sonar.language=#{language.downcase}
+ sonar.sourceEncoding=utf-8"
+ git_url = @gitlab_address.to_s+"/"+@project.owner.to_s+"/"+ identifier + "."+"git"
+
+ # 替换配置文件
+ @doc = Nokogiri::XML(File.open(File.join(Rails.root, 'tmp', 'config.xml')))
+ @doc.at_xpath("//hudson.plugins.git.UserRemoteConfig/url").content = git_url
+ @doc.at_xpath("//hudson.plugins.git.BranchSpec/name").content = "*/#{branch}"
+ @doc.at_xpath("//hudson.plugins.sonar.SonarRunnerBuilder/properties").content = properties # sonar-properties
+
+ # jenkins job创建
+ jenkins_job = @client.job.create("#{job_name}", @doc.to_xml)
+ logger.info("Jenkins status of create ==> #{jenkins_job}")
+
+ # 将地址作为hook值添加到gitlab
+ @g.add_project_hook(@project.gpid, @jenkins_address + "/project/#{job_name}")
+ # job创建完成后自动运行job,如果运行成功则返回‘200’
+ code = @client.job.build("#{job_name}")
+ logger.error("build result ==> #{code}")
+
+ # 判断调用sonar分析是否成功
+ # 等待启动时间处理, 最长时间为30分钟
+ for i in 0..60 do
+ sleep(60)
+ @current_build_status = @client.job.get_current_build_status("#{job_name}")
+ if (@current_build_status != "not_run" || @current_build_status != "running")
+ break
+ if i == 60
+ @build_console_result = false
+ break
+ end
+ end
+ end
+
+ @console_build = @client.job.get_console_output("#{job_name}", build_num = 0, start = 0, mode = 'text')
+ logger.info("@current_build_status is ==> #{@current_build_status}")
+ logger.info("@console_build is ==> #{@console_build}")
+
+ d = @client.job.delete("#{job_name}") if jenkins_job == '200' && code != '201'
+ logger.error("delete result ==> #{code}")
+ if qa.blank? && @current_build_status == "success"
+ QualityAnalysis.create(:project_id => @project.id, :author_login => user_name, :rep_identifier => identifier,
+ :sonar_version => version, :path => path, :branch => branch, :language => language, :sonar_name => "#{user_name}:#{rep_id}")
+ else
+ qa.update_attribute(:sonar_version, version)
+ end
+ end
+ rescue => e
+ puts e
+ end
+ respond_to do |format|
+ format.html{redirect_to project_quality_analysis_path(:project_id => @project.id, :resource_id => sonar_name, :branch => branch, :current_build_status => @current_build_status, :job_name => job_name)}
+ # format.js{redirect_to project_quality_analysis_path(:project_id => @project.id, :resource_id => sonar_name, :branch => branch)}
+ end
+ end
+
+ # get language type
+ def swith_language_type language
+ if language == "c#"
+ "cs"
+ elsif language == "python"
+ "py"
+ elsif language == "c"
+ "c++"
+ else
+ language
+ end
+ end
+
+ def edit
+ @g = Gitlab.client
+ gitlab_branches = @g.branches(@project.gpid)
+ @branch_names = gitlab_branches.map{|b| b.name}
+ @gitlab_default_branch = @g.project(@project.gpid).default_branch
+ end
+
+ # 更新Jenkins job,主要包括相关配置文件参数的更新,Trustie平台数据的更新
+ def update_jenkins_job
+ begin
+ rep_id = Repository.where(:project_id => @project.id).first.try(:id)
+ logger.error("#############################===>666")
+ sonar_name = @quality_analysis.sonar_name
+ job_name = "#{@quality_analysis.author_login}-#{rep_id}"
+ version = @quality_analysis.sonar_version
+ path = params[:path].blank? ? "./" : params[:path]
+ language = swith_language_type(params[:language])
+ branch = params[:branch]
+ identifier = @quality_analysis.rep_identifier
+ properties = "sonar.projectKey=#{sonar_name}
+ sonar.projectName=#{sonar_name}
+ sonar.projectVersion=#{version}
+ sonar.sources=#{path}
+ sonar.language=#{language.downcase}
+ sonar.sourceEncoding=utf-8"
+ git_url = @gitlab_address.to_s+"/"+@project.owner.to_s+"/"+ identifier + "."+"git"
+
+ # modify config.yml
+ @doc = Nokogiri::XML(File.open(File.join(Rails.root, 'tmp', 'config.xml')))
+ @doc.at_xpath("//hudson.plugins.git.UserRemoteConfig/url").content = git_url
+ @doc.at_xpath("//hudson.plugins.git.BranchSpec/name").content = "*/#{branch}"
+ @doc.at_xpath("//hudson.plugins.sonar.SonarRunnerBuilder/properties").content = properties # sonar-properties
+
+ # update成功则返回 ‘200’
+ jenkins_job = @client.job.update("#{job_name}", @doc.to_xml)
+ get_current_build_status = @client.job.get_current_build_status("Hjqreturn-1280")
+ logger.error("Failed to update job: ==> #{jenkins_job}") unless jenkins_job == '200'
+
+ # 数据更新到Trustie数据库
+ if jenkins_job == '200'
+ logger.info("quality_ananlysis will be updated: ==> #{jenkins_job}")
+ @quality_analysis.path = path
+ @quality_analysis.language = language
+ @quality_analysis.branch = branch
+ @quality_analysis.save
+ end
+ rescue Exception => e
+ logger.error("Update jenkins job: #{e}")
+ end
+ respond_to do |format|
+ format.html{redirect_to project_quality_analysis_path(:project_id => @project.id)}
+ format.js
+ end
+ end
+
+ # resource_id: login + @repository.id
+ def index
+ begin
+ @resource_id = params[:resource_id]
+ @sonar_address = Redmine::Configuration['sonar_address']
+ @jenkins_address = Redmine::Configuration['jenkins_address']
+ if params[:resource_id].nil?
+ @name_flag = true
+ projects_date = open(@sonar_address + "/api/projects/index").read
+ arr = JSON.parse(projects_date).map {|m| m["nm"]} # eg: ["Hjqreturn:cc_rep", "Hjqreturn:putong", "Hjqreturn:sonar_rep2", "shitou:sonar_rep"]
+ @quality_analyses = QualityAnalysis.where(:project_id => @project.id).select{|qa| arr.include?(qa.sonar_name)}
+
+ else
+ if params[:current_build_status] == "failure"
+ job_name = params[:job_name]
+ @console_build = @client.job.get_console_output("#{job_name}", build_num = 0, start = 0, mode = 'text')
+ end
+ complexity_date = open(@sonar_address + "/api/resources/index?resource=#{@resource_id}&depth=0&metrics=sqale_rating,function_complexity,duplicated_lines_density,comment_lines_density,sqale_index,lines,file_line,files,functions,classes,directories").read
+ @complexity =JSON.parse(complexity_date).first
+ issue_date = open(@sonar_address + "/api/resources/index?resource=#{@resource_id}&depth=0&metrics=blocker_violations,critical_violations,major_violations,minor_violations,info_violations,violations").read
+ @sonar_issues = JSON.parse(issue_date).first
+ end
+ rescue => e
+ puts e
+ end
+
+ end
+
+ # Find project of id params[:project_id]
+ def find_project_by_project_id
+ @project = Project.find(params[:project_id])
+ rescue ActiveRecord::RecordNotFound
+ render_404
+ end
+
+ def find_quality_analysis
+ begin
+ @quality_analysis = QualityAnalysis.find(params[:id])
+ rescue
+ render_404
+ end
+ end
+
+ # Authorize the user for the requested action
+ def authorize(ctrl = params[:controller], action = params[:action], global = false)
+ unless @project.archived? && @project.gpid.nil?
+ true
+ else
+ render_403 :message => :notice_not_authorized_archived_project
+ end
+ end
+
+ def connect_jenkins
+ @gitlab_address = Redmine::Configuration['gitlab_address']
+ @jenkins_address = Redmine::Configuration['jenkins_address']
+
+ # connect jenkins
+ @client = JenkinsApi::Client.new(:server_url => @jenkins_address, :username => "temp", :password => '123123')
+ rescue => e
+ logger.error("failed to connect Jenkins ==> #{e}")
+ end
+
+end
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 9e785c562..d0904ddf5 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -20,6 +20,8 @@ require 'SVG/Graph/BarHorizontal'
require 'digest/sha1'
require 'redmine/scm/adapters/abstract_adapter'
require 'tempfile'
+require 'json'
+require 'open-uri'
class ChangesetNotFound < Exception; end
class InvalidRevisionParam < Exception; end
@@ -30,11 +32,13 @@ class RepositoriesController < ApplicationController
menu_item :settings, :only => [:new, :create, :edit, :update, :destroy, :committers]
default_search_scope :changesets
- before_filter :find_project_by_project_id, :only => [:new, :create, :newrepo, :stats]
+ before_filter :find_project_by_project_id, :only => [:new, :create, :newrepo, :stats, :quality_analysis]
before_filter :find_repository, :only => [:edit, :update, :destroy, :committers]
before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo, :to_gitlab, :forked, :project_archive]
before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue]
- before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :commit_diff, :project_archive]
+ before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :commit_diff, :project_archive, :quality_analysis]
+ # 链接gitlab
+ before_filter :connect_gitlab, :only => [:quality_analysis]
accept_rss_auth :revisions
# hidden repositories filter // 隐藏代码过滤器
before_filter :check_hidden_repo, :only => [:show, :stats, :revisions, :revision, :diff ]
@@ -43,6 +47,7 @@ class RepositoriesController < ApplicationController
helper :project_score
#@root_path = RepositoriesHelper::ROOT_PATH
$g=Gitlab.client
+ require 'net/ssh'
rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed
def new
@@ -306,6 +311,37 @@ update
end
end
+ def quality_analysis
+ gitlab_branches = @g.branches(@project.gpid)
+ @branch_names = gitlab_branches.map{|b| b.name}
+ @gitlab_default_branch = @g.project(@project.gpid).default_branch
+ # language = params[:language]
+ # branch = params[:branch]
+ # path = params[:path]
+ # user_name = User.find(@project.user_id).try(:login)
+ # rep_name = params[:repository_id]
+ # host = "192.168.0.200"
+ # port = "1125"
+ # username = "git"
+ # password = "123123"
+ # server_cmd1 = "sh gitclone.sh" + " " + user_name + " " + rep_name
+ # # 连接到远程主机 foobar
+ # ssh = Net::SSH.start(host, username, :port => port, :password => password) do |ssh|
+ # result = ssh.exec!(server_cmd1)
+ # path = "/home/git/repo/" + user_name + "/" + rep_name
+ # # sonar 分析
+ # # server_cmd2
+ # # 删除clone的版本库
+ # # server_cmd3
+ # end
+ respond_to do |format|
+ format.js
+ format.html{
+ render :layout => "base_projects"
+ }
+ end
+ end
+
def destroy
DestroyRepositoryTask.new.destroy(User.current.id, @repository.id)
@repository.hidden = true
@@ -338,7 +374,7 @@ update
@changesets = g.commits(@project.gpid, :ref_name => @rev)
g_project = g.project(@project.gpid)
# 总的提交数
- @changesets_all_count = @project.gpid.nil? ? 0 : g_project.commit_count
+ @changesets_all_count = @project.gpid.nil? ? 0 : commit_count(@project, @rev)
@g_default_branch = g_project.default_branch.nil? ? "master" : g_project.default_branch
# 访问该页面的是会后则刷新
if @project.project_score.nil?
@@ -615,6 +651,14 @@ update
project.project_score.update_attribute(:commit_time, date.created_at)
end
+ # 链接gitlab
+ def connect_gitlab
+ @g = Gitlab.client
+ unless @project.gpid.nil?
+ @g_project = @g.project(@project.gpid)
+ end
+ end
+
def find_repository
@repository = Repository.find(params[:id])
@project = @repository.project
diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb
index e0aff6254..44f4378fe 100644
--- a/app/controllers/school_controller.rb
+++ b/app/controllers/school_controller.rb
@@ -150,4 +150,55 @@ class SchoolController < ApplicationController
format.js
end
end
+
+ #申请高校(单位) name:名称 province:省 city:市 address:地址 remarks:备注
+ def apply_add_school
+
+ data = {result:0,name:params[:name],school_id:0}
+ #0 成功 1参数错误 2名称已存在
+ data[:result] = 0
+
+ #检验参数
+ if params[:name] == "" || params[:province] == "" || params[:city] == "" || params[:address] == ""
+ data[:result] = 1
+ else
+ school_id = School.find_by_sql("select id from schools where name='#{params[:name]}'").first
+ if school_id
+ data[:result] = 2
+ else
+ school = School.new
+ school.name = params[:name].strip
+ school.pinyin = Pinyin.t(params[:name].strip, splitter: '')
+ school.save
+
+ #status 0未处理 1通过 2拒绝
+ applyschool = ApplyAddSchools.new
+ applyschool.school_id = school.id
+ applyschool.name = school.name
+ applyschool.province = params[:province]
+ applyschool.city = params[:city]
+ applyschool.address = params[:address]
+ applyschool.remarks = params[:remarks]
+ applyschool.save
+
+ data[:school_id] = school.id
+ end
+ end
+ render :json =>data
+ end
+
+ def search_repeat_schoolname
+ status = 0
+ name = params[:name]
+
+ if name
+ school_id = School.find_by_sql("select id from schools where name='#{name}'").first
+
+ if school_id
+ status = 1
+ end
+ end
+
+ render :json =>status
+ end
end
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index d478b4d63..661770206 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -1096,7 +1096,7 @@ class StudentWorkController < ApplicationController
all_student_ids = "(" + pro.members.map{|member| member.user_id}.join(",") + ")"
end
all_students = User.where("id in #{all_student_ids}")
- student_work_id = @homework.student_work_projects.where("user_id=?",User.current.id).empty? ? -1 : @homework.student_work_projects.where("user_id=?",User.current.id).first.student_work_id
+ student_work_id = @homework.student_work_projects.where("user_id=? and student_work_id is not null",User.current.id).first.nil? ? -1 : @homework.student_work_projects.where("user_id=?",User.current.id).first.student_work_id
@commit_student_ids = @homework.student_work_projects.where("student_work_id != #{student_work_id}").map{|student| student.user_id}
@users = searchstudent_by_name all_students,name
respond_to do |format|
@@ -1209,13 +1209,18 @@ class StudentWorkController < ApplicationController
sheet1 = book.create_worksheet :name => "homework"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
- if @homework.homework_type == 1 #匿评作业
- sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
- l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_f_score),l(:excel_commit_time)])
+ if @homework.homework_type == 1 #普通作业
+ if @homework.anonymous_comment ==0
+ sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
count_row = 1
items.each do |homework|
sheet1[count_row,0]=homework.user.id
- sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s
+ sheet1[count_row,1] = homework.user.show_name
sheet1[count_row,2] = homework.user.login
sheet1[count_row,3] = homework.user.user_extensions.student_id
sheet1[count_row,4] = homework.user.mail
@@ -1223,18 +1228,31 @@ class StudentWorkController < ApplicationController
sheet1[count_row,6] = strip_html homework.description
sheet1[count_row,7] = homework.teacher_score.nil? ? l(:label_without_score) : homework.teacher_score.round(2)
sheet1[count_row,8] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : homework.teaching_asistant_score.round(2)
- sheet1[count_row,9] = homework.student_score.nil? ? l(:label_without_score) : homework.student_score.round(2)
- sheet1[count_row,10] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
- sheet1[count_row,11] = format_time(homework.created_at)
+ if @homework.anonymous_comment ==0
+ sheet1[count_row,9] = homework.student_score.nil? ? l(:label_without_score) : homework.student_score.round(2)
+ sheet1[count_row,10] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.absence_penalty
+ sheet1[count_row,11] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,12] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,13] = format_time(homework.created_at)
+ else
+ sheet1[count_row,9] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,10] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,11] = format_time(homework.created_at)
+ end
count_row += 1
end
elsif @homework.homework_type == 2 #编程作业
- sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
- l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_n_score),l(:excel_f_score),l(:excel_commit_time)])
+ if @homework.anonymous_comment ==0
+ sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
count_row = 1
items.each do |homework|
sheet1[count_row,0]=homework.user.id
- sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s
+ sheet1[count_row,1] = homework.user.show_name
sheet1[count_row,2] = homework.user.login
sheet1[count_row,3] = homework.user.user_extensions.student_id
sheet1[count_row,4] = homework.user.mail
@@ -1243,11 +1261,48 @@ class StudentWorkController < ApplicationController
sheet1[count_row,7] = homework.teacher_score.nil? ? l(:label_without_score) : homework.teacher_score.round(2)
sheet1[count_row,8] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : homework.teaching_asistant_score.round(2)
sheet1[count_row,9] = homework.system_score.nil? ? l(:label_without_score) : homework.system_score.round(2)
- sheet1[count_row,10] = homework.student_score.nil? ? l(:label_without_score) : homework.student_score.round(2)
- sheet1[count_row,11] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
- sheet1[count_row,12] = format_time(homework.created_at)
+ if @homework.anonymous_comment ==0
+ sheet1[count_row,10] = homework.student_score.nil? ? l(:label_without_score) : homework.student_score.round(2)
+ sheet1[count_row,11] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.absence_penalty
+ sheet1[count_row,12] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,13] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,14] = format_time(homework.created_at)
+ else
+ sheet1[count_row,10] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,11] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,12] = format_time(homework.created_at)
+ end
count_row += 1
end
+ elsif @homework.homework_type == 3 #分组作业
+ if @homework.anonymous_comment ==0
+ sheet1.row(0).concat([l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ else
+ sheet1.row(0).concat([l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des),
+ l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)])
+ end
+ count_row = 1
+ items.each do |homework|
+ sheet1[count_row,0] = get_group_member_names homework
+ sheet1[count_row,1] = homework.name
+ sheet1[count_row,2] = (homework.project_id == 0 || homework.project_id.nil?) ? l(:excel_no_project) : homework.project.name
+ sheet1[count_row,3] = strip_html homework.description
+ sheet1[count_row,4] = homework.teacher_score.nil? ? l(:label_without_score) : homework.teacher_score.round(2)
+ sheet1[count_row,5] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : homework.teaching_asistant_score.round(2)
+ if @homework.anonymous_comment ==0
+ sheet1[count_row,6] = homework.student_score.nil? ? l(:label_without_score) : homework.student_score.round(2)
+ sheet1[count_row,7] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.absence_penalty
+ sheet1[count_row,8] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,9] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,10] = format_time(homework.created_at)
+ else
+ sheet1[count_row,6] = (@homework.teacher_priority == 1 && !homework.teacher_score.nil?) ? 0 : homework.late_penalty
+ sheet1[count_row,7] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : homework.score.round(2) : l(:label_without_score)
+ sheet1[count_row,8] = format_time(homework.created_at)
+ end
+ count_row += 1
+ end
end
book.write xls_report
xls_report.string
diff --git a/app/controllers/syllabuses_controller.rb b/app/controllers/syllabuses_controller.rb
index 69982b99a..8ff88823d 100644
--- a/app/controllers/syllabuses_controller.rb
+++ b/app/controllers/syllabuses_controller.rb
@@ -1,15 +1,164 @@
+# encoding: utf-8
class SyllabusesController < ApplicationController
+ include ApplicationHelper
+ helper :attachments
+ include AttachmentsHelper
+ include CoursesHelper
- before_filter :is_logged, :only => [:index, :show]
- before_filter :find_syllabus, :only => [:show]
+ before_filter :is_logged, :only => [:index, :show, :edit, :new, :update, :destroy, :delete_syllabus]
+ before_filter :find_syllabus, :only => [:show, :edit, :update, :destroy, :syllabus_courselist, :edit_syllabus_eng_name, :update_base_info, :delete_syllabus, :delete_des]
def index
user = User.current
@syllabuses = user.syllabuses
end
def show
- @courses = @syllabus.courses
+ #@courses = @syllabus.courses
+ respond_to do |format|
+ format.js
+ format.html{render :layout => 'base_syllabus'}
+ format.api
+ end
+ end
+
+ def new
+ @syllabus = Syllabus.new
+ render :layout => 'new_base'
+ end
+
+ def create
+ if User.current.user_extensions.identity
+ @syllabus = Syllabus.new
+ @syllabus.title = params[:title]
+ @syllabus.eng_name = params[:eng_name]
+ @syllabus.user_id = User.current.id
+ @syllabus.description = Message.where("id = 19412").first.nil? ? '' : Message.where("id = 19412").first.content
+ if @syllabus && @syllabus.save
+ respond_to do |format|
+ flash[:notice] = l(:notice_successful_create)
+ format.html {redirect_to syllabus_path(@syllabus)}
+ format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'syllabuses', :action => 'show', :id => @syllabus.id) }
+ end
+ else
+ respond_to do |format|
+ flash[:notice] = l(:notice_create_failed)
+ format.html { redirect_to new_syllabus_path } #Added by young
+ format.api { render_validation_errors(@syllabus) }
+ end
+ end
+ end
+ end
+
+ def edit
+ respond_to do |format|
+ format.html{render :layout => 'base_syllabus'}
+ end
+ end
+
+ def delete_syllabus
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ def update
+ @syllabus.description = params[:syllabus][:description]
+ @syllabus.des_status = 1
+ @syllabus.save_attachments(params[:attachments])
+ if @syllabus.save
+ if params[:asset_id]
+ ids = params[:asset_id].split(',')
+ update_kindeditor_assets_owner ids,@syllabus.id,OwnerTypeHelper::SYLLABUS
+ end
+ redirect_to syllabus_path(@syllabus)
+ else
+ redirect_to syllabus_path(@syllabus)
+ end
+ end
+
+ #删除课程大纲的描述
+ def delete_des
+ if @syllabus
+ @syllabus.description = Message.where("id = 19412").first.nil? ? '' : Message.where("id = 19412").first.content
+ @syllabus.des_status = 0
+ @syllabus.attachments.destroy_all
+ if @syllabus.save
+ redirect_to syllabus_path(@syllabus)
+ end
+ end
+ end
+
+ def destroy
+ if @syllabus && @syllabus.courses.empty?
+ @syllabus.destroy
+ redirect_to user_courselist_user_path(User.current.id)
+ end
+ end
+
+ #班级列表
+ def syllabus_courselist
+ @order, @c_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1
+
+ #确定 sort_type
+ if @order.to_i == @type.to_i
+ @c_sort = @c_sort.to_i == 1 ? 2 : 1 #1升序 2降序
+ else
+ @c_sort = 2
+ end
+
+ sort_name = "updated_on"
+ sort_type = @c_sort == 1 ? "asc" : "desc"
+
+ @courses = User.current.courses.visible.where("is_delete =? and syllabus_id =?", 0, @syllabus.id).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS #{sort_name}").order("#{sort_name} #{sort_type}")
+
+ #根据 作业+资源数排序
+ if @order.to_i == 2
+ @type = 2
+ @courses.each do |course|
+ course[:infocount] = (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) ? (course.homework_commons.count + visable_attachemnts_incourse(course).count) : (course.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(course).count)
+ if course[:infocount] < 0
+ course[:infocount] = 0
+ end
+ end
+ @c_sort == 1 ? (@courses = @courses.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@courses = @courses.sort{|x,y| y[:infocount] <=> x[:infocount]})
+ @courses = sortby_time_countcommon_nosticky @courses,sort_name
+ else
+ @type = 1
+ end
+
+ #分页
+ @limit = 10
+ @is_remote = true
+ @atta_count = @courses.count
+ @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
+ @offset ||= @atta_pages.offset
+ @courses = paginateHelper @courses,@limit
+
+ respond_to do |format|
+ format.js
+ format.html{render :layout => 'base_syllabus'}
+ end
+ end
+
+ #修改英文名称
+ def edit_syllabus_eng_name
+ if @syllabus
+ @syllabus.update_column("eng_name",params[:eng_name])
+ end
+ respond_to do |format|
+ format.js
+ end
+ end
+ #编辑属性
+ def update_base_info
+ if @syllabus
+ @syllabus.update_attributes(:credit => params[:credit], :hours => params[:hours], :theory_hours => params[:theory_hours], :practice_hours => params[:practice_hours], :applicable_major => params[:applicable_major], :pre_course => params[:pre_course])
+ @syllabus.update_attributes(:syllabus_type => params[:syllabus_type])
+ respond_to do |format|
+ format.js
+ end
+ end
end
private
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 2c390025e..e66f88848 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -13,6 +13,7 @@ class TagsController < ApplicationController
include ForumsHelper
include AttachmentsHelper
include ContestsHelper
+ include SyllabusesHelper
include ActsAsTaggableOn::TagsHelper
include TagsHelper
include FilesHelper
@@ -529,6 +530,8 @@ class TagsController < ApplicationController
@obj = Course.find_by_id(@obj_id)
when '10'
@obj = Attachment.find_by_id(@obj_id)
+ when '11'
+ @obj = Syllabus.find_by_id(@obj_id)
else
@obj = nil
end
@@ -619,6 +622,9 @@ class TagsController < ApplicationController
when '9' then
@obj = Course.find_by_id(obj_id)
@obj_pages, @courses_results, @results_count = for_pagination(get_courses_by_tag(selected_tags))
+ when '11' then
+ @obj = Syllabus.find_by_id(obj_id)
+ @obj_pages, @syllabuses_results, @results_count = for_pagination(get_syllabuses_by_tag(selected_tags))
else
@obj = nil
end
@@ -684,6 +690,8 @@ class TagsController < ApplicationController
return 'Course'
when '10'
return 'Attachment'
+ when '11'
+ return 'Syllabus'
else
render_error :message => e.message
return
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index ca63f496c..69a38610e 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -87,7 +87,10 @@ class UsersController < ApplicationController
#展开所有回复
def show_all_replies
- @comment = JournalsForMessage.find params[:comment].to_i
+ case params[:type]
+ when 'JournalsForMessage'
+ @comment = JournalsForMessage.find params[:comment].to_i
+ end
end
#二级回复
@@ -95,6 +98,7 @@ class UsersController < ApplicationController
case params[:type]
when 'HomeworkCommon'
@reply = JournalsForMessage.find params[:reply_id]
+ @type = 'HomeworkCommon'
if params[:user_activity_id]
@user_activity_id = params[:user_activity_id]
else
@@ -102,6 +106,11 @@ class UsersController < ApplicationController
end
@is_in_course = params[:is_in_course].to_i
@course_activity = params[:course_activity].to_i
+ when 'JournalsForMessage'
+ @reply = JournalsForMessage.find params[:reply_id]
+ @user_activity_id = params[:user_activity_id]
+ @activity_id = params[:activity_id]
+ @type = 'JournalsForMessage'
end
respond_to do |format|
format.js
@@ -132,10 +141,10 @@ class UsersController < ApplicationController
# 未读的消息存放在数组
mess = message_all.message
if (message_all.message_type != "SystemMessage"&& !mess.nil? && (mess.viewed == 0 || !mess.viewed)) || (message_all.message_type == "SystemMessage"&& !mess.nil? && mess.created_at > onclick_time)
- unless (message_all.message_type == 'CourseMessage' && mess && mess.course.is_delete == 1)
+ unless (message_all.message_type == 'CourseMessage' && mess && mess.course && mess.course.is_delete == 1)
@message_alls << mess
end
- break if @message_alls.length == 5
+ break if @message_alls.length == 10
end
end
end
@@ -166,7 +175,7 @@ class UsersController < ApplicationController
messages = MessageAll.where("(user_id =? and message_type !=?) or message_type =?" ,@user.id, "SystemMessage", "SystemMessage").includes(:message).order("created_at desc")
messages.each do |message_all|
mess = message_all.message
- unless (message_all.message_type == 'CourseMessage' && mess && mess.course.is_delete == 1)
+ unless (message_all.message_type == 'CourseMessage' && mess && mess.course && mess.course.is_delete == 1)
@message_alls << mess
end
end
@@ -177,7 +186,7 @@ class UsersController < ApplicationController
# 在点击或者刷新消息列表后未读的消息存放在数组
mess = message_all.message
if message_all.message_type != "SystemMessage"&& !mess.nil? && (mess.viewed == 0 || !mess.viewed)
- unless (message_all.message_type == 'CourseMessage' && mess && mess.course.is_delete == 1)
+ unless (message_all.message_type == 'CourseMessage' && mess && mess.course && mess.course.is_delete == 1)
@message_alls << mess
end
end
@@ -1239,6 +1248,12 @@ class UsersController < ApplicationController
render :layout=>'new_base_user'
end
+ #给某人留言
+ def feedBackTo
+
+
+ end
+
def user_comments
end
@@ -1358,7 +1373,15 @@ class UsersController < ApplicationController
#显示更多用户课程
def user_courses4show
@page = params[:page].to_i + 1
- @courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5)
+ @type = params[:type]
+ if @type == 'User'
+ @courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5)
+ @all_count = @user.courses.visible.where("is_delete =?", 0).count
+ elsif @type == 'Syllabus'
+ @syllabus = Syllabus.where("id = #{params[:syllabus]}").first
+ @courses = User.current.courses.visible.where("is_delete =? and syllabus_id =?", 0, @syllabus.id).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5)
+ @all_count = User.current.courses.visible.where("is_delete =? and syllabus_id =?", 0, @syllabus.id).count
+ end
end
#显示更多用户项目
@@ -1489,8 +1512,8 @@ class UsersController < ApplicationController
# 减少数据库交互
watched_user_ids = User.watched_by(@user.id).count == 0 ? " " : ("," + User.watched_by(@user.id).map{|u| u.id.to_s }.join(','))
user_ids = "(" + @user.id.to_s + watched_user_ids + ")"
- watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",")
- blog_ids = "(" + watched_user_blog_ids + ")"
+ watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}")
+ blog_ids = watched_user_blog_ids.empty? ? "(-1)" : "(" + watched_user_blog_ids.map { |blog| blog.id}.join(",") + ")"
@user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" +
"or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+
@@ -3167,23 +3190,26 @@ class UsersController < ApplicationController
@c_sort = 2
end
- sort_name = "updated_on"
+ sort_name = "updated_at"
sort_type = @c_sort == 1 ? "asc" : "desc"
- # @courses = @user.courses.visible.where("is_delete =?", 0).order("#{sort_name} #{sort_type}")
- @courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS #{sort_name}").order("#{sort_name} #{sort_type}")
+ @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 @order.to_i == 2
@type = 2
- @courses.each do |course|
- course[:infocount] = (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) ? (course.homework_commons.count + visable_attachemnts_incourse(course).count) : (course.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(course).count)
- if course[:infocount] < 0
- course[:infocount] = 0
+ @syllabus.each do |syllabus|
+ count = 0
+ courses = @courses.where("syllabus_id = #{syllabus.id}")
+ 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 ? (@courses = @courses.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@courses = @courses.sort{|x,y| y[:infocount] <=> x[:infocount]})
- @courses = sortby_time_countcommon_nosticky @courses,sort_name
+ @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
else
@type = 1
end
@@ -3191,10 +3217,10 @@ class UsersController < ApplicationController
#分页
@limit = 10
@is_remote = true
- @atta_count = @courses.count
+ @atta_count = @syllabus.count
@atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
@offset ||= @atta_pages.offset
- @courses = paginateHelper @courses,@limit
+ @syllabus = paginateHelper @syllabus,@limit
respond_to do |format|
format.js
@@ -3259,9 +3285,16 @@ class UsersController < ApplicationController
when 'News'
obj = News.where('id = ?', params[:id].to_i).first
@journals = obj.comments.reorder("created_on desc")
+ when 'Syllabus'
+ obj = Syllabus.where('id = ?', params[:id].to_i).first
+ @journals = obj.comments.reorder("created_on desc")
when 'JournalsForMessage'
obj = JournalsForMessage.where('id = ?', params[:id].to_i).first
- @journals = obj.children.reorder("created_on desc")
+ journals = []
+ @journals = get_all_children(journals, obj)
+ @type = 'JournalsForMessage'
+ @user_activity_id = params[:div_id].to_i if params[:div_id]
+ @allow_delete = params[:allow_delete]
when 'Issue'
obj = Issue.where('id = ?', params[:id].to_i).first
@journals = obj.journals.reorder("created_on desc")
diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb
index 169a33fce..4a79d6d93 100644
--- a/app/controllers/wechats_controller.rb
+++ b/app/controllers/wechats_controller.rb
@@ -3,10 +3,12 @@ class WechatsController < ActionController::Base
wechat_responder
include ApplicationHelper
-
+ ROOT_URL = ENV["wechat_url"] || "#{Setting.protocol}://#{Setting.host_name}"
+ #ROOT_URL = "http://www.trustie.net"
# default text responder when no other match
on :text do |request, content|
- request.reply.text "您的意见已收到,感谢您的反馈!" # Just echo
+ #邀请码
+ sendBindClass(request, {invite_code: content})
end
# When receive 'help', will trigger this responder
@@ -35,13 +37,13 @@ class WechatsController < ActionController::Base
# When subscribe user scan scene_id in public account
on :scan, with: 'scene_id' do |request, ticket|
- request.reply.text "Subscribe user #{request[:FromUserName]} Ticket #{ticket}"
+ sendBindClass(request, {ticket: ticket})
end
# When no any on :scan responder can match subscribe user scaned scene_id
on :event, with: 'scan' do |request|
if request[:EventKey].present?
- request.reply.text "event scan got EventKey #{request[:EventKey]} Ticket #{request[:Ticket]}"
+ sendBindClass(request, {ticket: request[:Ticket]})
end
end
@@ -62,6 +64,9 @@ class WechatsController < ActionController::Base
request.reply.text "User: #{request[:FromUserName]} click #{key}"
end
+ on :click, with: 'DEV' do |request, key|
+ request.reply.text "此功能正在开发中,很快就会上线,谢谢!"
+ end
# When user view URL in the menu button
on :view, with: 'http://wechat.somewhere.com/view_url' do |request, view|
request.reply.text "#{request[:FromUserName]} view #{view}"
@@ -128,12 +133,36 @@ class WechatsController < ActionController::Base
default_msg(request)
end
+ on :click, with: 'JOIN_CLASS' do |request, key|
+ uw = user_binded?(request[:FromUserName])
+ unless uw
+ sendBind(request)
+ else
+ request.reply.text "请直接回复5位班级邀请码\n(不区分大小写):"
+ end
+ end
+
+
+ def sendBindClass(request, params)
+ begin
+ uw = user_binded?(request[:FromUserName])
+ if !uw
+ return sendBind(request)
+ else
+ return join_class(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
request.reply.text "欢迎回来, #{uw.user.show_name}"
else
- request.reply.text "欢迎关注Trustie创新实践社区"
sendBind(request)
end
end
@@ -145,27 +174,61 @@ class WechatsController < ActionController::Base
您还未绑定确实的用户,请先绑定,谢谢!" } }
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=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
- pic_url = "#{Setting.protocol}://#{Setting.host_name}/images/weixin_pic.jpg"
+ url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities'}&response_type=code&scope=snsapi_base&state=login#wechat_redirect"
+ pic_url = "#{ROOT_URL}/images/weixin_pic.jpg"
+ article.item title: "#{n[:title]}",
+ description: n[:content],
+ pic_url: pic_url,
+ url: url
+ end
+ end
+
+ def join_class(params, user, request)
+ course = nil
+ course = Course.where(qrcode: params[:ticket]).first if params[:ticket]
+ course = Course.where(invite_code: params[:invite_code]).first if params[:invite_code]
+ raise "班级不存在,请确认您的邀请码是否输入正确,谢谢!" unless course
+
+ cs = CoursesService.new
+ status = cs.join_course({invite_code: course.invite_code}, user)
+ logger.info status
+ if status[:state] != 0
+ raise CoursesService::JoinCourseError.message(status[:state])
+ end
+
+ news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!',
+ content: "课程名称: #{course.name}\n班级名称: #{course.name}\n任课老师: #{course.teacher.show_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?id='+course.id.to_s}&response_type=code&scope=snsapi_base&state=myclass#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_open_id
+ def get_bind
begin
-
code = params[:code] || session[:wechat_code]
openid = get_openid_from_code(code)
raise "无法获取到微信openid" unless openid
- render :json => {status:0, openid: openid}
+
+ uw = UserWechat.where(openid: openid).first
+ raise "还未绑定trustie帐户" unless uw
+ logger.debug "get_bind ============= #{uw}"
+
+ user = uw.user
+ ::ApiKey.delete_all(user_id: user.id)
+ key = ::ApiKey.create!(user_id: user.id)
+
+ render :json =>{status: 0, token: key.access_token}
rescue Exception=>e
- render :json => {status: -1, msg: e.message}
+ render :json => {status: -1, message: e.message}
end
end
@@ -175,14 +238,14 @@ class WechatsController < ActionController::Base
code = params[:code] || session[:wechat_code]
openid = get_openid_from_code(code)
- raise "无法获取到openid" unless openid
- raise "此微信号已绑定用户, 不能重复绑定" if user_binded?(openid)
+ raise "无法获取到openid,请在微信中打开本页面" unless openid
+ raise "此微信号已绑定用户,不能重复绑定" if user_binded?(openid)
user, last_login_on = User.try_to_login(params[:username], params[:password])
- raise "用户名或密码错误,请重新输入" unless user
+ raise "用户名或密码错误,请重新输入" unless user
#补全用户信息
- raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat
+ raise "此用户已经绑定过公众号,请换一个帐户试试" if user.user_wechat
UserWechat.create!(
openid: openid,
@@ -206,19 +269,26 @@ class WechatsController < ActionController::Base
def user_activities
session[:wechat_code] = params[:code] if params[:code]
- code = params[:code] || session[:wechat_code]
- openid = get_openid_from_code(code)
- @wechat_user = user_binded?(openid)
- unless @wechat_user
- redirect_to login_wechat_path
- return
+ @path = '/'+(params[:state] || '')
+ open_id = get_openid_from_code(params[:code]) rescue
+ unless open_id
+ render 'wechats/open_wechat', layout: nil and return
+ end
+ if params[:state] == 'myclass'
+ @course_id = params[:id];
end
+ session[:wechat_openid] = open_id
+ if params[:code]
+ redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return
+ end
render 'wechats/user_activities', layout: nil
end
+
private
def get_openid_from_code(code)
+ return 'oCnvgvz8R7QheXE-R9Kkr39j8Ndg' if code =='only-for-test'
openid = session[:wechat_openid]
unless openid
diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb
index 22b7f1f52..828739cc4 100644
--- a/app/controllers/words_controller.rb
+++ b/app/controllers/words_controller.rb
@@ -54,15 +54,16 @@ class WordsController < ApplicationController
:reply_id => reply_user_id,
:notes => content,
:is_readed => false}
- @jfm = add_reply_adapter options
+ @activity = params[:activity_id].nil? ? JournalsForMessage.find(parent_id) : JournalsForMessage.find(params[:activity_id].to_i)
+ @jfm = add_reply_adapter(@activity, options)
@save_succ = true if @jfm.errors.empty?
if @save_succ
- update_course_activity('JournalsForMessage',parent_id)
- update_user_activity('JournalsForMessage',parent_id)
- update_forge_activity('JournalsForMessage',parent_id)
- update_org_activity('JournalsForMessage',parent_id)
- update_principal_activity('JournalsForMessage',parent_id)
- (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now)
+ update_course_activity('JournalsForMessage',@activity.id)
+ update_user_activity('JournalsForMessage',@activity.id)
+ update_forge_activity('JournalsForMessage',@activity.id)
+ update_org_activity('JournalsForMessage',@activity.id)
+ update_principal_activity('JournalsForMessage',@activity.id)
+ @activity.update_attribute(:updated_on,Time.now)
end
respond_to do |format|
# format.html {
@@ -76,8 +77,6 @@ class WordsController < ApplicationController
format.js {
#@reply_type = params[:reply_type]
@user_activity_id = params[:user_activity_id]
- @activity = JournalsForMessage.find(parent_id)
- @is_activity = params[:is_activity] if params[:is_activity]
}
end
@@ -92,13 +91,14 @@ class WordsController < ApplicationController
elsif @journal_destroyed.jour_type == "Course"
@course = Course.find @journal_destroyed.jour_id
@jours_count = @course.journals_for_messages.where('m_parent_id IS NULL').count
+ @user_activity_id = params[:user_activity_id] if params[:user_activity_id]
+ @activity = JournalsForMessage.where("id = #{params[:activity_id].to_i}").first if params[:activity_id]
elsif @journal_destroyed.jour_type == "Principal"
@user = User.find(@journal_destroyed.jour_id)
@jours_count = @user.journals_for_messages.where('m_parent_id IS NULL').count
@is_user = true
@user_activity_id = params[:user_activity_id] if params[:user_activity_id]
- @is_activity = params[:is_activity].to_i if params[:is_activity]
- @activity = @journal_destroyed.parent if @journal_destroyed.parent
+ @activity = JournalsForMessage.where("id = #{params[:activity_id].to_i}").first if params[:activity_id]
unless @activity
redirect_to feedback_path(@user)
return
@@ -264,6 +264,28 @@ class WordsController < ApplicationController
end
end
+ #课程大纲的回复
+ def leave_syllabus_message
+ if User.current.logged?
+ @user = User.current
+ @syllabus = Syllabus.find(params[:id]);
+ if params[:comment].size>0 && User.current.logged? && @user
+ feedback = Syllabus.add_syllabus_jour(@user, params[:comment], params[:id])
+ if (feedback.errors.empty?)
+ if params[:asset_id]
+ ids = params[:asset_id].split(',')
+ update_kindeditor_assets_owner ids,feedback[:id],OwnerTypeHelper::JOURNALSFORMESSAGE
+ end
+ redirect_to syllabus_path(@syllabus)
+ else
+ flash[:error] = feedback.errors.full_messages[0]
+ end
+ end
+ else
+ render_403
+ end
+ end
+
#作业的回复
def leave_homework_message
if User.current.logged?
@@ -337,6 +359,27 @@ class WordsController < ApplicationController
UserExtensions.introduction(user, message)
redirect_to user_url(user.id)
end
+
+ #邮箱激活问题留言 留言成功给出提示框
+ def leave_email_activation_message
+ status = 1 #成功
+ me = User.find(params[:user])
+ if me
+ #课程使者id=1
+ @user = User.find(1)
+ if params[:text].size>0 && @user
+ # @user.add_jour(me, params[:text])
+ #私信
+ message = "【未收到激活邮件的用户反馈,用户邮箱:"+me.mail+"】
"+params[:text]
+ @user.journals_for_messages << JournalsForMessage.new(:user_id => me.id, :notes => message, :reply_id => 0, :status => true, :is_readed => false, :private => 1)
+ else
+ status = 0
+ end
+ render :json => status
+ else
+ render_403
+ end
+ end
private
@@ -374,28 +417,44 @@ class WordsController < ApplicationController
obj
end
- def add_reply_adapter options
+ def add_reply_adapter obj, options
#modify by nwb
#添加对课程留言的支持
#留言回复应该不关系其所属的Class,而关心的是其所属的父留言
- obj = obj_distinguish_url_origin || User.find_by_id(2)
- if obj.kind_of? User
- obj.add_jour(nil, nil, nil, options)
- elsif obj.kind_of? Project
- Project.add_new_jour(nil, nil, obj.id, options)
- elsif obj.kind_of? Course
- Course.add_new_jour(nil, nil, obj.id, options)
- elsif obj.kind_of? Bid
- obj.add_jour(nil, nil, nil, options)
- elsif obj.kind_of? Contest
- obj.add_jour(nil, nil, obj.id, options) #new added
- elsif obj.kind_of? Softapplication
- obj.add_jour(nil, nil, obj.id, options) #new added
- elsif obj.kind_of? HomeworkAttach
- obj.add_jour(nil, nil, obj.id, options) #new added
- else
- raise "create reply obj unknow type.#{obj.class}"
+ case obj.jour_type
+ when 'Principal'
+ obj.jour.add_jour(nil, nil, nil, options)
+ when 'Project'
+ Project.add_new_jour(nil, nil, obj.jour_id, options)
+ when 'Course'
+ Course.add_new_jour(nil, nil, obj.jour_id, options)
+ when 'Bid'
+ obj.jour.add_jour(nil, nil, nil, options)
+ when 'Contest'
+ obj.jour.add_jour(nil, nil, obj.jour_id, options)
+ when 'Softapplication'
+ obj.jour.add_jour(nil, nil, obj.jour_id, options)
+ when 'HomeworkAttach'
+ obj.jour.add_jour(nil, nil, obj.jour_id, options)
end
+ # obj = obj_distinguish_url_origin || User.find_by_id(2)
+ # if obj.kind_of? User
+ # obj.add_jour(nil, nil, nil, options)
+ # elsif obj.kind_of? Project
+ # Project.add_new_jour(nil, nil, obj.id, options)
+ # elsif obj.kind_of? Course
+ # Course.add_new_jour(nil, nil, obj.id, options)
+ # elsif obj.kind_of? Bid
+ # obj.add_jour(nil, nil, nil, options)
+ # elsif obj.kind_of? Contest
+ # obj.add_jour(nil, nil, obj.id, options) #new added
+ # elsif obj.kind_of? Softapplication
+ # obj.add_jour(nil, nil, obj.id, options) #new added
+ # elsif obj.kind_of? HomeworkAttach
+ # obj.add_jour(nil, nil, obj.id, options) #new added
+ # else
+ # raise "create reply obj unknow type.#{obj.class}"
+ # end
end
#######end of message
end
diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb
index fb1231287..e993b120f 100644
--- a/app/helpers/api_helper.rb
+++ b/app/helpers/api_helper.rb
@@ -489,4 +489,26 @@ module ApiHelper
self.update_attribute(:praise_num, self.praise_num.to_i - num)
end
+
+ class Errors
+ def self.define_error(arr)
+ @errors = {}
+ arr.each_with_index { |item, index|
+ if index %2 == 1
+ @errors[arr[index-1]] = item
+ end
+ }
+ if arr.count % 2== 1
+ @default_error = arr.last
+ else
+ @default_error = "未知错误"
+ end
+
+ end
+
+ def self.message(msg_id)
+ @errors[msg_id] || @default_error
+ end
+ end
+
end
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 46fdb02f3..98eb100ed 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -803,22 +803,22 @@ module ApplicationHelper
end
# 获取Gitlab版本库提交总数
- def commit_count(project)
+ def commit_count(project, branch)
g = Gitlab.client
#add by hx
- if g.commits(project.gpid , :page=>200).count > 0
+ if g.commits(project.gpid, :ref_name => @rev , :page=>200).count > 0
count = 4020
- elsif g.commits(project.gpid , :page=>25).count==0
+ elsif g.commits(project.gpid , :page=>25, :ref_name => branch).count==0
count = count_commits(project.gpid , 0 , 25)
- elsif g.commits(project.gpid , :page=>50).count ==0
+ elsif g.commits(project.gpid , :page=>50, :ref_name => branch).count ==0
count = count_commits(project.gpid , 25 , 50)+ 25 * 20
- elsif g.commits(project.gpid , :page=>75).count ==0
+ elsif g.commits(project.gpid , :page=>75, :ref_name => branch).count ==0
count = count_commits(project.gpid , 50 , 75)+ 50 * 20
- elsif g.commits(project.gpid , :page=>100).count== 0
+ elsif g.commits(project.gpid , :page=>100, :ref_name => branch).count== 0
count = count_commits(project.gpid , 75 , 100) + 75 * 20
- elsif g.commits(project.gpid , :page=>125).count==0
+ elsif g.commits(project.gpid , :page=>125, :ref_name => branch).count==0
count = count_commits(project.gpid , 100 , 125) + 100 * 20
- elsif g.commits(project.gpid , :page=>150).count==0
+ elsif g.commits(project.gpid , :page=>150, :ref_name => branch).count==0
count = count_commits(project.gpid , 125 , 150) + 125 * 20
else
count = count_commits(project.gpid , 150 ,200) + 150 * 20
@@ -832,7 +832,7 @@ module ApplicationHelper
if $g.commits(project_id,:page => page).count == 0
break
else
- count = count + $g.commits(project_id,:page => page).count
+ count = count + $g.commits(project_id, :ref_name => @rev, :page => page).count
end
end
return count
@@ -1079,6 +1079,8 @@ module ApplicationHelper
title << @organization.name
elsif @user
title << @user.try(:realname)
+ elsif @syllabus
+ title << @syllabus.title
else
title << (User.current.id == 2 ? "未登录" : User.current.try(:realname))
end
@@ -3127,6 +3129,26 @@ def get_reply_parents parents_rely, comment
parents_rely
end
+#获取回复的所有父节点(不包括根节点)
+def get_reply_parents_no_root parents_rely, comment
+ if !comment.parent.nil? && !comment.parent.parent.nil?
+ parents_rely << comment.parent
+ get_reply_parents_no_root parents_rely, comment.parent
+ end
+ parents_rely
+end
+
+#获取留言的所有子节点
+def get_all_children result, jour
+ if jour.kind_of? JournalsForMessage
+ jour.children.each do |jour_child|
+ result << jour_child
+ get_all_children result, jour_child
+ end
+ end
+ result.sort! { |a,b| b.created_on <=> a.created_on }
+end
+
#将有置顶属性的提到数组前面
def sort_by_sticky topics
tmpTopics = []
@@ -3283,3 +3305,20 @@ def get_hw_index(hw,is_teacher)
index = hw_ids.index(hw.id)
return index
end
+
+def get_group_member_names work
+ result = ""
+ unless work.nil?
+ work.student_work_projects.each do |member|
+ user = User.where(:id => member.user_id).first
+ unless user.nil?
+ if result != ""
+ result += "、#{user.show_name}"
+ else
+ result += user.show_name
+ end
+ end
+ end
+ end
+ result
+end
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index c10652c6f..55a4da73a 100644
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -44,9 +44,9 @@ module CoursesHelper
def visible_excellent_course obj
# if course.is_pu
end
-
+
# 返回x项目成员数量,即roles表中定义的所有成员
- def projectCount project
+ def projectCount project
#searchCountByRoles project, AllPeople
project.members.count
end
@@ -147,10 +147,10 @@ module CoursesHelper
# 返回学生数量,即roles表中定义的Reporter
#def studentCount project
- # searchStudent(project).count
- # or
- # searchStudent(project).count
- # end
+ # searchStudent(project).count
+ # or
+ # searchStudent(project).count
+ # end
# 判断用户是否是课程的管理员
# add by nwb
@@ -225,11 +225,11 @@ module CoursesHelper
#end
# 注意:此方法有问题,速度慢且结果不准
- # alias studentCountOrigin studentCount
+ # alias studentCountOrigin studentCount
#def studentCount course
- # count = studentCountOrigin course
- #garble count
- # end
+ # count = studentCountOrigin course
+ #garble count
+ # end
#获取课程所有成员
def course_all_member course
@@ -265,7 +265,7 @@ module CoursesHelper
def garble count
count = count.round( 1-count.to_s.size ).to_i
return count.to_s if count.to_s.size.eql?(1)
- count.to_s << '+'
+ count.to_s << '+'
end
# =====================================================================================
@@ -274,7 +274,7 @@ 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)
end
members
end
@@ -304,8 +304,8 @@ module CoursesHelper
members
end
-
-
+
+
def searchStudent_by_name project, name
#searchPeopleByRoles(project, StudentRoles)
members = []
@@ -324,29 +324,29 @@ module CoursesHelper
mems = []
if name != ""
name = name.to_s.downcase
- members.each do |m|
+ members.each do |m|
username = m.user[:lastname].to_s.downcase + m.user[:firstname].to_s.downcase
if(m.user[:login].to_s.downcase.include?(name) || m.user.user_extensions[:student_id].to_s.downcase.include?(name) || username.include?(name))
mems << m
end
end
else
- mems = members
- end
+ mems = members
+ end
mems
end
def searchgroupmember_by_name members, name, group
#searchPeopleByRoles(project, StudentRoles)
mems = []
if name != ""
- members.each do |m|
- if m.course_group_id == group.id
- username = m.user[:lastname].to_s + m.user[:firstname].to_s
- if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
- mems << m
+ members.each do |m|
+ if m.course_group_id == group.id
+ username = m.user[:lastname].to_s + m.user[:firstname].to_s
+ if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
+ mems << m
+ end
+ end
end
- end
- end
else
mems = members
end
@@ -458,7 +458,7 @@ module CoursesHelper
content = content_tag('ul', content)
content_tag('div', content, :class => "tabs")
end
-
+
def findCourseTime project
str = ""
begin
@@ -671,6 +671,22 @@ module CoursesHelper
is_current_term || is_next_term
end
+ #课程大纲下拉框
+ def syllabus_option
+ type = []
+ option1 = []
+ option1 << "请选择课程"
+ option1 << 0
+ type << option1
+ Syllabus.all.each do |syllabus|
+ option = []
+ option << syllabus.title
+ option << syllabus.id
+ type << option
+ end
+ type
+ end
+
#获取课程动态
def get_course_activity courses, activities
@course_ids=activities.keys()
@@ -683,9 +699,9 @@ module CoursesHelper
#file_count
Attachment.where(container_id: @course_ids, container_type: Course).where("created_on>?", date_from).each do |attachment|
if attachment.is_public? || User.current.member_of_course?(@course) || User.current.admin?
- activities[attachment.container_id]+=1
+ activities[attachment.container_id]+=1
else
- activities[attachment.container_id]
+ activities[attachment.container_id]
end
end
@@ -704,8 +720,8 @@ module CoursesHelper
#news
News.where(course_id: @course_ids).where("created_on>?",date_from).each do |news|
if news.author.member_of_course?(@course)
- activities[news.course_id]+=1
- end
+ activities[news.course_id]+=1
+ end
end
#homework_count
@@ -777,6 +793,15 @@ module CoursesHelper
result
end
+ def visable_course_homework course
+ if User.current.admin? || User.current.allowed_to?(:as_teacher,course)
+ homework_num = course.homework_commons.count
+ else
+ homework_num = course.homework_commons.where("publish_time <= '#{Date.today}'").count
+ end
+ homework_num
+ end
+
def zh_course_role role
if role == "TeachingAsistant"
result = l(:label_TA)
diff --git a/app/helpers/organizations_helper.rb b/app/helpers/organizations_helper.rb
index cb06bd688..48b5f068b 100644
--- a/app/helpers/organizations_helper.rb
+++ b/app/helpers/organizations_helper.rb
@@ -23,7 +23,7 @@ module OrganizationsHelper
when 'activity' then
return '动态'
when 'course' then
- return '课程'
+ return '班级'
when 'project' then
return '项目'
end
diff --git a/app/helpers/owner_type_helper.rb b/app/helpers/owner_type_helper.rb
index 7119d4f60..01320660c 100644
--- a/app/helpers/owner_type_helper.rb
+++ b/app/helpers/owner_type_helper.rb
@@ -7,5 +7,6 @@ module OwnerTypeHelper
BID = 6
JOURNALSFORMESSAGE = 7
HOMEWORKCOMMON = 8
- BLOGCOMMENT=9
+ BLOGCOMMENT = 9
+ SYLLABUS = 10
end
\ No newline at end of file
diff --git a/app/helpers/quality_analysis_helper.rb b/app/helpers/quality_analysis_helper.rb
new file mode 100644
index 000000000..2a7d350e7
--- /dev/null
+++ b/app/helpers/quality_analysis_helper.rb
@@ -0,0 +1,97 @@
+# encoding: utf-8
+module QualityAnalysisHelper
+
+ def sqale_rating_status val
+ arr = []
+ if val < 5
+ arr << "很好"
+ arr << "b_green2"
+ elsif val. > 5 && val < 10
+ arr << "较好"
+ arr << "b_slow_yellow"
+ elsif val > 10 && val < 20
+ arr << "中等"
+ arr << "b_yellow"
+ elsif val > 20 && val < 50
+ arr << "较差"
+ arr << "b_slow_red"
+ elsif val > 20
+ arr << "很差"
+ arr << "b_red"
+ end
+ end
+
+ def complexity_status val
+ arr = []
+ if val < 10
+ arr << "良好"
+ arr << "b_green2"
+ elsif val > 10 && val < 15
+ arr << "较高"
+ arr << "b_yellow"
+ elsif val > 15
+ arr << "很高"
+ arr << "b_red"
+ end
+ end
+
+ def duplicated_lines_density_status val
+ arr = []
+ if val < 30
+ arr << "良好"
+ arr << "b_green2"
+ elsif val > 30 && val < 50
+ arr << "较高"
+ arr << "b_yellow"
+ elsif val > 50
+ arr << "很高"
+ arr << "b_red"
+ end
+ end
+
+ def comment_lines_density_status val
+ arr = []
+ if val < 20
+ arr << "较低"
+ arr << "b_yellow"
+ elsif val > 20 && val < 50
+ arr << "正常"
+ arr << "b_green2"
+ elsif val > 50
+ arr << "较高"
+ arr << "b_red"
+ end
+ end
+
+ def score_sqale_rating val
+ if val > 0 && val < 5
+ "5"
+ elsif val > 5 && val < 10
+ "4"
+ elsif val > 10 && val < 20
+ "3"
+ elsif val > 20 && val < 50
+ "2"
+ elsif val > 20
+ "1"
+ end
+ end
+
+ def lines_scale val
+ if val.to_i < 5000
+ "小型"
+ elsif val.to_i >5000 && val.to_i < 50000
+ "中型"
+ else
+ "大型"
+ end
+ end
+
+ #统计答题百分比,统计结果保留两位小数
+ def statistics_result_percentage(e, t)
+ e = e.to_f
+ t = t.to_f
+ t == 0 ? 0 : format("%.2f", e*100/t)
+ end
+
+end
diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb
index 3cf781f76..b525c4aed 100644
--- a/app/helpers/repositories_helper.rb
+++ b/app/helpers/repositories_helper.rb
@@ -41,6 +41,11 @@ module RepositoriesHelper
identifiers.include?(iden) ? false :true
end
+ def quality_analysis login, rep_id
+ long_rep_id = "#{login}:#{rep_id}"
+ QualityAnalysis.where(:sonar_name => long_rep_id).first
+ end
+
# 获取文件目录的最新动态
def get_trees_last_changes(project_id, rev, ent_name)
g = Gitlab.client
diff --git a/app/helpers/syllabuses_helper.rb b/app/helpers/syllabuses_helper.rb
index dac84937b..00331e0dc 100644
--- a/app/helpers/syllabuses_helper.rb
+++ b/app/helpers/syllabuses_helper.rb
@@ -1,2 +1,72 @@
+# encoding: utf-8
module SyllabusesHelper
+ def get_syllabuses_by_tag(tag_name)
+ Syllabus.tagged_with(tag_name).order('updated_at desc')
+ end
+
+ def teacher_count syllabus
+ count = 0
+ courses = syllabus.courses
+ unless courses.empty?
+ courses.each do |c|
+ count += TeacherAndAssistantCount c
+ end
+ end
+ count
+ end
+
+ def student_count syllabus
+ count = 0
+ courses = syllabus.courses
+ unless courses.empty?
+ courses.each do |c|
+ count += studentCount c
+ end
+ end
+ count
+ end
+
+ def file_count syllabus
+ count = 0
+ courses = syllabus.courses
+ unless courses.empty?
+ courses.each do |c|
+ count += visable_attachemnts_incourse(c).count
+ end
+ end
+ count
+ end
+
+ #课程性质下拉框
+ def syllabus_type
+ type = []
+ option1 = []
+ option2 = []
+ option3 = []
+ option4 = []
+ option5 = []
+ option6 = []
+
+ option1 << "请选择"
+ option1 << 1
+ option2 << "公共必修课"
+ option2 << 2
+ option3 << "学科必修课"
+ option3 << 3
+ option4 << "专业选修课"
+ option4 << 4
+ option5 << "实践必修课"
+ option5 << 5
+ option6 << "实践选修课"
+ option6 << 6
+
+ type << option1
+ type << option2
+ type << option3
+ type << option4
+ type << option5
+ type << option6
+
+ type
+ end
end
diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb
index 8847f4163..54753807d 100644
--- a/app/helpers/tags_helper.rb
+++ b/app/helpers/tags_helper.rb
@@ -23,6 +23,8 @@ module TagsHelper
@obj= Course.find_by_id(obj_id)
when '10'
@obj = Attachment.find_by_id(obj_id)
+ when '11'
+ @obj = Syllabus.find_by_id(obj_id)
else
raise Exception, '[TagsHelper] ===> tag type unknow.'
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 4a6dbc6b6..f312d2275 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -32,7 +32,7 @@ module UsersHelper
def get_resource_type type
case type
when 'Course'
- '课程资源'
+ '班级资源'
when 'Project'
'项目资源'
when 'Issue'
@@ -122,11 +122,11 @@ module UsersHelper
when 'homework'
'作业消息'
when 'course_message'
- '课程讨论'
+ '班级讨论'
when 'course_news'
- '课程通知'
+ '班级通知'
when 'poll'
- '课程问卷'
+ '班级问卷'
when 'issue'
'项目任务'
when 'forge_message'
diff --git a/app/models/apply_add_schools.rb b/app/models/apply_add_schools.rb
new file mode 100644
index 000000000..2082c0012
--- /dev/null
+++ b/app/models/apply_add_schools.rb
@@ -0,0 +1,3 @@
+class ApplyAddSchools < ActiveRecord::Base
+ attr_accessible :address, :city, :name, :province, :remarks, :school_id, :status
+end
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index aa4ef8670..88fadd644 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -24,6 +24,7 @@ class Attachment < ActiveRecord::Base
belongs_to :course, foreign_key: 'container_id', conditions: "attachments.container_type = 'Course'"
belongs_to :org_subfield, foreign_key: 'container_id', conditions: "attachements.container_type = 'OrgSubfield'"
belongs_to :organization, foreign_key: 'container_id', conditions: "attachements.container_type = 'Organization'"
+ belongs_to :syllabus, foreign_key: 'container_id', conditions: "attachements.container_type = 'Syllabus'"
belongs_to :softapplication, foreign_key: 'container_id', conditions: "attachments.container_type = 'Softapplication'"
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
belongs_to :attachmentstype, :foreign_key => "attachtype",:primary_key => "id"
diff --git a/app/models/course.rb b/app/models/course.rb
index e3a845b11..e4b08697b 100644
--- a/app/models/course.rb
+++ b/app/models/course.rb
@@ -1,3 +1,5 @@
+#coding=utf-8
+
require 'elasticsearch/model'
class Course < ActiveRecord::Base
include Redmine::SafeAttributes
@@ -65,7 +67,7 @@ class Course < ActiveRecord::Base
acts_as_attachable :view_permission => :view_course_files,
:delete_permission => :manage_files
- validates_presence_of :password, :term,:name
+ validates_presence_of :term,:name
validates_format_of :class_period, :with =>/^[1-9]\d*$/
validates_format_of :name,:with =>/^[^ ]+[a-zA-Z0-9_\u4e00-\u9fa5\s\S]+$/
validates_length_of :description, :maximum => 10000
@@ -88,10 +90,12 @@ class Course < ActiveRecord::Base
'description',
'class_period',
'open_student',
- 'is_delete'
+ 'is_delete',
+ 'syllabus_id'
acts_as_customizable
+ scope :not_deleted, lambda{where(is_delete: 0)}
scope :all_course
scope :active, lambda { where(:status => STATUS_ACTIVE) }
scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) }
@@ -405,6 +409,7 @@ class Course < ActiveRecord::Base
self.course_messages << CourseMessage.new(:user_id => self.tea_id, :course_id => self.id, :viewed => false)
end
+
#项目与课程分离后,很多课程的名称等信息为空,这些数据信息存储在项目表中!!就是数据兼容的问题
#def name
# read_attribute('name') || Project.find_by_identifier(self.extra).try(:name)
@@ -422,12 +427,14 @@ class Course < ActiveRecord::Base
# __elasticsearch__.delete_document
# end
def create_course_ealasticsearch_index
+ return if Rails.env.development?
if self.is_public == 1 and self.is_delete == 0 #公开 和 没有被删除的课程才被索引
self.__elasticsearch__.index_document
end
end
def update_course_ealasticsearch_index
+ return if Rails.env.development?
if self.is_public == 1 and self.is_delete == 0 #如果是初次更新成为公开或者恢复被删除的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性
begin
self.__elasticsearch__.update_document
@@ -444,6 +451,7 @@ class Course < ActiveRecord::Base
end
def delete_course_ealasticsearch_index
+ return if Rails.env.development?
begin
self.__elasticsearch__.delete_document
rescue => e
@@ -451,6 +459,35 @@ class Course < ActiveRecord::Base
end
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 <5
+ code = CODES.sample(5).join
+ return generate_invite_code if Course.where(invite_code: code).present?
+ update_attribute(:invite_code, code)
+ end
+ code
+ end
+
+
+ def generate_qrcode
+ ticket = self.qrcode
+ if !ticket || ticket.size < 10
+ response = Wechat.api.qrcode_create_scene(invite_code)
+ logger.debug "response = #{response}"
+ self.qrcode = response['ticket']
+ save! && reload
+ ticket = qrcode
+ end
+ ticket
+ end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index ceec0e182..bbc639f3d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -155,7 +155,7 @@ class Project < ActiveRecord::Base
#ActiveModel::Dirty 这里有一个changed方法。对任何对象都可以用
after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?}
# 创建project之后默认创建一个board,之后的board去掉了board的概念
- after_create :create_board_sync,:acts_as_forge_activities,:create_project_ealasticsearch_index
+ after_create :create_board_sync,:acts_as_forge_activities, :create_project_ealasticsearch_index
before_destroy :delete_all_members,:delete_project_ealasticsearch_index
after_update :update_project_ealasticsearch_index
def remove_references_before_destroy
diff --git a/app/models/quality_analysis.rb b/app/models/quality_analysis.rb
new file mode 100644
index 000000000..8b8034c65
--- /dev/null
+++ b/app/models/quality_analysis.rb
@@ -0,0 +1,7 @@
+class QualityAnalysis < ActiveRecord::Base
+ attr_accessible :author_login, :project_id, :rep_identifier, :sonar_version, :branch, :path, :rep_identifier, :language, :sonar_name
+
+ def user_rep_name
+ self.author_login+":"+self.rep_identifier
+ end
+end
diff --git a/app/models/sonar_analysis.rb b/app/models/sonar_analysis.rb
new file mode 100644
index 000000000..0bb2089de
--- /dev/null
+++ b/app/models/sonar_analysis.rb
@@ -0,0 +1,3 @@
+class SonarAnalysis < ActiveRecord::Base
+ attr_accessible :author_login, :project_id, :rep_identifier
+end
diff --git a/app/models/syllabus.rb b/app/models/syllabus.rb
index 7d6319955..5e368f341 100644
--- a/app/models/syllabus.rb
+++ b/app/models/syllabus.rb
@@ -1,5 +1,46 @@
+# encoding: utf-8
class Syllabus < ActiveRecord::Base
+ include Redmine::SafeAttributes
+ include ApplicationHelper
+ acts_as_taggable
+ acts_as_attachable
+ has_many_kindeditor_assets :assets, :dependent => :destroy
+
belongs_to :user
has_many :courses
- attr_accessible :description, :title
+ has_many :journals_for_messages, :as => :jour, :dependent => :destroy
+ attr_accessible :description, :title, :eng_name, :syllabus_type, :credit, :hours, :theory_hours, :practice_hours, :applicable_major, :pre_course
+ safe_attributes 'title', 'description', 'eng_name', 'syllabus_type', 'credit', 'hours', 'theory_hours', 'practice_hours', 'credit', 'applicable_major', 'pre_course'
+
+ def delete_kindeditor_assets
+ delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::SYLLABUS
+ end
+
+ def syllabus_type_str
+ case self.syllabus_type
+ when 1
+ type = "公共必修课"
+ when 2
+ type = "学科必修课"
+ when 3
+ type = "专业选修课"
+ when 4
+ type = "实践必修课"
+ when 5
+ type = "实践选修课"
+ end
+ type
+ end
+
+ ###添加回复
+ def self.add_syllabus_jour(user, notes, id , options = {})
+ syllabus = Syllabus.find(id)
+ if options.count == 0
+ jfm = syllabus.journals_for_messages.build(:user_id => user.id, :notes => notes, :reply_id => 0)
+ else
+ jfm = syllabus.journals_for_messages.build(options)
+ end
+ jfm.save
+ jfm
+ end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 258fe2ea5..daf1237cf 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -145,6 +145,7 @@ class User < Principal
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
has_many :principal_acts, :class_name => 'PrincipalActivity',:as =>:principal_act ,:dependent => :destroy
has_many :file_commit, :class_name => 'Attachment', :foreign_key => 'author_id', :conditions => "container_type = 'Project' or container_type = 'Version'"
+ has_many :course_attachments , :class_name => 'Attachment', :foreign_key => 'author_id', :conditions => "container_type = 'Course'"
####
# added by bai
has_many :join_in_contests, :dependent => :destroy
@@ -248,7 +249,7 @@ class User < Principal
before_save :update_hashed_password
before_destroy :remove_references_before_destroy,:delete_user_ealasticsearch_index
# added by fq
- after_create :act_as_activity, :add_onclick_time, :act_as_principal_activity,:create_user_ealasticsearch_index
+ after_create :act_as_activity, :add_onclick_time, :act_as_principal_activity,:create_user_ealasticsearch_index,:add_new_jour
# end
# 更新邮箱用户或用户名的同事,同步更新邀请信息
after_update :update_invite_list,:update_user_ealasticsearch_index
@@ -1145,6 +1146,22 @@ class User < Principal
end
end
+ #为新注册用户发送留言
+ def add_new_jour
+ if Message.where("id=19278").any? and Message.where("id=19291").any? and Message.where("id=19292").any?
+ lead_message1 = Message.find(19278)
+ notes1 = lead_message1.content
+ # lead_message2 = Message.find(19292)
+ # notes2 = lead_message2.content
+ # lead_message3 = Message.find(19291)
+ # notes3 = lead_message3.content
+ # # user_id 默认为课程使者创建
+ self.journals_for_messages << JournalsForMessage.new(:user_id => 1, :notes => notes1, :reply_id => 0, :status => true, :is_readed => false, :private => 0)
+ # self.journals_for_messages << JournalsForMessage.new(:user_id => 1, :notes => notes2, :reply_id => 0, :status => true, :is_readed => false, :private => 0)
+ # self.journals_for_messages << JournalsForMessage.new(:user_id => 1, :notes => notes3, :reply_id => 0, :status => true, :is_readed => false, :private => 0)
+ end
+ end
+
# 更新邮箱的同事,更新invite_lists表中的邮箱信息
def update_invite_list
invite_lists = InviteList.where("user_id =?",self.id).all
diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb
index 2c8387349..f6bf59af0 100644
--- a/app/services/courses_service.rb
+++ b/app/services/courses_service.rb
@@ -32,6 +32,18 @@ class CoursesService
course_list
end
+
+ def user_courses_list(current_user)
+ courses = current_user.courses.not_deleted
+ courses.inject([]) {|course_list, course|
+ course_list << {:course => course,:img_url => url_to_avatar(course),
+ :current_user_is_member => current_user.member_of_course?(course),
+ :current_user_is_teacher => is_course_teacher(current_user,course),
+ course_student_num: searchStudent(course).count
+ }
+ }
+ end
+
#搜索课程
def search_course params,current_user
courses_all = Course.all_course
@@ -68,7 +80,6 @@ class CoursesService
if current_user.nil? || !(current_user.admin? || c.is_public == 1 || (c.is_public == 0 && current_user.member_of_course?(c)))
raise '403'
end
- @teachers= searchTeacherAndAssistant(c)
#@canShowCode = isCourseTeacher(User.current.id,course) && params[:role] != '1'
case params[:role]
when '1'
@@ -87,7 +98,11 @@ class CoursesService
gender = m.user.user_extensions.gender.nil? ? 0 : m.user.user_extensions.gender
work_unit = get_user_work_unit m.user
location = get_user_location m.user
- users << {:id => m.user.id, :img_url => img_url, :nickname => m.user.login, :gender => gender, :work_unit => work_unit, :mail => m.user.mail, :location => location, :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname}
+ users << {:id => m.user.id, :img_url => img_url, :nickname => m.user.login, :gender => gender,
+ :work_unit => work_unit, :mail => m.user.mail, :location => location,
+ role_name: m.roles.first.name,
+ name: m.user.show_name,
+ :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname}
end
users
end
@@ -162,6 +177,9 @@ class CoursesService
#显示课程
def show_course(params,current_user)
course = Course.find(params[:id])
+ course.generate_invite_code
+ course.generate_qrcode
+
if course.school
work_unit = course.school.name
else
@@ -193,8 +211,9 @@ class CoursesService
@course.extra = 'course' + DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d_%H-%M-%S').to_s
@course.send(:safe_attributes=, params[:course], current_user)
#@course.safe_attributes(current_user,params[:course])
- @course.password = params[:course][:password]
+ #@course.password = params[:course][:password]
@course.tea_id = current_user.id
+ @course.syllabus_id = params[:syllabus_id].to_i
@course.term = params[:term]
@course.time = params[:time]
@course.end_term = params[:end_term]
@@ -252,7 +271,8 @@ class CoursesService
def edit_course(params,course,current_user)
course.send(:safe_attributes=, params[:course], current_user)
#course.safe_attributes = params[:course]
- course.password = params[:course][:password]
+ #course.password = params[:course][:password]
+ course.syllabus_id = params[:syllabus_id].to_i
course.time = params[:time]
course.term = params[:term]
course.end_time = params[:end_time]
@@ -300,23 +320,27 @@ class CoursesService
@state
end
+ class JoinCourseError < Errors
+ define_error [
+ 0, '加入成功',
+ 1, '密码错误',
+ 2, '课程已过期 请联系课程管理员重启课程。',
+ 3, '您已经加入了课程',
+ 4, '您加入的课程不存在',
+ 5, '您还未登录',
+ 6, '申请成功,请等待审核完毕',
+ 7, '您已经发送过申请了,请耐心等待',
+ 8, '您已经是该课程的教师了',
+ 9, '您已经是该课程的教辅了',
+ 10, '您已经是该课程的管理员了',
+ '未知错误,请稍后再试'
+ ]
+ end
#加入课程
#object_id:课程id
#course_password :加入课程的密码
- #@state == 0 加入成功
- #@state == 1 密码错误
- #@state == 2 课程已过期 请联系课程管理员重启课程。(在配置课程处)
- #@state == 3 您已经加入了课程
- #@state == 4 您加入的课程不存在
- #@state == 5 您还未登录
- #@state == 6 申请成功,请等待审核完毕
- #@state == 7 您已经发送过申请了,请耐心等待
- #@state == 8 您已经是该课程的教师了
- #@state == 9 您已经是该课程的教辅了
- #@state == 10 您已经是该课程的管理员了
- #@state 其他 未知错误,请稍后再试
def join_course params,current_user
- course = Course.find_by_id params[:object_id]
+ course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code]
@state = 10
if course
@@ -326,7 +350,7 @@ class CoursesService
if current_user.member_of_course?(course) #如果已经是成员
member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0]
roleName = member.roles[0].name if member
- if params[:course_password] == course.password
+ if params[:invite_code].present?
#如果加入角色为学生 并且当前是学生
if params[:role] == "10" && roleName == "Student"
@state = 3
@@ -341,7 +365,7 @@ class CoursesService
#如果加入角色为教师或者教辅,并且当前是学生,或者是要成为教辅,当前不是教辅,或者要成为教师,当前不是教师。那么要发送请求
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
+ if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} 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])
@@ -352,19 +376,19 @@ class CoursesService
elsif params[:role] == "10" && roleName != "Student"
member.role_ids = [params[:role]]
member.save
- StudentsForCourse.create(:student_id => current_user.id, :course_id => params[:object_id])
+ StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id)
@state = 0
end
else
@state = 1
end
else
- if params[:course_password] == course.password
+ if params[:invite_code].present?
if params[:role] == "10" || params[:role] == nil
members = []
members << Member.new(:role_ids => [10], :user_id => current_user.id)
course.members << members
- StudentsForCourse.create(:student_id => current_user.id, :course_id => params[:object_id])
+ StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id)
@state = 0
else
#如果已经发送过消息了,那么就要给个提示
diff --git a/app/views/account/email_activation.html.erb b/app/views/account/email_activation.html.erb
new file mode 100644
index 000000000..9655efcf4
--- /dev/null
+++ b/app/views/account/email_activation.html.erb
@@ -0,0 +1,58 @@
+
您的账号尚未激活,请先进入您的注册邮箱,激活您的账号。
+ + <%#= link_to l(:label_mail_resend), { :controller => 'account', :action => 'resendmail',:user => @user}, :class=>"email_verify_btn mt30 ml30", :remote => true, :method => 'get' %> +如果您尚未收到激活邮件,请按照以下步骤操作:
+<%= f.text_field :login, :size => 25, :required => true %> - <%= l(:label_max_number) %> -
-<%= f.password_field :password, :size => 25, :required => true %> - <%= l(:text_caracters_minimum, :count => Setting.password_min_length) %> -
-<%= f.password_field :password_confirmation, :size => 25, :required => true %>
- <% end %> - -- <%= f.text_field :mail,:size => 25, :required => true %> - -
-
-
- <%= "#{l(:label_mail_attention)} " %> <%= "#{l(:label_mail_attention1)} " %>
-
<%= submit_tag l(:button_submit) %> | -
<%= f.text_field :identity_url %>
-<% end %> -<% @user.custom_field_values.select { |v| v.editable? || v.required? }.each do |value| %> -<%= custom_field_tag_with_label :user, value %>
-<% end %> - -<% password_min_length = Setting.password_min_length %> - \ No newline at end of file diff --git a/app/views/admin/course_resource_list.html.erb b/app/views/admin/course_resource_list.html.erb index 2e83a96aa..4786bbe89 100644 --- a/app/views/admin/course_resource_list.html.erb +++ b/app/views/admin/course_resource_list.html.erb @@ -39,7 +39,7 @@ <%= number_to_human_size(resource.filesize)%><%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'upload_filename readonly', :readonly=>'readonly')%> <%#= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") %> <%#= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false, :class => 'is_public_checkbox')%> - <%= link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> + <%= link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "#{i+1}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload', :containerid => "2") %> <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> -
+ <% end %> <% else %> <% container.attachments.each_with_index do |attachment, i| %> - + <% end %> <% end %> <% end %> diff --git a/app/views/blog_comments/show.html.erb b/app/views/blog_comments/show.html.erb index 9617b7f76..b1cd86484 100644 --- a/app/views/blog_comments/show.html.erb +++ b/app/views/blog_comments/show.html.erb @@ -87,17 +87,14 @@<%=@syllabus.title %>
+ +