Merge branch 'develop' of https://git.trustie.net/jacknudt/trustieforge into cxt_course
Conflicts: db/schema.rb public/stylesheets/css/courses.css
This commit is contained in:
commit
c16f63a8b4
1
Gemfile
1
Gemfile
|
@ -54,6 +54,7 @@ gem 'elasticsearch-rails'
|
|||
|
||||
### profile
|
||||
# gem 'oneapm_rpm'
|
||||
# gem 'therubyracer'
|
||||
|
||||
group :development do
|
||||
gem 'grape-swagger'
|
||||
|
|
|
@ -75,15 +75,9 @@ module Mobile
|
|||
|
||||
authenticate!
|
||||
|
||||
subscribe = 0 #默认未关注
|
||||
|
||||
#-------------------获取用户是否关注此公众号-----------------------------
|
||||
openid = session[:wechat_openid]
|
||||
raise "无法获取到openid,请在微信中打开本页面" unless openid
|
||||
user_info = Wechat.api.user(openid)
|
||||
Rails.logger.info "user_info!!!!!!!!!"
|
||||
Rails.logger.info user_info
|
||||
subscribe = user_info["subscribe"]
|
||||
## 能进来的就是已关注
|
||||
## 因为取消订阅的记录被删除了
|
||||
subscribe = 1 #默认未关注
|
||||
|
||||
status = 0
|
||||
tip = 0 #0班级1项目
|
||||
|
|
|
@ -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/
|
|
@ -0,0 +1,3 @@
|
|||
// Place all the styles related to the cooperation controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
|
@ -23,6 +23,12 @@ class AccountController < ApplicationController
|
|||
skip_before_filter :check_if_login_required
|
||||
# Login request and validation
|
||||
def login
|
||||
if params[:type] == "activated"
|
||||
@message = l(:notice_account_activated)
|
||||
elsif params[:type] == "expired"
|
||||
@message = l(:notice_account_expired)
|
||||
end
|
||||
|
||||
if request.get?
|
||||
@login = params[:login] || true
|
||||
if User.current.logged?
|
||||
|
@ -144,8 +150,9 @@ class AccountController < ApplicationController
|
|||
when '1'
|
||||
#register_by_email_activation(@user)
|
||||
unless @user.new_record?
|
||||
flash[:notice] = l(:notice_account_register_done)
|
||||
render action: 'email_valid', locals: {:mail => @user.mail}
|
||||
redirect_to account_email_valid_path(:mail => @user.mail, :user_id => @user.id)
|
||||
# flash[:notice] = l(:notice_account_register_done)
|
||||
# render action: 'email_valid', locals: {:mail => @user.mail}
|
||||
end
|
||||
when '3'
|
||||
#register_automatically(@user)
|
||||
|
@ -200,7 +207,8 @@ class AccountController < ApplicationController
|
|||
def activate
|
||||
(redirect_to(signin_path); return) unless Setting.self_registration? && params[:token].present?
|
||||
token = Token.find_token('register', params[:token].to_s)
|
||||
(redirect_to(signin_path); return) unless token and !token.expired?
|
||||
type = l(:notice_account_expired) if (token && token.expired?)
|
||||
(redirect_to(signin_path(:type => "expired")); return) unless token and !token.expired?
|
||||
user = token.user
|
||||
(redirect_to(signin_path); return) unless user.registered?
|
||||
user.activate
|
||||
|
@ -208,7 +216,7 @@ class AccountController < ApplicationController
|
|||
token.destroy
|
||||
flash[:notice] = l(:notice_account_activated)
|
||||
end
|
||||
redirect_to signin_url
|
||||
redirect_to signin_url(:type => "activated")
|
||||
end
|
||||
|
||||
def api_register login,password,email
|
||||
|
@ -244,8 +252,18 @@ class AccountController < ApplicationController
|
|||
end
|
||||
|
||||
def email_valid
|
||||
|
||||
begin
|
||||
@mail_type = params[:mail].split("@")[1]
|
||||
@user = User.find(params[:user_id])
|
||||
rescue
|
||||
return render_404
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html { render :layout => "base_mail"}
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def resendmail
|
||||
result = {:status=>1, :email=>""}
|
||||
user = User.find(params[:user]) if params[:user]
|
||||
|
|
|
@ -124,6 +124,16 @@ class AdminController < ApplicationController
|
|||
render :action => "projects", :layout => false if request.xhr?
|
||||
end
|
||||
|
||||
def contests
|
||||
@name = params[:name]
|
||||
@contests = Contest.where("id >= 780 and name like '%#{@name}%'").order('created_at desc')
|
||||
@contests = paginateHelper @contests,30
|
||||
@page = (params['page'] || 1).to_i - 1
|
||||
respond_to do |format|
|
||||
format.html
|
||||
end
|
||||
end
|
||||
|
||||
def syllabuses
|
||||
@name = params[:name]
|
||||
@syllabuses = Syllabus.like(@name).order('created_at desc')
|
||||
|
@ -749,6 +759,9 @@ class AdminController < ApplicationController
|
|||
# status: 0表示未批准; status:1表示已批准; status: 2表示已更改; status: 3表示已拒绝;
|
||||
def approve_applied_schools
|
||||
applied_school = ApplyAddSchools.find params[:id]
|
||||
applied_message_id = applied_school.school_id
|
||||
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
||||
applied_message.update_all(:status => 1)
|
||||
applied_school.update_column('status', 1) unless applied_school.nil?
|
||||
school = applied_school.school
|
||||
school.update_attribute("province", applied_school.province)
|
||||
|
@ -768,6 +781,10 @@ class AdminController < ApplicationController
|
|||
#applied_add_school = ApplyAddSchools.where(:name => aas.name)
|
||||
school = School.find params[:school_id]
|
||||
begin
|
||||
#更新消息表的status
|
||||
applied_message_id = aas.school_id
|
||||
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
||||
applied_message.update_all(:status => 2)
|
||||
aas.update_attribute(:status, 2)
|
||||
AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => 0, :applied_id => aas.id, :applied_type => "ApplyAddSchools", :name => school[0].name )
|
||||
users = UserExtensions.where("school_id = #{aas.school_id}")
|
||||
|
@ -806,6 +823,9 @@ class AdminController < ApplicationController
|
|||
# 单位审核:删除
|
||||
def delete_applied_schools
|
||||
applied_school = ApplyAddSchools.find(params[:id])
|
||||
applied_message_id = applied_school.school_id
|
||||
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
||||
applied_message.update_all(:status => 3)
|
||||
applied_school.update_attribute(:status, 3)
|
||||
# 未审批删除
|
||||
if params[:tip] == "unapplied"
|
||||
|
|
|
@ -430,6 +430,8 @@ class ApplicationController < ActionController::Base
|
|||
@course = Course.find(params[:course_id])
|
||||
elsif params[:org_subfield_id]
|
||||
@org_subfield = OrgSubfield.find(params[:org_subfield_id])
|
||||
elsif params[:contest_id]
|
||||
@contest = Contest.find(params[:contest_id])
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
|
@ -474,6 +476,9 @@ class ApplicationController < ActionController::Base
|
|||
@project = @object.project
|
||||
if @project == nil && @object.has_attribute?('course_id')
|
||||
@course = @object.course
|
||||
if @course.nil? && @object.has_attribute?('contest_id')
|
||||
@contest = @object.contest
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -575,19 +580,19 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
|
||||
def redirect_back_or_default(default, options={})
|
||||
back_url = '' #params[:back_url].to_s
|
||||
back_url = ''#params[:back_url].to_s
|
||||
if back_url.present?
|
||||
begin
|
||||
uri = URI.parse(back_url)
|
||||
# do not redirect user to another host or to the login or register page
|
||||
if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
|
||||
back_url = back_url.gsub(%r{\/users\/(\d+)},"/users/"+default.id.to_s) if default.is_a?(:User)
|
||||
back_url = back_url.gsub(%r{\/users\/(\w+)},"/users/"+default.to_s) if default.is_a?(:User)
|
||||
redirect_to(back_url)
|
||||
return
|
||||
end
|
||||
rescue URI::InvalidURIError
|
||||
logger.warn("Could not redirect to invalid URL #{back_url}")
|
||||
# redirect to default
|
||||
#redirect to default
|
||||
end
|
||||
elsif options[:referer]
|
||||
redirect_to_referer_or default
|
||||
|
|
|
@ -695,7 +695,7 @@ class AttachmentsController < ApplicationController
|
|||
@attachment.container.board.course)
|
||||
@course = @attachment.container.board.course
|
||||
else
|
||||
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'
|
||||
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' || @attachment.container_type == 'Work'|| @attachment.container_type == 'ContestantWork'|| @attachment.container_type == 'Contest'
|
||||
@project = @attachment.project
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,7 +40,7 @@ class AvatarController < ApplicationController
|
|||
@urlfile='/' << File.join("images","avatars",avatar_directory(@source_type),avatar_filename(@source_id,@image_file))
|
||||
|
||||
# 用户头像上传时进行特别处理
|
||||
if @is_direct == '1' && (@source_type == 'User' || @source_type == 'Course' || @source_type == 'Project' || @source_type == 'Organization')
|
||||
if @is_direct == '1' && (@source_type == 'User' || @source_type == 'Course' || @source_type == 'Project' || @source_type == 'Organization'|| @source_type == 'Contest')
|
||||
diskfile += "temp"
|
||||
@urlfile += "temp"
|
||||
end
|
||||
|
|
|
@ -173,12 +173,18 @@ class BlogCommentsController < ApplicationController
|
|||
render_attachment_warning_if_needed(@blogComment)
|
||||
#@article.save
|
||||
# redirect_to user_blogs_path(:user_id=>params[:user_id])
|
||||
# 给回复的人发消息
|
||||
reply_user_id = params[:reply_id].nil? ? @blogComment.blog.author_id: params[:reply_id].to_i
|
||||
# 回复的作业与评论的作者不是同一人则发送消息
|
||||
if ( params[:reply_id].nil? && @blogComment.author.id != @blogComment.blog.author_id )|| (!params[:reply_id].nil? && @blogComment.author.id != params[:reply_id].to_i)
|
||||
BlogMessage.create(:user_id => reply_user_id, :blog_id => params[:blog_id].to_i, :content => params[:blog_comment][:content],:blog_message_id => @blogComment.id, :blog_message_type => "BlogComment", :user_operator_id => @blogComment.author.id)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
if params[:course_id] #如果呆了course_id过来了,那么这是要跳到课程大纲去的
|
||||
redirect_to syllabus_course_path(:id=>params[:course_id])
|
||||
else
|
||||
redirect_to user_blog_blog_comment_path(:user_id=>@article.author_id,:blog_id=>@article.blog_id,:id=>@article)
|
||||
redirect_to user_blog_blog_comment_path( @article.author, :blog_id => @article.blog_id, :id => @article)
|
||||
end
|
||||
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ class BoardsController < ApplicationController
|
|||
#modify by nwb
|
||||
@flag = params[:flag] || false
|
||||
if @project
|
||||
if !@project.is_public? && !User.current.member_of?(@project) && !User.current.admin?
|
||||
if !@project.is_public? && !User.current.member_of?(@project) && !User.current.admin? && !User.current.allowed_to?(:view_messages, @project)
|
||||
render_403
|
||||
else
|
||||
@boards = @project.boards.includes(:last_message => :author).all
|
||||
|
@ -67,6 +67,30 @@ class BoardsController < ApplicationController
|
|||
else
|
||||
render_403
|
||||
end
|
||||
elsif @contest
|
||||
if (User.current.admin? || @contest.is_public || (!@contest.is_public && User.current.member_of_contest?(@contest)))
|
||||
@boards = @contest.boards.includes(:last_message => :author).all
|
||||
if @contest.boards.empty?
|
||||
@board = @contest.boards.build
|
||||
@board.name = " #{l(:label_board_contest) }"
|
||||
@board.description = @contest.name.to_s
|
||||
@board.project_id = -1
|
||||
@board.course_id = -1
|
||||
if @board.save
|
||||
@boards = @contest.boards.includes(:last_message => :author).all
|
||||
end
|
||||
end
|
||||
if params[:board_id]
|
||||
@board = Board.find params[:board_id].to_i
|
||||
else
|
||||
unless @contest.boards.where("parent_id is NULL").empty?
|
||||
@board = @contest.boards.where("parent_id is NULL").first
|
||||
end
|
||||
end
|
||||
show and return
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -89,6 +113,8 @@ class BoardsController < ApplicationController
|
|||
ForgeMessage.where("user_id =? and project_id =? and viewed =?", User.current.id, @project.id, 0).update_all(:viewed => true)
|
||||
elsif @course
|
||||
CourseMessage.where("user_id =? and course_id =? and viewed =?", User.current.id, @course.id, 0).update_all(:viewed => true)
|
||||
elsif @contest
|
||||
ContestMessage.where("user_id =? and contest_id =? and viewed =?", User.current.id, @contest.id, 0).update_all(:viewed => true)
|
||||
end
|
||||
|
||||
# sort_init 'updated_on', 'desc'
|
||||
|
@ -116,6 +142,25 @@ class BoardsController < ApplicationController
|
|||
else
|
||||
@topics = [];
|
||||
end
|
||||
elsif @contest
|
||||
if (@board)
|
||||
@topic_count = @board.topics.count();
|
||||
@topic_pages = 0 #(params[:page] ? params[:page].to_i + 1 : 0) *10
|
||||
@topics = @board.topics.reorder("#{Message.table_name}.sticky DESC, COALESCE(last_replies_messages.created_on, #{Message.table_name}.created_on) #{sort_type}").offset(@topic_pages).includes(:last_reply).preload(:author, {:last_reply => :author}).all();
|
||||
else
|
||||
@board = @contest.boards.build
|
||||
@board.name = " #{l(:label_board_contest) }"#self.name
|
||||
@board.description = @contest.name.to_s
|
||||
@board.project_id = -1
|
||||
@board.course_id = -1
|
||||
if @board.save
|
||||
@topic_count = @board.topics.count();
|
||||
@topic_pages = 0 #(params[:page] ? params[:page].to_i + 1 : 0) *10
|
||||
@topics = @board.topics.reorder("#{Message.table_name}.sticky DESC, COALESCE(last_replies_messages.created_on, #{Message.table_name}.created_on) #{sort_type}").offset(@topic_pages).includes(:last_reply).preload(:author, {:last_reply => :author}).all();
|
||||
else
|
||||
@topics = []
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#根据 赞+回复数排序
|
||||
|
@ -162,6 +207,10 @@ class BoardsController < ApplicationController
|
|||
@left_nav_type = 2
|
||||
@params=params
|
||||
render :action => 'show', :layout => 'base_courses'
|
||||
elsif @contest
|
||||
@left_nav_type = 4
|
||||
@params=params
|
||||
render :action => 'show', :layout => 'base_contests'
|
||||
end
|
||||
}
|
||||
format.atom {
|
||||
|
@ -214,6 +263,18 @@ class BoardsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
elsif @contest
|
||||
parent = Board.find params[:board_id].to_i
|
||||
board = @contest.boards.build
|
||||
board.name = params[:name]
|
||||
board.description = board.name
|
||||
board.project_id = -1
|
||||
board.course_id = -1
|
||||
board.position = parent.children.count + 1
|
||||
parent.children << board
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -237,7 +298,7 @@ class BoardsController < ApplicationController
|
|||
after_boards = @board.parent.children.where("position > #{@board.position}")
|
||||
after_boards.update_all("position = position - 1")
|
||||
@board.destroy
|
||||
if @course
|
||||
if @course || @contest
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
|
@ -247,7 +308,7 @@ class BoardsController < ApplicationController
|
|||
end
|
||||
|
||||
def update_position
|
||||
if @course
|
||||
if @course || @contest
|
||||
boards = @board.parent.children
|
||||
if params[:opr] == 'up' && @board.position > 1
|
||||
before_board = boards.where("position = #{@board.position - 1}").first
|
||||
|
@ -267,7 +328,7 @@ class BoardsController < ApplicationController
|
|||
end
|
||||
|
||||
def update_name
|
||||
if @course
|
||||
if @course || @contest
|
||||
@board.update_attribute("name", params[:name])
|
||||
@board.update_attribute("description", params[:name])
|
||||
respond_to do |format|
|
||||
|
@ -296,6 +357,8 @@ private
|
|||
@board = @project.boards.find(params[:id]) if params[:id]
|
||||
elsif @course
|
||||
@board = @course.boards.find(params[:id]) if params[:id]
|
||||
elsif @contest
|
||||
@board = @contest.boards.find(params[:id]) if params[:id]
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
|
|
|
@ -21,13 +21,14 @@ class CommentsController < ApplicationController
|
|||
model_object News
|
||||
before_filter :find_model_object, :except => [:reply, :quote]
|
||||
before_filter :find_project_from_association, :except => [:reply, :quote]
|
||||
before_filter :authorize
|
||||
before_filter :authorize, :except => [:destroy]
|
||||
|
||||
def create
|
||||
raise Unauthorized unless @news.commentable?
|
||||
if !@news.org_subfield_id.nil?
|
||||
@org_subfield = OrgSubfield.find(@news.org_subfield_id)
|
||||
end
|
||||
@contest = Contest.find(@news.contest_id) if @news.contest_id
|
||||
@comment = Comment.new
|
||||
#@project ? @comment.comments = params[:comment][:comments] : @comment.comments = params[:comment]
|
||||
if params[:user_activity_id]
|
||||
|
|
|
@ -1,2 +1,151 @@
|
|||
#encoding=utf-8
|
||||
class ContestMembersController < ApplicationController
|
||||
helper :users
|
||||
helper :contest_members
|
||||
helper :contests
|
||||
|
||||
before_filter :find_contest_member, :only => [:update, :destroy]
|
||||
|
||||
def create
|
||||
@contest = Contest.find(params[:contest])
|
||||
if params[:membership] && @contest
|
||||
@create_member_error_messages = "角色不能留空" unless params[:membership][:role_ids]
|
||||
@create_member_error_messages = "用户不能留空" unless params[:membership][:user_ids]
|
||||
members = []
|
||||
|
||||
if params[:membership][:user_ids] && params[:membership][:role_ids]
|
||||
attrs = params[:membership].dup
|
||||
user_ids = attrs.delete(:user_ids)
|
||||
role_ids = params[:membership][:role_ids]
|
||||
user_ids.each do |user_id|
|
||||
member = ContestMember.new(:user_id => user_id)
|
||||
members << member
|
||||
|
||||
contest_member_roles = member.contest_member_roles
|
||||
if role_ids.include?('14') && role_ids.include?('13')
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 14, :is_current => 0)
|
||||
else
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => role_ids[0].to_i)
|
||||
end
|
||||
|
||||
if role_ids.include?('15')
|
||||
ContestantForContest.create(:student_id => user_id, :contest_id => @contest.id)
|
||||
end
|
||||
|
||||
#给新成员和老师发送加入课程的消息,发送者id放在CourseMessage的course_message_id字段中
|
||||
#course_message_type设置为JoinCourse
|
||||
#status = 0 表示给学生发,status = 1表示给老师发
|
||||
course_join = ContestMessage.new(:user_id =>user_id, :contest_message_id=>User.current.id,:contest_id => @contest.id,:contest_message_type=>"JoinContest", :content => role_ids, :viewed => false, :status => 0)
|
||||
course_join.save
|
||||
#ContestMessage.create(:user_id => User.current.id, :contest_message_id => user_id, :contest_message_id => @contest.id, :contest_message_type => "JoinContest",:content => role_ids, :viewed => false, :status => 1)
|
||||
end
|
||||
end
|
||||
@contest.contest_members << members
|
||||
|
||||
members = @contest.member_principals.includes(:roles, :principal).all.sort
|
||||
end
|
||||
@roles = Role.where("id in (13, 14, 15)")
|
||||
respond_to do |format|
|
||||
format.html { redirect_to_settings_in_courses }
|
||||
format.js { @members = members;}
|
||||
format.api {
|
||||
@member = members.first
|
||||
if @member.valid?
|
||||
render :action => 'show', :status => :created, :location => membership_url(@member)
|
||||
else
|
||||
render_validation_errors(@member)
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
end
|
||||
|
||||
def contest_member_autocomplete
|
||||
@contest = Contest.find(params[:contest])
|
||||
@flag = params[:flag] || false
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if params[:membership]
|
||||
new_role_ids = params[:membership][:role_ids]
|
||||
if new_role_ids.size != 0 && new_role_ids != @contest_member.contest_member_roles.map{|ro| ro.role_id.to_s}
|
||||
destroy_member_roles = @contest_member.contest_member_roles
|
||||
if destroy_member_roles.any?
|
||||
destroy_member_roles.each(&:destroy)
|
||||
end
|
||||
contest_member_roles = @contest_member.contest_member_roles
|
||||
if new_role_ids.include?('14') && new_role_ids.include?('13')
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 14, :is_current => 0)
|
||||
else
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => new_role_ids[0].to_i)
|
||||
end
|
||||
joined = ContestantForContest.where('student_id = ? and contest_id = ?', @contest_member.user_id, @contest.id)
|
||||
joined.each do |join|
|
||||
join.destroy
|
||||
end
|
||||
|
||||
if new_role_ids.include?('15')
|
||||
ContestantForContest.create(:student_id => @contest_member.user_id, :contest_id => @contest.id)
|
||||
end
|
||||
end
|
||||
|
||||
@contest_member.save
|
||||
@members = @contest.member_principals.includes(:roles, :principal).all.sort
|
||||
@roles = Role.where("id in (13, 14, 15)")
|
||||
@member = @contest.contest_members.new
|
||||
end
|
||||
|
||||
saved = @member.save
|
||||
respond_to do |format|
|
||||
format.html { redirect_to settings_contest_path(@contest) }
|
||||
format.js
|
||||
format.api {
|
||||
if saved
|
||||
render_api_ok
|
||||
else
|
||||
render_validation_errors(@member)
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
if request.delete? && @contest_member.deletable?
|
||||
@contest_member.destroy
|
||||
|
||||
joined = ContestantForContest.where('student_id = ? and contest_id = ?', @contest_member.user_id, @contest.id)
|
||||
joined.each do |join|
|
||||
join.destroy
|
||||
end
|
||||
@roles = Role.where("id in (13, 14, 15)")
|
||||
@members = @contest.member_principals.includes(:roles, :principal).all.sort
|
||||
#移出课程发送消息
|
||||
ContestMessage.create(:user_id => @contest_member.user_id, :contest_id => @contest.id, :contest_message_type => "RemoveFromContest", :viewed => false, :contest_message_id => User.current.id)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html { redirect_to settings_contest_path(@contest) }
|
||||
format.js
|
||||
format.api {
|
||||
if @contest_member.destroyed?
|
||||
render_api_ok
|
||||
else
|
||||
head :unprocessable_entity
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def find_contest_member
|
||||
@contest_member = ContestMember.find params[:id]
|
||||
@contest = @contest_member.contest
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
#encoding: utf-8
|
||||
class ContestantWorksController < ApplicationController
|
||||
layout "base_contests"
|
||||
include ContestantWorksHelper
|
||||
include ApplicationHelper
|
||||
require 'bigdecimal'
|
||||
require "base64"
|
||||
before_filter :find_contestwork, :only => [:new, :index, :create, :new_student_work_project,:student_work_project,:cancel_relate_project,
|
||||
:search_course_students,:work_canrepeat,:add_group_member,:change_project]
|
||||
:delete_work,:search_contest_students,:work_canrepeat,:add_group_member,:change_project]
|
||||
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment]
|
||||
before_filter :member_of_contest, :only => [:new, :create, :show]
|
||||
before_filter :author_of_work, :only => [:edit, :update, :destroy]
|
||||
|
@ -13,31 +14,329 @@ class ContestantWorksController < ApplicationController
|
|||
before_filter :is_logged, :only => [:index]
|
||||
|
||||
def new
|
||||
#更新消息
|
||||
if @contestwork.work_status == 1
|
||||
noEvaluation = @contestwork.contest_messages.where("user_id =? and viewed =?", User.current.id, 0)
|
||||
noEvaluation.update_all(:viewed => true)
|
||||
|
||||
@user = User.current
|
||||
@student_work = ContestantWork.new
|
||||
respond_to do |format|
|
||||
format.html{ render :layout => "base_contests"}
|
||||
end
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
# 作业消息状态更新?
|
||||
work_messages = ContestMessage.where(:user_id => User.current.id, :viewed => 0, :contest_message_id => @contestwork.id, :contest_message_type => "Work")
|
||||
work_messages.update_all(:viewed => true)
|
||||
studentwork_messages = ContestMessage.where(:user_id => User.current.id, :viewed => 0, :contest_id => @contestwork.contest, :contest_message_type => "ContestantWork")
|
||||
studentwork_messages.update_all(:viewed => true)
|
||||
# 作品打分消息状态更新
|
||||
#studentworks_scores = ContestMessage.where("user_id =? and contest_id =? and contest_message_type =? and viewed =?", User.current.id, @contestwork.contest, "StudentWorksScore", 0)
|
||||
#studentworks_scores.update_all(:viewed => true)
|
||||
# 作品评论消息状态更新
|
||||
#journals_for_teacher = ContestMessage.where("user_id =? and contest_id =? and contest_message_type =? and viewed =?", User.current.id, @contestwork.contest, "JournalsForMessage", 0)
|
||||
#journals_for_teacher.update_all(:viewed => true)
|
||||
|
||||
##################################################################################################################
|
||||
@order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name].to_s.strip || "",params[:group]
|
||||
@homework_commons = @contest.works.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc")
|
||||
@all_homework_commons = @contest.works.order("created_at desc")
|
||||
@is_teacher = User.current.admin_of_contest?(@contest) || User.current.admin?
|
||||
@is_judge = User.current.judge_of_contest?(@contest)
|
||||
@is_evaluation = @is_judge && @contestwork.work_status == 3 && @contestwork.online_evaluation
|
||||
|
||||
@show_all = false
|
||||
|
||||
is_judge_open = @is_judge && (!@contestwork.online_evaluation || (@contestwork.online_evaluation && @contestwork.work_status == 4))
|
||||
is_contestant_open = User.current.contestant_of_contest?(@contest) && ((!@contestwork.online_evaluation && @contestwork.work_status == 2 && @contestwork.score_open) || (@contestwork.online_evaluation && @contestwork.work_status == 4 && @contestwork.score_open))
|
||||
if @is_teacher || is_judge_open || is_contestant_open
|
||||
# if @order == 'lastname'
|
||||
# @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name
|
||||
# elsif @order == 'student_id'
|
||||
# @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name
|
||||
# else
|
||||
@stundet_works = @contestwork.contestant_works.no_copy.select("contestant_works.*,contestant_works.work_score as score").includes(:user => {:user_extensions => []}, :project => {}, :contestant_work_scores => {}).order("#{@order} #{@b_sort}")
|
||||
#end
|
||||
@show_all = true
|
||||
elsif @is_evaluation
|
||||
if @contestwork.work_detail_manual.evaluation_num == -1
|
||||
@stundet_works = @contestwork.contestant_works.no_copy.select("contestant_works.*,contestant_works.work_score as score").includes(:user => {:user_extensions => []}, :project => {}, :contestant_work_scores => {}).order("#{@order} #{@b_sort}")
|
||||
else
|
||||
@stundet_works = User.current.contestant_work_evaluation_distributions.map(&:contestant_work).select { |cwork| cwork.work_id == @contestwork.id}
|
||||
end
|
||||
elsif User.current.judge_of_contest?(@contest)
|
||||
@stundet_works = []
|
||||
elsif User.current.contestant_of_contest?(@contest)
|
||||
if @contestwork.work_type == 3
|
||||
pro = @contestwork.contestant_work_projects.where(:user_id => User.current.id).first
|
||||
if pro.nil?
|
||||
@stundet_works = []
|
||||
else
|
||||
@stundet_works = @contestwork.contestant_works.select("contestant_works.*,contestant_works.work_score as score").where(:id => pro.contestant_work_id)
|
||||
end
|
||||
else
|
||||
@stundet_works = @contestwork.contestant_works.select("contestant_works.*,contestant_works.work_score as score").where(:user_id => User.current.id)
|
||||
end
|
||||
else
|
||||
render_403
|
||||
return
|
||||
end
|
||||
@student_work_count = @contestwork.contestant_works.has_committed.select("contestant_works.*,contestant_works.work_score as score").order("#{@order} #{@b_sort}").count
|
||||
|
||||
@score = @b_sort == "desc" ? "asc" : "desc"
|
||||
@is_focus = params[:is_focus] ? params[:is_focus].to_i : 0
|
||||
# 消息传过来的ID
|
||||
@message_student_work_id = params[:student_work_id]
|
||||
@left_nav_type = 3
|
||||
@tab = params[:tab].to_i
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html
|
||||
format.xls {
|
||||
filename = "#{@contest.user.show_name.to_s}_#{@contest.name}_#{@contestwork.name}_#{l(:excel_homework_list)}_#{DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s}.xls"
|
||||
send_data(work_score_to_xls(@stundet_works), :type => "text/excel;charset=utf-8; header=present",
|
||||
:filename => filename_for_content_disposition(filename))
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
@score = ContestantWorkScore.where(:user_id => User.current.id,:contestant_work_id => @work.id,:reviewer_role => 2).last
|
||||
@is_evaluation = User.current.judge_of_contest?(@contest) && @contestwork.work_status == 3 && @contestwork.online_evaluation
|
||||
@is_teacher = User.current.admin_of_contest?(@contest) || User.current.judge_of_contest?(@contest) || User.current.admin?
|
||||
if @is_evaluation
|
||||
@student_work_scores = @work.contestant_work_scores.where("user_id = #{User.current.id} and reviewer_role = 2").order("updated_at desc")
|
||||
else
|
||||
@student_work_scores = contestant_work_score_record(@work)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
# 提交作品前先判断是否已经提交
|
||||
@has_commit = false;
|
||||
if hsd_committed_work?(User.current.id, @contestwork.id)
|
||||
@work = ContestantWork.where("user_id =? and work_id =?", User.current.id, @contestwork.id).first
|
||||
@has_commit = true;
|
||||
#flash[:notice] = l(:notice_successful_create)
|
||||
#redirect_to edit_student_work_url(params[:student_work])
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
return
|
||||
end
|
||||
if params[:student_work]
|
||||
@submit_result = true
|
||||
student_work = ContestantWork.find(params[:student_work_id]) if params[:student_work_id]
|
||||
student_work ||= ContestantWork.new
|
||||
student_work.name = params[:student_work][:name] == "#{@contestwork.name}的作品提交(可修改)" ? "#{@contestwork.name}的作品提交" : params[:student_work][:name]
|
||||
student_work.description = params[:student_work][:description]
|
||||
student_work.work_id = @contestwork.id
|
||||
student_work.user_id = User.current.id
|
||||
student_work.commit_time = Time.now
|
||||
student_work.save_attachments(params[:attachments])
|
||||
render_attachment_warning_if_needed(student_work)
|
||||
if @contestwork.work_type == 3 && @contestwork.work_detail_group.base_on_project
|
||||
@student_work_project = @contestwork.contestant_work_projects.where("user_id = #{User.current.id}").first
|
||||
student_work.project_id = @student_work_project.project_id
|
||||
end
|
||||
#提交作品时,计算是否迟交
|
||||
student_work.work_status = Time.parse(@contestwork.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") ? 2 : 1
|
||||
|
||||
if student_work.save
|
||||
if @contestwork.work_type == 3
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
@student_work_project.contestant_work_id = student_work.id
|
||||
@student_work_project.save
|
||||
else
|
||||
stu_project = ContestantWorkProject.new(:work_id => @contestwork.id, :contestant_work_id => student_work.id, :project_id => student_work.project_id, :user_id => student_work.user_id, :is_leader => 1, :contest_id => @contestwork.contest_id)
|
||||
stu_project.save
|
||||
end
|
||||
members = params[:group_member_ids].split(',')
|
||||
for i in 1 .. members.count-1
|
||||
stu_work = ContestantWork.new(:name => student_work.name, :description => student_work.description,:user_id =>members[i].to_i, :work_id => @contestwork.id, :project_id => student_work.project_id, :work_status => 3, :commit_time => student_work.commit_time)
|
||||
if stu_work.save
|
||||
stu_project = ContestantWorkProject.new(:work_id => @contestwork.id, :contestant_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :contest_id => @contestwork.contest_id)
|
||||
stu_project.save
|
||||
end
|
||||
end
|
||||
end
|
||||
@contestwork.update_column(:updated_at, Time.now)
|
||||
update_contest_activity(@contestwork.class,@contestwork.id)
|
||||
update_user_activity(@contestwork.class,@contestwork.id)
|
||||
|
||||
contest_message = ContestMessage.new(:user_id =>User.current.id,:content=>"new",:contest_message_id=>student_work.id,:contest_id => @contest.id,:contest_message_type=>"ContestantWork", :status => 9) #作品提交记录
|
||||
contest_message.save
|
||||
|
||||
@student_work = ContestantWork.where(work_id: @contestwork.id, user_id: User.current.id).first
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
@submit_result = false
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
|
||||
@user = User.current
|
||||
if Time.parse(@contestwork.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") #编程作业不能修改作业|| 截止日期已到不能修改作业
|
||||
render_403
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html{ render :layout => "base_contests"}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if params[:student_work]
|
||||
@submit_result = true
|
||||
@work.name = params[:student_work][:name]
|
||||
@work.description = params[:student_work][:description]
|
||||
@work.save_attachments(params[:attachments])
|
||||
render_attachment_warning_if_needed(@work)
|
||||
if @work.save
|
||||
#如果学生作品被打分后修改,应该给老师提示
|
||||
#send_message_to_teacher(@work)
|
||||
if @contestwork.work_type == 3
|
||||
@student_work_project = @contestwork.contestant_work_projects.where("user_id=?",User.current.id).first
|
||||
student_work_projects = @contestwork.contestant_work_projects.where("contestant_work_id=? and is_leader =?",@work.id,0)
|
||||
user_ids = student_work_projects.empty? ? "(-1)" : "(" + student_work_projects.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @contestwork.contestant_works.where("user_id in #{user_ids}")
|
||||
student_works.delete_all
|
||||
student_work_projects.delete_all
|
||||
members = params[:group_member_ids].split(',')
|
||||
for i in 1 .. members.count-1
|
||||
stu_work = ContestantWork.new(:name => @work.name, :description => @work.description,:user_id=> members[i].to_i, :work_id => @contestwork.id, :project_id => @work.project_id, :work_status => 3, :commit_time => @work.commit_time)
|
||||
if stu_work.save
|
||||
stu_project = ContestantWorkProject.new(:work_id => @contestwork.id, :contestant_work_id => @work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :contest_id => @contestwork.contest_id)
|
||||
stu_project.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
contest_message = ContestMessage.new(:user_id =>User.current.id,:content=>"edit",:contest_message_id=>@work.id,:contest_id => @contest.id,:contest_message_type=>"ContestantWork", :status => 9) #作品提交记录
|
||||
contest_message.save
|
||||
@student_work = @work
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
=begin
|
||||
respond_to do |format|
|
||||
format.html{redirect_to edit_student_work_url(@work)}
|
||||
end
|
||||
=end
|
||||
@submit_result = false
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
if @contestwork.work_type == 3
|
||||
pros = @work.contestant_work_projects.where("is_leader = 0")
|
||||
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @contestwork.contestant_works.where("user_id in #{user_ids}")
|
||||
student_works.delete_all
|
||||
pros.delete_all
|
||||
|
||||
project = @work.contestant_work_projects.where("is_leader = 1").first
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
project.update_attributes(:contestant_work_id => nil)
|
||||
else
|
||||
project.destroy
|
||||
end
|
||||
end
|
||||
@work.destroy
|
||||
@work.attachments.destroy_all
|
||||
#@work.student_works_scores.destroy_all
|
||||
@work.contest_messages.destroy_all
|
||||
#@work.student_work_tests.destroy_all
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
redirect_to contestant_works_path(:work => @contestwork.id)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def delete_work
|
||||
@work = ContestantWork.where("user_id =? and work_id =?", User.current.id, @contestwork.id).first
|
||||
if @work
|
||||
@work.destroy
|
||||
if @contestwork.work_type == 3 && @contestwork.work_detail_group.base_on_project
|
||||
pros = @work.contestant_work_projects.where("is_leader = 0")
|
||||
pros.each do |pro|
|
||||
pro.destroy
|
||||
end
|
||||
project = @work.contestant_work_projects.where("is_leader = 1").first
|
||||
project.update_attributes(:contestant_work_id => nil)
|
||||
elsif @contestwork.work_type == 3 && !@contestwork.work_detail_group.base_on_project
|
||||
@work.contestant_work_projects.each do |pro2|
|
||||
pro2.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
redirect_to works_path(:contest => @contestwork.contest_id)
|
||||
end
|
||||
|
||||
def retry_work
|
||||
if @contestwork.work_type == 3
|
||||
pros = @work.contestant_work_projects.where("is_leader = 0")
|
||||
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @contestwork.contestant_works.where("user_id in #{user_ids}")
|
||||
student_works.delete_all
|
||||
pros.delete_all
|
||||
|
||||
project = @work.contestant_work_projects.where("is_leader = 1").first
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
project.update_attributes(:contestant_work_id => nil)
|
||||
else
|
||||
project.destroy
|
||||
end
|
||||
end
|
||||
@work.destroy
|
||||
@work.attachments.destroy_all
|
||||
@work.contest_messages.destroy_all
|
||||
|
||||
@student_work = ContestantWork.new
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
#查找竞赛中的参赛者
|
||||
def search_contest_students
|
||||
name = ""
|
||||
unless params[:name].nil?
|
||||
name = params[:name]
|
||||
end
|
||||
if !@contestwork.work_detail_group.base_on_project
|
||||
all_student_ids = "(" + @contestwork.contest.contestants.map{|student| student.student_id}.join(",") + ")"
|
||||
else
|
||||
pro = Project.find @contestwork.contestant_work_projects.where("user_id=?",User.current.id).first.project_id
|
||||
all_student_ids = "(" + pro.members.map{|member| member.user_id}.join(",") + ")"
|
||||
end
|
||||
all_students = User.where("id in #{all_student_ids}")
|
||||
student_work_id = @contestwork.contestant_work_projects.where("user_id=? and contestant_work_id is not null",User.current.id).first.nil? ? -1 : @contestwork.contestant_work_projects.where("user_id=?",User.current.id).first.contestant_work_id
|
||||
@commit_student_ids = @contestwork.contestant_works.where("id != #{student_work_id}").map{|student| student.user_id}
|
||||
@users = searchstudent_by_name all_students,name
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def new_student_work_project
|
||||
|
@ -79,7 +378,64 @@ class ContestantWorksController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def add_score
|
||||
@is_last = params[:is_last] == "true"
|
||||
@is_evaluation = User.current.judge_of_contest?(@contest) && @contestwork.work_status == 3 && @contestwork.online_evaluation
|
||||
#@is_teacher = User.current.admin_of_contest?(@contest) || User.current.judge_of_contest?(@contest) || User.current.admin?
|
||||
#老师、教辅可以随时评分,学生只能在匿评作业的匿评阶段进行评分
|
||||
render_403 and return unless @is_evaluation
|
||||
@is_last_a = @work.contestant_work_scores.empty?
|
||||
@new_score = ContestantWorkScore.new
|
||||
@new_score.score = params[:score].to_i
|
||||
@new_score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
|
||||
@new_score.user_id = User.current.id
|
||||
@new_score.contestant_work_id = @work.id
|
||||
@new_score.reviewer_role = 2
|
||||
|
||||
# if User.current.admin?
|
||||
# @new_score.reviewer_role = 1
|
||||
# else
|
||||
# role = User.current.members.where("course_id = ?",@course.id).first.roles.where("is_current = 1").first.name
|
||||
# @new_score.reviewer_role = get_role_by_name(role)
|
||||
# end
|
||||
# if @score
|
||||
# if @is_teacher
|
||||
# @is_new = true
|
||||
# @is_last_a = false
|
||||
# else
|
||||
# @is_new = false
|
||||
# end
|
||||
# else
|
||||
# @is_new = true
|
||||
# end
|
||||
|
||||
@new_score.save_attachments(params[:attachments])
|
||||
render_attachment_warning_if_needed(@new_score)
|
||||
|
||||
if @new_score.save
|
||||
@contestwork.update_column('updated_at', Time.now)
|
||||
update_contest_activity(@contestwork.class,@contestwork.id)
|
||||
update_user_activity(@contestwork.class,@contestwork.id)
|
||||
judge_score = ContestantWorkScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM contestant_work_scores WHERE contestant_work_id = #{@work.id} AND reviewer_role = 2 ORDER BY created_at DESC) AS t GROUP BY user_id) AS a")
|
||||
@work.judge_score = judge_score.first.score.nil? ? nil : judge_score.first.score.try(:round, 2).to_f
|
||||
if @work.save
|
||||
@work = @contestwork.contestant_works.select("contestant_works.*,contestant_works.work_score as score").where(:id => @work.id).first
|
||||
@count = @contestwork.contestant_works.has_committed.count
|
||||
@student_work_scores = contestant_work_score_record @work
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def hsd_committed_work?(user, homework)
|
||||
sw = ContestantWork.where("user_id =? and work_id =?", user, homework).first
|
||||
sw.nil? ? result = false : result = true
|
||||
result
|
||||
end
|
||||
|
||||
#获取题目
|
||||
def find_contestwork
|
||||
@contestwork = Work.find params[:work]
|
||||
|
@ -116,4 +472,140 @@ class ContestantWorksController < ApplicationController
|
|||
def is_logged
|
||||
redirect_to signin_path unless User.current.logged?
|
||||
end
|
||||
|
||||
#提交成绩导出
|
||||
def work_score_to_xls items
|
||||
xls_report = StringIO.new
|
||||
book = Spreadsheet::Workbook.new
|
||||
sheet1 = book.create_worksheet :name => "work"
|
||||
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
||||
sheet1.row(0).default_format = blue
|
||||
if @contestwork.work_type == 1 #普通作业
|
||||
#开启在线评审
|
||||
if @contestwork.online_evaluation
|
||||
sheet1.row(0).concat([l(:excel_contestant_id),l(:excel_user_name),l(:excel_nickname),l(:excel_mail),l(:excel_school),l(:excel_homework_name),l(:excel_homework_des)])
|
||||
if @contestwork.work_detail_manual.evaluation_num != -1
|
||||
num = @contestwork.work_detail_manual.evaluation_num
|
||||
n = num < (contest_judges @contest).size ? num : (contest_judges @contest).size
|
||||
else
|
||||
n = (contest_judges @contest).size
|
||||
end
|
||||
for i in 1 .. n do i
|
||||
sheet1.row(0).concat([l(:label_judge_score, :num => i),l(:label_judge_comment, :num => i)])
|
||||
end
|
||||
sheet1.row(0).concat([l(:label_highest_score),l(:label_lowest_score),l(:excel_f_score),l(:excel_commit_time)])
|
||||
|
||||
count_row = 1
|
||||
items.each do |contestant_work|
|
||||
sheet1[count_row,0] = contestant_work.user.id
|
||||
sheet1[count_row,1] = contestant_work.user.show_name
|
||||
sheet1[count_row,2] = contestant_work.user.login
|
||||
sheet1[count_row,3] = contestant_work.user.mail
|
||||
sheet1[count_row,4] = contestant_work.user.user_extensions.school.nil? ? "" : contestant_work.user.user_extensions.school.name
|
||||
sheet1[count_row,5] = contestant_work.name
|
||||
sheet1[count_row,6] = strip_html contestant_work.description if !contestant_work.description.nil?
|
||||
work_scores = contestant_work_score_record contestant_work
|
||||
for i in 1 .. n do i
|
||||
sheet1[count_row,6 + i*2 -1] = (work_scores.nil? || work_scores[i - 1].nil?) ? l(:label_without_score) : work_scores[i - 1].score
|
||||
sheet1[count_row,6 + i*2] = (work_scores.nil? || work_scores[i - 1].nil?) ? "" : work_scores[i - 1].comment
|
||||
end
|
||||
sheet1[count_row,7+2*n] = (work_scores.nil? || work_scores.reorder("score desc").first.nil?) ? l(:label_without_score) : work_scores.reorder("score desc").first.score
|
||||
sheet1[count_row,8+2*n] = (work_scores.nil? || work_scores.reorder("score desc").last.nil?) ? l(:label_without_score) : work_scores.reorder("score desc").last.score
|
||||
sheet1[count_row,9+2*n] = contestant_work.work_score.nil? ? l(:label_without_score) : contestant_work.work_score.round(2)
|
||||
sheet1[count_row,10+2*n] = format_time contestant_work.commit_time
|
||||
count_row += 1
|
||||
end
|
||||
|
||||
#未开启在线评审
|
||||
else
|
||||
sheet1.row(0).concat([l(:excel_contestant_id),l(:excel_user_name),l(:excel_nickname),l(:excel_mail),l(:excel_school),l(:excel_homework_name),l(:excel_homework_des),l(:excel_commit_time)])
|
||||
count_row = 1
|
||||
items.each do |contestant_work|
|
||||
sheet1[count_row,0] = contestant_work.user.id
|
||||
sheet1[count_row,1] = contestant_work.user.show_name
|
||||
sheet1[count_row,2] = contestant_work.user.login
|
||||
sheet1[count_row,3] = contestant_work.user.mail
|
||||
sheet1[count_row,4] = contestant_work.user.user_extensions.school.nil? ? "" : contestant_work.user.user_extensions.school.name
|
||||
sheet1[count_row,5] = contestant_work.name
|
||||
sheet1[count_row,6] = strip_html contestant_work.description if !contestant_work.description.nil?
|
||||
sheet1[count_row,7] = format_time contestant_work.commit_time
|
||||
count_row += 1
|
||||
end
|
||||
end
|
||||
|
||||
elsif @contestwork.work_type == 3 #分组作业
|
||||
if @contestwork.online_evaluation
|
||||
sheet1.row(0).concat([l(:excel_group_member),l(:excel_group_leader),l(:excel_group_leader_login),l(:excel_group_leader_mail),l(:excel_school)])
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
sheet1.row(0).concat([l(:excel_homework_project),l(:excel_homework_name),l(:excel_homework_des)])
|
||||
else
|
||||
sheet1.row(0).concat([l(:excel_homework_name),l(:excel_homework_des)])
|
||||
end
|
||||
if @contestwork.work_detail_manual.evaluation_num != -1
|
||||
num = @contestwork.work_detail_manual.evaluation_num
|
||||
n = num < (contest_judges @contest).size ? num : (contest_judges @contest).size
|
||||
else
|
||||
n = (contest_judges @contest).size
|
||||
end
|
||||
for i in 1 .. n do i
|
||||
sheet1.row(0).concat([l(:label_judge_score, :num => i),l(:label_judge_comment, :num => i)])
|
||||
end
|
||||
sheet1.row(0).concat([l(:label_highest_score),l(:label_lowest_score),l(:excel_f_score),l(:excel_commit_time)])
|
||||
|
||||
count_row = 1
|
||||
items.each do |contestant_work|
|
||||
sheet1[count_row,0] = get_contest_group_member_names contestant_work
|
||||
sheet1[count_row,1] = contestant_work.user.show_name
|
||||
sheet1[count_row,2] = contestant_work.user.login
|
||||
sheet1[count_row,3] = contestant_work.user.mail
|
||||
sheet1[count_row,4] = contestant_work.user.user_extensions.school.nil? ? "" : contestant_work.user.user_extensions.school.name
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
sheet1[count_row,5] = (contestant_work.project_id == 0 || contestant_work.project_id.nil?) ? l(:excel_no_project) : contestant_work.project.name
|
||||
current_column = 6
|
||||
else
|
||||
current_column = 5
|
||||
end
|
||||
sheet1[count_row,current_column] = contestant_work.name
|
||||
sheet1[count_row,current_column + 1] = strip_html contestant_work.description if !contestant_work.description.nil?
|
||||
work_scores = contestant_work_score_record contestant_work
|
||||
for i in 1 .. n do i
|
||||
sheet1[count_row,current_column + 1 + i*2 -1] = (work_scores.nil? || work_scores[i - 1].nil?) ? l(:label_without_score) : work_scores[i - 1].score
|
||||
sheet1[count_row,current_column + 1 + i*2] = (work_scores.nil? || work_scores[i - 1].nil?) ? "" : work_scores[i - 1].comment
|
||||
end
|
||||
sheet1[count_row,current_column + 2 +2*n] = (work_scores.nil? || work_scores.reorder("score desc").first.nil?) ? l(:label_without_score) : work_scores.reorder("score desc").first.score
|
||||
sheet1[count_row,current_column + 3 +2*n] = (work_scores.nil? || work_scores.reorder("score desc").last.nil?) ? l(:label_without_score) : work_scores.reorder("score desc").last.score
|
||||
sheet1[count_row,current_column + 4 +2*n] = contestant_work.work_score.nil? ? l(:label_without_score) : contestant_work.work_score.round(2)
|
||||
sheet1[count_row,current_column + 5 +2*n] = format_time contestant_work.commit_time
|
||||
count_row += 1
|
||||
end
|
||||
|
||||
else
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
sheet1.row(0).concat([l(:excel_group_member),l(:excel_group_leader),l(:excel_group_leader_login),l(:excel_group_leader_mail),l(:excel_school),l(:excel_homework_project),l(:excel_homework_name),l(:excel_homework_des),l(:excel_commit_time)])
|
||||
else
|
||||
sheet1.row(0).concat([l(:excel_group_member),l(:excel_group_leader),l(:excel_group_leader_login),l(:excel_group_leader_mail),l(:excel_school),l(:excel_homework_name),l(:excel_homework_des),l(:excel_commit_time)])
|
||||
end
|
||||
count_row = 1
|
||||
items.each do |contestant_work|
|
||||
sheet1[count_row,0] = get_contest_group_member_names contestant_work
|
||||
sheet1[count_row,1] = contestant_work.user.show_name
|
||||
sheet1[count_row,2] = contestant_work.user.login
|
||||
sheet1[count_row,3] = contestant_work.user.mail
|
||||
sheet1[count_row,4] = contestant_work.user.user_extensions.school.nil? ? "" : contestant_work.user.user_extensions.school.name
|
||||
if @contestwork.work_detail_group.base_on_project
|
||||
sheet1[count_row,5] = (contestant_work.project_id == 0 || contestant_work.project_id.nil?) ? l(:excel_no_project) : contestant_work.project.name
|
||||
current_column = 6
|
||||
else
|
||||
current_column = 5
|
||||
end
|
||||
sheet1[count_row,current_column] = contestant_work.name
|
||||
sheet1[count_row,current_column + 1] = strip_html contestant_work.description if !contestant_work.description.nil?
|
||||
sheet1[count_row,current_column + 2] = format_time contestant_work.commit_time
|
||||
count_row += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
book.write xls_report
|
||||
xls_report.string
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,16 +1,70 @@
|
|||
#encoding=utf-8
|
||||
class ContestsController < ApplicationController
|
||||
|
||||
before_filter :find_contest, :only => [:show, :settings]
|
||||
include ContestsHelper
|
||||
helper :contest_members
|
||||
helper :users
|
||||
helper :attachments
|
||||
helper :files
|
||||
include AvatarHelper
|
||||
|
||||
before_filter :find_contest, :only => [:show, :settings, :update, :destroy, :contest_activities, :private_or_public, :switch_role, :set_invite_code_halt, :renew,
|
||||
:member, :export_all_members, :feedback]
|
||||
before_filter :is_logged, :only => [:index, :new, :create]
|
||||
before_filter :is_admin?, :only => [:settings, :set_invite_code_halt, :destroy]
|
||||
before_filter :is_member?, :only => [:show, :contest_activities]
|
||||
|
||||
layout "base_contests"
|
||||
|
||||
def show
|
||||
#更新创建课程消息状态
|
||||
contest_request_messages = ContestMessage.where("user_id = #{User.current.id} and contest_id = #{@contest.id} and contest_message_type in ('ContestRequestDealResult', 'JoinContest', 'RemoveFromContest') and viewed = 0")
|
||||
contest_request_messages.update_all(:viewed => true)
|
||||
@left_nav_type = 1
|
||||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html
|
||||
end
|
||||
end
|
||||
|
||||
def contest_activities
|
||||
contest_activities = @contest.contest_activities
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
if params[:type].present?
|
||||
case params[:type]
|
||||
when "work"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'Work'").order('updated_at desc')
|
||||
when "news"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'News'").order('updated_at desc')
|
||||
when "message"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'Message'").order('updated_at desc')
|
||||
when "poll"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'Poll'").order('updated_at desc')
|
||||
when "attachment"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'Attachment'").order('updated_at desc')
|
||||
when "journalsForMessage"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'JournalsForMessage'").order('updated_at desc')
|
||||
when "news"
|
||||
@contest_activities = contest_activities.where("contest_act_type = 'News'").order('updated_at desc')
|
||||
else
|
||||
@contest_activities = contest_activities.order('updated_at desc')
|
||||
end
|
||||
else
|
||||
@contest_activities = contest_activities.order('updated_at desc')
|
||||
end
|
||||
@contest_activities_count = @contest_activities.count
|
||||
@contest_activities = @contest_activities.limit(10).offset(@page * 10)
|
||||
@type = params[:type]
|
||||
|
||||
@left_nav_type = 2
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html
|
||||
format.api
|
||||
end
|
||||
end
|
||||
|
||||
def new
|
||||
if User.current.login?
|
||||
@contest = Contest.new
|
||||
|
@ -39,6 +93,78 @@ class ContestsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def update
|
||||
@contest.name = params[:contest][:name]
|
||||
@contest.description = params[:contest][:description]
|
||||
# @project.organization_id = params[:organization_id]
|
||||
params[:contest][:is_public] == "on" ? @contest.is_public = 1 : @contest.is_public = 0
|
||||
@contest.save_attachments(params[:attachments])
|
||||
begin
|
||||
if @contest.save
|
||||
respond_to do |format|
|
||||
format.html{redirect_to contest_path(@contest)}
|
||||
end
|
||||
end
|
||||
rescue Exception => e
|
||||
@message = e.message
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@contest.update_attributes(:is_delete => true)
|
||||
end
|
||||
|
||||
def feedback
|
||||
if (User.current.admin? || @contest.is_public || (!@contest.is_public && User.current.member_of_contest?(@contest)))
|
||||
ContestMessage.where(:user_id => User.current.id, :contest_id => @contest.id, :contest_message_type => 'JournalsForMessage', :contest_message_id => @contest.journals_for_messages.map{|jour|jour.id}).update_all(:viewed => true)
|
||||
page = params[:page]
|
||||
# Find the page of the requested reply
|
||||
@jours = @contest.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
|
||||
@jour_count = @jours.count
|
||||
@limit = 10
|
||||
if params[:r] && page.nil?
|
||||
offset = @jours.count(:conditions => ["#{JournalsForMessage.table_name}.id > ?", params[:r].to_i])
|
||||
page = 1 + offset / @limit
|
||||
end
|
||||
@jour = paginateHelper @jours,10
|
||||
@state = false
|
||||
@left_nav_type = 6
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'base_contests'}
|
||||
format.api
|
||||
end
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
def private_or_public
|
||||
@contest.update_attributes(:is_public => !@contest.is_public)
|
||||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
#设置竞赛公开或私有
|
||||
def set_contest_attribute
|
||||
contest_id = params[:contest].to_i
|
||||
@contest = Contest.find(contest_id)
|
||||
@user = User.find(params[:user_id])
|
||||
@contest.is_public? ? @contest.update_attribute(:is_public, false) : @contest.update_attribute(:is_public, true)
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def settings
|
||||
@select_tab = params[:tab]
|
||||
|
||||
@member ||= @contest.contest_members.new
|
||||
@roles = Role.where("id in (13, 14, 15)")
|
||||
@members = @contest.member_principals.includes(:roles, :principal).all.sort
|
||||
end
|
||||
|
||||
def join_contest
|
||||
|
||||
end
|
||||
|
@ -59,14 +185,172 @@ class ContestsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
#处理加入竞赛成为管理员、评委、参赛者的请求
|
||||
#status 1 同意 2 拒绝
|
||||
def dealwith_apply_request
|
||||
@msg = AppliedMessage.find(params[:msg_id])
|
||||
#AppliedMessage role 13 管理员 14 评委 15 参赛者
|
||||
applied_contest = @msg.applied
|
||||
apply_user = User.find(applied_contest.user_id)
|
||||
ids = applied_contest.role.split(",") # [@msg.content] msg content保存的是申请的职位角色
|
||||
integer_ids = []
|
||||
ids.each do |role_id|
|
||||
integer_ids << role_id.to_i
|
||||
end
|
||||
case params[:agree]
|
||||
when 'Y'
|
||||
if ContestMember.where(:user_id => apply_user.id, :contest_id => applied_contest.contest_id).first.nil?
|
||||
member = ContestMember.new(:user_id => apply_user.id)
|
||||
Contest.find(applied_contest.contest_id).contest_members << member
|
||||
else
|
||||
member = ContestMember.where(:user_id => apply_user.id, :contest_id => applied_contest.contest_id).first
|
||||
end
|
||||
|
||||
contest_member_roles = member.contest_member_roles
|
||||
if integer_ids.include?(14) && integer_ids.include?(13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 14, :is_current => 0)
|
||||
else
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => integer_ids[0])
|
||||
end
|
||||
|
||||
ContestMessage.create(:user_id => apply_user.id, :contest_id => applied_contest.contest_id, :viewed => false,:contest_message_id=>User.current.id,:content=>applied_contest.role,:contest_message_type=>'ContestRequestDealResult',:status=>1)
|
||||
applied_contest.applied_messages.update_all(:status => 1, :viewed => 1, :applied_user_id => User.current.id)
|
||||
@msg.update_attributes(:status => 1, :viewed => 1, :applied_user_id => User.current.id)
|
||||
applied_contest.update_attributes(:status => 1)
|
||||
if integer_ids.include?(15)
|
||||
ContestantForContest.create(:student_id => apply_user.id, :contest_id =>applied_contest.contest_id)
|
||||
end
|
||||
|
||||
when 'N'
|
||||
ContestMessage.create(:user_id => apply_user.id, :contest_id => applied_contest.contest_id, :viewed => false,:contest_message_id=>User.current.id,:content=>applied_contest.role,:contest_message_type=>'ContestRequestDealResult',:status=>2)
|
||||
applied_contest.applied_messages.update_all(:status => 2, :viewed => 1, :applied_user_id => User.current.id)
|
||||
@msg.update_attributes(:status => 2, :viewed => 1, :applied_user_id => User.current.id)
|
||||
applied_contest.update_attributes(:status => 2)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def switch_role
|
||||
members = @contest.contest_members.where("user_id = #{params[:user_id]}")
|
||||
unless members.blank?
|
||||
curr_role = ContestMemberRole.find_by_contest_member_id_and_role_id(members.first.id, params[:curr_role])
|
||||
tar_role = ContestMemberRole.find_by_contest_member_id_and_role_id(members.first.id, params[:tar_role])
|
||||
unless (curr_role.nil? || tar_role.nil?)
|
||||
curr_role.update_column('is_current', 0)
|
||||
tar_role.update_column('is_current', 1)
|
||||
end
|
||||
end
|
||||
redirect_to contest_path(@contest)
|
||||
end
|
||||
|
||||
# 邀请码停用/启用
|
||||
def set_invite_code_halt
|
||||
if User.current.admin_of_contest?(@contest) || User.current.admin?
|
||||
@contest.update_attribute('invite_code_halt', @contest.invite_code_halt == 0 ? 1 : 0)
|
||||
end
|
||||
end
|
||||
|
||||
# 恢复已删除的竞赛
|
||||
def renew
|
||||
if User.current.admin?
|
||||
@contest.update_attributes(:is_delete => false)
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
else
|
||||
return 404
|
||||
end
|
||||
end
|
||||
|
||||
# 成员列表
|
||||
def member
|
||||
if (User.current.admin? || @contest.is_public || (!@contest.is_public && User.current.member_of_contest?(@contest)))
|
||||
@role = params[:role].nil? ? '3' : params[:role]
|
||||
case @role
|
||||
when '1'
|
||||
@members = contest_managers @contest
|
||||
when '2'
|
||||
@members = contest_judges @contest
|
||||
when '3'
|
||||
@members = contest_contestants @contest
|
||||
end
|
||||
if params[:name]
|
||||
q = "#{params[:name].strip}"
|
||||
@members = search_member_by_name_login_school @members, q
|
||||
end
|
||||
@limit = 50
|
||||
@page = params[:page].nil? ? 1 : params['page'].to_i
|
||||
@members_count = @members.count
|
||||
@mem_pages = Paginator.new @members_count, @limit, @page
|
||||
@members = paginateHelper @members, @limit
|
||||
respond_to do |format|
|
||||
format.html {render :layout => 'base_contests'}
|
||||
format.js
|
||||
end
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
def export_all_members
|
||||
sql = "SELECT DISTINCT(cmr.id) AS cmr_id, cmr.role_id, users.`login`, users.id AS user_id, users.`mail`, cmr.created_at FROM users, contest_members cm, contest_member_roles cmr, user_extensions ue, schools " +
|
||||
"WHERE users.id = cm.`user_id` AND users.id=ue.`user_id` AND cmr.`contest_member_id` = cm.`id` AND cm.`contest_id` = #{@contest.id} AND (ue.`school_id` IS NULL OR ue.`school_id` = schools.`id`) " +
|
||||
"ORDER BY role_id ASC, CONVERT(schools.`name` USING gbk) COLLATE gbk_chinese_ci DESC, CONVERT(users.`lastname` USING gbk) COLLATE gbk_chinese_ci DESC"
|
||||
@members = ContestMemberRole.find_by_sql sql
|
||||
respond_to do |format|
|
||||
format.xls {
|
||||
filename = "#{@contest.name.to_s}-成员列表-#{DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s}.xls"
|
||||
send_data(member_to_xls(@members), :type => "text/excel;charset=utf-8; header=present",
|
||||
:filename => filename_for_content_disposition("#{filename}.xls"))
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def member_to_xls members
|
||||
xls_report = StringIO.new
|
||||
book = Spreadsheet::Workbook.new
|
||||
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)])
|
||||
sheet1[0,0] = "id"
|
||||
sheet1[0,1] = "姓名"
|
||||
sheet1[0,2] = "登录名"
|
||||
sheet1[0,3] = "电子邮箱"
|
||||
sheet1[0,4] = "单位"
|
||||
sheet1[0,5] = "角色"
|
||||
sheet1[0,6] = "加入时间"
|
||||
count_row = 1
|
||||
members.each_with_index do |member, i|
|
||||
user = User.find(member.user_id)
|
||||
sheet1[count_row,0]= user.id
|
||||
sheet1[count_row,1] = user.show_name
|
||||
sheet1[count_row,2] = user.login
|
||||
sheet1[count_row,3] = user.mail
|
||||
sheet1[count_row,4] = user.user_extensions.school_id.blank? ? "" : (user.user_extensions.school.blank? ? "" : user.user_extensions.school.name)
|
||||
sheet1[count_row,5] = member.role_id == 13 ? "管理员" : (member.role_id == 14 ? "评委" : "参赛者")
|
||||
sheet1[count_row,6] = format_time member.created_at
|
||||
count_row += 1
|
||||
end
|
||||
book.write xls_report
|
||||
xls_report.string
|
||||
end
|
||||
|
||||
def find_contest
|
||||
if params[:id].to_i < 780
|
||||
render_403
|
||||
return
|
||||
end
|
||||
@contest = Contest.find(params[:id])
|
||||
if @contest.is_delete and !User.current.admin?
|
||||
render_404
|
||||
return
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
@ -75,8 +359,19 @@ class ContestsController < ApplicationController
|
|||
redirect_to signin_path unless User.current.logged?
|
||||
end
|
||||
|
||||
def settings
|
||||
|
||||
def is_admin?
|
||||
unless User.current.admin_of_contest?(@contest) || User.current.admin?
|
||||
render_403
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
def is_member?
|
||||
if User.current.member_of_contest?(@contest) || User.current.admin? || @contest.is_public
|
||||
|
||||
else
|
||||
render_403
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
class CooperationController < ApplicationController
|
||||
|
||||
def index
|
||||
|
||||
end
|
||||
|
||||
end
|
|
@ -187,6 +187,7 @@ class CoursesController < ApplicationController
|
|||
# @is_remote = true
|
||||
@sort_type = 'score'
|
||||
@score_sort_by = "desc"
|
||||
@search_name = "#{params[:name].strip}"
|
||||
q = "#{params[:name].strip}"
|
||||
if params[:incourse]
|
||||
results = searchmember_by_name(student_homework_score(0,0,0,"desc"), q)
|
||||
|
@ -277,6 +278,15 @@ class CoursesController < ApplicationController
|
|||
@members = paginateHelper @members, @limit
|
||||
end
|
||||
|
||||
# 显示/隐藏课程"开源检索"的入口
|
||||
def open_or_close_os_interface
|
||||
os_status = @course.os_allow == 0 ? 1 : 0
|
||||
@course.update_attribute(:os_allow, os_status)
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def valid_ajax
|
||||
req = Hash.new(false)
|
||||
req[:message] = ''
|
||||
|
@ -350,19 +360,17 @@ class CoursesController < ApplicationController
|
|||
@search = params[:search]
|
||||
q = params[:search] ? "#{params[:search].strip}" : ""
|
||||
@members = []
|
||||
@members = @course.members.where("course_group_id = 0").joins("join user_extensions on members.user_id = user_extensions.user_id").order("student_id asc").select{|m| m.roles.to_s.include?("Student")}
|
||||
if q.nil? || q == ""
|
||||
@course.members.includes(:user =>[:user_extensions =>[]]).where("course_group_id = 0").each do |m|
|
||||
if m && m.user && m.user.join_in?(@course)
|
||||
@members << m
|
||||
end
|
||||
end
|
||||
else
|
||||
@course.members.includes(:user =>[:user_extensions =>[]]).where("course_group_id = 0").each do |m|
|
||||
members = []
|
||||
@members.each do |m|
|
||||
username = m.user[:lastname].to_s.downcase + m.user[:firstname].to_s.downcase
|
||||
if m && m.user && m.user.join_in?(@course) && (m.user[:login].to_s.downcase.include?(q) || m.user.user_extensions[:student_id].to_s.downcase.include?(q) || username.include?(q))
|
||||
@members << m
|
||||
if m && m.user && (m.user[:login].to_s.downcase.include?(q) || m.user.user_extensions[:student_id].to_s.downcase.include?(q) || username.include?(q))
|
||||
members << m
|
||||
end
|
||||
end
|
||||
@members = members
|
||||
end
|
||||
@is_search = params[:is_search] ? 1 : 0
|
||||
respond_to do |format|
|
||||
|
@ -402,6 +410,7 @@ class CoursesController < ApplicationController
|
|||
@is_remote = true
|
||||
@sort_type = 'score'
|
||||
@score_sort_by = "desc"
|
||||
@search_name = ""
|
||||
if params[:group_id] && params[:group_id] != "0" && params[:group_id] != "-1"
|
||||
@group = CourseGroup.find(params[:group_id])
|
||||
@results = student_homework_score(@group.id,0, 0,"desc")
|
||||
|
@ -455,6 +464,7 @@ class CoursesController < ApplicationController
|
|||
@is_remote = true
|
||||
@course_groups = @course.course_groups if @course.course_groups
|
||||
@show_serch = params[:role] == '2'
|
||||
@search_name = ""
|
||||
case @role
|
||||
when '1'
|
||||
@subPage_title = l :label_teacher_list
|
||||
|
@ -490,14 +500,18 @@ class CoursesController < ApplicationController
|
|||
end
|
||||
|
||||
def export_course_member_excel
|
||||
if params[:group_id]
|
||||
q = params[:name] ? "#{params[:name].strip}" : ""
|
||||
if params[:group_id] && params[:group_id] != "0" && params[:group_id] != "-1"
|
||||
group = CourseGroup.find params[:group_id]
|
||||
unless group.nil?
|
||||
@all_members = student_homework_score(group.id,0,0,"desc")
|
||||
@all_members = searchmember_by_name(student_homework_score(group.id,0,0,"desc"), q)
|
||||
end
|
||||
elsif params[:group_id] && params[:group_id] == "-1"
|
||||
@all_members = searchmember_by_name(student_homework_score(-1, 0, 10,"desc"), q)
|
||||
else
|
||||
@all_members = student_homework_score(0,0,0,"desc")
|
||||
@all_members = searchmember_by_name(student_homework_score(0, 0, 10,"desc"), q)
|
||||
end
|
||||
|
||||
@homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at asc")
|
||||
filename="#{@course.teacher.lastname.to_s + @course.teacher.firstname.to_s }_#{@course.name}_#{@course.time.to_s + @course.term}#{l(:excel_member_list)}";
|
||||
|
||||
|
@ -616,11 +630,6 @@ class CoursesController < ApplicationController
|
|||
join_course_messages = CourseMessage.where("user_id =? and course_message_type =? and course_id =? and status = ? and viewed =?", User.current.id, 'JoinCourse', @course.id, 1, 0)
|
||||
join_course_messages.update_all(:viewed => true)
|
||||
|
||||
if params[:tab] && params[:tab] == 'boards'
|
||||
@tab = 4
|
||||
else
|
||||
@tab = 0
|
||||
end
|
||||
if User.current.allowed_to?(:as_teacher,@course)
|
||||
@select_tab = params[:tab]
|
||||
@issue_custom_fields = IssueCustomField.sorted.all
|
||||
|
@ -630,6 +639,14 @@ class CoursesController < ApplicationController
|
|||
|
||||
@roles = Role.givable.all[3..5]
|
||||
@members = @course.member_principals.includes(:roles, :principal).all.sort
|
||||
|
||||
course_org_ids = OrgCourse.find_by_sql("select distinct organization_id from org_courses where course_id = #{@course.id}").map(&:organization_id)
|
||||
if course_org_ids.empty?
|
||||
@orgs_not_in_course = User.current.organizations
|
||||
else
|
||||
course_org_ids = "(" + course_org_ids.join(',') + ")"
|
||||
@orgs_not_in_course = User.current.organizations.where("organizations.id not in #{course_org_ids}")
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html { render :layout => 'base_courses' }
|
||||
format.api { render_validation_errors(@course) }
|
||||
|
@ -654,6 +671,7 @@ class CoursesController < ApplicationController
|
|||
course_status.destroy if course_status
|
||||
course_status = CourseStatus.create(:course_id => @course.id, :grade => 0)
|
||||
end
|
||||
@syllabus = @course.syllabus
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
|
@ -1145,6 +1163,7 @@ class CoursesController < ApplicationController
|
|||
page = params[:page]
|
||||
# Find the page of the requested reply
|
||||
@jours = @course.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
|
||||
@jour_count = @jours.count
|
||||
@limit = 10
|
||||
if params[:r] && page.nil?
|
||||
offset = @jours.count(:conditions => ["#{JournalsForMessage.table_name}.id > ?", params[:r].to_i])
|
||||
|
@ -1352,9 +1371,38 @@ class CoursesController < ApplicationController
|
|||
end
|
||||
|
||||
#统计
|
||||
def statistics_course
|
||||
def course_statistics
|
||||
@left_nav_type = 10
|
||||
@order = params[:order] ? params[:order] : 'desc'
|
||||
@tab = params[:tab] ? params[:tab].to_i : nil
|
||||
if !params[:tab] || params[:tab] == "1"
|
||||
@type = params[:type] ? params[:type] : 'act_score'
|
||||
sql = "SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1) AS act_score,
|
||||
message_num, message_reply_num, news_reply_num, news_num, resource_num, journal_num, homework_journal_num, ccs.user_id FROM course_contributor_scores ccs
|
||||
JOIN students_for_courses ON students_for_courses.course_id = ccs.course_id AND students_for_courses.student_id = ccs.user_id
|
||||
WHERE ccs.course_id = #{@course.id} ORDER BY #{@type} #{@order}, act_score #{@order}"
|
||||
@members = CourseContributorScore.find_by_sql(sql)
|
||||
|
||||
elsif params[:tab] == "2"
|
||||
@type = params[:type] ? params[:type] : 'total_score'
|
||||
@members = @course.course_homework_statisticss.reorder("#{@type} #{@order}, total_score #{@order}")
|
||||
|
||||
elsif params[:tab] == "3"
|
||||
@type = params[:type] ? params[:type] : 'project_act_score'
|
||||
sql = "SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score,
|
||||
changeset_num, issue_num, issue_journal_num, attach_num, board_num, board_message_num, pss.project_id FROM project_scores pss
|
||||
JOIN student_work_projects ON student_work_projects.project_id = pss.project_id AND student_work_projects.course_id = #{@course.id}
|
||||
GROUP BY pss.project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}"
|
||||
@members = ProjectScore.find_by_sql(sql)
|
||||
end
|
||||
|
||||
@limit = 20
|
||||
@page = params[:page].nil? ? 1 : params['page'].to_i
|
||||
@members_count = @members.count
|
||||
@mem_pages = Paginator.new @members_count, @limit, @page
|
||||
@members = paginateHelper @members, @limit
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'base_courses'}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -109,9 +109,9 @@ class DocumentsController < ApplicationController
|
|||
attachments = Attachment.attach_files(@document, params[:attachments])
|
||||
render_attachment_warning_if_needed(@document)
|
||||
|
||||
if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
|
||||
Mailer.run.attachments_added(attachments[:files])
|
||||
end
|
||||
# if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
|
||||
# # Mailer.run.attachments_added(attachments[:files])
|
||||
# end
|
||||
redirect_to document_url(@document)
|
||||
end
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ class FilesController < ApplicationController
|
|||
@file.publish_time = params[:publish_time]
|
||||
end
|
||||
end
|
||||
if @file.publish_time > Date.today
|
||||
if @file.publish_time > Time.now
|
||||
@file.is_publish = 0
|
||||
else
|
||||
@file.is_publish = 1
|
||||
|
@ -524,7 +524,7 @@ class FilesController < ApplicationController
|
|||
attachments = Attachment.attach_filesex(@project, params[:attachments], params[:attachment_type])
|
||||
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
||||
# 发送邮件
|
||||
Mailer.run.attachments_added(attachments[:files])
|
||||
# Mailer.run.attachments_added(attachments[:files])
|
||||
# 生成动态
|
||||
attachments[:files].each do |file|
|
||||
ForgeActivity.create(:user_id => User.current.id, :project_id => @project.id, :forge_act_id => file.id, :forge_act_type => "Attachment")
|
||||
|
@ -581,22 +581,20 @@ class FilesController < ApplicationController
|
|||
end
|
||||
attachments = Attachment.attach_filesex(@course, params[:attachments], params[:attachment_type])
|
||||
|
||||
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
||||
Mailer.run.attachments_added(attachments[:files])
|
||||
end
|
||||
# if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
||||
# # Mailer.run.attachments_added(attachments[:files])
|
||||
# end
|
||||
if !attachments.empty? && attachments[:files]
|
||||
attachments[:files].each do |attachment|
|
||||
if params[:publish_time]
|
||||
if params[:publish_time] == ""
|
||||
attachment.publish_time = Date.today
|
||||
attachment.publish_time = Time.now
|
||||
else
|
||||
attachment.publish_time = params[:publish_time]
|
||||
attachment.is_publish = 0
|
||||
end
|
||||
else
|
||||
attachment.publish_time = Date.today
|
||||
end
|
||||
if attachment.publish_time > Date.today
|
||||
attachment.is_publish = 0
|
||||
attachment.publish_time = Time.now
|
||||
end
|
||||
attachment.description = params[:description]
|
||||
attachment.save
|
||||
|
@ -604,7 +602,7 @@ class FilesController < ApplicationController
|
|||
end
|
||||
if params[:course_attachment_type] && params[:course_attachment_type].is_a?(Array)
|
||||
params[:course_attachment_type].each do |type|
|
||||
tag_name = get_tag_name_by_type_number type
|
||||
tag_name = get_tag_name_by_type_number type
|
||||
if !attachments.empty? && attachments[:files] && tag_name != ""
|
||||
attachments[:files].each do |attachment|
|
||||
attachment.tag_list.add(tag_name)
|
||||
|
@ -614,7 +612,7 @@ class FilesController < ApplicationController
|
|||
end
|
||||
else
|
||||
if params[:course_attachment_type] && params[:course_attachment_type] != "5"
|
||||
tag_name = get_tag_name_by_type_number params[:course_attachment_type]
|
||||
tag_name = get_tag_name_by_type_number params[:course_attachment_type]
|
||||
if !attachments.empty? && attachments[:files] && tag_name != ""
|
||||
attachments[:files].each do |attachment|
|
||||
attachment.tag_list.add(tag_name)
|
||||
|
|
|
@ -49,8 +49,30 @@ class ForumsController < ApplicationController
|
|||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html { redirect_to signin_path }
|
||||
end
|
||||
format.html { redirect_to signin_path }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def mail_feedback
|
||||
@user = User.where(:id => params[:user_id]).first
|
||||
unless @user.nil?
|
||||
cs = CommentService.new
|
||||
@memo, message = cs.create_feedback params, @user
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def forum_create_memo
|
||||
@memo = Memo.new
|
||||
@my_forums_count = Forum.where(:creator_id => User.current.id).count
|
||||
@my_memos_count = Memo.where(:author_id => User.current.id).count
|
||||
@forums = Forum.reorder("topic_count desc,updated_at desc")
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render layout: 'base_new_forum'}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -96,35 +118,41 @@ class ForumsController < ApplicationController
|
|||
end
|
||||
|
||||
def index
|
||||
@offset, @limit = api_offset_and_limit({:limit => 10})
|
||||
order = ""
|
||||
@order_str = ""
|
||||
if(params[:reorder_complex])
|
||||
@type="reorder_complex"
|
||||
@str=params[:reorder_complex]
|
||||
@forums_all = Forum.reorder("topic_count #{params[:reorder_complex]},updated_at #{params[:reorder_complex]}")
|
||||
order = " last_replies_memos.created_at #{params[:reorder_complex]}, #{Memo.table_name}.created_at #{params[:reorder_complex]}"
|
||||
@order_str = "reorder_complex="+params[:reorder_complex]
|
||||
elsif(params[:reorder_popu])
|
||||
@type="reorder_popu"
|
||||
@str=params[:reorder_popu]
|
||||
@forums_all = Forum.reorder("topic_count #{params[:reorder_popu]}")
|
||||
order = "replies_count #{params[:reorder_popu]}"
|
||||
@order_str = "reorder_popu="+params[:reorder_popu]
|
||||
elsif(params[:reorder_time])
|
||||
@type="reorder_time"
|
||||
@str=params[:reorder_time]
|
||||
@forums_all = Forum.reorder("updated_at #{params[:reorder_time]}")
|
||||
order = "#{Memo.table_name}.updated_at #{params[:reorder_time]}"
|
||||
@order_str = "reorder_time="+params[:reorder_time]
|
||||
else
|
||||
params[:reorder_complex] = "desc"
|
||||
@type="reorder_complex"
|
||||
@str=params[:reorder_complex]
|
||||
@forums_all = Forum.reorder("topic_count desc,updated_at desc")
|
||||
order = "#{Memo.table_name}.updated_at desc"
|
||||
@order_str = "reorder_time=desc"
|
||||
end
|
||||
@forums_count = @forums_all.count
|
||||
@forums_pages = Paginator.new @forums_count, @limit, params['page']
|
||||
|
||||
@offset ||= @forums_pages.offset
|
||||
@forums = @forums_all.offset(@offset).limit(@limit).all
|
||||
#@forums = Forum.all
|
||||
@memo = Memo.new(:forum => @forum)
|
||||
@memos = Memo.where("parent_id is null")
|
||||
@topic_count = @memos.count
|
||||
@topic_pages = Paginator.new @topic_count, per_page_option, params['page']
|
||||
@memos = @memos.includes(:last_reply).
|
||||
limit(@topic_pages.per_page).
|
||||
offset(@topic_pages.offset).
|
||||
reorder(order).
|
||||
preload(:author, {:last_reply => :author}).
|
||||
all
|
||||
@forums = Forum.reorder("topic_count desc,updated_at desc")
|
||||
@my_forums_count = Memo.where("author_id =? and parent_id is null", User.current.id).count
|
||||
@my_memos_count = Memo.where("author_id =? and parent_id is not null", User.current.id).count
|
||||
@errors = params[:errors]
|
||||
respond_to do |format|
|
||||
format.html # index.html.erb
|
||||
format.js
|
||||
format.json { render json: @forums }
|
||||
format.html {
|
||||
render :layout => 'base_new_forum'
|
||||
}# show.html.erb
|
||||
format.json { render json: @forum }
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -153,22 +181,21 @@ class ForumsController < ApplicationController
|
|||
@memo = Memo.new(:forum => @forum)
|
||||
@topic_count = @forum.topics.count
|
||||
@topic_pages = Paginator.new @topic_count, per_page_option, params['page']
|
||||
@memos = @forum.topics.
|
||||
# reorder("#{Memo.table_name}.sticky DESC").
|
||||
includes(:last_reply).
|
||||
@memos = @forum.topics.includes(:last_reply).
|
||||
limit(@topic_pages.per_page).
|
||||
offset(@topic_pages.offset).
|
||||
reorder(order).
|
||||
preload(:author, {:last_reply => :author}).
|
||||
all
|
||||
@memos
|
||||
@my_topic_count = Memo.where("forum_id = #{@forum.id} and author_id = #{User.current.id} and parent_id is null").count
|
||||
@my_replies_count = Memo.where("forum_id = #{@forum.id} and author_id = #{User.current.id} and parent_id is not null").count
|
||||
@my_topic_count = Memo.where("forum_id = #{@memo.forum_id} and parent_id is null").count
|
||||
@my_replies_count = Memo.where("forum_id = #{@memo.forum_id} and parent_id is not null").count
|
||||
@errors = params[:errors]
|
||||
# 推荐贴吧
|
||||
@forums = Forum.where("id !=?", @forum.id).reorder("topic_count desc,updated_at desc").first(3)
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {
|
||||
render :layout => 'base_forums'
|
||||
render :layout => 'base_new_forum'
|
||||
}# show.html.erb
|
||||
format.json { render json: @forum }
|
||||
end
|
||||
|
@ -178,9 +205,9 @@ class ForumsController < ApplicationController
|
|||
# GET /forums/new.json
|
||||
def new
|
||||
@forum = Forum.new
|
||||
|
||||
respond_to do |format|
|
||||
format.html # new.html.erb
|
||||
format.js
|
||||
format.json { render json: @forum }
|
||||
end
|
||||
end
|
||||
|
@ -188,6 +215,10 @@ class ForumsController < ApplicationController
|
|||
# GET /forums/1/edit
|
||||
def edit
|
||||
@forum = Forum.find(params[:id])
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
# POST /forums
|
||||
|
@ -200,18 +231,17 @@ class ForumsController < ApplicationController
|
|||
# Author lizanle
|
||||
# Description after save后需要进行资源记录的更新
|
||||
# owner_type = 2 对应的是 forum
|
||||
@save_flag=true
|
||||
@save_flag = true
|
||||
if params[:asset_id]
|
||||
ids = params[:asset_id].split(',')
|
||||
update_kindeditor_assets_owner ids ,@forum.id,OwnerTypeHelper::FORUM
|
||||
update_kindeditor_assets_owner ids, @forum.id, OwnerTypeHelper::FORUM
|
||||
end
|
||||
#end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.js{ redirect_to forums_path, notice: l(:label_forum_create_succ)}
|
||||
format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
|
||||
format.json { render json: @forum, status: :created, location: @forum }
|
||||
end
|
||||
|
||||
else
|
||||
@save_flag=false
|
||||
respond_to do |format|
|
||||
|
@ -227,15 +257,14 @@ class ForumsController < ApplicationController
|
|||
# PUT /forums/1.json
|
||||
def update
|
||||
@forum = Forum.find(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
if @forum.update_attributes(params[:forum])
|
||||
format.js {render :text=> true}
|
||||
format.js
|
||||
format.html { redirect_to @forum, notice: l(:label_forum_update_succ) }
|
||||
format.json { head :no_content }
|
||||
else
|
||||
flash.now[:error] = "#{l :label_forum_update_fail}: #{@forum.errors.full_messages[0]}"
|
||||
format.js { render :text=> false}
|
||||
format.js
|
||||
format.html { render action: "edit" }
|
||||
format.json { render json: @forum.errors, status: :unprocessable_entity }
|
||||
end
|
||||
|
@ -254,6 +283,19 @@ class ForumsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 更新贴吧描述
|
||||
def update_memo_description
|
||||
@forum = Forum.find(params[:id])
|
||||
if @forum.blank?
|
||||
result = { :result => false }
|
||||
else
|
||||
forum_decription = params[:forum][:description]
|
||||
@forum.update_attributes(:description => forum_decription )
|
||||
result = { :result => true }
|
||||
end
|
||||
render :json => result
|
||||
end
|
||||
|
||||
def search_forum
|
||||
# @forums = paginateHelper Forum.where("name LIKE '%#{params[:name]}%'")
|
||||
q = "%#{params[:name].strip}%"
|
||||
|
@ -296,15 +338,28 @@ class ForumsController < ApplicationController
|
|||
|
||||
#检查forum的名字
|
||||
def check_forum_name
|
||||
forum_name_exist = true
|
||||
if params[:forum_id]
|
||||
forum_name_exist = Forum.where("name = '#{params[:forum_name]}' and id != #{params[:forum_id]}").count >= 1 ? true : false
|
||||
else
|
||||
forum_name_exist = Forum.where("name = '#{params[:forum_name]}' ").count >= 1 ? true : false
|
||||
begin
|
||||
forum_name = params[:forum_name]
|
||||
if params[:forum_id]
|
||||
result = Forum.where("name = '#{forum_name}' and id != #{params[:forum_id]}").first.blank? ? {:result => true} : {:result => false}
|
||||
else
|
||||
result = Forum.where(:name => forum_name).first.blank? ? {:result => true} : {:result => false}
|
||||
end
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
render :text => forum_name_exist
|
||||
render :json => result
|
||||
# if params[:forum_id]
|
||||
# forum_name_exist = Forum.where("name = '#{params[:forum_name]}' and id != #{params[:forum_id]}").count >= 1 ? true : false
|
||||
# else
|
||||
# forum_name_exist = Forum.where("name = '#{params[:forum_name]}' ").count >= 1 ? true : false
|
||||
# end
|
||||
# render :text => forum_name_exist
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
#添加论坛tag
|
||||
def add_forum_tag
|
||||
@forum = Forum.find(params[:id])
|
||||
|
|
|
@ -73,7 +73,7 @@ class HomeworkCommonController < ApplicationController
|
|||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'new_base_user'}
|
||||
format.html{render :layout => 'base_course_community'}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -89,7 +89,7 @@ class HomeworkCommonController < ApplicationController
|
|||
end
|
||||
homework_detail_manual = @homework.homework_detail_manual || HomeworkDetailManual.new
|
||||
param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d")
|
||||
homework_end_time = Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d")
|
||||
homework_end_time = @homework.end_time ? Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") : ''
|
||||
if homework_end_time != param_end_time
|
||||
if homework_end_time > param_end_time
|
||||
@homework.student_works.where("work_status = 1").each do |st|
|
||||
|
@ -97,6 +97,9 @@ class HomeworkCommonController < ApplicationController
|
|||
st.late_penalty = @homework.late_penalty
|
||||
st.work_status = 2
|
||||
st.save
|
||||
#更新CourseHomeworkStatistics中学生的迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id)
|
||||
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
else
|
||||
|
@ -105,6 +108,9 @@ class HomeworkCommonController < ApplicationController
|
|||
st.late_penalty = 0
|
||||
st.work_status = 1
|
||||
st.save
|
||||
#更新CourseHomeworkStatistics中学生的迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id)
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -134,9 +140,22 @@ class HomeworkCommonController < ApplicationController
|
|||
end
|
||||
|
||||
status = false
|
||||
if @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0
|
||||
if @homework.publish_time > Date.today && homework_detail_manual.comment_status == 1
|
||||
homework_detail_manual.comment_status = 0
|
||||
@homework.student_works.destroy_all
|
||||
#更新CourseHomeworkStatistics中每个学生的未交作品数
|
||||
@homework.course.student.each do |student|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
elsif @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0
|
||||
homework_detail_manual.comment_status = 1
|
||||
status = true
|
||||
#更新CourseHomeworkStatistics中每个学生的未交作品数
|
||||
@homework.course.student.each do |student|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
eval_start = homework_detail_manual.evaluation_start
|
||||
if eval_start.nil? || (eval_start <= @homework.end_time && homework_detail_manual.comment_status <= 1)
|
||||
|
@ -172,7 +191,7 @@ class HomeworkCommonController < ApplicationController
|
|||
end
|
||||
|
||||
#分组作业
|
||||
if @homework.homework_type == 3
|
||||
if @homework.homework_type == 3 && @homework.student_works.has_committed.count == 0
|
||||
@homework.homework_detail_group ||= HomeworkDetailGroup.new
|
||||
@homework_detail_group = @homework.homework_detail_group
|
||||
@homework_detail_group.min_num = params[:min_num].to_i if params[:min_num]
|
||||
|
@ -180,6 +199,12 @@ class HomeworkCommonController < ApplicationController
|
|||
@homework_detail_group.base_on_project = params[:base_on_project] ? 1 : 0
|
||||
end
|
||||
|
||||
if anonymous != @homework.anonymous_comment
|
||||
@homework.student_works.where("work_status != 0").each do |student_work|
|
||||
student_work.save
|
||||
end
|
||||
end
|
||||
|
||||
@homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1
|
||||
if @homework.save
|
||||
homework_detail_manual.save if homework_detail_manual
|
||||
|
@ -192,11 +217,11 @@ class HomeworkCommonController < ApplicationController
|
|||
|
||||
@hw_status = params[:hw_status].to_i
|
||||
if params[:is_manage] == "1"
|
||||
redirect_to manage_or_receive_homeworks_user_path(User.current.id)
|
||||
redirect_to user_manage_homeworks_user_path(User.current.id)
|
||||
elsif params[:is_manage] == "2"
|
||||
redirect_to my_homeworks_user_path(User.current.id)
|
||||
redirect_to user_receive_homeworks_user_path(User.current.id)
|
||||
elsif @hw_status == 1
|
||||
redirect_to user_path(User.current.id)
|
||||
redirect_to user_course_community_path(User.current.id)
|
||||
elsif @hw_status == 2
|
||||
redirect_to course_path(@course.id)
|
||||
elsif @hw_status == 5
|
||||
|
@ -210,6 +235,36 @@ class HomeworkCommonController < ApplicationController
|
|||
|
||||
def destroy
|
||||
if @homework.destroy
|
||||
#更新CourseHomeworkStatistics中每个学生的未交作品数、已交作品数、迟交作品数
|
||||
hw_count = @course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").count
|
||||
homework_ids = @course.homework_commons.empty? ? "(-1)" : "(" + @course.homework_commons.map{|hw| hw.id}.join(",") + ")"
|
||||
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
|
||||
is_eva_homeworks = @course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
|
||||
is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
|
||||
has_eva_homeworks = @course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
|
||||
has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
|
||||
@course.student.each do |student|
|
||||
user = student.student
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
|
||||
if user && course_statistics
|
||||
committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
|
||||
un_commit_work_num = (hw_count - committed_work_num) < 0 ? 0 : (hw_count - committed_work_num)
|
||||
late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
|
||||
absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
|
||||
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
|
||||
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
|
||||
un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
|
||||
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
|
||||
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
|
||||
appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
|
||||
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
|
||||
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
|
||||
course_statistics.update_attributes(:committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
|
||||
:late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
|
||||
:appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
|
||||
end
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
@hw_status = params[:hw_status].to_i
|
||||
|
@ -266,6 +321,10 @@ class HomeworkCommonController < ApplicationController
|
|||
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
|
||||
student_works_evaluation_distributions.save
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中该学生的待匿评数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, pro_work.user_id)
|
||||
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
|
||||
end
|
||||
else
|
||||
student_works.each_with_index do |work, index|
|
||||
|
@ -277,6 +336,10 @@ class HomeworkCommonController < ApplicationController
|
|||
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
|
||||
student_works_evaluation_distributions.save
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中该学生的待匿评数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, user.id)
|
||||
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
|
||||
end
|
||||
end
|
||||
@homework_detail_manual.update_column('comment_status', 2)
|
||||
|
@ -284,7 +347,7 @@ class HomeworkCommonController < ApplicationController
|
|||
@statue = 1
|
||||
# 匿评开启消息邮件通知
|
||||
send_message_anonymous_comment(@homework, m_status = 2)
|
||||
Mailer.send_mail_anonymous_comment_open(@homework).deliver
|
||||
# Mailer.send_mail_anonymous_comment_open(@homework).deliver
|
||||
else
|
||||
@statue = 2
|
||||
|
||||
|
@ -309,6 +372,11 @@ class HomeworkCommonController < ApplicationController
|
|||
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
|
||||
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual.absence_penalty : 0
|
||||
student_work.save
|
||||
|
||||
#更新CourseHomeworkStatistics中该学生的待匿评数和缺评数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student_work.user_id)
|
||||
course_statistics.update_attribute('un_evaluation_work_num', (course_statistics.un_evaluation_work_num - absence_penalty_count) < 0 ? 0 : (course_statistics.un_evaluation_work_num - absence_penalty_count)) if course_statistics
|
||||
course_statistics.update_attribute('absence_evaluation_work_num', course_statistics.absence_evaluation_work_num + absence_penalty_count) if course_statistics
|
||||
end
|
||||
|
||||
# 未参与匿评的缺评计算
|
||||
|
@ -326,7 +394,7 @@ class HomeworkCommonController < ApplicationController
|
|||
|
||||
# 匿评关闭消息邮件通知
|
||||
send_message_anonymous_comment(@homework, m_status = 3)
|
||||
Mailer.send_mail_anonymous_comment_close(@homework).deliver
|
||||
# Mailer.send_mail_anonymous_comment_close(@homework).deliver
|
||||
@user_activity_id = params[:user_activity_id].to_i
|
||||
@hw_status = params[:hw_status].to_i
|
||||
@is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#coding=utf-8
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
#
|
||||
|
@ -261,6 +262,7 @@ class IssuesController < ApplicationController
|
|||
retrieve_previous_and_next_issue_ids
|
||||
render :template => 'issues/show', :layout => @project_base_tag#by young
|
||||
}
|
||||
format.js
|
||||
format.api
|
||||
format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' }
|
||||
format.pdf {
|
||||
|
@ -585,12 +587,15 @@ class IssuesController < ApplicationController
|
|||
update_forge_activity(@issue.class,@issue.id)
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
if params[:issue_id]
|
||||
@issue_id = params[:issue_id]
|
||||
end
|
||||
@priorities = IssuePriority.active
|
||||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
# Issue详情单独处理
|
||||
if params[:is_issue_show]
|
||||
format.js{redirect_to issue_path(@issue)}
|
||||
else
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -642,7 +647,11 @@ class IssuesController < ApplicationController
|
|||
update_user_activity(@issue.class,@issue.id)
|
||||
update_forge_activity(@issue.class,@issue.id)
|
||||
respond_to do |format|
|
||||
format.js
|
||||
if params[:is_issue_show]
|
||||
format.js{redirect_to issue_path(@issue)}
|
||||
else
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -654,28 +663,81 @@ class IssuesController < ApplicationController
|
|||
# 非动态页面直接刷新,动态页面手动刷新
|
||||
def delete_journal
|
||||
@is_project = params[:is_project]
|
||||
@issue = Issue.find(params[:id])
|
||||
begin
|
||||
forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id])
|
||||
forge_acts.destroy_all unless forge_acts.empty?
|
||||
at_message = AtMessage.where(:at_message_type => "Journal", :at_message_id => params[:journal_id])
|
||||
at_message.destroy_all unless at_message.empty?
|
||||
Journal.delete(params[:journal_id])
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
respond_to do |format|
|
||||
if @user_activity_id
|
||||
format.js
|
||||
else
|
||||
format.html{ redirect_to issue_url(@issue)}
|
||||
end
|
||||
@issue = Issue.find(params[:id])
|
||||
begin
|
||||
forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id])
|
||||
forge_acts.destroy_all unless forge_acts.empty?
|
||||
at_message = AtMessage.where(:at_message_type => "Journal", :at_message_id => params[:journal_id])
|
||||
at_message.destroy_all unless at_message.empty?
|
||||
Journal.delete(params[:journal_id])
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
respond_to do |format|
|
||||
if @user_activity_id
|
||||
format.js
|
||||
else
|
||||
format.js{ redirect_to issue_url(@issue)}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def statistics
|
||||
@project = Project.find(params[:id])
|
||||
params[:author_id].to_i != 0 ? (@author = User.find(params[:author_id].to_i).show_name) : @author = 0
|
||||
case params[:tracker_id].to_i
|
||||
when 1
|
||||
@tracker = "缺陷"
|
||||
when 2
|
||||
@tracker = "功能"
|
||||
when 3
|
||||
@tracker = "支持"
|
||||
when 4
|
||||
@tracker = "任务"
|
||||
when 5
|
||||
@tracker = "周报"
|
||||
when 0
|
||||
@tracker = 0
|
||||
end
|
||||
params[:subject].blank? ? @search = 0 : @search = params[:subject]
|
||||
params[:assigned_to_id].to_i != 0 ? (@assigned = User.find(params[:assigned_to_id].to_i).show_name) : @assigned = 0
|
||||
params[:fixed_version_id].to_i != 0 ? (@version = Version.find(params[:fixed_version_id].to_i).name) : @version = 0
|
||||
params[:done_ratio].to_i != -1 ? (@done = params[:done_ratio].to_i) : @done = -1
|
||||
case params[:priority_id].to_i
|
||||
when 1
|
||||
@prior = "低"
|
||||
when 2
|
||||
@prior = "正常"
|
||||
when 3
|
||||
@prior = "高"
|
||||
when 4
|
||||
@prior = "紧急"
|
||||
when 5
|
||||
@prior = "立刻"
|
||||
when 0
|
||||
@prior = 0
|
||||
end
|
||||
case params[:status_id].to_i
|
||||
when 1
|
||||
@status = "新增"
|
||||
when 2
|
||||
@status = "正在解决"
|
||||
when 3
|
||||
@status = "已解决"
|
||||
when 4
|
||||
@status = "反馈"
|
||||
when 5
|
||||
@status = "关闭"
|
||||
when 6
|
||||
@status = "拒绝"
|
||||
when 0
|
||||
@status = 0
|
||||
end
|
||||
params[:issue_create_date_start].blank? ? @start_time = 0 : @start_time = params[:issue_create_date_start]
|
||||
params[:issue_create_date_end].blank? ? @end_time = 0 : @end_time = params[:issue_create_date_end]
|
||||
@filter_condition = true
|
||||
@filter_condition = false if (@author == 0 && @tracker == 0 && @search == 0 && @assigned == 0 && @version == 0 && @done == -1 && @prior ==0 && @status == 0 && @start_time ==0 && @end_time)
|
||||
if @project.nil?
|
||||
render_404
|
||||
end
|
||||
|
|
|
@ -57,10 +57,10 @@ class MembersController < ApplicationController
|
|||
@applied_message = AppliedMessage.find(params[:applied_message_id])
|
||||
applied_project = @applied_message.applied
|
||||
user = User.find(@applied_message.applied_user_id)
|
||||
project = Project.find(applied_project.project_id)
|
||||
if user.member_of?(project)
|
||||
@flash_message = "您已经是项目成员了"
|
||||
@applied_message.update_attribute(:status, 2)
|
||||
project = Project.find(applied_project.project_id) if !applied_project.nil?
|
||||
if user.member_of?(project)|| AppliedMessage.where(:applied_id => @applied_message.applied_id, :status => 0).count == 0
|
||||
@flash_message = "该申请已被其他管理员处理"
|
||||
# @applied_message.update_attribute(:status, 2)
|
||||
else
|
||||
ap_role = applied_project.try(:role)
|
||||
if ap_role
|
||||
|
@ -77,7 +77,7 @@ class MembersController < ApplicationController
|
|||
project.user_grades << user_grades unless user_grades.first.user_id.nil?
|
||||
|
||||
# 添加成功后所有管理员收到的消息状态都要更新
|
||||
applied_messages = AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 1,
|
||||
applied_messages = AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 0,
|
||||
:applied_type => "AppliedProject")
|
||||
applied_messages.update_all(:status => 7, :viewed => true)
|
||||
@applied_message = AppliedMessage.find(params[:applied_message_id])
|
||||
|
@ -88,7 +88,7 @@ class MembersController < ApplicationController
|
|||
ps.send_wechat_join_project_notice user,project,ap_role,0
|
||||
# 添加成功后,批准人收到消息
|
||||
# AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,
|
||||
# :status => 7, :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
|
||||
# :status => 7, :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
|
@ -104,24 +104,30 @@ class MembersController < ApplicationController
|
|||
@applied_message = AppliedMessage.find(params[:applied_message_id])
|
||||
# @applied_message.update_attribute(:status, 3)
|
||||
applied_project = @applied_message.applied
|
||||
project = Project.find(@applied_message.project_id)
|
||||
# 发送消息给被拒者,user_id对应的收到信息的用户
|
||||
AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 4,
|
||||
project = Project.find(@applied_message.project_id) if !applied_project.nil?
|
||||
user = User.find(@applied_message.applied_user_id)
|
||||
if user.member_of?(project) || AppliedMessage.where(:applied_id => @applied_message.applied_id, :status => 0).count == 0
|
||||
@flash_message = "该申请已被其他管理员处理"
|
||||
# @applied_message.update_attribute(:status, 2)
|
||||
else
|
||||
# 发送消息给被拒者,user_id对应的收到信息的用户
|
||||
AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 4,
|
||||
:viewed => false, :applied_user_id => @applied_message.user_id, :role => applied_project.role, :project_id => applied_project.project_id)
|
||||
|
||||
# 拒绝功后所有管理员收到的消息状态都要更新
|
||||
applied_messages = AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 1,
|
||||
# 拒绝功后所有管理员收到的消息状态都要更新
|
||||
applied_messages = AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 0,
|
||||
:applied_type => "AppliedProject")
|
||||
applied_messages.update_all(:status => 5, :viewed => true)
|
||||
@applied_message = AppliedMessage.find(params[:applied_message_id])
|
||||
# AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 5,
|
||||
# :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
|
||||
ps = ProjectsService.new
|
||||
user = User.find(@applied_message.applied_user_id)
|
||||
ap_role = applied_project.try(:role)
|
||||
ps.send_wechat_join_project_notice user,project,ap_role,1
|
||||
applied_messages.update_all(:status => 5, :viewed => true)
|
||||
@applied_message = AppliedMessage.find(params[:applied_message_id])
|
||||
# AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 5,
|
||||
# :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id)
|
||||
ps = ProjectsService.new
|
||||
user = User.find(@applied_message.applied_user_id)
|
||||
ap_role = applied_project.try(:role)
|
||||
ps.send_wechat_join_project_notice user,project,ap_role,1
|
||||
|
||||
applied_project.delete
|
||||
applied_project.delete
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
|
@ -151,23 +157,33 @@ class MembersController < ApplicationController
|
|||
project_info = []
|
||||
if params[:membership]
|
||||
if params[:membership][:user_ids]
|
||||
attrs = params[:membership].dup
|
||||
user_ids = attrs.delete(:user_ids)
|
||||
user_ids.each do |user_id|
|
||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
|
||||
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
attrs = params[:membership].dup
|
||||
user_ids = attrs.delete(:user_ids)
|
||||
user_ids.each do |user_id|
|
||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
|
||||
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
|
||||
|
||||
#给新成员发送加入项目的消息,发送者id放在ForgeMessage的forge_message_id字段中,
|
||||
#forge_message_type设置为JoinProject
|
||||
forge_join = ForgeMessage.new(:user_id =>user_id, :forge_message_id=>User.current.id,:project_id => @project.id,:forge_message_type=>"JoinProject", :viewed => false)
|
||||
forge_join.save
|
||||
## added by nie
|
||||
if (params[:membership][:role_ids])
|
||||
role = Role.find(params[:membership][:role_ids][0])
|
||||
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id) if role.allowed_to?(:is_manager)
|
||||
# ProjectInfo.create(:name => "test", :user_id => 123)
|
||||
#给新成员发送加入项目的消息,发送者id放在ForgeMessage的forge_message_id字段中,
|
||||
#forge_message_type设置为JoinProject
|
||||
forge_join = ForgeMessage.new(:user_id =>user_id, :forge_message_id=>User.current.id,:project_id => @project.id,:forge_message_type=>"JoinProject", :viewed => false)
|
||||
forge_join.save
|
||||
## added by nie
|
||||
if (params[:membership][:role_ids])
|
||||
role = Role.find(params[:membership][:role_ids][0])
|
||||
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id) if role.allowed_to?(:is_manager)
|
||||
# ProjectInfo.create(:name => "test", :user_id => 123)
|
||||
end
|
||||
## end
|
||||
end
|
||||
rescue Gitlab::Error::Forbidden => e
|
||||
@message = l(:label_pull_request_forbidden)
|
||||
rescue Gitlab::Error::BadRequest => e
|
||||
@message = "添加成员失败,可能是你添加的用户名中含有非法字符"
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
## end
|
||||
end
|
||||
else
|
||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
|
||||
|
@ -291,26 +307,29 @@ class MembersController < ApplicationController
|
|||
#增加对课程成员修改的支持
|
||||
if @project
|
||||
if params[:membership]
|
||||
@member.role_ids = params[:membership][:role_ids]
|
||||
|
||||
#added by nie
|
||||
if (params[:membership][:role_ids])
|
||||
role = Role.find(params[:membership][:role_ids][0])
|
||||
if role.allowed_to?(:is_manager)
|
||||
@projectInfo = ProjectInfo.new(:user_id => @member.user_id, :project_id => @project.id)
|
||||
@projectInfo.save
|
||||
else
|
||||
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_admin.size > 0
|
||||
user_admin.each do |user|
|
||||
user.destroy
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
@member.role_ids = params[:membership][:role_ids]
|
||||
if (params[:membership][:role_ids])
|
||||
role = Role.find(params[:membership][:role_ids][0])
|
||||
if role.allowed_to?(:is_manager)
|
||||
@projectInfo = ProjectInfo.new(:user_id => @member.user_id, :project_id => @project.id)
|
||||
@projectInfo.save
|
||||
else
|
||||
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_admin.size > 0
|
||||
user_admin.each do |user|
|
||||
user.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@member.save!
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
saved = @member.save
|
||||
respond_to do |format|
|
||||
format.html { redirect_to_settings_in_projects }
|
||||
format.js
|
||||
|
@ -333,7 +352,9 @@ class MembersController < ApplicationController
|
|||
role_ids = attrs.delete(:role_ids)
|
||||
|
||||
if role_ids && role_ids.include?("10")
|
||||
StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id)
|
||||
if StudentsForCourse.where(:student_id => @member.user_id, :course_id =>@course.id).blank?
|
||||
StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id)
|
||||
end
|
||||
else
|
||||
joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id)
|
||||
joined.each do |join|
|
||||
|
@ -379,27 +400,33 @@ class MembersController < ApplicationController
|
|||
#课程成员删除修改
|
||||
if @project
|
||||
if request.delete? && @member.deletable?
|
||||
@member.destroy
|
||||
# end
|
||||
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_admin.size > 0
|
||||
user_admin.each do |user|
|
||||
user.destroy
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
@member.destroy
|
||||
# end
|
||||
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_admin.size > 0
|
||||
user_admin.each do |user|
|
||||
user.destroy
|
||||
end
|
||||
end
|
||||
user_grade = UserGrade.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_grade.size > 0
|
||||
user_grade.each do |grade|
|
||||
grade.destroy
|
||||
end
|
||||
end
|
||||
# 移出的时候删除申请消息,不需要删除消息,所以不必要关联删除
|
||||
applied_projects = AppliedProject.where(:project_id => @project.id, :user_id => @member.user_id).first
|
||||
unless applied_projects.nil?
|
||||
applied_projects.delete
|
||||
end
|
||||
#移出项目发送消息
|
||||
ForgeMessage.create(:user_id => @member.user_id, :project_id => @project.id, :forge_message_type => "RemoveFromProject", :viewed => false, :forge_message_id => User.current.id)
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
end
|
||||
user_grade = UserGrade.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
|
||||
if user_grade.size > 0
|
||||
user_grade.each do |grade|
|
||||
grade.destroy
|
||||
end
|
||||
end
|
||||
# 移出的时候删除申请消息,不需要删除消息,所以不必要关联删除
|
||||
applied_projects = AppliedProject.where(:project_id => @project.id, :user_id => @member.user_id).first
|
||||
unless applied_projects.nil?
|
||||
applied_projects.delete
|
||||
end
|
||||
#移出项目发送消息
|
||||
ForgeMessage.create(:user_id => @member.user_id, :project_id => @project.id, :forge_message_type => "RemoveFromProject", :viewed => false, :forge_message_id => User.current.id)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html { redirect_to_settings_in_projects }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
class MemosController < ApplicationController
|
||||
default_search_scope :memos
|
||||
before_filter :find_forum, :only => [:new, :create, :preview]
|
||||
before_filter :find_forum, :only => [:new, :create, :preview, :update]
|
||||
before_filter :find_attachments, :only => [:preview]
|
||||
before_filter :find_memo, :except => [:new, :create, :preview]
|
||||
before_filter :authenticate_user_edit, :only => [:edit, :update]
|
||||
|
@ -28,33 +28,27 @@ class MemosController < ApplicationController
|
|||
end
|
||||
|
||||
def new
|
||||
# 如何是问吧主页来的,导航不显示具体贴吧名
|
||||
@memo = Memo.new
|
||||
@memo.forum_id = @forum.id
|
||||
|
||||
@my_forums_count = Memo.where("author_id =? and parent_id is null", User.current.id).count
|
||||
@my_memos_count = Memo.where("author_id =? and parent_id is not null", User.current.id).count
|
||||
@forums = Forum.reorder("topic_count desc,updated_at desc")
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
render action: :new ,layout: 'base'
|
||||
}
|
||||
format.js
|
||||
format.html {render layout: 'base_new_forum'}
|
||||
format.json { render json: @memo }
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
|
||||
if params[:quote].nil?
|
||||
@quote = ""
|
||||
else
|
||||
@quote = params[:quote]
|
||||
end
|
||||
|
||||
|
||||
|
||||
#unless params[:quote].nil?
|
||||
# @quote = params[:quote][:quote]
|
||||
#end
|
||||
|
||||
@memo = Memo.new(params[:memo])
|
||||
@memo.forum_id = params[:forum_id]
|
||||
@memo.forum_id = @forum.id
|
||||
@memo.author_id = User.current.id
|
||||
|
||||
if params[:memo][:parent_id]
|
||||
|
@ -78,24 +72,20 @@ class MemosController < ApplicationController
|
|||
asset.save
|
||||
end
|
||||
end
|
||||
#end
|
||||
format.js
|
||||
format.html { redirect_to back_memo_url, notice: "#{l :label_memo_create_succ}" }
|
||||
format.json { render json: @memo, status: :created, location: @memo }
|
||||
format.js
|
||||
format.html {redirect_to back_memo_url}
|
||||
format.json { render json: @memo, status: :created, location: @memo }
|
||||
else
|
||||
flash.now[:error] = "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}"
|
||||
format.js
|
||||
format.html { redirect_to( forum_path(Forum.find(params[:forum_id]),:errors=>@memo.errors.full_messages[0])) }
|
||||
format.json { render json: @memo.errors, status: :unprocessable_entity }
|
||||
#end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
REPLIES_PER_PAGE = 20 unless const_defined?(:REPLIES_PER_PAGE)
|
||||
def show
|
||||
|
||||
# 更新贴吧帖子留言对应的memo_messages的viewed字段
|
||||
unless @memo.children.blank?
|
||||
@memo.children.each do |child|
|
||||
|
@ -143,27 +133,30 @@ class MemosController < ApplicationController
|
|||
|
||||
@memo_new = Memo.new
|
||||
|
||||
@my_topic_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is null").count
|
||||
@my_replies_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is not null").count
|
||||
@my_topic_count = 0
|
||||
@my_replies_count = Memo.where(:parent_id => @memo.id).count
|
||||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout=> 'base_forums'}#:layout=> 'base_forums',
|
||||
format.html {render :layout => 'base_new_forum'}
|
||||
format.json { render json: @memo }
|
||||
format.xml { render xml: @memo }
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@my_topic_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is null").count
|
||||
@my_replies_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is not null").count
|
||||
@my_topic_count = 0
|
||||
@my_replies_count = Memo.where(:parent_id => @memo.id).count
|
||||
@forums = Forum.reorder("topic_count desc,updated_at desc")
|
||||
@replying = false
|
||||
respond_to do |format|
|
||||
format.html {render :layout=>'base_forums'}
|
||||
format.html {render :layout => 'base_new_forum'}
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
# 注意,如果不需要
|
||||
|
||||
@flag = false
|
||||
respond_to do |format|
|
||||
if( #@memo.update_column(:subject, params[:memo][:subject]) &&
|
||||
|
@ -173,10 +166,11 @@ class MemosController < ApplicationController
|
|||
@memo.update_column(:subject,params[:memo][:subject]) &&
|
||||
@memo.update_column(:updated_at,Time.now))
|
||||
@memo.save_attachments(params[:attachments] || (params[:memo] && params[:memo][:uploads]))
|
||||
@memo.forum_id = @forum.id
|
||||
@flag = @memo.save
|
||||
# @memo.root.update_attribute(:updated_at, @memo.updated_at)
|
||||
format.js
|
||||
format.html {redirect_to back_memo_url, notice: "#{l :label_memo_create_succ}"}
|
||||
format.html {redirect_to back_memo_url, notice: "#{l :label_memo_update_succ}"}
|
||||
else
|
||||
format.js
|
||||
format.html { render action: "edit" }
|
||||
|
@ -207,7 +201,9 @@ class MemosController < ApplicationController
|
|||
end
|
||||
|
||||
def find_forum
|
||||
@forum = Forum.find(params[:forum_id])
|
||||
forum_name = params[:forum_name].strip unless params[:forum_name].nil?
|
||||
@forum = forum_name ? Forum.find_by_name(forum_name) : Forum.find(params[:forum_id])
|
||||
# @forum = Forum.find(params[:forum_id])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
nil
|
||||
|
|
|
@ -82,6 +82,13 @@ class MessagesController < ApplicationController
|
|||
format.js
|
||||
format.html {render :layout => 'base_projects'}
|
||||
end
|
||||
elsif @contest
|
||||
@left_nav_type = 4
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html { render :layout => 'base_contests' }
|
||||
end
|
||||
#render :action => "show", :layout => "base_courses"#by young
|
||||
else
|
||||
# @reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page
|
||||
# @replies = @topic.children.
|
||||
|
@ -94,7 +101,7 @@ class MessagesController < ApplicationController
|
|||
@organization = @org_subfield.organization
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'base_org'}
|
||||
format.html { render :layout => 'base_org' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -111,6 +118,8 @@ class MessagesController < ApplicationController
|
|||
is_public = @project.is_public
|
||||
elsif @course
|
||||
is_public = @course.is_public
|
||||
elsif @contest
|
||||
is_public = @contest.is_public
|
||||
end
|
||||
# 公开项目/课程上传的资源是公开的,私有项目上传的是私有的
|
||||
@message.save_attachments_containers(params[:attachments], User.current, is_public)
|
||||
|
@ -128,6 +137,8 @@ class MessagesController < ApplicationController
|
|||
redirect_to project_boards_path(@project)
|
||||
elsif @course
|
||||
redirect_to course_boards_path(@course, :board_id => @board.id)
|
||||
elsif @contest
|
||||
redirect_to contest_boards_path(@contest, :board_id => @board.id)
|
||||
end
|
||||
else
|
||||
redirect_to board_message_url(@board, @message)
|
||||
|
@ -138,9 +149,11 @@ class MessagesController < ApplicationController
|
|||
redirect_to project_boards_path(@project, :flag => true)
|
||||
elsif @course
|
||||
redirect_to course_boards_path(@course, :board_id => @board.id, :flag => true)
|
||||
elsif @contest
|
||||
redirect_to contest_boards_path(@contest, :board_id => @board.id, :flag => true)
|
||||
end
|
||||
else
|
||||
layout_file = @project ? 'base_projects' : 'base_courses'
|
||||
layout_file = @project ? 'base_projects' : (@course ? 'base_courses' : 'base_contests')
|
||||
render :action => 'new', :layout => layout_file
|
||||
end
|
||||
|
||||
|
@ -149,7 +162,7 @@ class MessagesController < ApplicationController
|
|||
@left_nav_type = 2
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
layout_file = @project ? 'base_projects' : 'base_courses'
|
||||
layout_file = @project ? 'base_projects' : (@course ? 'base_courses' : 'base_contests')
|
||||
render :layout => layout_file
|
||||
}
|
||||
end
|
||||
|
@ -187,6 +200,7 @@ class MessagesController < ApplicationController
|
|||
end
|
||||
|
||||
update_course_activity(@topic.class,@topic.id)
|
||||
update_contest_activity(@topic.class,@topic.id)
|
||||
update_user_activity(@topic.class,@topic.id)
|
||||
update_forge_activity(@topic.class,@topic.id)
|
||||
update_org_activity(@topic.class,@topic.id)
|
||||
|
@ -226,6 +240,8 @@ class MessagesController < ApplicationController
|
|||
(render_403; return false) unless @message.editable_by?(User.current)
|
||||
elsif @course
|
||||
(render_403; return false) unless @message.course_editable_by?(User.current)
|
||||
elsif @contest
|
||||
(render_403; return false) unless @message.contest_editable_by?(User.current)
|
||||
else
|
||||
(render_403; return false) unless @message.org_subfield_editable_by?(User.current)
|
||||
end
|
||||
|
@ -243,12 +259,16 @@ class MessagesController < ApplicationController
|
|||
redirect_to project_path(@project)
|
||||
elsif @course
|
||||
redirect_to course_activity_path(@course)
|
||||
elsif @contest
|
||||
redirect_to contest_activities_contest_path(@contest)
|
||||
end
|
||||
elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 1
|
||||
if @project
|
||||
redirect_to project_boards_path(@project)
|
||||
elsif @course
|
||||
redirect_to course_boards_path(@course)
|
||||
elsif @contest
|
||||
redirect_to contest_boards_path(@contest)
|
||||
end
|
||||
else
|
||||
redirect_to board_message_url(@message.board, @message.root, :r => (@message.parent_id && @message.id))
|
||||
|
@ -265,6 +285,9 @@ class MessagesController < ApplicationController
|
|||
elsif @course
|
||||
@left_nav_type = 2
|
||||
layout_file = 'base_courses'
|
||||
elsif @contest
|
||||
@left_nav_type = 4
|
||||
layout_file = 'base_contests'
|
||||
elsif @org_subfield
|
||||
@organization = @org_subfield.organization
|
||||
layout_file = 'base_org'
|
||||
|
@ -292,6 +315,8 @@ class MessagesController < ApplicationController
|
|||
(render_403; return false) unless @message.destroyable_by?(User.current)
|
||||
elsif @course
|
||||
(render_403; return false) unless @message.course_destroyable_by?(User.current)
|
||||
elsif @contest
|
||||
(render_403; return false) unless @message.contest_destroyable_by?(User.current)
|
||||
else
|
||||
(render_403; return false) unless @message.org_subfield_editable_by?(User.current)
|
||||
end
|
||||
|
@ -320,7 +345,19 @@ class MessagesController < ApplicationController
|
|||
elsif @message.parent
|
||||
redirect_to board_message_url(@board, @message.parent, :r => r)
|
||||
else
|
||||
redirect_to course_boards_path(@course)
|
||||
redirect_to course_boards_path(@course, :board_id => @board.id)
|
||||
end
|
||||
elsif @contest
|
||||
if params[:is_course] && params[:is_course].to_i == 0
|
||||
redirect_to user_contest_community_path(User.current.id)
|
||||
elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 0
|
||||
redirect_to contest_activities_contest_path(@contest)
|
||||
elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 1
|
||||
redirect_to contest_boards_path(@contest)
|
||||
elsif @message.parent
|
||||
redirect_to board_message_url(@board, @message.parent, :r => r)
|
||||
else
|
||||
redirect_to contest_boards_path(@contest, :board_id => @board.id)
|
||||
end
|
||||
elsif @org_subfield
|
||||
if params[:is_board]
|
||||
|
@ -400,8 +437,10 @@ class MessagesController < ApplicationController
|
|||
@board = Board.find(params[:board_id])
|
||||
if @board.project_id != -1 && @board.project_id != nil
|
||||
@project = @board.project
|
||||
elsif @board.course_id
|
||||
elsif @board.course_id && @board.course_id != -1
|
||||
@course = @board.course
|
||||
elsif @board.contest_id
|
||||
@contest = @board.contest
|
||||
else
|
||||
@org_subfield = @board.org_subfield
|
||||
@organization = @org_subfield
|
||||
|
|
|
@ -93,6 +93,9 @@ class MyController < ApplicationController
|
|||
if params[:course]
|
||||
@course = Course.find params[:course]
|
||||
diskfile = disk_filename('Course', @course.id)
|
||||
elsif params[:contest]
|
||||
@contest = Contest.find params[:contest]
|
||||
diskfile = disk_filename('Contest', @contest.id)
|
||||
elsif params[:project]
|
||||
@project = Project.find params[:project]
|
||||
diskfile = disk_filename('Project', @project.id)
|
||||
|
@ -116,6 +119,9 @@ class MyController < ApplicationController
|
|||
when 'Course'
|
||||
@course = Course.find params[:source_id]
|
||||
diskfile = disk_filename('Course', @course.id)
|
||||
when 'Contest'
|
||||
@contest = Contest.find params[:source_id]
|
||||
diskfile = disk_filename('Contest', @contest.id)
|
||||
when 'Project'
|
||||
@project = Project.find params[:source_id]
|
||||
diskfile = disk_filename('Project', @project.id)
|
||||
|
@ -154,22 +160,14 @@ class MyController < ApplicationController
|
|||
diskfile1 = diskfile + 'temp'
|
||||
begin
|
||||
if request.post?
|
||||
# 修改邮箱的时候同步修改到gitlab
|
||||
if @user.mail != params[:user][:mail]
|
||||
g = Gitlab.client
|
||||
begin
|
||||
g.edit_user(@user.gid, :email => params[:user][:mail])
|
||||
rescue
|
||||
logger.error "sync user's email of gitlab failed!"
|
||||
end
|
||||
end
|
||||
|
||||
changed_login = (@user.login != params[:login])
|
||||
changed_mail = (@user.mail != params[:user][:mail])
|
||||
@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]
|
||||
@user.login = params[:login].strip
|
||||
unless @user.user_extensions.nil?
|
||||
# 如果用户是从业者,将单位名称保存至学校id字段
|
||||
if @user.user_extensions.identity == 3
|
||||
|
@ -195,6 +193,21 @@ class MyController < ApplicationController
|
|||
@se.description = params[:description]
|
||||
|
||||
if @user.save && @se.save
|
||||
# 修改邮箱的时候同步修改到gitlab
|
||||
if changed_mail || changed_login
|
||||
g = Gitlab.client
|
||||
s = Trustie::Gitlab::Sync.new
|
||||
begin
|
||||
gid = @user.gid
|
||||
if gid.nil?
|
||||
gid = s.sync_user(@user).id
|
||||
end
|
||||
g.edit_user(gid, :email => params[:user][:mail], :username => @user.login)
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
end
|
||||
|
||||
# 头像保存
|
||||
FileUtils.mv diskfile1, diskfile, force: true if File.exist? diskfile1
|
||||
@user.pref.save
|
||||
|
@ -212,12 +225,7 @@ class MyController < ApplicationController
|
|||
File.delete(diskfile1) if File.exist?(diskfile1)
|
||||
end
|
||||
|
||||
# 基本资料不完善,无法使用其他功能,完善着可继续使用
|
||||
if @force
|
||||
render :layout => 'new_base_user_show'
|
||||
else
|
||||
render :layout => 'new_base_user'
|
||||
end
|
||||
end
|
||||
|
||||
# Destroys user's account
|
||||
|
|
|
@ -42,6 +42,8 @@ class NewsController < ApplicationController
|
|||
@limit = 10
|
||||
end
|
||||
|
||||
@contest = Contest.find(params[:contest_id]) if params[:contest_id]
|
||||
|
||||
# modify by nwb
|
||||
if params[:course_id] && @course==nil
|
||||
@course = Course.find(params[:course_id])
|
||||
|
@ -69,6 +71,84 @@ class NewsController < ApplicationController
|
|||
format.api
|
||||
format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
|
||||
end
|
||||
elsif @contest
|
||||
if (User.current.admin? || @contest.is_public || (!@contest.is_public && User.current.member_of_contest?(@contest)))
|
||||
@order, @b_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1
|
||||
|
||||
#确定 sort_type 1升序 2 降序
|
||||
if @order.to_i == @type.to_i
|
||||
@b_sort = @b_sort.to_i == 1 ? 2 : 1
|
||||
else
|
||||
@b_sort = 2
|
||||
end
|
||||
|
||||
sort_name = "updated_at"
|
||||
|
||||
sort_type = @b_sort == 1 ? "asc" : "desc"
|
||||
|
||||
#scope = News.find_by_sql("select a.*,b.updated_at from news a, course_activities b where a.course_id = 532 and a.course_id = b.course_id and b.course_act_id = a.id ) ")
|
||||
|
||||
scope = @contest.news if @contest
|
||||
# @newss = scope.all(:include => [:author, :contest], :order => "#{News.table_name}.created_on DESC")
|
||||
#
|
||||
# @page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
news_page = 0 #@page *10
|
||||
# @news_count = @newss.count
|
||||
# @is_new = params[:is_new]
|
||||
@q = params[:subject]
|
||||
if params[:subject].nil? || params[:subject].blank?
|
||||
scope_order = scope.reorder("#{News.table_name}.sticky DESC, #{News.table_name}.created_on #{sort_type}").offset(news_page).includes(:author,:course).all()
|
||||
else
|
||||
scope_order = scope.where("#{News.table_name}.title like '#{'%' << params[:subject].to_s << '%'}'").reorder("#{News.table_name}.sticky DESC, #{News.table_name}.#{sort_name} #{sort_type}").offset(news_page).includes(:author,:contest).all()
|
||||
end
|
||||
|
||||
scope_order.each do |topic|
|
||||
topic[:updated_at] = topic.contest_acts.first.updated_at
|
||||
#topic[:updated_at] = CourseActivity.where("course_act_type='#{topic.class}' and course_act_id =#{topic.id}").first.updated_at
|
||||
end
|
||||
|
||||
#根据 赞+回复数排序
|
||||
if @order.to_i == 2
|
||||
@type = 2
|
||||
scope_order.each do |topic|
|
||||
topic[:infocount] = get_praise_num(topic) + topic.comments.count
|
||||
if topic[:infocount] < 0
|
||||
topic[:infocount] = 0
|
||||
end
|
||||
end
|
||||
@b_sort == 1 ? scope_order = scope_order.sort{|x,y| x[:infocount] <=> y[:infocount] } : scope_order = scope_order.sort{|x,y| y[:infocount] <=> x[:infocount] }
|
||||
scope_order = sort_by_sticky scope_order
|
||||
scope_order = sortby_time_countcommon_hassticky scope_order,sort_name
|
||||
else
|
||||
@type = 1
|
||||
@b_sort == 1 ? scope_order = scope_order.sort{|x,y| x[:updated_at] <=> y[:updated_at] } : scope_order = scope_order.sort{|x,y| y[:updated_at] <=> x[:updated_at] }
|
||||
scope_order = sort_by_sticky scope_order
|
||||
end
|
||||
|
||||
@newss = scope_order
|
||||
|
||||
#分页
|
||||
@limit = 15
|
||||
@is_remote = true
|
||||
@atta_count = @newss.count
|
||||
@atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
|
||||
@offset ||= @atta_pages.offset
|
||||
@newss = paginateHelper @newss,@limit
|
||||
@is_new = params[:is_new]
|
||||
|
||||
#@newss = paginateHelper scope_order,10
|
||||
@left_nav_type = 5
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
@news = News.new
|
||||
render :layout => 'base_contests'
|
||||
}
|
||||
format.js
|
||||
format.api
|
||||
end
|
||||
else
|
||||
render_403
|
||||
end
|
||||
elsif @course
|
||||
if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course)))
|
||||
@order, @b_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1
|
||||
|
@ -160,10 +240,13 @@ class NewsController < ApplicationController
|
|||
# 更新新闻
|
||||
query_message_news = ForgeMessage.where("forge_message_id =? and user_id =? and viewed =?", @news.id, User.current.id, 0).first
|
||||
# 更新新闻的时候一并更新回复
|
||||
ForgeMessage.where("forge_message_id in (#{ids}) and forge_message_type = 'Comment' and user_id = #{User.current.id}").update_all(:viewed => true) unless ids.blank?
|
||||
else
|
||||
ForgeMessage.where("forge_message_id in (#{ids}) and forge_message_type = 'Comment' and user_id = #{User.current.id}").update_all(:viewed => true) unless ids.blank?
|
||||
elsif @course
|
||||
query_message_news = CourseMessage.where("course_message_id =? and user_id =? and viewed =?", @news.id, User.current.id, 0).first
|
||||
CourseMessage.where("course_message_id in (#{ids}) and course_message_type = 'Comment' and user_id = #{User.current.id}").update_all(:viewed => true) unless ids.blank?
|
||||
CourseMessage.where("course_message_id in (#{ids}) and course_message_type = 'Comment' and user_id = #{User.current.id}").update_all(:viewed => true) unless ids.blank?
|
||||
elsif @contest
|
||||
query_message_news = ContestMessage.where("contest_message_id =? and user_id =? and viewed =?", @news.id, User.current.id, 0).first
|
||||
ContestMessage.where("contest_message_id in (#{ids}) and contest_message_type = 'Comment' and user_id = #{User.current.id}").update_all(:viewed => true) unless ids.blank?
|
||||
end
|
||||
query_message_news.update_attribute(:viewed, true) unless query_message_news.nil?
|
||||
# over
|
||||
|
@ -190,6 +273,15 @@ class NewsController < ApplicationController
|
|||
format.html {render :layout => 'base_courses'}
|
||||
end
|
||||
end
|
||||
elsif @news.contest_id
|
||||
@contest = Contest.find(@news.contest_id)
|
||||
if @contest
|
||||
@left_nav_type = 5
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'base_contests'}
|
||||
end
|
||||
end
|
||||
elsif @project
|
||||
respond_to do |format|
|
||||
format.js
|
||||
|
@ -255,6 +347,22 @@ class NewsController < ApplicationController
|
|||
#layout_file = 'base_courses'
|
||||
#render :action => 'new', :layout => layout_file
|
||||
end
|
||||
elsif @contest
|
||||
@news = News.new(:contest => @contest, :author => User.current)
|
||||
#render :layout => 'base_courses'
|
||||
@news.safe_attributes = params[:news]
|
||||
@news.save_attachments(params[:attachments])
|
||||
if @news.save
|
||||
if params[:asset_id]
|
||||
ids = params[:asset_id].split(',')
|
||||
update_kindeditor_assets_owner ids,@news.id,OwnerTypeHelper::NEWS
|
||||
end
|
||||
render_attachment_warning_if_needed(@news)
|
||||
else
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html{redirect_to contest_news_index_path(@contest)}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -310,10 +418,15 @@ class NewsController < ApplicationController
|
|||
if @news.org_subfield_id
|
||||
@org_subfield = OrgSubfield.find(@news.org_subfield_id)
|
||||
@organization = @org_subfield.organization
|
||||
elsif @news.contest_id
|
||||
@contest = Contest.find(@news.contest_id)
|
||||
end
|
||||
if @course
|
||||
@left_nav_type = 4
|
||||
render :layout => "base_courses"
|
||||
elsif @contest
|
||||
@left_nav_type = 4
|
||||
render :layout => "base_contests"
|
||||
elsif @org_subfield
|
||||
render :layout => 'base_org'
|
||||
end
|
||||
|
@ -335,6 +448,8 @@ class NewsController < ApplicationController
|
|||
def destroy
|
||||
if @news.org_subfield_id
|
||||
@org_subfield = OrgSubfield.find(@news.org_subfield_id)
|
||||
elsif @news.contest_id
|
||||
@contest = Contest.find(@news.contest_id)
|
||||
end
|
||||
@news.destroy
|
||||
# modify by nwb
|
||||
|
@ -342,6 +457,8 @@ class NewsController < ApplicationController
|
|||
redirect_to project_news_index_url(@project)
|
||||
elsif @course
|
||||
redirect_to course_news_index_url(@course)
|
||||
elsif @contest
|
||||
redirect_to contest_news_index_url(@contest)
|
||||
elsif @org_subfield
|
||||
redirect_to organization_path(@org_subfield.organization, :org_subfield_id => @org_subfield.id)
|
||||
end
|
||||
|
|
|
@ -16,5 +16,15 @@ class OrgCoursesController < ApplicationController
|
|||
@course = Course.find(params[:course_id])
|
||||
@org_course = OrgCourse.find(params[:id])
|
||||
@org_course.destroy
|
||||
course_org_ids = OrgCourse.find_by_sql("select distinct organization_id from org_courses where course_id = #{@course.id}").map(&:organization_id)
|
||||
if course_org_ids.empty?
|
||||
@orgs_not_in_course = User.current.organizations
|
||||
else
|
||||
course_org_ids = "(" + course_org_ids.join(',') + ")"
|
||||
@orgs_not_in_course = User.current.organizations.where("organizations.id not in #{course_org_ids}")
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -51,7 +51,12 @@ class OrgSubfieldsController < ApplicationController
|
|||
@organization = Organization.find(params[:id])
|
||||
else
|
||||
domain = Secdomain.where("subname=?", request.subdomain).first
|
||||
@organization = Organization.find(domain.pid)
|
||||
begin
|
||||
@organization = Organization.find(domain.pid)
|
||||
rescue
|
||||
render_404
|
||||
return
|
||||
end
|
||||
end
|
||||
if @organization.is_public? or User.current.admin? or User.current.member_of_org?(@organization)
|
||||
@org_subfield = OrgSubfield.find_by_sql("select distinct org_subfields.* from org_subfields,"+
|
||||
|
|
|
@ -635,24 +635,74 @@ class OrganizationsController < ApplicationController
|
|||
end
|
||||
end
|
||||
def apply_subdomain
|
||||
@organization = Organization.find(params[:id])
|
||||
admins = User.where("admin=1")
|
||||
admins.each do |admin|
|
||||
OrgMessage.create(:user_id => admin.id, :organization_id => @organization.id, :message_type => 'ApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:domain].downcase)
|
||||
organization = Organization.find(params[:id])
|
||||
@applied_message_count = AppliedMessage.where(:applied_id => organization.id, :name => params[:domain].downcase, :status => 1).count
|
||||
# 如果申请过该名字,怎不能重复申请
|
||||
if @applied_message_count > 0
|
||||
@flag = 1
|
||||
else
|
||||
admins = User.where("admin=1")
|
||||
admins.each do |admin|
|
||||
AppliedMessage.create(:user_id => admin.id, :applied_id => organization.id, :applied_type => 'Organization', :viewed => 0, :satus => 1, :applied_user_id => User.current.id, :name => params[:domain].downcase)
|
||||
# OrgMessage.create(:user_id => admin.id, :organization_id => @organization.id, :message_type => 'ApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:domain].downcase)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# stauts: 0:申请 ,2:申请人收到已接受消息
|
||||
# @flag 1:申请同名提醒, 2:操作的时候已经被人提前处理了
|
||||
def agree_apply_subdomain
|
||||
@organization = Organization.find(params[:organization_id])
|
||||
OrgMessage.find(params[:act_id]).update_attribute(:viewed, 1)
|
||||
if Secdomain.where("pid=? and sub_type=2",@organization.id).count > 0
|
||||
domain = Secdomain.where("pid=? and sub_type=2",params[:organization_id]).first
|
||||
Secdomain.update(domain.id, :subname => params[:org_domain])
|
||||
organization_id = params[:organization_id]
|
||||
org_domain = params[:org_domain]
|
||||
@applied_message = AppliedMessage.find(params[:ma_id])
|
||||
# 处理的时候判断是否有人已经处理了
|
||||
if @applied_message.status == 0
|
||||
# 事务处理:消息和数据的创建应该是同步的
|
||||
ActiveRecord::Base.transaction do
|
||||
applied_messages = AppliedMessage.where(:applied_type => "Organization", :applied_id => organization_id, :name => org_domain, :status => 0)
|
||||
applied_messages.update_all(:status => 2, :viewed => true, :updated_at => Time.now)
|
||||
secdomain = Secdomain.where(:pid => organization_id, :sub_type => 2)
|
||||
if secdomain.count > 0
|
||||
domain = Secdomain.where("pid=? and sub_type=2",organization_id).first
|
||||
Secdomain.update(domain.id, :subname => params[:org_domain])
|
||||
else
|
||||
Secdomain.create(:sub_type => 2, :pid => organization_id, :subname => params[:org_domain])
|
||||
end
|
||||
# 自己处理自己的消息则不需要另外发送消息
|
||||
if User.current.id != @applied_message.applied_user_id
|
||||
AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_id => organization_id, :applied_type => 'Organization', :viewed => 0, :satus => 2, :applied_user_id => User.current.id, :name => org_domain.downcase)
|
||||
end
|
||||
@applied_message.status = 2
|
||||
@applied_message.updated_at = Time.now
|
||||
end
|
||||
else
|
||||
Secdomain.create(:sub_type => 2, :pid => params[:organization_id], :subname => params[:org_domain])
|
||||
@flag = 2
|
||||
end
|
||||
if OrgMessage.where("message_type='AgreeApplySubdomain' and organization_id=#{@organization.id} and content=?",params[:org_domain]).count == 0
|
||||
OrgMessage.create(:user_id => params[:user_id], :organization_id => @organization.id, :message_type => 'AgreeApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:org_domain])
|
||||
end
|
||||
|
||||
# stauts: 0:申请 ,2:申请人收到已接受消息, 4:已拒绝
|
||||
# @flag 1:申请同名提醒, 2:操作的时候已经被人提前处理了
|
||||
def refused_apply_subdomain
|
||||
organization_id = params[:organization_id]
|
||||
org_domain = params[:org_domain]
|
||||
@applied_message = AppliedMessage.find(params[:ma_id])
|
||||
# 多人同时操作处理
|
||||
secdomain = Secdomain.where(:pid => organization_id, :sub_type => 2)
|
||||
# 处理过程中,如果已经被其他管理员处理,则弹框提示
|
||||
if @applied_message.status == 0
|
||||
# 事务处理:消息和数据的创建应该是同步的
|
||||
ActiveRecord::Base.transaction do
|
||||
applied_messages = AppliedMessage.where(:applied_type => "Organization", :applied_id => organization_id, :name => org_domain, :status => 0)
|
||||
applied_messages.update_all(:status => 4, :viewed => true, :updated_at => Time.now)
|
||||
# 自己处理自己的消息则不需要另外发送消息
|
||||
if User.current.id != @applied_message.applied_user_id
|
||||
AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_id => organization_id, :applied_type => 'Organization', :viewed => 0, :satus => 4, :applied_user_id => User.current.id, :name => org_domain.downcase)
|
||||
end
|
||||
@applied_message.status = 4
|
||||
@applied_message.updated_at = Time.now
|
||||
end
|
||||
else
|
||||
@flag = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -133,6 +133,8 @@ class PraiseTreadController < ApplicationController
|
|||
@obj = Contest.find_by_id(id)
|
||||
when 'Syllabus'
|
||||
@obj = Syllabus.find_by_id(id)
|
||||
when 'Work'
|
||||
@obj = Work.find_by_id(id)
|
||||
else
|
||||
@obj = nil
|
||||
end
|
||||
|
|
|
@ -28,7 +28,8 @@ class ProjectsController < ApplicationController
|
|||
menu_item :feedback, :only => :feedback
|
||||
menu_item :share, :only => :share
|
||||
|
||||
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches,:join_project]
|
||||
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,
|
||||
:view_homework_attaches,:join_project, :project_home]
|
||||
before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course]
|
||||
before_filter :authorize_global, :only => [:new, :create,:view_homework_attaches]
|
||||
before_filter :require_admin, :only => [ :copy, :unarchive, :destroy, :calendar]
|
||||
|
@ -72,6 +73,22 @@ class ProjectsController < ApplicationController
|
|||
### added by william
|
||||
include ActsAsTaggableOn::TagsHelper
|
||||
|
||||
# 仅仅为了转换Gitlab地址
|
||||
def project_home
|
||||
rep = params[:rep]
|
||||
login = params[:username]
|
||||
begin
|
||||
user = User.find_by_login(login)
|
||||
project = Project.find_by_sql("SELECT projects.* FROM `repositories`,`projects` where repositories.project_id = projects.id and projects.user_id =#{user.try(:id)} and repositories.identifier='#{rep}'").first
|
||||
respond_to do |format|
|
||||
format.html{redirect_to(:controller => 'repositories', :action => 'show', :id => project.id, :repository_id => rep)}
|
||||
end
|
||||
rescue
|
||||
render_404
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
#查找组织
|
||||
def search_public_orgs_not_in_project
|
||||
condition = '%%'
|
||||
|
@ -432,7 +449,7 @@ class ProjectsController < ApplicationController
|
|||
# 如果已经邀请过该用户,则不重复发送
|
||||
if InviteList.where("project_id =? and mail =?", @project.id, params[:mail].to_s).first.nil?
|
||||
email = params[:mail]
|
||||
Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
# Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
flash[:notice] = l(:notice_email_sent, :value => email)
|
||||
else
|
||||
flash[:error] = l(:notice_email_invited)
|
||||
|
@ -445,7 +462,7 @@ class ProjectsController < ApplicationController
|
|||
first_name = params[:first_name]
|
||||
last_name = params[:last_name]
|
||||
gender = params[:gender]
|
||||
Mailer.send_invite_in_project(email, @project, User.current, first_name, last_name, gender).deliver
|
||||
# Mailer.send_invite_in_project(email, @project, User.current, first_name, last_name, gender).deliver
|
||||
@is_zhuce = false
|
||||
flash[:notice] = l(:notice_email_sent, :value => email)
|
||||
end
|
||||
|
@ -458,13 +475,13 @@ class ProjectsController < ApplicationController
|
|||
invite_list = InviteList.where("project_id =? and mail =?", @project.id, params[:mail].to_s).first
|
||||
if invite_list.nil?
|
||||
email = params[:mail]
|
||||
Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
# Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
flash[:notice] = l(:notice_email_sent, :value => email)
|
||||
else
|
||||
# 已经发送过了,则隔3小时才能再次发送
|
||||
if Time.now - invite_list.created_at > 10800
|
||||
email = params[:mail]
|
||||
Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
# Mailer.request_member_to_project(email, @project, User.current).deliver
|
||||
flash[:notice] = l(:notice_email_sent, :value => email)
|
||||
else
|
||||
flash[:error] = l(:notice_email_invited)
|
||||
|
|
|
@ -157,6 +157,9 @@ class PullRequestsController < ApplicationController
|
|||
def show
|
||||
# compare_pull_request source_project, source_branch, target_project, target_branch
|
||||
# compare_pull_request
|
||||
# 如何从个人主页点击进入,则将该消息设为“已读”
|
||||
ForgeMessage.where(:forge_message_id => params[:id], :forge_message_type => "PullRequest", :user_id => User.current.id, :viewed => false).update_all(:viewed => true)
|
||||
|
||||
@project_menu_type = 6
|
||||
@type = params[:type]
|
||||
@request = @g.merge_request(@project.gpid, params[:id])
|
||||
|
@ -189,9 +192,13 @@ class PullRequestsController < ApplicationController
|
|||
def accept_pull_request
|
||||
begin
|
||||
@status = @g.accept_merge_rquest(@project.gpid, params[:id], User.current.gid)
|
||||
user = User.find_by_login(@status.author.try(:username))
|
||||
# 更新管理员的pullrequest消息
|
||||
update_pullrequest_message(params[:id].to_i, @project.id, "PullRequest", 2)
|
||||
# 接受后,给用户发消息
|
||||
send_message_to_author(@project.id, @status.author.try(:username), params[:id], 2)
|
||||
|
||||
if ForgeMessage.where(:forge_message_id => params[:id].to_i, :project_id => @project.id, :forge_message_type => "PullRequest", :user_id => user.id).count == 0
|
||||
send_message_to_author(@project.id, @status.author.try(:username), params[:id], 2)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js{redirect_to project_pull_request_path(@status.id, :project_id => @project.id)}
|
||||
end
|
||||
|
@ -225,8 +232,10 @@ class PullRequestsController < ApplicationController
|
|||
request = @g.update_merge_request(@project.gpid, params[:id], User.current.gid, :state_event => params[:state])
|
||||
user = User.find_by_login(request.author.try(:username))
|
||||
status = params[:state] == "close" ? 4 : 3
|
||||
send_message_to_manager(@project.id, params[:id], status)
|
||||
if is_project_manager?(User.current.id, @project.id)
|
||||
#send_message_to_manager(@project.id, params[:id], status)
|
||||
update_pullrequest_message(request.id, @project.id, "PullRequest", status)
|
||||
# 给作者发送消息,如何已经发送了消息,则不发
|
||||
if is_project_manager?(User.current.id, @project.id) && ForgeMessage.where(:forge_message_id => request.id, :project_id => @project.id, :forge_message_type => "PullRequest", :user_id => user.id).count == 0
|
||||
send_message_to_author(@project.id, user.login, request.id, status)
|
||||
end
|
||||
respond_to do |format|
|
||||
|
@ -360,12 +369,21 @@ class PullRequestsController < ApplicationController
|
|||
:project_id => project_id,
|
||||
:forge_message_id => pull_request_id,
|
||||
:forge_message_type => "PullRequest",
|
||||
:viewed => true,
|
||||
:viewed => false,
|
||||
:status => status,
|
||||
:operate_user_id => User.current.id,
|
||||
)
|
||||
end
|
||||
|
||||
def update_pullrequest_message forge_message_id, project_id, forge_message_type, status
|
||||
# 更新这条pullrequest消息所有相关的信息
|
||||
ForgeMessage.where(:forge_message_id => forge_message_id, :project_id => project_id, :forge_message_type => forge_message_type).update_all(:status => status, :operate_user_id => User.current.id, :updated_at => Time.now)
|
||||
# 更新自己的消息为已读
|
||||
ForgeMessage.where(:forge_message_id => forge_message_id, :project_id => project_id, :forge_message_type => forge_message_type, :user_id => User.current.id).update_all(:viewed => true)
|
||||
# 更新pullrequest的status字段
|
||||
PullRequest.where(:pull_request_id => forge_message_id).update_all(:status => status)
|
||||
end
|
||||
|
||||
def authorize_logged
|
||||
if !User.current.logged?
|
||||
redirect_to signin_path
|
||||
|
|
|
@ -6,7 +6,7 @@ class QualityAnalysisController < ApplicationController
|
|||
layout "base_projects"
|
||||
include ApplicationHelper
|
||||
include QualityAnalysisHelper
|
||||
require 'jenkins_api_client'
|
||||
# require 'jenkins_api_client'
|
||||
require 'nokogiri'
|
||||
require 'json'
|
||||
require 'open-uri'
|
||||
|
@ -230,7 +230,7 @@ class QualityAnalysisController < ApplicationController
|
|||
|
||||
# resource_id: login + @repository.id
|
||||
def index
|
||||
# 顶部导航
|
||||
# 顶部导
|
||||
@project_menu_type = 5
|
||||
|
||||
begin
|
||||
|
|
|
@ -35,7 +35,7 @@ class RepositoriesController < ApplicationController
|
|||
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, :export_rep_static]
|
||||
before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo, :to_gitlab, :forked, :export_rep_static]
|
||||
# 连接gitlab
|
||||
# before_filter :connect_gitlab, :only => [:quality_analysis, :commit_diff]
|
||||
|
||||
|
@ -121,9 +121,15 @@ class RepositoriesController < ApplicationController
|
|||
|
||||
# 一键ZIP下载
|
||||
def project_archive
|
||||
g = Gitlab.client
|
||||
g.get()
|
||||
# g.project_archive(params[:gpid].to_i, params[:rev])
|
||||
token = Gitlab.private_token
|
||||
token = aes_encrypt(token, "abcd")
|
||||
# g = Gitlab.client
|
||||
# g.project_archive(@project.gpid, @rev)
|
||||
# 'git archive --format zip --output /path/to/file.zip master' # 将 master 以zip格式打包到指定文件
|
||||
#
|
||||
# zip_path = Gitlab.endpoint.to_s + "/projects/" + @project.gpid.to_s + "/repository/archive?&private_token=" + Gitlab.private_token
|
||||
# f = open(zip_path).read
|
||||
# send_file "/path/to/file.zip"
|
||||
end
|
||||
|
||||
# 判断用户是否已经fork过该项目
|
||||
|
@ -265,12 +271,23 @@ update
|
|||
@repository.type = 'Repository::Gitlab'
|
||||
@repository.identifier = @repository.identifier.downcase
|
||||
@repository.url = @repository.identifier
|
||||
if request.post? && @repository.save
|
||||
s = Trustie::Gitlab::Sync.new
|
||||
s.create_project(@project, @repository)
|
||||
redirect_to(:controller => 'repositories', :action => 'show', :id => @project, :repository_id => gitlab_repository(@project).try(:identifier))
|
||||
else
|
||||
redirect_to settings_project_url(@project, :tab => 'repositories',:repository_error_message=>@repository.errors.full_messages)
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
if request.post? && @repository.save
|
||||
s = Trustie::Gitlab::Sync.new
|
||||
s.create_project(@project, @repository)
|
||||
raise "sync failed" if @project.gpid.blank?
|
||||
redirect_to(:controller => 'repositories', :action => 'show', :id => @project, :repository_id => gitlab_repository(@project).try(:identifier))
|
||||
else
|
||||
redirect_to settings_project_url(@project, :tab => 'repositories',:repository_error_message=>@repository.errors.full_messages)
|
||||
end
|
||||
rescue Gitlab::Error::Forbidden => e
|
||||
@message = l(:label_pull_request_forbidden)
|
||||
rescue Gitlab::Error::NotFound => e
|
||||
@message = l(:label_pull_request_notfound)
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -380,46 +397,56 @@ update
|
|||
end
|
||||
|
||||
def show
|
||||
# 顶部导航
|
||||
@project_menu_type = 5
|
||||
|
||||
# TODO: the below will move to filter, done.
|
||||
# 获取版本库目录结构
|
||||
@entries = @repository.entries(@path, @rev)
|
||||
if request.xhr?
|
||||
@entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
|
||||
if !User.current.admin? && (@project.hidden_repo && (role_of_members_in_project(@project.id, User.current.id) == "Reporter" || !is_project_member?(User.current.id, @project.id)))
|
||||
render_403
|
||||
return
|
||||
else
|
||||
unless @entries.blank?
|
||||
@changesets_latest_coimmit = @g.commit(@project.gpid, @entries.first.try(:lastrev))
|
||||
# 总的提交数
|
||||
@changesets_all_count = @g.user_static(@project.gpid, :rev => @rev).count
|
||||
# 获取默认分支
|
||||
@g_default_branch = @g_project.default_branch.nil? ? "master" : @g_project.default_branch
|
||||
# 顶部导航
|
||||
@project_menu_type = 5
|
||||
|
||||
# TODO: the below will move to filter, done.
|
||||
# 获取版本库目录结构
|
||||
@entries = @repository.entries(@path, @rev)
|
||||
if request.xhr?
|
||||
@entries ? render(:partial => 'dir_list_content') : render(:nothing => true)
|
||||
else
|
||||
unless @entries.blank?
|
||||
@changesets_latest_coimmit = @g.rep_last_changes(@project.gpid, :rev => @rev, :path => @path)
|
||||
# @g.rep_last_changes(@project.gpid, :rev => @rev, :path => @path)
|
||||
# 总的提交数
|
||||
@changesets_all_count = @g.user_static(@project.gpid, :rev => @rev).count
|
||||
# 获取默认分支
|
||||
@g_default_branch = @g_project.default_branch.nil? ? "master" : @g_project.default_branch
|
||||
|
||||
@creator = @project.owner.to_s
|
||||
gitlab_address = Redmine::Configuration['gitlab_address']
|
||||
gitlab_token = Gitlab.private_token
|
||||
# token值加密解密
|
||||
token = aes_encrypt("priEn3UwXfJs3Pmy", gitlab_token)
|
||||
# token值解密
|
||||
# gitlab_token = aes_dicrypt("priEn3UwXfJs3Pmy", token)
|
||||
@zip_path = Gitlab.endpoint.to_s + "/projects/" + @project.gpid.to_s + "/repository/archive?&private_token=" + token
|
||||
end
|
||||
|
||||
@creator = @project.owner.to_s
|
||||
gitlab_address = Redmine::Configuration['gitlab_address']
|
||||
# REDO:需优化,仅测试用
|
||||
@zip_path = Gitlab.endpoint.to_s + "/projects/" + @project.gpid.to_s + "/repository/archive?&private_token=" + Gitlab.private_token
|
||||
end
|
||||
@repos_url = gitlab_address.to_s+"/" + @creator + "/" + @repository.identifier+"."+"git"
|
||||
|
||||
@creator = @project.owner.to_s
|
||||
gitlab_address = Redmine::Configuration['gitlab_address']
|
||||
@repos_url = gitlab_address.to_s+"/" + @creator + "/" + @repository.identifier+"."+"git"
|
||||
# 一些数据的异步同步更新
|
||||
# 访问版本庫后更新project_score表数据;changeset_num为提交总数
|
||||
project_score = @project.project_score
|
||||
if project_score.nil?
|
||||
ProjectScore.create(:project_id => @project.id, :score => false)
|
||||
else
|
||||
project_score.update_column(:changeset_num, @changesets_all_count)
|
||||
end
|
||||
# 更新提交时间,用于课程
|
||||
unless @changesets_latest_coimmit.blank?
|
||||
update_commits_date(@project, @changesets_latest_coimmit)
|
||||
end
|
||||
|
||||
# 一些数据的异步同步更新
|
||||
# 访问版本庫后更新project_score表数据;changeset_num为提交总数
|
||||
project_score = @project.project_score
|
||||
if project_score.nil?
|
||||
ProjectScore.create(:project_id => @project.id, :score => false)
|
||||
else
|
||||
project_score.update_column(:changeset_num, @changesets_all_count)
|
||||
render :layout => 'base_projects'
|
||||
end
|
||||
# 更新提交时间,用于课程
|
||||
unless @changesets_latest_coimmit.blank?
|
||||
update_commits_date(@project, @changesets_latest_coimmit)
|
||||
end
|
||||
|
||||
render :layout => 'base_projects'
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -476,7 +503,8 @@ update
|
|||
|
||||
entry_and_raw(false)
|
||||
@content = @repository.cat(@path, @rev)
|
||||
@changesets_latest_coimmit = @g.commit(@project.gpid, @entry.try(:lastrev))
|
||||
# @changesets_latest_coimmit = @g.commit(@project.gpid, @entry.try(:lastrev))
|
||||
@changesets_latest_coimmit = @g.rep_last_changes(@project.gpid, :rev => @rev, :path => @path)
|
||||
# 总的提交数
|
||||
@changesets_all_count = @g.user_static(@project.gpid, :rev => @rev).count
|
||||
if is_entry_text_data?(@content, @path)
|
||||
|
|
|
@ -8,7 +8,7 @@ class StudentWorkController < ApplicationController
|
|||
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex,
|
||||
:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,
|
||||
:search_course_students,:work_canrepeat,:add_group_member,:change_project]
|
||||
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment]
|
||||
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work, :retry_work, :revise_attachment, :hide_score_detail]
|
||||
before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work]
|
||||
before_filter :author_of_work, :only => [:edit, :update, :destroy]
|
||||
before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :set_score_rule, :forbidden_anonymous_comment]
|
||||
|
@ -607,11 +607,20 @@ class StudentWorkController < ApplicationController
|
|||
anon_count = all_dis_eva.count / has_sw_count
|
||||
student_work.absence_penalty = @homework.homework_detail_manual.absence_penalty * anon_count
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中学生的迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, User.current.id)
|
||||
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
|
||||
else
|
||||
student_work.late_penalty = 0
|
||||
student_work.work_status = 1
|
||||
end
|
||||
if student_work.save
|
||||
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, User.current.id)
|
||||
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
|
||||
if @homework.homework_type == 3
|
||||
if @homework.homework_detail_group.base_on_project == 1
|
||||
@student_work_project.student_work_id = student_work.id
|
||||
|
@ -627,6 +636,14 @@ class StudentWorkController < ApplicationController
|
|||
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :course_id => @homework.course_id)
|
||||
stu_project.save
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, members[i].to_i)
|
||||
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
if student_work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
end
|
||||
@homework.update_column(:updated_at, Time.now)
|
||||
|
@ -676,6 +693,14 @@ class StudentWorkController < ApplicationController
|
|||
student_work_projects = @homework.student_work_projects.where("student_work_id=? and is_leader =?",@work.id,0)
|
||||
user_ids = student_work_projects.empty? ? "(-1)" : "(" + student_work_projects.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @homework.student_works.where("user_id in #{user_ids}")
|
||||
student_works.each do |sw|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
student_works.delete_all
|
||||
student_work_projects.delete_all
|
||||
members = params[:group_member_ids].split(',')
|
||||
|
@ -685,6 +710,14 @@ class StudentWorkController < ApplicationController
|
|||
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => @work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :course_id => @homework.course_id)
|
||||
stu_project.save
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, members[i].to_i)
|
||||
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -736,6 +769,16 @@ class StudentWorkController < ApplicationController
|
|||
pros = @work.student_work_projects.where("is_leader = 0")
|
||||
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @homework.student_works.where("user_id in #{user_ids}")
|
||||
|
||||
#更新CourseHomeworkStatistics中每个学生的未交作品数、已交作品数、迟交作品数
|
||||
student_works.each do |sw|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
student_works.delete_all
|
||||
pros.delete_all
|
||||
|
||||
|
@ -747,6 +790,14 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
@work.destroy
|
||||
else
|
||||
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
|
||||
@work.attachments.destroy_all
|
||||
@work.student_works_scores.destroy_all
|
||||
@work.course_messages.destroy_all
|
||||
|
@ -762,23 +813,47 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
|
||||
def delete_work
|
||||
@work = StudentWork.where("user_id =? and homework_common_id =?", User.current.id, @homework.id).first
|
||||
@work = StudentWork.where("user_id =? and homework_common_id =? and work_status != 0", User.current.id, @homework.id).first
|
||||
if @work
|
||||
@work.destroy
|
||||
if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
|
||||
if @homework.homework_type == 3
|
||||
pros = @work.student_work_projects.where("is_leader = 0")
|
||||
pros.each do |pro|
|
||||
pro.destroy
|
||||
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @homework.student_works.where("user_id in #{user_ids}")
|
||||
|
||||
#更新CourseHomeworkStatistics中每个学生的已交作品数、迟交作品数
|
||||
student_works.each do |sw|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
student_works.delete_all
|
||||
pros.delete_all
|
||||
|
||||
project = @work.student_work_projects.where("is_leader = 1").first
|
||||
project.update_attributes(:student_work_id => nil)
|
||||
elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
|
||||
@work.student_work_projects.each do |pro2|
|
||||
pro2.destroy
|
||||
if @homework.homework_detail_group.base_on_project == 1
|
||||
project.update_attributes(:student_work_id => nil)
|
||||
else
|
||||
project.destroy
|
||||
end
|
||||
@work.destroy
|
||||
else
|
||||
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
|
||||
@work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0)
|
||||
@work.attachments.destroy_all
|
||||
@work.course_messages.destroy_all
|
||||
end
|
||||
end
|
||||
redirect_to student_homeworks_user_path(User.current.id)
|
||||
redirect_to student_work_index_path(:homework => @homework.id)
|
||||
end
|
||||
|
||||
def retry_work
|
||||
|
@ -786,6 +861,16 @@ class StudentWorkController < ApplicationController
|
|||
pros = @work.student_work_projects.where("is_leader = 0")
|
||||
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
|
||||
student_works = @homework.student_works.where("user_id in #{user_ids}")
|
||||
|
||||
#更新CourseHomeworkStatistics中每个学生的已交作品数、迟交作品数
|
||||
student_works.each do |sw|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
student_works.delete_all
|
||||
pros.delete_all
|
||||
|
||||
|
@ -797,6 +882,14 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
@work.destroy
|
||||
else
|
||||
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
|
||||
if @work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
|
||||
@work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0)
|
||||
@work.attachments.destroy_all
|
||||
@work.course_messages.destroy_all
|
||||
|
@ -835,6 +928,10 @@ class StudentWorkController < ApplicationController
|
|||
@new_score.student_work_id = @work.id
|
||||
if @is_teacher && !@new_score.score.nil? && @work.work_status == 0
|
||||
@work.update_attributes(:work_status => 1, :commit_time => Time.now)
|
||||
#更新CourseHomeworkStatistics中学生的已交作品数、未交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
|
||||
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
if User.current.admin?
|
||||
@new_score.reviewer_role = 1
|
||||
|
@ -868,8 +965,12 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
when 2 #教辅评分 教辅评分显示平均分
|
||||
#@work.teaching_asistant_score = @work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f
|
||||
ts_score = StudentWorksScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{@work.id} AND reviewer_role = 2 AND score IS NOT NULL ORDER BY created_at DESC) AS t GROUP BY user_id) AS a")
|
||||
@work.teaching_asistant_score = ts_score.first.score.nil? ? nil : ts_score.first.score.try(:round, 2).to_f
|
||||
if @homework.homework_detail_manual.ta_mode == 1
|
||||
ts_score = StudentWorksScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{@work.id} AND reviewer_role = 2 AND score IS NOT NULL ORDER BY created_at DESC) AS t GROUP BY user_id) AS a")
|
||||
@work.teaching_asistant_score = ts_score.first.score.nil? ? nil : ts_score.first.score.try(:round, 2).to_f
|
||||
else
|
||||
@work.teaching_asistant_score = @new_score.score
|
||||
end
|
||||
if @is_group_leader && params[:same_score]
|
||||
add_score_to_member @work, @homework, @new_score
|
||||
end
|
||||
|
@ -880,7 +981,13 @@ class StudentWorkController < ApplicationController
|
|||
if @is_group_leader
|
||||
add_score_to_member @work, @homework, @new_score
|
||||
end
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中该学生的待匿评数, 只计算第一次评分
|
||||
if User.current.student_works_scores.where(:student_work_id => @work.id, :reviewer_role => 3).count == 1
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, User.current.id)
|
||||
course_statistics.update_attribute('un_evaluation_work_num', (course_statistics.un_evaluation_work_num - 1) < 0 ? 0 : (course_statistics.un_evaluation_work_num - 1)) if course_statistics
|
||||
end
|
||||
end
|
||||
@homework.update_column('updated_at', Time.now)
|
||||
update_course_activity(@homework.class,@homework.id)
|
||||
update_user_activity(@homework.class,@homework.id)
|
||||
|
@ -946,6 +1053,19 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def hide_score_detail
|
||||
student_work_score = StudentWorksScore.where(:id => params[:score_id]).first
|
||||
if student_work_score
|
||||
student_work_score.update_attributes(:is_hidden => 1)
|
||||
end
|
||||
@is_member_work = @homework.homework_type == 3 && @work.student_work_projects.empty?
|
||||
@student_work_scores = student_work_score_record(@work)
|
||||
@is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
#缺评列表显示
|
||||
def student_work_absence_penalty
|
||||
order = params[:order] || "desc"
|
||||
|
@ -1038,6 +1158,31 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
|
||||
no_anon_penalty = params[:no_anon_penalty] ? 0 : 1
|
||||
|
||||
if (params[:absence_penalty] && homework_detail_manual.absence_penalty.to_s != params[:absence_penalty].to_s)
|
||||
homework_detail_manual.absence_penalty = params[:absence_penalty]
|
||||
homework_detail_manual.save if homework_detail_manual
|
||||
if homework_detail_manual.comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值
|
||||
work_ids = "(" + @homework.student_works.has_committed.map(&:id).join(",") + ")"
|
||||
all_dis_eva = StudentWorksEvaluationDistribution.where("student_work_id IN #{work_ids}")
|
||||
has_sw_count = all_dis_eva.select("distinct user_id").count
|
||||
anon_count = all_dis_eva.count / has_sw_count
|
||||
@homework.student_works.where("work_status != 0").each do |student_work|
|
||||
if student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count != 0
|
||||
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
|
||||
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manual.absence_penalty : 0
|
||||
else
|
||||
if no_anon_penalty
|
||||
student_work.absence_penalty = homework_detail_manual.absence_penalty * anon_count
|
||||
else
|
||||
student_work.absence_penalty = 0
|
||||
end
|
||||
end
|
||||
student_work.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if no_anon_penalty != homework_detail_manual.no_anon_penalty
|
||||
homework_detail_manual.no_anon_penalty = no_anon_penalty
|
||||
if homework_detail_manual.comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值
|
||||
|
@ -1059,17 +1204,22 @@ class StudentWorkController < ApplicationController
|
|||
homework_detail_manual.save if homework_detail_manual
|
||||
end
|
||||
|
||||
if (params[:absence_penalty] && homework_detail_manual.absence_penalty.to_s != params[:absence_penalty].to_s)
|
||||
homework_detail_manual.absence_penalty = params[:absence_penalty]
|
||||
if homework_detail_manual.comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值
|
||||
work_ids = "(" + @homework.student_works.has_committed.map(&:id).join(",") + ")"
|
||||
if params[:ta_mode] && homework_detail_manual.ta_mode.to_i != params[:ta_mode].to_i
|
||||
homework_detail_manual.ta_mode = params[:ta_mode].to_i
|
||||
homework_detail_manual.save
|
||||
if homework_detail_manual.ta_mode == 1
|
||||
@homework.student_works.where("work_status != 0").each do |student_work|
|
||||
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
|
||||
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manual.absence_penalty : 0
|
||||
ts_score = StudentWorksScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{student_work.id} AND reviewer_role = 2 AND score IS NOT NULL ORDER BY created_at DESC) AS t GROUP BY user_id) AS a")
|
||||
student_work.teaching_asistant_score = ts_score.first.score.nil? ? nil : ts_score.first.score.try(:round, 2).to_f
|
||||
student_work.save
|
||||
end
|
||||
else
|
||||
@homework.student_works.where("work_status != 0").each do |student_work|
|
||||
ts_score = StudentWorksScore.where("student_work_id = #{student_work.id} AND reviewer_role = 2 AND score IS NOT NULL").order("created_at DESC")
|
||||
student_work.teaching_asistant_score = ts_score.first.nil? ? nil : ts_score.first.score
|
||||
student_work.save
|
||||
end
|
||||
end
|
||||
homework_detail_manual.save if homework_detail_manual
|
||||
end
|
||||
|
||||
teacher_priority = params[:teacher_priority].to_i
|
||||
|
@ -1131,11 +1281,18 @@ class StudentWorkController < ApplicationController
|
|||
score_appeal.applied_messages.update_all(:status => params[:status].to_i == 2 ? 3 : (params[:status].to_i == 3 ? 1 : 2))
|
||||
if params[:status].to_i == 3 || params[:status].to_i == 4
|
||||
homework = @student_work_score.student_work.homework_common
|
||||
course = homework.course
|
||||
if params[:status].to_i == 3
|
||||
# 申诉成功后 扣匿评学生的违规匿评扣分
|
||||
sw = homework.student_works.where("user_id = #{@student_work_score.user_id}").first
|
||||
sw.update_attribute("appeal_penalty", homework.homework_detail_manual.appeal_penalty + sw.appeal_penalty)
|
||||
|
||||
#申诉成功,匿评学生的被申诉记录加一
|
||||
course_homework_statistics = CourseHomeworkStatistics.where(:user_id => @student_work_score.user_id, :course_id => course.id).first
|
||||
if course_homework_statistics
|
||||
course_homework_statistics.update_attribute('appeal_num', course_homework_statistics.appeal_num + 1)
|
||||
end
|
||||
|
||||
# 申诉成功 重新计算申诉者的匿评分
|
||||
work = @student_work_score.student_work
|
||||
if work.student_works_scores.where("reviewer_role = 3 AND appeal_status != 3").count > 0
|
||||
|
@ -1146,7 +1303,6 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
@student_work_score.student_work.save
|
||||
end
|
||||
course = homework.course
|
||||
CourseMessage.create(:user_id => @student_work_score.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id)
|
||||
CourseMessage.create(:user_id => score_appeal.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id)
|
||||
end
|
||||
|
@ -1321,6 +1477,14 @@ class StudentWorkController < ApplicationController
|
|||
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => params[:member_id][i].to_i, :is_leader => 0, :course_id => @homework.course_id)
|
||||
stu_project.save
|
||||
end
|
||||
|
||||
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, params[:member_id][i].to_i)
|
||||
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
|
||||
if student_work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1331,6 +1495,14 @@ class StudentWorkController < ApplicationController
|
|||
work = StudentWork.where("homework_common_id = #{@homework.id} and user_id = #{sp.user_id}").first
|
||||
sp.destroy
|
||||
if work
|
||||
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, work.user_id)
|
||||
if student_work.work_status == 2
|
||||
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
|
||||
end
|
||||
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
|
||||
work.destroy
|
||||
end
|
||||
end
|
||||
|
@ -1344,22 +1516,6 @@ class StudentWorkController < ApplicationController
|
|||
end
|
||||
|
||||
private
|
||||
def searchstudent_by_name users, name
|
||||
mems = []
|
||||
if name != ""
|
||||
name = name.to_s.downcase
|
||||
users.each do |m|
|
||||
username = m.lastname.to_s.downcase + m.firstname.to_s.downcase
|
||||
if(m.login.to_s.downcase.include?(name) || m.user_extensions[:student_id].to_s.downcase.include?(name) || username.include?(name))
|
||||
mems << m
|
||||
end
|
||||
end
|
||||
else
|
||||
mems = users
|
||||
end
|
||||
mems
|
||||
end
|
||||
|
||||
def hsd_committed_work?(user, homework)
|
||||
sw = StudentWork.where("user_id =? and homework_common_id =? and work_status != 0", user, homework).first
|
||||
sw.nil? ? result = false : result = true
|
||||
|
|
|
@ -35,15 +35,16 @@ class UsersController < ApplicationController
|
|||
|
||||
#
|
||||
before_filter :can_show_course, :only => [:user_courses,:user_homeworks]
|
||||
before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, :unsolved_issues_list, :unfinished_homework_list,
|
||||
:unfinished_poll_list, :user_homeworks,:student_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments,
|
||||
:anonymous_evaluation_list,:unfinished_test_list, :watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index,
|
||||
before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, :unsolved_issues_list, :unfinished_homework_list, :user_manage_homeworks,
|
||||
:unfinished_poll_list, :user_homeworks,:student_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :update_message_viewed,
|
||||
:anonymous_evaluation_list,:unfinished_test_list, :watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index, :user_receive_homeworks,
|
||||
:unapproval_applied_list, :activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
|
||||
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,:user_resource,
|
||||
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,:user_resource,:user_contestlist, :user_manage_issues, :user_receive_issues,
|
||||
:user_courses4show,:user_projects4show,:user_contests4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction,
|
||||
:user_import_homeworks,:user_search_homeworks,:user_import_resource, :user_system_messages,:choose_user_course,:user_courselist,:user_projectlist,:sort_syllabus_list,
|
||||
:sort_project_list,:my_homeworks,:manage_or_receive_homeworks,:search_m_r_homeworks, :cancel_or_collect,:expand_courses,:homepage, :user_issues, :course_community, :project_community, :contest_community]
|
||||
before_filter :auth_user_extension, only: :show
|
||||
before_filter :show_system_message, :only => [:show]
|
||||
#before_filter :rest_user_score, only: :show
|
||||
#before_filter :select_entry, only: :user_projects
|
||||
accept_api_auth :index, :show, :create, :update, :destroy,:tag_save , :tag_saveEx
|
||||
|
@ -150,6 +151,100 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 我发布的issue
|
||||
def user_manage_issues
|
||||
@manage_issues = "我发布的Issue"
|
||||
# 排序(默认以更新时间降序)
|
||||
order = "updated_on desc"
|
||||
if params[:reorder_release_time]
|
||||
order = "created_on #{params[:reorder_release_time]}"
|
||||
elsif params[:reorder_turnover_time]
|
||||
order = "updated_on #{params[:reorder_turnover_time]}"
|
||||
end
|
||||
|
||||
@subject = params[:subject]
|
||||
params[:assigned_to_id].to_i == 0 ? @assigned_to = nil : @assigned_to = params[:assigned_to_id].to_i
|
||||
params[:author_id].to_i == 0 ? author_id = nil : author_id = params[:author_id].to_i
|
||||
params[:project_id].to_i == 0 ? @project_id = nil : @project_id = params[:project_id]
|
||||
if @project_id.nil?
|
||||
@issues = Issue.where("author_id =? and subject like ?",
|
||||
@user.id, "%#{@subject}%").order(order)
|
||||
else
|
||||
@issues = Issue.where("author_id =? and project_id=? and subject like ?",
|
||||
@user.id, @project_id, "%#{@subject}%").order(order)
|
||||
end
|
||||
@issues_filter = Issue.where("author_id =?", @user.id)
|
||||
@issue_open_count = @issues_filter.where(:status_id => [1, 2, 3, 4, 6]).count
|
||||
@issue_close_count = @issues_filter.where(:status_id => 5).count
|
||||
# @issue_open_count = Issue.where(:author_id => @user.id, :status_id => [1, 2, 3, 4, 6]).count
|
||||
# @issue_close_count = Issue.where(:author_id => @user.id, :status_id => 5).count
|
||||
|
||||
# 导出excel的issues
|
||||
@excel_issues = @issues
|
||||
@issue_count = @issues.count
|
||||
@limit = 10
|
||||
@is_remote = true
|
||||
@issue_pages = Paginator.new @issue_count, @limit, params['page'] || 1
|
||||
@offset ||= @issue_pages.offset
|
||||
@issues = paginateHelper @issues, @limit
|
||||
# @issues.limit(@issue_pages.per_page).offset(@issue_pages.offset).reorder(order).all
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'static_base'}
|
||||
format.xls{
|
||||
filename = "我发布的#{l(:label_issue_list_xls)}.xls"
|
||||
send_data(issue_list_xls(@excel_issues), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
||||
}
|
||||
format.api
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
# 我收到的issue
|
||||
def user_receive_issues
|
||||
@receive_issues = "我收到的Issue"
|
||||
# 排序(默认以更新时间降序)
|
||||
order = "updated_on desc"
|
||||
if params[:reorder_release_time]
|
||||
order = "created_on #{params[:reorder_release_time]}"
|
||||
elsif params[:reorder_turnover_time]
|
||||
order = "updated_on #{params[:reorder_turnover_time]}"
|
||||
end
|
||||
|
||||
@subject = params[:subject]
|
||||
params[:assigned_to_id].to_i == 0 ? @assigned_to = nil : @assigned_to = params[:assigned_to_id].to_i
|
||||
params[:author_id].to_i == 0 ? author_id = nil : author_id = params[:author_id].to_i
|
||||
params[:project_id].to_i == 0 ? @project_id = nil : @project_id = params[:project_id]
|
||||
if @project_id.nil?
|
||||
@issues = Issue.where("assigned_to_id =? and subject like ?",
|
||||
@user.id, "%#{@subject}%").order(order)
|
||||
else
|
||||
@issues = Issue.where("assigned_to_id =? and project_id=? and subject like ?",
|
||||
@user.id, @project_id, "%#{@subject}%").order(order)
|
||||
end
|
||||
@issues_filter = Issue.where("assigned_to_id =?", @user.id)
|
||||
@issue_open_count = @issues_filter.where(:status_id => [1, 2, 3, 4, 6]).count
|
||||
@issue_close_count = @issues_filter.where(:status_id => 5).count
|
||||
|
||||
# 导出excel的issues
|
||||
@excel_issues = @issues
|
||||
@issue_count = @issues.count
|
||||
@limit = 10
|
||||
@is_remote = true
|
||||
@issue_pages = Paginator.new @issue_count, @limit, params['page'] || 1
|
||||
@offset ||= @issue_pages.offset
|
||||
@issues = paginateHelper @issues, @limit
|
||||
# @issues.limit(@issue_pages.per_page).offset(@issue_pages.offset).reorder(order).all
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'static_base'}
|
||||
format.xls{
|
||||
filename = "我收到的#{l(:label_issue_list_xls)}.xls"
|
||||
send_data(issue_list_xls(@excel_issues), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
||||
}
|
||||
format.api
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
#展开所有回复
|
||||
def show_all_replies
|
||||
case params[:type]
|
||||
|
@ -177,9 +272,9 @@ class UsersController < ApplicationController
|
|||
@is_project = params[:is_project]
|
||||
|
||||
case params[:type]
|
||||
when 'HomeworkCommon'
|
||||
when 'HomeworkCommon', 'Work'
|
||||
@reply = JournalsForMessage.find params[:reply_id]
|
||||
@type = 'HomeworkCommon'
|
||||
@type = params[:type]
|
||||
if params[:user_activity_id]
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
else
|
||||
|
@ -243,6 +338,8 @@ class UsersController < ApplicationController
|
|||
if @type == 'JournalsForMessage'
|
||||
if reply.jour_type == "HomeworkCommon"
|
||||
@type = "HomeworkCommon"
|
||||
elsif reply.jour_type == "Work"
|
||||
@type = "Work"
|
||||
elsif reply.jour_type == "Syllabus"
|
||||
@type = "Syllabus"
|
||||
end
|
||||
|
@ -255,6 +352,12 @@ class UsersController < ApplicationController
|
|||
comment = HomeworkCommon.add_homework_jour(User.current, params[:reply_message], reply.jour_id, reply.root_id, options)
|
||||
@root.update_column('updated_at', Time.now)
|
||||
@is_teacher = User.current.allowed_to?(:as_teacher, @root.course) || User.current.admin?
|
||||
when 'Work'
|
||||
@root = Work.find reply.jour_id
|
||||
options = {:notes => params[:reply_message], :reply_id => reply.user_id,:user_id => User.current.id,:m_parent_id => params[:reply_id].to_i,:m_reply_id => params[:reply_id].to_i, :root_id => reply.root_id}
|
||||
comment = Work.add_work_jour(User.current, params[:reply_message], reply.jour_id, reply.root_id, options)
|
||||
@root.update_column('updated_at', Time.now)
|
||||
@is_teacher = User.current.admin_of_contest?(@root.contest) || User.current.admin?
|
||||
when 'JournalsForMessage'
|
||||
options = {:user_id => User.current.id,
|
||||
:status => true,
|
||||
|
@ -288,6 +391,16 @@ class UsersController < ApplicationController
|
|||
comment.reply_id = params[:reply_id]
|
||||
comment.root_id = reply.root_id
|
||||
reply.children << comment
|
||||
# 评论后,给回复人发消息(如果是本人就不发)
|
||||
if comment.author.id != BlogComment.find(comment.reply_id).author_id
|
||||
BlogMessage.create(:user_id => BlogComment.find(comment.reply_id).author_id,
|
||||
:blog_message_id => comment.id,
|
||||
:blog_id => comment.blog_id,
|
||||
:blog_message_type => "BlogComment",
|
||||
:content => comment.content,
|
||||
:user_operator_id => comment.author.id
|
||||
)
|
||||
end
|
||||
when 'OrgDocumentComment'
|
||||
@root = reply.root
|
||||
comment = OrgDocumentComment.new(:creator_id => User.current.id, :reply_id => params[:reply_id])
|
||||
|
@ -354,7 +467,7 @@ class UsersController < ApplicationController
|
|||
messages.each do |message_all|
|
||||
# 未读的消息存放在数组
|
||||
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)
|
||||
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 && mess.course.is_delete == 1)
|
||||
@message_alls << mess
|
||||
end
|
||||
|
@ -376,9 +489,9 @@ class UsersController < ApplicationController
|
|||
# 初始化/更新 点击按钮时间, 24小时内显示系统消息
|
||||
update_onclick_time
|
||||
# 全部设为已读
|
||||
if params[:viewed] == "all"
|
||||
update_message_viewed(@user)
|
||||
end
|
||||
# if params[:viewed] == "all"
|
||||
# update_message_viewed(@user)
|
||||
# end
|
||||
# @new_message_count = forge_querys.count + forum_querys.count + course_querys.count + user_querys.count
|
||||
courses = @user.courses.where("is_delete = 1")
|
||||
course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")"
|
||||
|
@ -386,7 +499,7 @@ class UsersController < ApplicationController
|
|||
when nil
|
||||
# 系统消息为管理员发送,我的消息中包含有系统消息
|
||||
@message_alls = []
|
||||
messages = MessageAll.where("(user_id =? and message_type !=?) or message_type =?" ,@user.id, "SystemMessage", "SystemMessage").includes(:message).order("created_at desc")
|
||||
messages = MessageAll.where(:user_id => @user.id).includes(:message).order("created_at desc")
|
||||
messages.each do |message_all|
|
||||
mess = message_all.message
|
||||
unless (message_all.message_type == 'CourseMessage' && mess && mess.course && mess.course.is_delete == 1)
|
||||
|
@ -458,21 +571,28 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
# 消息设置为已读
|
||||
def update_message_viewed(user)
|
||||
def update_message_viewed
|
||||
if User.current.id == @user.id
|
||||
course_querys = CourseMessage.where("user_id =? and viewed =?", user, 0)
|
||||
forge_querys = ForgeMessage.where("user_id =? and viewed =?", user, 0)
|
||||
user_querys = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0)
|
||||
forum_querys = MemoMessage.where("user_id =? and viewed =?", user, 0)
|
||||
org_querys = OrgMessage.where("user_id=? and viewed=0", user)
|
||||
at_querys = AtMessage.where("user_id=? and viewed=0", user)
|
||||
course_querys.update_all(:viewed => true) unless course_querys.nil?
|
||||
forge_querys.update_all(:viewed => true) unless forge_querys.nil?
|
||||
user_querys.update_all(:viewed => true) unless user_querys.nil?
|
||||
forum_querys.update_all(:viewed => true) unless forum_querys.nil?
|
||||
org_querys.update_all(:viewed => true) unless org_querys.nil?
|
||||
at_querys.update_all(:viewed => true) unless at_querys.nil?
|
||||
course_querys = CourseMessage.where("user_id =? and viewed =?", @user.id, 0)
|
||||
forge_querys = ForgeMessage.where("user_id =? and viewed =?", @user.id, 0)
|
||||
user_querys = UserFeedbackMessage.where("user_id =? and viewed =?", @user.id, 0)
|
||||
forum_querys = MemoMessage.where("user_id =? and viewed =?", @user.id, 0)
|
||||
org_querys = OrgMessage.where("user_id=? and viewed=0", @user.id)
|
||||
at_querys = AtMessage.where("user_id=? and viewed=0", @user.id)
|
||||
contest_querys = ContestMessage.where(:user_id => @user.id, :viewed => 0)
|
||||
blog_querys = BlogMessage.where(:user_id => @user.id, :viewed => 0)
|
||||
applied_querys = AppliedMessage.where("user_id=? and viewed =?", @user.id, 0)
|
||||
course_querys.update_all(:viewed => true) unless course_querys.nil?
|
||||
forge_querys.update_all(:viewed => true) unless forge_querys.nil?
|
||||
user_querys.update_all(:viewed => true) unless user_querys.nil?
|
||||
forum_querys.update_all(:viewed => true) unless forum_querys.nil?
|
||||
org_querys.update_all(:viewed => true) unless org_querys.nil?
|
||||
at_querys.update_all(:viewed => true) unless at_querys.nil?
|
||||
contest_querys.update_all(:viewed => true) unless contest_querys.nil?
|
||||
blog_querys.update_all(:viewed => true) unless blog_querys.nil?
|
||||
applied_querys.update_all(:viewed => true) unless applied_querys.nil?
|
||||
end
|
||||
redirect_to user_path(@user)
|
||||
end
|
||||
|
||||
# 系统消息
|
||||
|
@ -768,7 +888,7 @@ class UsersController < ApplicationController
|
|||
ah = ApplyHomework.where("user_id = ? and homework_common_id = ?", User.current.id, params[:homework_id].to_i)
|
||||
if ah.empty?
|
||||
ApplyHomework.create(:user_id => params[:id].to_i, :homework_common_id => params[:homework_id].to_i, :status => 1)
|
||||
Mailer.run.apply_for_homework_request(homework, User.current)
|
||||
# Mailer.run.apply_for_homework_request(homework, User.current)
|
||||
CourseMessage.create(:user_id => homework.user_id, :course_id => homework.course.id, :viewed => false,:course_message_id=>params[:homework_id].to_i,:course_message_type=>'HomeworkCommon',:status=>5,:apply_user_id=>params[:id].to_i,:content=>params[:content])
|
||||
@state = 2
|
||||
@ah = ApplyHomework.where("user_id = ? and homework_common_id = ?", params[:id].to_i, params[:homework_id].to_i).first
|
||||
|
@ -1253,6 +1373,12 @@ class UsersController < ApplicationController
|
|||
homework_detail_manual.comment_status = 0
|
||||
else
|
||||
homework_detail_manual.comment_status = 1
|
||||
|
||||
#更新CourseHomeworkStatistics中每个学生的未交作品数
|
||||
homework.course.student.each do |student|
|
||||
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework.course_id, student.student_id)
|
||||
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
|
||||
end
|
||||
end
|
||||
homework_detail_manual.evaluation_start = params[:evaluation_start].blank? ? homework.end_time + 7 : params[:evaluation_start]
|
||||
homework_detail_manual.evaluation_end = params[:evaluation_end].blank? ? homework_detail_manual.evaluation_start + 7 : params[:evaluation_end]
|
||||
|
@ -1730,6 +1856,72 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 用户发布的作业
|
||||
def user_manage_homeworks
|
||||
@manage_homeworks = "我发布的作业"
|
||||
@order,@b_sort,@type = params[:order] || "created_at",params[:sort] || "desc", 1
|
||||
@r_sort = @b_sort == "desc" ? "asc" : "desc"
|
||||
@type = @type.to_i
|
||||
tea_courses = @user.courses.visible.not_deleted.select{|course| @user.has_teacher_role(course)}
|
||||
tea_course_ids = tea_courses.empty? ? "(-1)" : "(" + tea_courses.map{|course| course.id}.join(',') + ")"
|
||||
@homeworks = HomeworkCommon.where("course_id in #{tea_course_ids}").order("#{@order} #{@b_sort}")
|
||||
if params[:property]
|
||||
all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")"
|
||||
if params[:property] == "1"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1")
|
||||
elsif params[:property] == "2"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2")
|
||||
elsif params[:property] == "3"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3")
|
||||
end
|
||||
end
|
||||
@limit = 10
|
||||
@is_remote = true
|
||||
@hw_count = @homeworks.count
|
||||
@hw_pages = Paginator.new @hw_count, @limit, params['page'] || 1
|
||||
@offset ||= @hw_pages.offset
|
||||
@homeworks = paginateHelper @homeworks,@limit
|
||||
@search = ""
|
||||
@property = params[:property]
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'static_base'}
|
||||
end
|
||||
end
|
||||
|
||||
# 用户收到的作业
|
||||
def user_receive_homeworks
|
||||
@receive_homeworks = "我收到的作业"
|
||||
@order,@b_sort,@type = params[:order] || "created_at",params[:sort] || "desc", 2
|
||||
@r_sort = @b_sort == "desc" ? "asc" : "desc"
|
||||
@type = @type.to_i
|
||||
stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)}
|
||||
stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")"
|
||||
@homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").order("#{@order} #{@b_sort}")
|
||||
if params[:property]
|
||||
all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")"
|
||||
if params[:property] == "1"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1")
|
||||
elsif params[:property] == "2"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2")
|
||||
elsif params[:property] == "3"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3")
|
||||
end
|
||||
end
|
||||
@limit = 10
|
||||
@is_remote = true
|
||||
@hw_count = @homeworks.count
|
||||
@hw_pages = Paginator.new @hw_count, @limit, params['page'] || 1
|
||||
@offset ||= @hw_pages.offset
|
||||
@homeworks = paginateHelper @homeworks,@limit
|
||||
@search = ""
|
||||
@property = params[:property]
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'static_base'}
|
||||
end
|
||||
end
|
||||
|
||||
#我管理/收到的作业
|
||||
def manage_or_receive_homeworks
|
||||
@order,@b_sort,@type = params[:order] || "created_at",params[:sort] || "desc",params[:type] || 1
|
||||
|
@ -1747,11 +1939,11 @@ class UsersController < ApplicationController
|
|||
if params[:property]
|
||||
all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")"
|
||||
if params[:property] == "1"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1")
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1 order by created_at desc")
|
||||
elsif params[:property] == "2"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2")
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2 order by created_at desc")
|
||||
elsif params[:property] == "3"
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3")
|
||||
@homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3 order by created_at desc")
|
||||
end
|
||||
end
|
||||
@limit = 10
|
||||
|
@ -1824,79 +2016,57 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
def show
|
||||
if is_current_user
|
||||
if User.current == @user
|
||||
# 全部设为已读
|
||||
# 自己的主页显示消息
|
||||
# 系统消息为管理员发送,我的消息中包含有系统消息
|
||||
@message_alls = []
|
||||
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 && mess.course.is_delete == 1)
|
||||
if (message_all.message_type =="SystemMessage" && !many_days_ago(mess.created_at, 30))
|
||||
next
|
||||
else
|
||||
@message_alls << mess
|
||||
end
|
||||
end
|
||||
end
|
||||
@message_count = @message_alls.count
|
||||
@message_alls = paginateHelper @message_alls, 20
|
||||
@unsolved_issues_count = Issue.where(:assigned_to_id => @user.id, :status_id => [1, 2, 4, 6]).includes(:author, :project).order("updated_on desc").count
|
||||
messages_all = MessageAll.where(:user_id => @user.id)
|
||||
@message_count = messages_all.count
|
||||
# REDO:已删除的内容应该在页面中显示不点击
|
||||
@message_all_pages = Paginator.new @message_count, per_page_option, params['page']
|
||||
@message_alls = messages_all.includes(:message).
|
||||
limit(@message_all_pages.per_page).
|
||||
offset(@message_all_pages.offset).
|
||||
reorder("#{MessageAll.table_name}.created_at desc")
|
||||
|
||||
@unsolved_issues_count = Issue.where(:assigned_to_id => @user.id, :status_id => [1, 2, 4, 6]).includes(:author, :project).count
|
||||
|
||||
my_course_ids = StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").blank? ? "(-1)" : "(" + StudentsForCourse.includes(:course).
|
||||
where("student_id = #{@user.id} and courses.is_delete = 0").map{|sc| sc.course_id}.join(",") + ")"
|
||||
# 用户待完成的作业
|
||||
my_course_ids = StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").blank? ? "(-1)" : "(" + StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").map{|sc| sc.course_id}.join(",") + ")"
|
||||
homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Date.today}'")
|
||||
homework_ids = homeworks.blank? ? "(-1)" : "(" + homeworks.map{|homework| homework.id}.join(",") + ")"
|
||||
student_works = StudentWork.where("user_id = #{@user.id} and homework_common_id in #{homework_ids} and work_status != 0")
|
||||
@unfinished_homework_count = homeworks.count - student_works.count
|
||||
# 用户待完成的测验
|
||||
exercises = Exercise.where("course_id in #{my_course_ids} and exercise_status = 2")
|
||||
exercise_ids = exercises.blank? ? "(-1)" : "(" + exercises.map{|ex| ex.id}.join(",") + ")"
|
||||
exercise_users = ExerciseUser.where("user_id = #{@user.id} and exercise_id in #{exercise_ids}")
|
||||
exercise_users = ExerciseUser.where(:user_id => @user.id, :exercise_id => exercises.map{|ex| ex.id})
|
||||
@unfinished_test_count = exercises.count - exercise_users.count
|
||||
# 用户待完成的问卷
|
||||
polls = Poll.where("polls_type = 'Course' and polls_group_id in #{my_course_ids} and polls_status = 2")
|
||||
poll_ids = polls.blank? ? "(-1)" : "(" + polls.map{|poll| poll.id}.join(",") + ")"
|
||||
poll_users = PollUser.where("user_id = #{@user.id} and poll_id in #{poll_ids}")
|
||||
poll_users = PollUser.where(:user_id => @user.id, :poll_id => polls.map{|poll| poll.id})
|
||||
@unfinished_poll_count = polls.count - poll_users.count
|
||||
# 用户待匿评的作品
|
||||
homeworks = HomeworkCommon.includes(:homework_detail_manual).where("homework_commons.course_id in #{my_course_ids} and homework_detail_manuals.comment_status in (1,2)")
|
||||
homework_ids = homeworks.blank? ? "(-1)" : "(" + homeworks.map{|homework| homework.id}.join(",") + ")"
|
||||
homeworks = HomeworkCommon.includes(:homework_detail_manual).where("homework_commons.course_id in #{my_course_ids} and homework_detail_manuals.comment_status = 2")
|
||||
student_work_scores = @user.student_works_scores.where("reviewer_role = 3")
|
||||
anonymous_evaluation_ids = student_work_scores.blank? ? "(-1)" : "(" + student_work_scores.map{|st| st.student_work_id}.join(",") + ")"
|
||||
unfinished_evaluations = @user.student_works_evaluation_distributions.where("student_work_id not in #{anonymous_evaluation_ids}")
|
||||
unfinished_evaluations_work_ids = unfinished_evaluations.blank? ? "(-1)" : "(" + unfinished_evaluations.map{|st| st.student_work_id}.join(",") + ")"
|
||||
@anonymous_evaluation_count = StudentWork.where("student_works.id in #{unfinished_evaluations_work_ids} and homework_common_id in #{homework_ids}").count
|
||||
@anonymous_evaluation_count = StudentWork.where(:id => unfinished_evaluations.map{|ev| ev.student_work_id}, :homework_common_id => homeworks.map{|hw| hw.id}).count
|
||||
# 待评阅的作业 暂不做
|
||||
# @unreview_homework = 1
|
||||
|
||||
# 待审批的申请
|
||||
@applied_message_alls = []
|
||||
applied_messages_all = MessageAll.where(:user_id => @user.id, :message_type => ["OrgMessage", "AppliedMessage", "CourseMessage"]).includes(:message)
|
||||
applied_messages_all.each do |message_all|
|
||||
mess = message_all.message
|
||||
if !mess.nil?
|
||||
if (message_all.message_type == "OrgMessage")
|
||||
if mess.message_type == "ApplySubdomain" && OrgMessage.where(:organization_id => mess.organization_id, :message_type => "AgreeApplySubdomain").count == 0
|
||||
@applied_message_alls << mess
|
||||
end
|
||||
elsif (message_all.message_type == "AppliedMessage" )
|
||||
if (mess.applied_type == "StudentWorksScoresAppeal" && mess.status == 0) || (mess.applied_type == "AppliedProject" && mess.status == 1) || ( mess.applied_type == "ApplyAddSchools" && ApplyAddSchools.where(:school_id => mess.applied_id, :status => 0).count != 0 )
|
||||
@applied_message_alls << mess
|
||||
end
|
||||
elsif message_all.message_type == "CourseMessage"
|
||||
if mess.course_message_type == "JoinCourseRequest" && mess.status == 0
|
||||
@applied_message_alls << mess
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@applied_message_alls_count = @applied_message_alls.count
|
||||
# org_applied_messages = MessageAll.where(:message_type => "OrgMessage").includes(:message).order("created_at desc")
|
||||
# org_applied_messages = org_applied_messages.message.map{|message| message.message_type == "ApplySubdomain" and OrgMessage.where(:organization_id => message.organization_id, :message_type => "AgreeApplySubdomain").count == 0}.length
|
||||
# project_message_applied_count = AppliedMessage.where(:user_id => @user.id, :message_type => "AppliedProject", :status => 1)
|
||||
# school_message_applied_count = AppliedMessage.where(:user_id => @user.id, :message_type => "ApplyAddSchools", :status => 0)
|
||||
# course_message_applied_count = CourseMessage.where(:message_type => "JoinCourse", :satus => 0)
|
||||
# @applied_message_count = org_message_applied_count + project_message_applied_count + school_message_applied_count + course_message_applied_count
|
||||
#applied_message_count = AppliedMessage.where(:applied_type => ["Organization", "AppliedContest", "StudentWorksScoresAppeal", "AppliedProject", "ApplyAddSchools"], :user_id => User.current.id, :status => 0).count
|
||||
#applied_course_message_count = CourseMessage.where(:user_id => User.current.id, :course_message_type => "JoinCourseRequest", :status => 0).count
|
||||
# applied_pull_request_message_count = ForgeMessage.where(:user_id => User.current.id, :forge_message_type => "PullRequest", :status => [1,3]).count
|
||||
# @applied_message_alls_count = applied_message_count + applied_course_message_count + applied_pull_request_message_count
|
||||
user_id = User.current.id
|
||||
sql = "SELECT * FROM `message_alls` ma left join `forge_messages` fm on ma.message_id=fm.id
|
||||
left join `course_messages` cm on ma.message_id=cm.id left join `applied_messages` apm on ma.message_id=apm.id
|
||||
where (ma.user_id =#{user_id} and ma.message_type = 'ForgeMessage' and fm.forge_message_type='PullRequest' and fm.status=0 and fm.user_id=#{user_id} ) or
|
||||
(ma.user_id=#{user_id} and ma.message_type='AppliedMessage' and apm.applied_type in ('Organization', 'AppliedContest', 'StudentWorksScoresAppeal', 'AppliedProject', 'ApplyAddSchools') and apm.user_id =#{user_id} and apm.status =0 ) or
|
||||
(ma.user_id=#{user_id} and ma.message_type='CourseMessage' and cm.course_message_type='JoinCourseRequest' and cm.status=0 and cm.user_id=#{user_id} );"
|
||||
message_alls = MessageAll.find_by_sql(sql)
|
||||
@applied_message_alls_count = message_alls.count
|
||||
else
|
||||
# 看别人的主页显示动态
|
||||
#更新用户申请成为课程老师或教辅消息的状态
|
||||
|
@ -2066,11 +2236,11 @@ class UsersController < ApplicationController
|
|||
anonymous_evaluation_ids = student_work_scores.blank? ? "(-1)" : "(" + student_work_scores.map{|st| st.student_work_id}.join(",") + ")"
|
||||
unfinished_evaluations = @user.student_works_evaluation_distributions.where("student_work_id not in #{anonymous_evaluation_ids}")
|
||||
unfinished_evaluations_work_ids = unfinished_evaluations.blank? ? "(-1)" : "(" + unfinished_evaluations.map{|st| st.student_work_id}.join(",") + ")"
|
||||
@anonymous_evaluation_count = StudentWork.where("student_works.id in #{unfinished_evaluations_work_ids} and homework_common_id in #{homework_ids}").count
|
||||
homework_ids = StudentWork.where("id in #{unfinished_evaluations_work_ids} and homework_common_id in #{homework_ids}").blank? ? "(-1)" : "(" + StudentWork.where("id in #{unfinished_evaluations_work_ids} and homework_common_id in #{homework_ids}").map{|st| st.homework_common_id}.join(",") + ")"
|
||||
@anonymous_evaluation = HomeworkCommon.where("homework_commons.id in #{homework_ids}")
|
||||
@anonymous_evaluation_count = @anonymous_evaluation.count
|
||||
@limit = 20
|
||||
@anonymous_evaluation_pages = Paginator.new @anonymous_evaluation_count, @limit, params['page'] || 1
|
||||
@anonymous_evaluation_pages = Paginator.new @anonymous_evaluation.count, @limit, params['page'] || 1
|
||||
@offset ||= @anonymous_evaluation_pages.offset
|
||||
@anonymous_evaluation = paginateHelper @anonymous_evaluation, @limit
|
||||
respond_to do |format|
|
||||
|
@ -2079,34 +2249,15 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
# 待审批的申请
|
||||
# 待审批的消息一般不多,可以特殊处理
|
||||
def unapproval_applied_list
|
||||
@message_alls = []
|
||||
# messages_all = MessageAll.where("(user_id =? and message_type !=?) or message_type =?" ,@user.id, "SystemMessage", "SystemMessage").includes(:message).order("created_at desc")
|
||||
messages_all = MessageAll.where(:user_id => @user.id, :message_type => ["OrgMessage", "AppliedMessage", "CourseMessage"]).includes(:message).order("created_at desc")
|
||||
messages_all.each do |message_all|
|
||||
mess = message_all.message
|
||||
if !mess.nil?
|
||||
if (message_all.message_type == "OrgMessage")
|
||||
if mess.message_type == "ApplySubdomain" && OrgMessage.where(:organization_id => mess.organization_id, :message_type => "AgreeApplySubdomain").count == 0
|
||||
@message_alls << mess
|
||||
end
|
||||
elsif (message_all.message_type == "AppliedMessage" )
|
||||
if (mess.applied_type == "StudentWorksScoresAppeal" && mess.status == 0) || (mess.applied_type == "AppliedProject" && mess.status == 1) || ( mess.applied_type == "ApplyAddSchools" && ApplyAddSchools.where(:school_id => mess.applied_id, :status => 0).count != 0 )
|
||||
@message_alls << mess
|
||||
end
|
||||
elsif message_all.message_type == "CourseMessage"
|
||||
if mess.course_message_type == "JoinCourseRequest" && mess.status == 0
|
||||
@message_alls << mess
|
||||
end
|
||||
=begin
|
||||
elsif message_all.message_type == "ForgeMessage"
|
||||
if mess.forge_message_type == "PullRequest" && PullRequest.where(:forge_message_id => mess.forge_message_id, :status =>0 )
|
||||
@message_alls << mess
|
||||
end
|
||||
=end
|
||||
end
|
||||
end
|
||||
end
|
||||
user_id = User.current.id
|
||||
sql = "SELECT * FROM `message_alls` ma left join `forge_messages` fm on ma.message_id=fm.id
|
||||
left join `course_messages` cm on ma.message_id=cm.id left join `applied_messages` apm on ma.message_id=apm.id
|
||||
where (ma.user_id =#{user_id} and ma.message_type = 'ForgeMessage' and fm.forge_message_type='PullRequest' and fm.status=0 and fm.user_id=#{user_id} ) or
|
||||
(ma.user_id=#{user_id} and ma.message_type='AppliedMessage' and apm.applied_type in ('Organization', 'AppliedContest', 'StudentWorksScoresAppeal', 'AppliedProject', 'ApplyAddSchools') and apm.user_id =#{user_id} and apm.status =0 ) or
|
||||
(ma.user_id=#{user_id} and ma.message_type='CourseMessage' and cm.course_message_type='JoinCourseRequest' and cm.status=0 and cm.user_id=#{user_id}) order by ma.created_at desc;"
|
||||
@message_alls = MessageAll.find_by_sql(sql)
|
||||
@message_count = @message_alls.count
|
||||
@message_alls = paginateHelper @message_alls, 20
|
||||
respond_to do |format|
|
||||
|
@ -2114,8 +2265,9 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 课程社区
|
||||
# 课程社区
|
||||
def course_community
|
||||
@course_community = "课程"
|
||||
if params[:course_id] != nil
|
||||
join_course_messages = CourseMessage.where("course_id =? and course_message_type =? and user_id =? and course_message_id =? and viewed =?",
|
||||
params[:course_id], 'JoinCourseRequest', User.current.id, @user.id, false)
|
||||
|
@ -2124,7 +2276,7 @@ class UsersController < ApplicationController
|
|||
shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{@user.id} and shield_type='Course'").map(&:shield_id)
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
user_course_ids = (@user.favorite_courses.visible.where("is_delete = 0").map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (@user.favorite_courses.visible.where("is_delete = 0").map{|course| course.id}-shield_course_ids).join(",") + ")"
|
||||
course_types = "('Message','News','HomeworkCommon','Poll','Course','JournalsForMessage')"
|
||||
course_types = "('Message','News','HomeworkCommon','Poll','Course','JournalsForMessage','Attachment')"
|
||||
principal_types = "JournalsForMessage"
|
||||
container_type = ''
|
||||
act_type = ''
|
||||
|
@ -2140,6 +2292,9 @@ class UsersController < ApplicationController
|
|||
when "course_message"
|
||||
container_type = 'Course'
|
||||
act_type = 'Message'
|
||||
when "course_resource"
|
||||
container_type = 'Course'
|
||||
act_type = "Attachment"
|
||||
when "course_poll"
|
||||
container_type = 'Course'
|
||||
act_type = 'Poll'
|
||||
|
@ -2179,14 +2334,15 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 项目社区
|
||||
# 项目社区
|
||||
def project_community
|
||||
# 看别人的主页显示动态
|
||||
#更新用户申请成为课程老师或教辅消息的状态
|
||||
@project_community = "项目"
|
||||
shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{@user.id} and shield_type='Project'").map(&:shield_id)
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
user_project_ids = (@user.favorite_projects.visible.map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (@user.favorite_projects.visible.map{|project| project.id}-shield_project_ids).join(",") + ")"
|
||||
project_types = "('Message','Issue','Project')"
|
||||
project_types = "('Message','Issue','Project', 'Attachment')"
|
||||
principal_types = "JournalsForMessage"
|
||||
container_type = ''
|
||||
act_type = ''
|
||||
|
@ -2201,6 +2357,9 @@ class UsersController < ApplicationController
|
|||
when "current_user"
|
||||
container_type = 'Principal'
|
||||
act_type = 'Principal'
|
||||
when "project_resource"
|
||||
container_type = 'Project'
|
||||
act_type = "Attachment"
|
||||
when "all"
|
||||
container_type = 'all'
|
||||
act_type = 'all'
|
||||
|
@ -2231,8 +2390,9 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 竞赛社区
|
||||
# 竞赛社区
|
||||
def contest_community
|
||||
@contest_community = "竞赛"
|
||||
shield_contest_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{@user.id} and shield_type='Contest'").map(&:shield_id)
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
user_contest_ids = (@user.favorite_contests.visible.where("is_delete = 0").map{|contest| contest.id}-shield_contest_ids).empty? ? "(-1)" : "(" + (@user.favorite_contests.visible.map{|contest| contest.id}-shield_contest_ids).join(",") + ")"
|
||||
|
@ -2244,7 +2404,7 @@ class UsersController < ApplicationController
|
|||
case params[:type]
|
||||
when "contest_work"
|
||||
container_type = 'Contest'
|
||||
act_type = 'HomeworkCommon'
|
||||
act_type = 'Work'
|
||||
when "contest_news"
|
||||
container_type = 'Contest'
|
||||
act_type = 'News'
|
||||
|
@ -2432,7 +2592,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
|
||||
#Modified by nie
|
||||
#Modified by nie
|
||||
unless User.current.admin?
|
||||
if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
|
||||
# redirect_to home_path
|
||||
|
@ -2447,9 +2607,9 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
##end fq
|
||||
##end fq
|
||||
|
||||
#### added by fq
|
||||
#### added by fq
|
||||
def info
|
||||
|
||||
message = []
|
||||
|
@ -2478,7 +2638,7 @@ class UsersController < ApplicationController
|
|||
format.api
|
||||
end
|
||||
end
|
||||
#### end
|
||||
#### end
|
||||
|
||||
|
||||
def new
|
||||
|
@ -2592,7 +2752,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 上传用户资源
|
||||
# 上传用户资源
|
||||
def user_resource_create
|
||||
user_course_ids = User.current.courses.map { |c| c.is_delete == 0 && c.id}
|
||||
user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id }
|
||||
|
@ -2647,7 +2807,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 删除用户资源,分为批量删除 和 单个删除,只能删除自己上传的资源
|
||||
# 删除用户资源,分为批量删除 和 单个删除,只能删除自己上传的资源
|
||||
def user_resource_delete
|
||||
if params[:resource_id].present?
|
||||
Attachment.where("author_id =? and id =?", User.current.id, params[:resource_id]).first.destroy
|
||||
|
@ -2705,7 +2865,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
#根据id或者名称搜索教师或者助教为当前用户的课程
|
||||
#根据id或者名称搜索教师或者助教为当前用户的课程
|
||||
def search_user_course
|
||||
@user = User.current
|
||||
if !params[:search].nil?
|
||||
|
@ -2725,7 +2885,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 根据id或者名称搜索当前用户所在的项目
|
||||
# 根据id或者名称搜索当前用户所在的项目
|
||||
def search_user_project
|
||||
@user = User.current
|
||||
if !params[:search].nil?
|
||||
|
@ -2745,7 +2905,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 将资源发送到对应的课程,分为发送单个,或者批量发送
|
||||
# 将资源发送到对应的课程,分为发送单个,或者批量发送
|
||||
def add_exist_file_to_course
|
||||
@flag = true
|
||||
if params[:send_id].present?
|
||||
|
@ -2856,7 +3016,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 添加资源到对应的项目
|
||||
# 添加资源到对应的项目
|
||||
def add_exist_file_to_project
|
||||
@flag = true
|
||||
# 发送单个资源
|
||||
|
@ -3276,7 +3436,7 @@ class UsersController < ApplicationController
|
|||
|
||||
end
|
||||
|
||||
# 资源预览
|
||||
# 资源预览
|
||||
def resource_preview
|
||||
preview_id = params[:resource_id]
|
||||
@file = Attachment.find(preview_id)
|
||||
|
@ -3289,7 +3449,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 重命名资源
|
||||
# 重命名资源
|
||||
def rename_resource
|
||||
@attachment = Attachment.find(params[:res_id]) if params[:res_id].present?
|
||||
if @attachment != nil
|
||||
|
@ -3334,7 +3494,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
################# added by william
|
||||
################# added by william
|
||||
def tag_save
|
||||
@tags = params[:tag_for_save][:name]
|
||||
@obj_id = params[:tag_for_save][:object_id]
|
||||
|
@ -3420,7 +3580,7 @@ class UsersController < ApplicationController
|
|||
format.html
|
||||
end
|
||||
end
|
||||
###add by huang
|
||||
###add by huang
|
||||
def user_watchlist
|
||||
limit = 10;
|
||||
query = User.watched_by(@user.id);
|
||||
|
@ -3430,7 +3590,7 @@ class UsersController < ApplicationController
|
|||
@action = 'watch'
|
||||
render :template=>'users/user_fanslist',:layout=>'new_base_user'
|
||||
end
|
||||
###add by huang
|
||||
###add by huang
|
||||
def user_fanslist
|
||||
limit = 10;
|
||||
query = @user.watcher_users;
|
||||
|
@ -3452,7 +3612,7 @@ class UsersController < ApplicationController
|
|||
render :template=>'users/user_fanslist',:layout=>'base_users_new'
|
||||
end
|
||||
|
||||
#william
|
||||
#william
|
||||
def update_extensions(user_extensions)
|
||||
user_extensions = params[:user_extensions]
|
||||
unless user_extensions.nil?
|
||||
|
@ -3466,7 +3626,7 @@ class UsersController < ApplicationController
|
|||
@user = User.find(params[:id])
|
||||
end
|
||||
|
||||
#修改个人简介
|
||||
#修改个人简介
|
||||
def edit_brief_introduction
|
||||
if @user && @user.extensions
|
||||
@user.extensions.update_column("brief_introduction",params[:brief_introduction])
|
||||
|
@ -3476,133 +3636,133 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 获取公共资源
|
||||
# 获取公共资源
|
||||
def get_public_resources user_course_ids, user_project_ids, order, score
|
||||
attachments = Attachment.where("(is_publish = 1 and is_public = 1 and container_id is not null and container_type in('Project','OrgSubfield','Principal','Course')) ").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源搜索
|
||||
# 获取公共资源搜索
|
||||
def get_public_resources_search user_course_ids, user_project_ids, order, score, search
|
||||
attachments = Attachment.where("is_publish = 1 and is_public = 1 and container_id is not null and container_type in('Project','OrgSubfield','Principal','Course') and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的资源
|
||||
# 获取我的资源
|
||||
def get_my_resources author_id, user_course_ids, user_project_ids, order, score
|
||||
attachments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type in('OrgSubfield','Principal','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+
|
||||
"or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}) and is_publish = 1 and container_id is not null)" +
|
||||
"or (container_type = 'Project' and container_id in (#{user_project_ids.empty? ? '0': user_project_ids.join(',')}) and is_publish = 1 and container_id is not null)" ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的资源查询结果
|
||||
# 获取我的资源查询结果
|
||||
def get_my_resources_search (author_id, user_course_ids, user_project_ids, order, score, search)
|
||||
@attachments = Attachment.where("((author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type in('Project','OrgSubfield','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+
|
||||
"or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}) and is_publish = 1 and container_id is not null)" +
|
||||
"or (container_type = 'Project' and container_id in (#{user_project_ids.empty? ? '0': user_project_ids.join(',')}) and is_publish = 1 and container_id is not null)) and (filename like :p)" ,:p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的课程资源
|
||||
# 获取我的课程资源
|
||||
def get_course_resources author_id, user_course_ids, order, score
|
||||
attchments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}) and container_type = 'Course')"+
|
||||
"or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})
|
||||
and is_publish = 1 and container_id is not null)" ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# # 获取我的私有资源分享结果
|
||||
# def get_my_private_resources apply_ids, resource_type, order, score
|
||||
# attachments = Attachment.where("id in (#{apply_ids.empty? ? '0': apply_ids.join(',')}) and container_type in(#{resource_type})").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
# end
|
||||
#
|
||||
# # 获取我的私有资源分享搜索结果
|
||||
# def get_my_private_resources_search apply_ids, resource_type, order, score, search
|
||||
# attachments = Attachment.where("id in (#{apply_ids.empty? ? '0': apply_ids.join(',')}) and container_type in(#{resource_type}) and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
# end
|
||||
# # 获取我的私有资源分享结果
|
||||
# def get_my_private_resources apply_ids, resource_type, order, score
|
||||
# attachments = Attachment.where("id in (#{apply_ids.empty? ? '0': apply_ids.join(',')}) and container_type in(#{resource_type})").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
# end
|
||||
#
|
||||
# # 获取我的私有资源分享搜索结果
|
||||
# def get_my_private_resources_search apply_ids, resource_type, order, score, search
|
||||
# attachments = Attachment.where("id in (#{apply_ids.empty? ? '0': apply_ids.join(',')}) and container_type in(#{resource_type}) and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
# end
|
||||
|
||||
# 获取我的课程资源中搜索结果
|
||||
# 获取我的课程资源中搜索结果
|
||||
def get_course_resources_search author_id, user_course_ids, order, score, search
|
||||
attchments = Attachment.where("((author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type = 'Course')"+
|
||||
"or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})
|
||||
and is_publish = 1 and container_id is not null)) and (filename like :p)", :p => search ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源中课程资源
|
||||
# 获取公共资源中课程资源
|
||||
def get_course_resources_public user_course_ids, order, score
|
||||
attchments = Attachment.where("(container_type = 'Course'and container_id is not null and is_publish = 1 and is_public =1)").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源中课程资源搜索结果
|
||||
# 获取公共资源中课程资源搜索结果
|
||||
def get_course_resources_public_search user_course_ids, order, score, search
|
||||
attchments = Attachment.where("(container_type = 'Course'and container_id is not null and is_publish = 1 and is_public =1) and (filename like :p)", :p => search ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的项目资源
|
||||
# 获取我的项目资源
|
||||
def get_project_resources author_id, user_project_ids, order, score
|
||||
attchments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type = 'Project') "+
|
||||
"or (container_type = 'Project' and container_id in (#{user_project_ids.empty? ? '0': user_project_ids.join(',')})
|
||||
and is_publish = 1 and container_id is not null)").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的项目资源搜索
|
||||
# 获取我的项目资源搜索
|
||||
def get_project_resources_search author_id, user_project_ids, order, score, search
|
||||
attchments = Attachment.where("((author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type = 'Project') "+
|
||||
"or (container_type = 'Project' and container_id in (#{user_project_ids.empty? ? '0': user_project_ids.join(',')})
|
||||
and is_publish = 1 and container_id is not null)) and (filename like :p)", :p => search ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源的项目资源
|
||||
# 获取公共资源的项目资源
|
||||
def get_project_resources_public user_project_ids, order, score
|
||||
attchments = Attachment.where("container_type = 'Project' and container_id is not null and is_public =1").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源的项目资源搜索
|
||||
# 获取公共资源的项目资源搜索
|
||||
def get_project_resources_public_search user_project_ids, order, score, search
|
||||
attchments = Attachment.where("(container_type = 'Project' and container_id is not null and is_public =1) and (filename like :p)", :p => search ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我上传的附件
|
||||
# 获取我上传的附件
|
||||
def get_attch_resources author_id, order, score
|
||||
attchments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type in('Project','OrgSubfield','Principal','Course','Issue',
|
||||
'Document','Message','News','StudentWorkScore','HomewCommon'))").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我上传的附件搜索结果
|
||||
# 获取我上传的附件搜索结果
|
||||
def get_attch_resources_search author_id, order, score, search
|
||||
attchments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type in('Project','OrgSubfield','Principal','Course','Issue',
|
||||
'Document','Message','News','StudentWorkScore','HomewCommon')) and (filename like :p)", :p => search ).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源中我上传的附件
|
||||
# 获取公共资源中我上传的附件
|
||||
def get_attch_resources_public order, score
|
||||
attchments = Attachment.where("container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon','OrgSubfield','Principal')
|
||||
and container_id is not null and is_public =1").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取公共资源中我上传的附件
|
||||
# 获取公共资源中我上传的附件
|
||||
def get_attch_resources_public_search order, score, search
|
||||
attchments = Attachment.where("(container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon','OrgSubfield','Principal')
|
||||
and container_id is not null and is_public =1) and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的用户类型资源
|
||||
# 获取我的用户类型资源
|
||||
def get_principal_resources author_id, order, score
|
||||
attchments = Attachment.where("author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type = 'Principal'").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的用户类型资源搜索
|
||||
# 获取我的用户类型资源搜索
|
||||
def get_principal_resources_search author_id, order, score, search
|
||||
attchments = Attachment.where("(author_id = #{author_id} and is_publish = 1 and container_id is not null and container_type = 'Principal') and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的用户类型资源
|
||||
# 获取我的用户类型资源
|
||||
def get_principal_resources_public order, score
|
||||
attchments = Attachment.where("container_type = 'Principal' and is_public =1 and container_id is not null").order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 获取我的用户类型资源
|
||||
# 获取我的用户类型资源
|
||||
def get_principal_resources_public_search order, score, search
|
||||
attchments = Attachment.where("(container_type = 'Principal'and container_id is not null and is_public =1) and (filename like :p)", :p => search).order("#{order.nil? ? 'created_on' : order} #{score}")
|
||||
end
|
||||
|
||||
# 资源库 分为全部 课程资源 项目资源 附件
|
||||
# 资源库 分为全部 课程资源 项目资源 附件
|
||||
def user_resource
|
||||
# 别人的资源库是没有权限去看的
|
||||
if User.current.id.to_i != @user.id.to_i
|
||||
|
@ -3669,7 +3829,8 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 导入资源
|
||||
|
||||
# 导入资源
|
||||
def import_resources
|
||||
@resource_id = params[:project_id].nil? ? (params[:course_id].nil? ? params[:subfield_file_id] : params[:course_id]) : params[:project_id]
|
||||
@resource_type = params[:project_id].nil? ? (params[:course_id].nil? ? "SubfieldFile" : "Course") : "Project"
|
||||
|
@ -3732,7 +3893,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 内容导入到对象中
|
||||
# 内容导入到对象中
|
||||
def import_into_container
|
||||
send_ids = params[:checkbox1]
|
||||
# mul_id为当前课程id、项目id、组织id的多种形态
|
||||
|
@ -3789,7 +3950,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 根据资源关键字进行搜索
|
||||
# 根据资源关键字进行搜索
|
||||
def resource_search
|
||||
@order, @b_sort = params[:order] || "created_on", params[:sort] || "desc"
|
||||
@score = @b_sort == "desc" ? "asc" : "desc"
|
||||
|
@ -3903,6 +4064,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
def user_courselist
|
||||
@user_courselist = "课程"
|
||||
@order, @c_sort, @type, @list_type = 1, 2, 1, 1
|
||||
|
||||
@my_syllabuses = @user.syllabuses
|
||||
|
@ -3937,7 +4099,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
#课程列表的排序
|
||||
#课程列表的排序
|
||||
def sort_syllabus_list
|
||||
@order, @c_sort, @type, @list_type = params[:order] || 1, params[:sort] || 1, params[:type] || 1, params[:list_type] || 1
|
||||
|
||||
|
@ -3983,7 +4145,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
#归档班级列表
|
||||
# 归档班级列表
|
||||
def user_archive_courses
|
||||
if User.current.logged?
|
||||
@order, @c_sort, @type = params[:order] || 1, params[:sort] || 1, params[:type] || 1
|
||||
|
@ -4021,12 +4183,12 @@ class UsersController < ApplicationController
|
|||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html {render :layout => 'new_base_user'}
|
||||
format.html {render :layout => 'base_course_community'}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#展开课程下的班级
|
||||
# 展开课程下的班级
|
||||
def expand_courses
|
||||
@syllabus = Syllabus.where("id = #{params[:syllabus_id]}").first
|
||||
unless @syllabus.nil?
|
||||
|
@ -4041,7 +4203,7 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
#收藏班级/项目
|
||||
# 收藏班级/项目/竞赛
|
||||
def cancel_or_collect
|
||||
if params[:project]
|
||||
@project = Project.find params[:project]
|
||||
|
@ -4053,7 +4215,9 @@ class UsersController < ApplicationController
|
|||
@contest = Contest.find params[:contest]
|
||||
member = ContestMember.where("user_id = #{@user.id} and contest_id = #{@contest.id}")
|
||||
end
|
||||
unless member.empty?
|
||||
if !member.empty? && params[:contest]
|
||||
member.first.update_attribute(:is_collect, member.first.is_collect == false ? 1 : 0)
|
||||
elsif !member.empty?
|
||||
member.first.update_attribute(:is_collect, member.first.is_collect == 0 ? 1 : 0)
|
||||
end
|
||||
if @project
|
||||
|
@ -4068,7 +4232,23 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# 用户竞赛列表
|
||||
def user_contestlist
|
||||
# 我创建的竞赛
|
||||
@contest_community = "竞赛"
|
||||
@my_contests = @user.contests.where(:user_id => @user.id).order("created_at desc")
|
||||
@my_contests_count = @my_contests.count
|
||||
# 我参与的竞赛
|
||||
my_all_contests = @user.contest_members.where(:user_id => @user.id).blank? ? "(-1)" : "(" + @user.contest_members.where(:user_id => @user.id).map{ |cm| cm.contest_id }.join(",") + ")"
|
||||
@my_joined_contests = Contest.where("id in #{my_all_contests} and user_id != #{@user.id}").order("created_at desc")
|
||||
@my_joined_contests_count = @my_joined_contests.count
|
||||
respond_to do |format|
|
||||
format.html {render :layout => 'base_contest_community'}
|
||||
end
|
||||
end
|
||||
|
||||
def user_projectlist
|
||||
@user_projectlist = "项目"
|
||||
@order, @c_sort, @type, @list_type = 1, 2, 1, 1
|
||||
#limit = 5
|
||||
|
||||
|
@ -4174,6 +4354,12 @@ class UsersController < ApplicationController
|
|||
@journals = obj.journals_for_messages.reorder("created_on desc")
|
||||
@is_teacher = User.current.allowed_to?(:as_teacher,obj.course)
|
||||
@user_activity_id = params[:user_activity_id].to_i if params[:user_activity_id]
|
||||
when 'Work'
|
||||
obj = Work.where('id = ?', params[:id].to_i).first
|
||||
@type = 'Work'
|
||||
@journals = obj.journals_for_messages.reorder("created_on desc")
|
||||
@is_teacher = User.current.admin_of_contest?(obj.contest)
|
||||
@user_activity_id = params[:user_activity_id].to_i if params[:user_activity_id]
|
||||
end
|
||||
end
|
||||
@journals = get_no_children_comments_all @journals
|
||||
|
@ -4187,6 +4373,10 @@ class UsersController < ApplicationController
|
|||
end
|
||||
|
||||
private
|
||||
def show_system_message
|
||||
# 系统消息总显示在最前面,显示周期30天
|
||||
@system_messages = SystemMessage.where("created_at > ?", Time.now - 86400 * 30)
|
||||
end
|
||||
|
||||
def find_user
|
||||
if params[:id] == 'current'
|
||||
|
|
|
@ -19,11 +19,11 @@ class VersionsController < ApplicationController
|
|||
layout "base_projects"
|
||||
menu_item :roadmap
|
||||
model_object Version
|
||||
before_filter :find_model_object, :except => [:index, :new, :create, :close_completed]
|
||||
before_filter :find_model_object, :except => [:index, :new, :create, :close_completed,:judge_version_title]
|
||||
#before_filter :find_model_object_contest, :except => [:index, :new, :create]
|
||||
before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed]
|
||||
before_filter :find_project_by_project_id, :only => [:index, :new, :create, :close_completed]
|
||||
before_filter :authorize
|
||||
before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed, :judge_version_title]
|
||||
before_filter :find_project_by_project_id, :only => [:index, :new, :create, :close_completed,:judge_version_title]
|
||||
before_filter :authorize, :except => [:judge_version_title]
|
||||
|
||||
accept_api_auth :index, :show, :create, :update, :destroy
|
||||
|
||||
|
@ -189,9 +189,9 @@ class VersionsController < ApplicationController
|
|||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html { flash[:error] = @version.errors.full_messages.flatten.to_s
|
||||
redirect_to settings_project_url(@project, :tab => 'versions') }
|
||||
format.js { render :action => 'new' }
|
||||
# format.html { flash[:error] = @version.errors.full_messages.flatten.to_s
|
||||
# redirect_to settings_project_url(@project, :tab => 'versions') }
|
||||
format.js { @error = @version.errors.full_messages.flatten.to_s }
|
||||
format.api { render_validation_errors(@version) }
|
||||
end
|
||||
end
|
||||
|
@ -275,6 +275,21 @@ class VersionsController < ApplicationController
|
|||
redirect_to settings_contest_url(@contest, :tab => 'versions')
|
||||
end
|
||||
|
||||
# 判断里程碑是否重名
|
||||
def judge_version_title
|
||||
begin
|
||||
version = Version.where(:name => params[:version_name], :project_id => @project.id).first
|
||||
if version.blank?
|
||||
result = {:result => true}
|
||||
else
|
||||
result = {:result => false}
|
||||
end
|
||||
rescue Exception => e
|
||||
puts e
|
||||
end
|
||||
render :json => result
|
||||
end
|
||||
|
||||
def destroy
|
||||
begin
|
||||
project = @version.project
|
||||
|
|
|
@ -515,8 +515,8 @@ class WechatsController < ActionController::Base
|
|||
|
||||
private
|
||||
def get_openid_from_code(code)
|
||||
if code =='only-for-test'
|
||||
openid = 'o3ss_wHOOnHkz1khBJxH8RF4SfPY'
|
||||
if code =='test'
|
||||
openid = 'orgVLv8TlS6e7FDiI6xdTGHRaaRo'
|
||||
session[:wechat_openid] = openid
|
||||
return openid
|
||||
end
|
||||
|
@ -545,6 +545,8 @@ class WechatsController < ActionController::Base
|
|||
return openid
|
||||
end
|
||||
|
||||
## 能进来的就是已关注
|
||||
## 因为取消订阅的记录被删除了
|
||||
def user_binded?(openid)
|
||||
uw = UserWechat.where(openid: openid).first
|
||||
if uw && uw.bindtype == 0
|
||||
|
|
|
@ -95,6 +95,14 @@ class WordsController < ApplicationController
|
|||
@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]
|
||||
unless @activity
|
||||
if params[:user_activity_id] == params[:activity_id]
|
||||
redirect_to course_feedback_path(@course)
|
||||
else
|
||||
redirect_to course_path(@course)
|
||||
end
|
||||
return
|
||||
end
|
||||
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
|
||||
|
@ -109,6 +117,19 @@ class WordsController < ApplicationController
|
|||
end
|
||||
return
|
||||
end
|
||||
elsif @journal_destroyed.jour_type == "Contest"
|
||||
@contest = Contest.find(@journal_destroyed.jour_id)
|
||||
@jours_count = @contest.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]
|
||||
unless @activity
|
||||
if params[:user_activity_id] == params[:activity_id]
|
||||
redirect_to feedback_contest_path(@contest)
|
||||
else
|
||||
redirect_to contest_activities_contest_path(@contest)
|
||||
end
|
||||
return
|
||||
end
|
||||
elsif @journal_destroyed.jour_type == 'HomeworkCommon'
|
||||
@homework = HomeworkCommon.find @journal_destroyed.jour_id
|
||||
if params[:user_activity_id]
|
||||
|
@ -118,6 +139,15 @@ class WordsController < ApplicationController
|
|||
end
|
||||
@hw_status = params[:hw_status].to_i if
|
||||
@is_teacher = User.current.allowed_to?(:as_teacher, @homework.course) || User.current.admin?
|
||||
elsif @journal_destroyed.jour_type == 'Work'
|
||||
@work = Work.find @journal_destroyed.jour_id
|
||||
if params[:user_activity_id]
|
||||
@user_activity_id = params[:user_activity_id].to_i
|
||||
else
|
||||
@user_activity_id = -1
|
||||
end
|
||||
@hw_status = params[:hw_status].to_i if
|
||||
@is_teacher = User.current.admin_of_contest?(@work.contest) || User.current.admin?
|
||||
elsif @journal_destroyed.jour_type == 'Syllabus'
|
||||
@syllabus = Syllabus.find @journal_destroyed.jour_id
|
||||
@count = @syllabus.journals_for_messages.count
|
||||
|
@ -260,7 +290,7 @@ class WordsController < ApplicationController
|
|||
# add by nwb
|
||||
def leave_course_message
|
||||
user = User.current
|
||||
message = params[:new_form][:course_message]
|
||||
message = params[:new_form][:content]
|
||||
feedback = Course.add_new_jour(user, message, params[:id])
|
||||
if(feedback.errors.empty?)
|
||||
if params[:asset_id]
|
||||
|
@ -296,6 +326,18 @@ class WordsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def leave_contest_message
|
||||
if User.current.logged?
|
||||
@contest = Contest.find params[:id]
|
||||
if params[:new_form][:content].size>0 && User.current.logged?
|
||||
@contest.journals_for_messages << JournalsForMessage.new(:user_id => User.current.id, :notes => params[:new_form][:content], :reply_id => 0, :status => true, :is_readed => false)
|
||||
end
|
||||
redirect_to feedback_contest_path(@contest)
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
#作业的回复
|
||||
def leave_homework_message
|
||||
if User.current.logged?
|
||||
|
|
|
@ -2,12 +2,43 @@ class WorksController < ApplicationController
|
|||
|
||||
layout "base_contests"
|
||||
before_filter :find_contest, :only => [:index,:new,:create]
|
||||
before_filter :find_contestwork, :only => [:edit,:update,:destroy,:score_rule_set,:alert_open_student_works,:open_student_works,:set_score_open,:alert_score_open_modal]
|
||||
before_filter :admin_of_contest, :only => [:new, :create, :edit, :update, :destroy,:score_rule_set,:alert_open_student_works,:open_student_works]
|
||||
before_filter :find_contestwork, :only => [:edit,:update,:destroy,:score_rule_set,:open_contestant_works,:set_score_open,:alert_score_open_modal,
|
||||
:set_score_rule]
|
||||
before_filter :admin_of_contest, :only => [:new, :create, :edit, :update, :destroy,:score_rule_set,:open_contestant_works]
|
||||
before_filter :member_of_contest, :only => [:index]
|
||||
|
||||
def index
|
||||
search = "%#{params[:search].to_s.strip.downcase}%"
|
||||
@new_homework = Work.new
|
||||
@new_homework.contest = @contest
|
||||
@page = params[:page] ? params[:page].to_i + 1 : 0
|
||||
@is_teacher = User.current.logged? && (User.current.admin? || User.current.admin_of_contest?(@contest))
|
||||
if @is_teacher
|
||||
@homework_commons = @contest.works.where("name like '%#{search}%'").order("created_at desc")
|
||||
else
|
||||
@homework_commons = @contest.works.where("name like '%#{search}%' and publish_time <= '#{Date.today}'").order("created_at desc")
|
||||
end
|
||||
@is_new = params[:is_new]
|
||||
|
||||
@homeworks = paginateHelper @homework_commons,10
|
||||
#设置at已读
|
||||
ids = @homeworks.inject([]) do |ids, homework|
|
||||
jids = homework.journals_for_messages.map(&:id)
|
||||
jids ? ids + jids : ids
|
||||
|
||||
# homework.delay.set_jour_viewed
|
||||
end
|
||||
unless ids.empty?
|
||||
User.current.at_messages.where(viewed: false,
|
||||
at_message_type: 'JournalsForMessage',
|
||||
at_message_id: ids).update_all(viewed: true)
|
||||
end
|
||||
|
||||
@left_nav_type = 3
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
@ -19,19 +50,228 @@ class WorksController < ApplicationController
|
|||
end
|
||||
|
||||
def create
|
||||
if User.current.logged?
|
||||
if params[:homework_common]
|
||||
homework = Work.new
|
||||
homework.name = params[:homework_common][:name]
|
||||
homework.description = params[:homework_common][:description]
|
||||
homework.end_time = params[:homework_common][:end_time] || Date.today
|
||||
if params[:homework_common][:publish_time] == ""
|
||||
homework.publish_time = Date.today
|
||||
else
|
||||
homework.publish_time = params[:homework_common][:publish_time]
|
||||
end
|
||||
homework.work_type = params[:homework_type].to_i || 1
|
||||
#homework.late_penalty = 0
|
||||
#homework.teacher_priority = 1
|
||||
homework.user_id = User.current.id
|
||||
homework.contest_id = @contest.id
|
||||
|
||||
homework.save_attachments(params[:attachments])
|
||||
render_attachment_warning_if_needed(homework)
|
||||
|
||||
homework.work_status = homework.publish_time > Date.today ? 0 : (homework.end_time < Date.today ? 2 : 1)
|
||||
|
||||
work_detail_manual = WorkDetailManual.new
|
||||
|
||||
work_detail_manual.evaluation_start = homework.end_time + 7
|
||||
work_detail_manual.evaluation_end = work_detail_manual.evaluation_start + 7
|
||||
work_detail_manual.evaluation_num = 3
|
||||
homework.work_detail_manual = work_detail_manual
|
||||
|
||||
#分组作业
|
||||
if homework.work_type == 3
|
||||
homework_detail_group = WorkDetailGroup.new
|
||||
homework.work_detail_group = homework_detail_group
|
||||
homework_detail_group.min_num = params[:min_num].to_i
|
||||
homework_detail_group.max_num = params[:max_num].to_i
|
||||
homework_detail_group.base_on_project = params[:base_on_project].to_i
|
||||
end
|
||||
|
||||
if homework.save
|
||||
work_detail_manual.save if work_detail_manual
|
||||
homework_detail_group.save if homework_detail_group
|
||||
redirect_to works_path(:contest => @contest.id)
|
||||
end
|
||||
end
|
||||
else
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if params[:homework_common]
|
||||
@contestwork.name = params[:homework_common][:name]
|
||||
@contestwork.description = params[:homework_common][:description]
|
||||
if params[:homework_common][:publish_time] == ""
|
||||
@contestwork.publish_time = Date.today
|
||||
else
|
||||
@contestwork.publish_time = params[:homework_common][:publish_time]
|
||||
end
|
||||
param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d")
|
||||
homework_end_time = Time.parse(@contestwork.end_time.to_s).strftime("%Y-%m-%d")
|
||||
work_detail_manual = @contestwork.work_detail_manual
|
||||
if homework_end_time != param_end_time
|
||||
eval_start = Time.parse(work_detail_manual.evaluation_start.to_s).strftime("%Y-%m-%d")
|
||||
if eval_start.nil? || (eval_start <= param_end_time && @contestwork.work_status <= 2)
|
||||
work_detail_manual.evaluation_start = @contestwork.end_time + 7
|
||||
work_detail_manual.evaluation_end = work_detail_manual.evaluation_start + 7
|
||||
end
|
||||
|
||||
if homework_end_time > param_end_time
|
||||
@contestwork.contestant_works.each do |st|
|
||||
if param_end_time < Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d")
|
||||
st.work_status = 2
|
||||
st.save
|
||||
end
|
||||
end
|
||||
else
|
||||
@contestwork.contestant_works.where("work_status = 2").each do |st|
|
||||
if param_end_time >= Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d")
|
||||
st.work_status = 1
|
||||
st.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@contestwork.end_time = params[:homework_common][:end_time] || Time.now
|
||||
if params[:homework_type] && params[:homework_type].to_i != @contestwork.work_type
|
||||
if @contestwork.work_type == 3
|
||||
@contestwork.work_detail_group.destroy if @contestwork.work_detail_group
|
||||
end
|
||||
end
|
||||
@contestwork.work_type = params[:homework_type].to_i || @contestwork.work_type
|
||||
|
||||
#status = false
|
||||
if @contestwork.publish_time <= Date.today && @contestwork.work_status == 0
|
||||
@contestwork.work_status = 1
|
||||
elsif @contestwork.end_time < Date.today && @contestwork.work_status == 1
|
||||
@contestwork.work_status = 2
|
||||
#status = true
|
||||
end
|
||||
|
||||
@contestwork.save_attachments(params[:attachments])
|
||||
render_attachment_warning_if_needed(@contestwork)
|
||||
|
||||
#分组作业
|
||||
if @contestwork.work_type == 3
|
||||
@contestwork.work_detail_group ||= WorkDetailGroup.new
|
||||
@homework_detail_group = @contestwork.work_detail_group
|
||||
@homework_detail_group.min_num = params[:min_num].to_i if params[:min_num]
|
||||
@homework_detail_group.max_num = params[:max_num].to_i if params[:max_num]
|
||||
@homework_detail_group.base_on_project = params[:base_on_project] ? 1 : 0
|
||||
end
|
||||
|
||||
if @contestwork.save
|
||||
@homework_detail_group.save if @homework_detail_group
|
||||
work_detail_manual.save if work_detail_manual
|
||||
|
||||
@hw_status = params[:hw_status].to_i
|
||||
if @hw_status == 1
|
||||
redirect_to user_contest_community_path(User.current.id)
|
||||
elsif @hw_status == 2
|
||||
redirect_to contest_path(@contest.id)
|
||||
elsif @hw_status == 5
|
||||
redirect_to contestant_works_path(:work => @contestwork.id)
|
||||
else
|
||||
redirect_to works_path(:contest => @contest.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
|
||||
@user = User.current
|
||||
@hw_status = params[:hw_status].to_i
|
||||
@homework = @contestwork
|
||||
if @hw_status != 1
|
||||
@left_nav_type = 3
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'base_contests'}
|
||||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html{render :layout => 'base_contest_community'}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
if @contestwork.destroy
|
||||
respond_to do |format|
|
||||
format.js {
|
||||
@hw_status = params[:hw_status].to_i
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def alert_score_open_modal
|
||||
if params[:user_activity_id]
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
else
|
||||
@user_activity_id = -1
|
||||
end
|
||||
@hw_status = params[:hw_status].to_i
|
||||
end
|
||||
|
||||
def set_score_open
|
||||
@contestwork.update_attribute('score_open', params[:score_open].to_i)
|
||||
@user_activity_id = params[:user_activity_id].to_i
|
||||
@hw_status = params[:hw_status].to_i
|
||||
@is_teacher = User.current.admin? || User.current.admin_of_contest?(@contest)
|
||||
end
|
||||
|
||||
def open_contestant_works
|
||||
@contestwork.update_attributes(:is_open => !@contestwork.is_open)
|
||||
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
@hw_status = params[:hw_status].to_i
|
||||
@is_teacher = User.current.admin? || User.current.admin_of_contest?(@contest)
|
||||
end
|
||||
|
||||
def score_rule_set
|
||||
if params[:user_activity_id]
|
||||
@user_activity_id = params[:user_activity_id]
|
||||
else
|
||||
@user_activity_id = -1
|
||||
end
|
||||
@hw_status = params[:hw_status].to_i
|
||||
end
|
||||
|
||||
def set_score_rule
|
||||
# 未启动在线评审时才能更改评审参数
|
||||
if @contestwork.work_status < 3
|
||||
@contestwork.online_evaluation = params[:online_evaluation].to_i ? 1 : 0
|
||||
@contestwork.save
|
||||
|
||||
# 如果开启在线评审
|
||||
if params[:online_evaluation]
|
||||
work_detail_manual = @contestwork.work_detail_manual
|
||||
work_detail_manual.evaluation_start = params[:evaluation_start]
|
||||
work_detail_manual.evaluation_end = params[:evaluation_end]
|
||||
work_detail_manual.evaluation_num = params[:evaluation_limit].to_i == 1 ? params[:evaluation_num] : -1
|
||||
work_detail_manual.save
|
||||
end
|
||||
end
|
||||
|
||||
score_valid = params[:score_valid].to_i == 1 ? true : false
|
||||
if score_valid != @contestwork.score_valid
|
||||
@contestwork.score_valid = score_valid
|
||||
@contestwork.save
|
||||
@contestwork.contestant_works.has_committed.each do |c_work|
|
||||
c_work.save
|
||||
end
|
||||
end
|
||||
if params[:student_path] && params[:student_path] == "true"
|
||||
redirect_to contestant_works_path(:work => @contestwork.id)
|
||||
else
|
||||
@user_activity_id = params[:user_activity_id].to_i
|
||||
@hw_status = params[:hw_status].to_i
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
#coding=utf-8
|
||||
|
||||
require "base64"
|
||||
require 'zip'
|
||||
|
||||
class ZipdownController < ApplicationController
|
||||
#查找项目(课程)
|
||||
before_filter :find_project_by_bid_id, :only => [:assort]
|
||||
#检查权限
|
||||
#勿删 before_filter :authorize, :only => [:assort,:download_user_homework]
|
||||
SAVE_FOLDER = "#{Rails.root}/files"
|
||||
OUTPUT_FOLDER = "#{Rails.root}/files/archiveZip"
|
||||
MAX_PATH = 50
|
||||
## 200M
|
||||
MAX_DOWN_SIZE = 200 * 1024 * 1024
|
||||
|
||||
include ZipService
|
||||
|
||||
#统一下载功能
|
||||
def download
|
||||
|
@ -35,23 +33,21 @@ class ZipdownController < ApplicationController
|
|||
if params[:obj_class] == "Bid"
|
||||
bid = Bid.find params[:obj_id]
|
||||
render_403 if User.current.allowed_to?(:as_teacher,bid.courses.first)
|
||||
file_count = 0
|
||||
bid.homeworks.map { |homework| file_count += homework.attachments.count}
|
||||
if file_count > 0
|
||||
zipfile = zip_bid bid
|
||||
else
|
||||
zipfile = {:message => "no file"}
|
||||
end
|
||||
zipfile = checkfileSize(bid.homeworks) {
|
||||
zip_bid bid
|
||||
}
|
||||
elsif params[:obj_class] == "HomeworkCommon"
|
||||
homework = HomeworkCommon.find params[:obj_id]
|
||||
render_403 if User.current.allowed_to?(:as_teacher,homework.course)
|
||||
file_count = 0
|
||||
homework.student_works.map { |work| file_count += work.attachments.count}
|
||||
if file_count > 0
|
||||
zipfile = zip_homework_common homework
|
||||
else
|
||||
zipfile = {:message => "no file"}
|
||||
end
|
||||
zipfile = checkfileSize(homework.student_works) {
|
||||
zip_homework_common homework
|
||||
}
|
||||
elsif params[:obj_class] == "Work"
|
||||
contest_work = Work.find params[:obj_id]
|
||||
render_403 if User.current.admin_of_contest?(contest_work.contest)
|
||||
zipfile = checkfileSize(contest_work.contestant_works) {
|
||||
zip_contest_work contest_work
|
||||
}
|
||||
else
|
||||
logger.error "[ZipDown#assort] ===> #{params[:obj_class]} unKown !!"
|
||||
end
|
||||
|
@ -87,7 +83,6 @@ class ZipdownController < ApplicationController
|
|||
end
|
||||
|
||||
private
|
||||
|
||||
#通过作业Id找到项目(课程)
|
||||
def find_project_by_bid_id
|
||||
obj_class = params[:obj_class]
|
||||
|
@ -99,215 +94,23 @@ class ZipdownController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def zip_bid(bid)
|
||||
# Todo: User Access Controll
|
||||
bid_homework_path = []
|
||||
digests = []
|
||||
bid.homeworks.each do |homeattach|
|
||||
unless homeattach.attachments.empty?
|
||||
out_file = zip_homework_by_user(homeattach)
|
||||
bid_homework_path << out_file.file_path
|
||||
digests << out_file.file_digest
|
||||
end
|
||||
end
|
||||
homework_id = bid.id
|
||||
user_id = bid.author_id
|
||||
out_file = find_or_pack(homework_id, user_id, digests.sort){
|
||||
zipping("#{Time.now.to_i}_#{bid.name}.zip",
|
||||
bid_homework_path, OUTPUT_FOLDER)
|
||||
}
|
||||
[{files:[out_file.file_path], count: 1, index: 1,
|
||||
real_file: out_file.file_path,
|
||||
file: File.basename(out_file.file_path),
|
||||
base64file: encode64(File.basename(out_file.file_path)),
|
||||
size:(out_file.pack_size / 1024.0 / 1024.0).round(2)
|
||||
}]
|
||||
end
|
||||
|
||||
def encode64(str)
|
||||
Base64.urlsafe_encode64(str)
|
||||
end
|
||||
|
||||
def decode64(str)
|
||||
Base64.urlsafe_decode64(str)
|
||||
end
|
||||
|
||||
def zip_homework_common homework_common
|
||||
bid_homework_path = []
|
||||
digests = []
|
||||
homework_common.student_works.each do |work|
|
||||
unless work.attachments.empty?
|
||||
out_file = zip_student_work_by_user(work)
|
||||
|
||||
bid_homework_path << out_file.file_path
|
||||
digests << out_file.file_digest
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
homework_id = homework_common.id
|
||||
user_id = homework_common.user_id
|
||||
out_file = find_or_pack(homework_id, user_id, digests.sort){
|
||||
zipping("#{Time.now.to_i}_#{homework_common.name}.zip",
|
||||
bid_homework_path, OUTPUT_FOLDER)
|
||||
}
|
||||
[{files:[out_file.file_path], count: 1, index: 1,
|
||||
real_file: out_file.file_path,
|
||||
file: File.basename(out_file.file_path),
|
||||
base64file: encode64(File.basename(out_file.file_path)),
|
||||
size:(out_file.pack_size / 1024.0 / 1024.0).round(2)
|
||||
}]
|
||||
end
|
||||
|
||||
def zip_homework_by_user(homework_attach)
|
||||
homeworks_attach_path = []
|
||||
not_exist_file = []
|
||||
# 需要将所有homework.attachments遍历加入zip
|
||||
digests = []
|
||||
homework_attach.attachments.each do |attach|
|
||||
if File.exist?(attach.diskfile)
|
||||
homeworks_attach_path << attach.diskfile
|
||||
digests << attach.digest
|
||||
else
|
||||
not_exist_file << attach.filename
|
||||
digests << 'not_exist_file'
|
||||
end
|
||||
end
|
||||
out_file = find_or_pack(homework_attach.bid_id, homework_attach.user_id, digests.sort){
|
||||
zipping("#{homework_attach.user.show_name}_#{((homework_attach.user.user_extensions.nil? || homework_attach.user.user_extensions.student_id.nil?) ? "" : homework_attach.user.user_extensions.student_id)}_#{Time.now.to_i.to_s}.zip",
|
||||
homeworks_attach_path, OUTPUT_FOLDER, true, not_exist_file)
|
||||
}
|
||||
end
|
||||
|
||||
def make_zip_name(work)
|
||||
"#{work.user.show_name}_#{((work.user.user_extensions.nil? || work.user.user_extensions.student_id.nil?) ? "" : work.user.user_extensions.student_id)}_#{Time.now.to_i.to_s}"
|
||||
end
|
||||
|
||||
def zip_student_work_by_user(work)
|
||||
homeworks_attach_path = []
|
||||
not_exist_file = []
|
||||
# 需要将所有homework.attachments遍历加入zip
|
||||
digests = []
|
||||
work.attachments.each do |attach|
|
||||
if File.exist?(attach.diskfile)
|
||||
homeworks_attach_path << attach.diskfile
|
||||
digests << attach.digest
|
||||
else
|
||||
not_exist_file << attach.filename
|
||||
digests << 'not_exist_file'
|
||||
def checkfileSize(works)
|
||||
file_count = 0
|
||||
file_size = 0
|
||||
works.each do |work|
|
||||
file_count += work.attachments.count
|
||||
work.attachments.each do |attach|
|
||||
file_size += attach.filesize
|
||||
end
|
||||
end
|
||||
|
||||
#单个文件的话,不需要压缩,只改名
|
||||
out_file = nil
|
||||
if homeworks_attach_path.size == 1
|
||||
out_file = find_or_pack(work.homework_common_id, work.user_id, digests.sort){
|
||||
des_path = "#{OUTPUT_FOLDER}/#{make_zip_name(work)}_#{File.basename(homeworks_attach_path.first)}"
|
||||
FileUtils.cp homeworks_attach_path.first, des_path
|
||||
des_path
|
||||
}
|
||||
if file_size > MAX_DOWN_SIZE
|
||||
{err: -1, message: 'file size to large'}
|
||||
elsif file_count > 0
|
||||
yield if block_given?
|
||||
else
|
||||
out_file = find_or_pack(work.homework_common_id, work.user_id, digests.sort){
|
||||
zipping("#{make_zip_name(work)}.zip",
|
||||
homeworks_attach_path, OUTPUT_FOLDER, true, not_exist_file)
|
||||
}
|
||||
{err: -2, :message => "no file"}
|
||||
end
|
||||
out_file
|
||||
|
||||
end
|
||||
|
||||
|
||||
def find_or_pack(homework_id, user_id, digests)
|
||||
raise "please given a pack block" unless block_given?
|
||||
|
||||
out_file = ZipPack.packed?(homework_id, user_id, digests.sort)
|
||||
|
||||
unless out_file && out_file.file_valid?
|
||||
file = yield
|
||||
|
||||
ZipPack.where(homework_id: homework_id,
|
||||
user_id: user_id).delete_all
|
||||
|
||||
out_file = ZipPack.create(homework_id: homework_id,
|
||||
user_id: user_id,
|
||||
file_digest: Trustie::Utils.digest(file),
|
||||
file_path: file,
|
||||
pack_size: File.size(file),
|
||||
file_digests: digests.join(',')
|
||||
)
|
||||
else
|
||||
out_file.pack_times = out_file.pack_times + 1
|
||||
out_file.save
|
||||
end
|
||||
|
||||
out_file
|
||||
end
|
||||
|
||||
|
||||
def zipping(zip_name_refer, files_paths, output_path, is_attachment=false, not_exist_file=[])
|
||||
rename_zipfile = zip_name_refer ||= "#{Time.now.to_i.to_s}.zip"
|
||||
# 文件名过长
|
||||
|
||||
if rename_zipfile.size > MAX_PATH
|
||||
rename_zipfile = rename_zipfile[0,rename_zipfile.size-4][0,MAX_PATH-4] + rename_zipfile[-4,4]
|
||||
end
|
||||
|
||||
zipfile_name = "#{output_path}/#{rename_zipfile}"
|
||||
|
||||
Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name))
|
||||
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
||||
files_paths.each do |filename|
|
||||
rename_file = File.basename(filename)
|
||||
rename_file = filename_to_real( File.basename(filename)) if is_attachment
|
||||
|
||||
begin
|
||||
zipfile.add(rename_file, filename)
|
||||
rescue Exception => e
|
||||
zipfile.get_output_stream('FILE_NOTICE.txt'){|os| os.write l(:label_file_exist)}
|
||||
next
|
||||
end
|
||||
end
|
||||
unless not_exist_file.empty?
|
||||
zipfile.get_output_stream('FILE_LOST.txt'){|os| os.write l(:label_file_lost) + not_exist_file.join(',').to_s}
|
||||
end
|
||||
end
|
||||
zipfile_name
|
||||
end
|
||||
|
||||
# 合理分配文件打包
|
||||
# 如果小于 pack_attachment_max_size, 则返回单个文件
|
||||
# 反之则切分为多个文件组返回
|
||||
def split_pack_files(files, pack_attachment_max_size)
|
||||
max_size = 0
|
||||
last_files = []
|
||||
ret_files = []
|
||||
files.each_with_index do |f,i|
|
||||
if (max_size += File.size(f)) > pack_attachment_max_size
|
||||
max_size = 0
|
||||
if last_files.empty? #如果单个文件超过大小,也将此文件作为一组
|
||||
ret_files << {files: [f], count: 1, index: ret_files.count+1}
|
||||
last_files.clear
|
||||
else
|
||||
ret_files << {files:last_files, count: last_files.count, index: ret_files.count+1}
|
||||
last_files.clear
|
||||
redo
|
||||
end
|
||||
else
|
||||
last_files << f
|
||||
end
|
||||
end
|
||||
|
||||
ret_files << {files:last_files, count: last_files.count, index: ret_files.count+1} unless last_files.empty?
|
||||
ret_files
|
||||
end
|
||||
|
||||
def detect_content_type(name)
|
||||
content_type = Redmine::MimeType.of(name)
|
||||
content_type.to_s
|
||||
end
|
||||
|
||||
def filename_to_real(name)
|
||||
attach = Attachment.find_by_disk_filename(name)
|
||||
attach.filename
|
||||
end
|
||||
end
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
require 'forwardable'
|
||||
require 'cgi'
|
||||
|
||||
require 'iconv'
|
||||
module ApplicationHelper
|
||||
include Redmine::WikiFormatting::Macros::Definitions
|
||||
include Redmine::I18n
|
||||
|
@ -37,6 +37,51 @@ module ApplicationHelper
|
|||
# super
|
||||
# end
|
||||
|
||||
# 公共分页
|
||||
def paginator_list objs, objs_count, limit, is_remote
|
||||
@is_remote = is_remote
|
||||
@objs_count = objs.count
|
||||
@obj_pages = Paginator.new @objs_count, limit, params['page'] || 1
|
||||
@offset ||= @obj_pages.offset
|
||||
@objs = paginateHelper @attachments,25
|
||||
end
|
||||
|
||||
# 判断当前用户能否对消息进行操作
|
||||
def allow_to_show applied_message
|
||||
(User.current.id == applied_message.user_id && applied_message.status == 0) ? true : false
|
||||
end
|
||||
|
||||
# 获取竞赛的管理人员
|
||||
def contest_managers contest
|
||||
contest.contest_members.select{|cm| cm.roles.to_s.include?("ContestManager")}
|
||||
end
|
||||
|
||||
# 获取竞赛的评委人员
|
||||
def contest_judges contest
|
||||
contest.contest_members.select{|cm| cm.roles.to_s.include?("Judge")}
|
||||
end
|
||||
|
||||
# 获取竞赛的参赛人员
|
||||
def contest_contestants contest
|
||||
contest.contest_members.select{|cm| cm.roles.to_s.include?("Contestant")}
|
||||
end
|
||||
|
||||
# 字符串加密
|
||||
def aes_encrypt(key, encrypted_string)
|
||||
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
|
||||
aes.encrypt
|
||||
aes.key = key
|
||||
txt = aes.update(encrypted_string) << aes.final
|
||||
txt.unpack('H*')[0].upcase
|
||||
end
|
||||
|
||||
# 字符串解密
|
||||
def aes_dicrypt(key, dicrypted_string)
|
||||
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
|
||||
aes.decrypt
|
||||
aes.key = key
|
||||
aes.update([dicrypted_string].pack('H*')) << aes.final
|
||||
end
|
||||
# 获取多种类型的user用户名
|
||||
def user_message_username user
|
||||
user.try(:show_name)
|
||||
|
@ -196,6 +241,16 @@ module ApplicationHelper
|
|||
xls_report.string
|
||||
end
|
||||
|
||||
# 用户资料是否完善
|
||||
def user_data_complete user
|
||||
user_extension = UserExtensions.where(:user_id => user.id).first
|
||||
data = true
|
||||
if user_extension.gender.nil? || user_extension.school_id.nil? || user.lastname.blank? || (user_extension.identity == 3 && user_extension.school_id.nil?)
|
||||
data = false
|
||||
end
|
||||
return data
|
||||
end
|
||||
|
||||
# 获取用户单位
|
||||
# 优先获取高校信息,如果改信息不存在则获取occupation
|
||||
def get_occupation_from_user user
|
||||
|
@ -269,7 +324,7 @@ module ApplicationHelper
|
|||
# 获取项目/课程总分
|
||||
# 发布缺陷 4分 回复缺陷 1分 提交一次 4分 讨论帖子 2分 回复帖子 1分 发布新闻 1分
|
||||
def static_project_score obj
|
||||
score = obj.issue_num * 4 + obj.issue_journal_num + (obj.changeset_num||0) * 4 + obj.board_num * 2 + obj.board_message_num + obj.news_num + obj.attach_num * 5
|
||||
score = obj.issue_num * 4 + obj.issue_journal_num + (obj.changeset_num||0) * 4 + obj.board_num * 2 + obj.board_message_num + obj.attach_num * 5
|
||||
end
|
||||
|
||||
# 获取组织成员中文名字
|
||||
|
@ -962,6 +1017,25 @@ module ApplicationHelper
|
|||
end
|
||||
end
|
||||
|
||||
# 判断成员在项目中的角色 member_role == Reporter/Manager/Developer 报告人员/管理人员/报告人员;
|
||||
def role_of_members_in_project(project, user_id)
|
||||
member = Member.where(:project_id => project, :user_id => user_id)
|
||||
unless member.blank?
|
||||
member_role = member.first.roles[0].to_s
|
||||
end
|
||||
return member_role
|
||||
end
|
||||
|
||||
# 判断用户是不是项目成员
|
||||
def is_project_member?(user_id, project_id)
|
||||
@result = false
|
||||
mem = Member.where("user_id = ? and project_id = ?",user_id, project_id)
|
||||
unless mem.blank?
|
||||
@result = true
|
||||
end
|
||||
return @result
|
||||
end
|
||||
|
||||
def show_attachment_tip container_id, container_type
|
||||
atts = Attachment.where(:container_id => container_id, :container_type => container_type, :is_public => 0)
|
||||
atts.count > 0 ? true :false
|
||||
|
@ -1130,13 +1204,14 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def assigned_options_for_select(collection, selected=nil)
|
||||
conv = Iconv.new("GBK", "utf-8")
|
||||
s = ''
|
||||
s << content_tag('option', "#{l(:label_assiged_tip)}", :value => 0)
|
||||
if collection.include?(User.current)
|
||||
s << content_tag('option', "<< #{l(:label_me)} >>", :value => User.current.id)
|
||||
end
|
||||
groups = ''
|
||||
collection.sort.each do |element|
|
||||
collection.sort{|x, y| conv.iconv(x.lastname) <=> conv.iconv(y.lastname)}.each do |element|
|
||||
selected_attribute = ' selected="selected"' if option_value_selected?(element, selected)
|
||||
(element.is_a?(Group) ? groups : s) << %(<option value="#{element.id}"#{selected_attribute}>#{h element.show_name}</option>)
|
||||
end
|
||||
|
@ -1286,10 +1361,30 @@ module ApplicationHelper
|
|||
title << @project.name
|
||||
elsif @course
|
||||
title << @course.name
|
||||
elsif @contest
|
||||
title << @contest.name
|
||||
elsif @organization
|
||||
title << @organization.name
|
||||
elsif @forum || params[:controller] == "forums"
|
||||
title << "问吧"
|
||||
elsif @user
|
||||
title << @user.try(:realname)
|
||||
if !@project_community.blank? || !@user_projectlist.blank?
|
||||
title << "项目"
|
||||
elsif !@course_community.blank? || !@user_courselist.blank?
|
||||
title << "课程"
|
||||
elsif !@contest_community.blank?
|
||||
title << @contest_community
|
||||
elsif !@manage_issues.blank?
|
||||
title << @manage_issues
|
||||
elsif !@receive_issues.blank?
|
||||
title << @receive_issues
|
||||
elsif !@manage_homeworks.blank?
|
||||
title << @manage_homeworks
|
||||
elsif !@receive_homeworks.blank?
|
||||
title << @receive_homeworks
|
||||
else
|
||||
title << @user.try(:realname)
|
||||
end
|
||||
elsif @syllabus
|
||||
title << @syllabus.title
|
||||
else
|
||||
|
@ -1903,7 +1998,7 @@ module ApplicationHelper
|
|||
objects = objects.map {|o| o.is_a?(String) ? instance_variable_get("@#{o}") : o}.compact
|
||||
errors = objects.map {|o| o.errors.full_messages}.flatten
|
||||
if errors.any?
|
||||
html << "<div id='errorExplanation'><ul>\n"
|
||||
html << "<div id='errorExplanation'><ul class='pt10'>\n"
|
||||
errors.each do |error|
|
||||
###by xianbo
|
||||
if(error!=l(:label_repository_path_not_null))
|
||||
|
@ -2405,6 +2500,12 @@ module ApplicationHelper
|
|||
candown = true
|
||||
elsif attachment.container.class.to_s=="StudentWork"
|
||||
candown = true
|
||||
elsif attachment.container.class.to_s=="Contest"
|
||||
candown = true
|
||||
elsif attachment.container.class.to_s=="Work"
|
||||
candown = true
|
||||
elsif attachment.container.class.to_s=="ContestantWork"
|
||||
candown = true
|
||||
elsif attachment.container.class.to_s=="BlogComment" #博客资源允许下载
|
||||
candown = true
|
||||
elsif attachment.container.class.to_s=="Memo" #论坛资源允许下载
|
||||
|
@ -2829,8 +2930,7 @@ module ApplicationHelper
|
|||
|
||||
# 用户竞赛总数
|
||||
def user_contest_count
|
||||
count = @user.contests.where(:is_delete => false).count
|
||||
return count
|
||||
@user.favorite_contests.visible.where("is_delete =?", 0).count
|
||||
end
|
||||
|
||||
# 用户项目总数
|
||||
|
@ -2853,16 +2953,28 @@ module ApplicationHelper
|
|||
@user_course_total = @my_joined_course_count + @my_course_count
|
||||
end
|
||||
|
||||
# 用户发布的作业数
|
||||
def user_manage_homework_count
|
||||
tea_courses = @user.courses.visible.not_deleted.select{|course| @user.has_teacher_role(course)}
|
||||
tea_course_ids = tea_courses.map{|course| course.id}
|
||||
@manage_homeworks = HomeworkCommon.where(:course_id => tea_course_ids).count
|
||||
end
|
||||
|
||||
# 用户收到的作业数
|
||||
def user_receive_homework_count
|
||||
stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)}
|
||||
stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")"
|
||||
@homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").count
|
||||
end
|
||||
|
||||
# 用户发布的issue数
|
||||
def issues_author_is_self_count
|
||||
@issues = Issue.where( :author_id => @user.id )
|
||||
@issues_author_is_self_count = @issues.count
|
||||
Issue.where(:author_id => @user.id).count
|
||||
end
|
||||
|
||||
# 用户收到的issue数
|
||||
def issues_assigned_is_self_count
|
||||
@issues = Issue.where( :assigned_to_id => @user.id )
|
||||
@issues_assigned_is_self_count = @issues.count
|
||||
Issue.where( :assigned_to_id => @user.id ).count
|
||||
end
|
||||
|
||||
def get_user_roll user
|
||||
|
@ -3032,36 +3144,30 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
#根据传入作业确定显示为编辑作品还是新建作品,或者显示作品数量
|
||||
def user_for_contest_work homework,is_teacher,work
|
||||
count = homework.contestant_works.count
|
||||
def user_for_contest_work homework,is_contestant,work
|
||||
count = homework.contestant_works.has_committed.count
|
||||
if User.current.member_of_contest?(homework.contest)
|
||||
if is_teacher #老师显示作品数量
|
||||
link_to "作品(#{count})", contestant_work_index_url_in_org(homework.id, 2), :class => "c_blue"
|
||||
if !is_contestant #老师显示作品数量
|
||||
link_to "作品(#{count})", contestant_works_path(:work =>homework.id, :tab => 2), :class => "c_blue"
|
||||
else #学生显示提交作品、修改作品等按钮
|
||||
work = cur_user_works_for_work homework
|
||||
project = cur_user_projects_for_work homework
|
||||
if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
|
||||
if work.nil? && homework.work_status == 1
|
||||
if homework.work_type ==3 && project.nil? && homework.work_detail_group.base_on_project
|
||||
link_to "提交作品(#{count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再提交作品'
|
||||
else
|
||||
link_to "提交作品(#{count})", new_contestant_works_index_path(:work => homework.id),:class => 'c_blue'
|
||||
link_to "提交作品(#{count})", new_contestant_work_path(:work => homework.id),:class => 'c_blue'
|
||||
end
|
||||
elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d")
|
||||
if homework.work_type ==3 && project.nil? && homework.work_detail_group.base_on_project
|
||||
link_to "补交作品(#{count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再补交作品'
|
||||
else
|
||||
if homework.work_status == 1 && work.user_id == User.current.id
|
||||
link_to "修改作品(#{count})", edit_contestant_work_path(work.id),:class => 'c_blue'
|
||||
else
|
||||
link_to "补交作品(#{count})", new_contestant_works_index_path(:work => homework.id),:class => 'c_red'
|
||||
link_to "查看作品(#{count})", contestant_works_path(:work =>homework.id, :tab => 2), :class => 'c_blue', :title => "不可修改作品"
|
||||
end
|
||||
else
|
||||
if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id
|
||||
link_to "修改作品(#{count})", edit_contestant_works_path(work.id),:class => 'c_blue'
|
||||
else
|
||||
link_to "查看作品(#{count})", contestant_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "作业截止后不可修改作品"
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
link_to "作品(#{count})",contestant_work_index_url_in_org(homework.id, 2),:class => "c_blue"
|
||||
link_to "作品(#{count})",contestant_works_path(:work =>homework.id, :tab => 2),:class => "c_blue"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -3074,13 +3180,13 @@ module ApplicationHelper
|
|||
project = cur_user_projects_for_homework homework
|
||||
if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
|
||||
if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1
|
||||
link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank'
|
||||
link_to "关联项目", student_work_index_url_in_org(homework.id, 1), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank'
|
||||
else
|
||||
link_to "提交作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green fr mt5', :target => '_blank'
|
||||
end
|
||||
elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d")
|
||||
if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1
|
||||
link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank'
|
||||
link_to "关联项目", student_work_index_url_in_org(homework.id, 1), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank'
|
||||
else
|
||||
link_to "补交作品", new_student_work_url_without_domain(homework.id),:class => 'btn_orange_big fr mt5', :target => '_blank'
|
||||
end
|
||||
|
@ -3150,10 +3256,10 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
#获取当前用户在指定题目下提交的作业的集合
|
||||
def cur_user_works_for_work work
|
||||
work = work.contestant_works.where("user_id = ? && work_status != 0",User.current).first
|
||||
if work.work_type == 3
|
||||
pro = work.contestant_work_projects.where("user_id = #{User.current.id}").first
|
||||
def cur_user_works_for_work homework
|
||||
work = homework.contestant_works.where("user_id = ? && work_status != 0",User.current).first
|
||||
if homework.work_type == 3
|
||||
pro = homework.contestant_work_projects.where("user_id = #{User.current.id}").first
|
||||
if pro.nil? || pro.contestant_work_id == "" || pro.contestant_work_id.nil?
|
||||
work = nil
|
||||
else
|
||||
|
@ -3553,7 +3659,7 @@ end
|
|||
def get_reply_by_type type, reply_id
|
||||
reply = nil
|
||||
case type
|
||||
when 'HomeworkCommon'
|
||||
when 'HomeworkCommon', 'Work'
|
||||
reply = JournalsForMessage.find reply_id
|
||||
when 'JournalsForMessage'
|
||||
reply = JournalsForMessage.find reply_id
|
||||
|
@ -3889,6 +3995,29 @@ def get_hw_status homework_common
|
|||
str
|
||||
end
|
||||
|
||||
def get_cw_status contest_work
|
||||
str = ""
|
||||
if contest_work.work_status == 0 && contest_work.publish_time.nil?
|
||||
str += '<span class="grey_homework_btn_cir ml5">挂起</span>'
|
||||
elsif contest_work.work_status == 0
|
||||
str += '<span class="grey_homework_btn_cir ml5">未发布</span>'
|
||||
elsif contest_work.work_status == 1
|
||||
if Time.parse(contest_work.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
|
||||
str += '<span class="green_homework_btn_cir ml5">作品提交中</span>'
|
||||
else
|
||||
str += '<span class="red_homework_btn_cir ml5">作品补交中</span>'
|
||||
end
|
||||
elsif contest_work.work_status == 2
|
||||
str += '<span class="red_homework_btn_cir ml5">提交已截止</span>'
|
||||
elsif contest_work.work_status == 3
|
||||
str += '<span class="green_homework_btn_cir ml5">在线评审中</span>'
|
||||
elsif contest_work.work_status == 4
|
||||
str += '<span class="red_homework_btn_cir ml5">评审已截止</span>'
|
||||
end
|
||||
str
|
||||
end
|
||||
|
||||
|
||||
def get_group_member_names work
|
||||
result = ""
|
||||
unless work.nil?
|
||||
|
@ -3906,6 +4035,23 @@ def get_group_member_names work
|
|||
result
|
||||
end
|
||||
|
||||
def get_contest_group_member_names work
|
||||
result = ""
|
||||
unless work.nil?
|
||||
work.contestant_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
|
||||
|
||||
def course_syllabus_option user = User.current
|
||||
syllabus_members = SyllabusMember.where("user_id = #{user.id}")
|
||||
syllabus_ids = syllabus_members.empty? ? "(-1)" : "(" + syllabus_members.map{|mem| mem.syllabus_id}.join(',') + ")"
|
||||
|
@ -3973,6 +4119,58 @@ def homework_type_option
|
|||
type
|
||||
end
|
||||
|
||||
# 竞赛题目类型
|
||||
def work_type_option
|
||||
type = []
|
||||
option0 = []
|
||||
option0 << "请选择竞赛类型"
|
||||
option0 << 0
|
||||
option1 = []
|
||||
option1 << "普通竞赛"
|
||||
option1 << 1
|
||||
# option2 = []
|
||||
# option2 << "编程作业"
|
||||
# option2 << 2
|
||||
option3 = []
|
||||
option3 << "团队竞赛"
|
||||
option3 << 3
|
||||
type << option0
|
||||
type << option1
|
||||
#type << option2
|
||||
type << option3
|
||||
type
|
||||
end
|
||||
|
||||
# 当前用户可见的某竞赛下的作品数
|
||||
def visable_contest_work contest
|
||||
if User.current.admin? || User.current.admin_of_contest?(contest)
|
||||
work_num = contest.works.count
|
||||
else
|
||||
work_num = contest.works.where("publish_time <= '#{Date.today}'").count
|
||||
end
|
||||
work_num
|
||||
end
|
||||
|
||||
def searchstudent_by_name users, name
|
||||
mems = []
|
||||
if name != ""
|
||||
name = name.to_s.downcase
|
||||
users.each do |m|
|
||||
username = m.lastname.to_s.downcase + m.firstname.to_s.downcase
|
||||
if(m.login.to_s.downcase.include?(name) || m.user_extensions[:student_id].to_s.downcase.include?(name) || username.include?(name))
|
||||
mems << m
|
||||
end
|
||||
end
|
||||
else
|
||||
mems = users
|
||||
end
|
||||
mems
|
||||
end
|
||||
|
||||
def contest_feedback_count
|
||||
@contest.journals_for_messages.where('m_parent_id IS NULL').count
|
||||
end
|
||||
|
||||
def add_reply_adapter obj, options
|
||||
#modify by nwb
|
||||
#添加对课程留言的支持
|
||||
|
@ -3984,6 +4182,8 @@ def add_reply_adapter obj, options
|
|||
Project.add_new_jour(nil, nil, obj.jour_id, options)
|
||||
when 'Course'
|
||||
Course.add_new_jour(nil, nil, obj.jour_id, options)
|
||||
when 'Contest'
|
||||
Contest.add_new_jour(nil, nil, obj.jour_id, options)
|
||||
#when 'Bid'
|
||||
# obj.jour.add_jour(nil, nil, nil, options)
|
||||
#when 'Contest'
|
||||
|
|
|
@ -1,2 +1,17 @@
|
|||
#encoding=utf-8
|
||||
module ContestMembersHelper
|
||||
|
||||
def find_user_not_in_current_contest_by_name contest
|
||||
if params[:q] && params[:q].lstrip.rstrip != ""
|
||||
scope = Principal.active.sorted.not_member_of_contest(contest).like(params[:q])
|
||||
else
|
||||
scope = []
|
||||
end
|
||||
principals = paginateHelper scope,10
|
||||
s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals', :class => 'sy_new_tchlist')
|
||||
links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options|
|
||||
link_to text, host_with_protocol + "/contest_members/contest_member_autocomplete?" + parameters.merge(:q => params[:q],:flag => true,:contest=> contest, :format => 'js').to_query, :remote => true
|
||||
}
|
||||
s + content_tag('ul', links,:class => 'wlist',:style=>'float:left !important', :id => "contest_member_pagination_links" )
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,2 +1,54 @@
|
|||
#encoding: utf-8
|
||||
module ContestantWorksHelper
|
||||
|
||||
def get_status status
|
||||
str = ""
|
||||
case status
|
||||
when 0
|
||||
str = "未提交"
|
||||
when 1
|
||||
str = "已提交"
|
||||
when 2
|
||||
str = "迟交"
|
||||
end
|
||||
str
|
||||
end
|
||||
|
||||
#成绩计算
|
||||
def set_final_score contestwork, contestant_work
|
||||
if contestwork.online_evaluation
|
||||
if contestwork.score_valid
|
||||
contestant_work.work_score = contestant_work.judge_score
|
||||
else
|
||||
if ContestantWorkScore.find_by_sql("SELECT * FROM (SELECT * FROM contestant_work_scores WHERE contestant_work_id = #{contestant_work.id} AND reviewer_role = 2 ORDER BY created_at DESC) AS t GROUP BY user_id").count <= 2
|
||||
contestant_work.work_score = contestant_work.judge_score
|
||||
else
|
||||
judge_score = ContestantWorkScore.find_by_sql("SELECT (SUM(score)-MIN(score)-MAX(score))/(COUNT(score)-2) AS score FROM (SELECT * FROM (SELECT * FROM contestant_work_scores WHERE contestant_work_id = #{contestant_work.id} AND reviewer_role = 2 ORDER BY created_at DESC) AS t GROUP BY user_id) AS a")
|
||||
contestant_work.work_score = judge_score.first.score.try(:round, 2).to_f
|
||||
end
|
||||
end
|
||||
else
|
||||
contestant_work.work_score = nil
|
||||
end
|
||||
end
|
||||
|
||||
#获取学生作品的评分记录:同一个评委只显示最后一次评分
|
||||
def contestant_work_score_record work
|
||||
sql = "SELECT MAX(id) id FROM contestant_work_scores WHERE reviewer_role = 2 AND score IS NOT NULL AND contestant_work_id = #{work.id} GROUP BY user_id"
|
||||
tea_ts_ids = ContestantWorkScore.find_by_sql sql
|
||||
scores = work.contestant_work_scores.where(:id => tea_ts_ids.map{|tea| tea.id}).order("updated_at desc")
|
||||
return scores
|
||||
end
|
||||
|
||||
#获取指定评分的角色
|
||||
def student_work_score_role score
|
||||
case score.reviewer_role
|
||||
when 1
|
||||
role = "管理员"
|
||||
when 2
|
||||
role = "评委"
|
||||
when 3
|
||||
role = "参赛者"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,25 @@
|
|||
module ContestsHelper
|
||||
|
||||
# 获取动态列表名称
|
||||
def get_acts_list_type type
|
||||
case type
|
||||
when "work"
|
||||
l(:label_work_acts)
|
||||
when "news"
|
||||
l(:label_news_acts)
|
||||
when "attachment"
|
||||
l(:label_attachment_acts)
|
||||
when "message"
|
||||
l(:label_message_acts)
|
||||
when "journalsForMessage"
|
||||
l(:label_journalsForMessage_acts)
|
||||
when "poll"
|
||||
l(:label_poll_acts)
|
||||
else
|
||||
l(:label_contest_cats)
|
||||
end
|
||||
end
|
||||
|
||||
# 判断当前用户是否为竞赛管理员
|
||||
def is_contest_manager?(user_id, contest_id)
|
||||
@result = false
|
||||
|
@ -24,4 +44,53 @@ module ContestsHelper
|
|||
def contest_contestants contest
|
||||
contest.contest_members.select{|cm| cm.roles.to_s.include?("Contestant")}
|
||||
end
|
||||
|
||||
def searchmember_by_name members, name
|
||||
#searchPeopleByRoles(project, StudentRoles)
|
||||
mems = []
|
||||
if name != ""
|
||||
name = name.to_s.downcase
|
||||
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
|
||||
end
|
||||
|
||||
def zh_contest_role role
|
||||
if role == "ContestManager"
|
||||
result = l(:label_CM)
|
||||
elsif role == "Judge"
|
||||
result = l(:label_judge)
|
||||
elsif role == "Contestant"
|
||||
result = l(:label_contestant)
|
||||
elsif role == "Manager"
|
||||
result = l(:field_admin)
|
||||
elsif role.include?("ContestManager") && role.include?("Judge")
|
||||
result = l(:label_CM) + " " + l(:label_judge)
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
def search_member_by_name_login_school members, name
|
||||
mems = []
|
||||
if name != ""
|
||||
name = name.to_s.downcase
|
||||
school_ids = School.where("name like '%#{name}%'").map{|school| school.id}
|
||||
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) || school_ids.include?(m.user.user_extensions[:school_id]) || username.include?(name))
|
||||
mems << m
|
||||
end
|
||||
end
|
||||
else
|
||||
mems = members
|
||||
end
|
||||
mems
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
module CooperationHelper
|
||||
end
|
|
@ -130,7 +130,7 @@ module IssuesHelper
|
|||
end
|
||||
|
||||
def options_for_version_isuue_list(project)
|
||||
versions = Version.where(:project_id => project, :status => "open").map{|version| [version.name, version.id]}.unshift(["里程碑", 0])
|
||||
versions = Version.where(:project_id => project, :status => "open").order("created_on desc").map{|version| [version.name, version.id]}.unshift(["里程碑", 0])
|
||||
end
|
||||
|
||||
def render_issue_subject_with_tree(issue)
|
||||
|
@ -416,11 +416,13 @@ module IssuesHelper
|
|||
if detail.property == 'attr' && detail.prop_key == 'description'
|
||||
s = l(:text_journal_changed_no_detail, :label => label)
|
||||
unless no_html
|
||||
diff_link = link_to l(:label_diff),
|
||||
{:controller => 'journals', :action => 'diff', :id => detail.journal_id,
|
||||
:detail_id => detail.id, :only_path => options[:only_path]},
|
||||
:title => l(:label_view_diff)
|
||||
s << " (#{ diff_link })"
|
||||
if detail.try(:prop_key) == "description"
|
||||
diff_link = link_to l(:label_diff),
|
||||
{:controller => 'journals', :action => 'diff', :id => detail.journal_id,
|
||||
:detail_id => detail.id, :only_path => options[:only_path]},
|
||||
:title => l(:label_view_diff)
|
||||
s << " (#{ diff_link })"
|
||||
end
|
||||
end
|
||||
s.html_safe
|
||||
elsif detail.value.present?
|
||||
|
|
|
@ -11,4 +11,5 @@ module OwnerTypeHelper
|
|||
SYLLABUS = 10
|
||||
ArticleHomepage = 11
|
||||
PROJECT = 12
|
||||
CONTEST = 13
|
||||
end
|
|
@ -64,6 +64,11 @@ module PollHelper
|
|||
total = PollVote.find_by_sql("SELECT distinct(user_id) FROM `poll_votes` where poll_question_id = #{id}").count
|
||||
end
|
||||
|
||||
# 获取其它选项的答案
|
||||
def other_answers poll_question
|
||||
poll_question.poll_votes.select{|pv| !pv.try(:vote_text).blank?}
|
||||
end
|
||||
|
||||
#页面体型显示
|
||||
def options_show pq
|
||||
case pq
|
||||
|
|
|
@ -69,12 +69,13 @@ module StudentWorkHelper
|
|||
str
|
||||
end
|
||||
|
||||
#获取学生作品的评分记录:同一个教师或教辅只显示最后一次评分
|
||||
#获取学生作品的评分记录:同一个教师或教辅只显示未隐藏的评分
|
||||
def student_work_score_record work
|
||||
sql = "SELECT MAX(id) id FROM student_works_scores WHERE (reviewer_role = 2 OR reviewer_role = 1) AND score IS NOT NULL AND student_work_id = #{work.id} GROUP BY user_id"
|
||||
tea_ts_ids = StudentWorksScore.find_by_sql sql
|
||||
tea_ts_ids = tea_ts_ids.empty? ? "(-1)" : "(" + tea_ts_ids.map{|tea| tea.id}.join(",") + ")"
|
||||
scores = work.student_works_scores.where("score IS NULL or reviewer_role = 3 or id in #{tea_ts_ids}").order("updated_at desc")
|
||||
# sql = "SELECT MAX(id) id FROM student_works_scores WHERE (reviewer_role = 2 OR reviewer_role = 1) AND score IS NOT NULL AND is_hidden = 0 AND student_work_id = #{work.id} GROUP BY user_id"
|
||||
# tea_ts_ids = StudentWorksScore.find_by_sql sql
|
||||
# tea_ts_ids = tea_ts_ids.empty? ? "(-1)" : "(" + tea_ts_ids.map{|tea| tea.id}.join(",") + ")"
|
||||
# scores = work.student_works_scores.where("score IS NULL or reviewer_role = 3 or id in #{tea_ts_ids}").order("updated_at desc")
|
||||
scores = work.student_works_scores.where(:is_hidden => false).order("created_at desc")
|
||||
return scores
|
||||
end
|
||||
|
||||
|
|
|
@ -63,6 +63,14 @@ module UsersHelper
|
|||
|
||||
end
|
||||
|
||||
# 作业待匿评的次数
|
||||
def work_anonymous_num homework
|
||||
# student_work_ids = StudentWork.where(:homework_common_id => homework.id)
|
||||
# total_eva_count = StudentWorksEvaluationDistribution.where(:student_work_id => student_work_ids).count
|
||||
# already_eva_count = StudentWorksScore.where("SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id in #{student_work_ids} AND reviewer_role = 3 ) AS t GROUP BY user_id")
|
||||
# unfinished_eva_count = total_eva_count - already_eva_count
|
||||
end
|
||||
|
||||
def get_resource_type type
|
||||
case type
|
||||
when 'Course'
|
||||
|
@ -100,6 +108,14 @@ module UsersHelper
|
|||
end
|
||||
end
|
||||
|
||||
# 当前用户在某个作业中的待匿评数
|
||||
def homework_evaluation_num homework
|
||||
student_works = homework.student_works.has_committed
|
||||
count = User.current.student_works_evaluation_distributions.where(:student_work_id => student_works.map(&:id)).count -
|
||||
User.current.student_works_scores.where(:reviewer_role => 3, :student_work_id => student_works.map(&:id)).group_by(&:student_work_id).count
|
||||
count
|
||||
end
|
||||
|
||||
# 获取消息角色
|
||||
def applied_project_message_type role
|
||||
case role
|
||||
|
@ -126,17 +142,13 @@ module UsersHelper
|
|||
end
|
||||
|
||||
end
|
||||
# 判断当前用户能否对消息进行操作
|
||||
def allow_to_show applied_message
|
||||
(User.current.id == applied_message.user_id && applied_message.status == 1) ? true : false
|
||||
end
|
||||
|
||||
# 项目申请消息通过状态判断用户
|
||||
# status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:拒绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息)
|
||||
def applied_project_users applied_message
|
||||
# case applied_message.status
|
||||
# when 3,2,1,5,4,7,6
|
||||
user = User.find(applied_message.applied_user_id).show_name
|
||||
user = User.find(applied_message.applied_user_id)
|
||||
# end
|
||||
end
|
||||
|
||||
|
@ -145,11 +157,11 @@ module UsersHelper
|
|||
when 4
|
||||
"被拒绝"
|
||||
when 5
|
||||
"您已拒绝"
|
||||
"已拒绝"
|
||||
when 6
|
||||
"已通过"
|
||||
when 7
|
||||
"您已同意"
|
||||
"已同意"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -299,7 +311,10 @@ module UsersHelper
|
|||
user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0).count
|
||||
user_memo_count = MemoMessage.where("user_id =? and viewed =?", user, 0).count
|
||||
at_count = user.at_messages.where(viewed: false).count
|
||||
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + at_count + org_count
|
||||
contest_count = ContestMessage.where(:user_id => user, :viewed => 0).count
|
||||
applied_count = AppliedMessage.where("user_id=? and viewed =?", user, 0).count
|
||||
blog_count = BlogMessage.where(:user_id => user, :viewed => 0).count
|
||||
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + at_count + org_count + contest_count + blog_count + applied_count
|
||||
end
|
||||
|
||||
def user_mail_notification_options(user)
|
||||
|
@ -861,4 +876,20 @@ module UsersHelper
|
|||
end
|
||||
return user_ids
|
||||
end
|
||||
|
||||
# 获取竞赛申请者的角色
|
||||
def get_role_str role
|
||||
str = ""
|
||||
case role
|
||||
when 1
|
||||
str = "管理员"
|
||||
when 2
|
||||
str = "评委"
|
||||
when 3
|
||||
str = "参赛者"
|
||||
when 4
|
||||
str = "管理员、评委"
|
||||
end
|
||||
str
|
||||
end
|
||||
end
|
||||
|
|
|
@ -355,7 +355,7 @@ module WatchersHelper
|
|||
text = collected == 1 ? l(:label_project_collect_cancel) : l(:label_project_collect)
|
||||
url = store_mine_project_path(project_id)
|
||||
method = 'post'
|
||||
link = link_to(text, url, :remote => true, :method => method, :id => "#{project_id}", :class => "pro_new_topbtn_left fl", :title => "#{collected == 1 ? '点击将其从个人主页的项目列表中移除' : '点击将其添加至人主页的项目列表中'}")
|
||||
link = link_to(text, url, :remote => true, :method => method, :id => "#{project_id}", :class => "pro_new_topbtn_left fl", :title => "#{collected == 1 ? '点击将其从左侧导航的项目列表中移除' : '点击将其添加至左侧导航的项目列表中'}")
|
||||
# link.html_safe
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class AppliedContest < ActiveRecord::Base
|
||||
include ContestsHelper
|
||||
belongs_to :contest
|
||||
belongs_to :user
|
||||
#status :0 新建 1 已批准 2 拒绝
|
||||
|
@ -7,10 +8,18 @@ class AppliedContest < ActiveRecord::Base
|
|||
has_many :applied_messages, :class_name => 'AppliedMessage', :as => :applied, :dependent => :destroy
|
||||
after_create :send_appliled_message
|
||||
|
||||
# 仅仅给项目管理人员发送消息
|
||||
# 仅仅给竞赛管理人员发送消息
|
||||
def send_appliled_message
|
||||
self.contest.managers.each do |member|
|
||||
self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => 0, :viewed => false, :applied_user_id => self.user_id, :role => self.role)
|
||||
case self.role
|
||||
when '13'
|
||||
role = 1
|
||||
when '14'
|
||||
role = 2
|
||||
when '15'
|
||||
role = 3
|
||||
end
|
||||
contest_managers(self.contest).each do |member|
|
||||
self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => 0, :viewed => false, :role => role)
|
||||
end
|
||||
# end
|
||||
end
|
||||
|
|
|
@ -11,7 +11,7 @@ class AppliedProject < ActiveRecord::Base
|
|||
# 仅仅给项目管理人员发送消息
|
||||
def send_appliled_message
|
||||
self.project.managers.each do |member|
|
||||
self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false, :applied_user_id => self.user_id, :role => self.role, :project_id => self.project_id)
|
||||
self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => false, :viewed => false, :applied_user_id => self.user_id, :role => self.role, :project_id => self.project_id)
|
||||
|
||||
#----------------微信通知----------------------
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{member.user_id} and shield_type='Project' and shield_id=#{self.project_id}").count
|
||||
|
|
|
@ -6,6 +6,7 @@ class BlogComment < ActiveRecord::Base
|
|||
include Redmine::SafeAttributes
|
||||
belongs_to :blog
|
||||
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
||||
has_many :blog_messages, :class_name => 'BlogMessage', :as => :blog_message, :dependent => :destroy
|
||||
|
||||
acts_as_tree :counter_cache => :comments_count, :order => "#{BlogComment.table_name}.sticky desc ,#{BlogComment.table_name}.created_on ASC"
|
||||
acts_as_attachable
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
class BlogMessage < ActiveRecord::Base
|
||||
# attr_accessible :title, :body
|
||||
attr_accessible :content, :blog_message_id, :blog_message_type, :viewed, :user_id, :blog_id, :user_operator_id
|
||||
|
||||
belongs_to :blog_comment ,:polymorphic => true
|
||||
belongs_to :user
|
||||
has_many :message_alls, :class_name => 'MessageAll', :as => :message, :dependent => :destroy
|
||||
|
||||
validates :user_id, presence: true
|
||||
validates :blog_id, presence: true
|
||||
validates :blog_message_id, presence: true
|
||||
validates :blog_message_type, presence: true
|
||||
after_create :add_user_message
|
||||
|
||||
def add_user_message
|
||||
if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil?
|
||||
self.message_alls << MessageAll.new(:user_id => self.user_id)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -20,6 +20,7 @@ class Board < ActiveRecord::Base
|
|||
belongs_to :project,:touch => true
|
||||
belongs_to :course,:touch=>true
|
||||
belongs_to :org_subfield, :touch => true
|
||||
belongs_to :contest, :touch => true
|
||||
has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC"
|
||||
has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC"
|
||||
belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id
|
||||
|
@ -55,6 +56,8 @@ class Board < ActiveRecord::Base
|
|||
@valid_parents ||= project.boards - self_and_descendants
|
||||
elsif course
|
||||
@valid_parents ||= course.boards - self_and_descendants
|
||||
elsif contest
|
||||
@valid_parents ||= contest.boards - self_and_descendants
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ class Comment < ActiveRecord::Base
|
|||
# 课程/项目 消息
|
||||
has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy
|
||||
has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy
|
||||
has_many :contest_messages, :class_name => 'ContestMessage', :as => :contest_message, :dependent => :destroy
|
||||
#end
|
||||
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
||||
has_one :praise_tread_cache, as: :object, dependent: :destroy
|
||||
|
@ -54,19 +55,30 @@ class Comment < ActiveRecord::Base
|
|||
# ws.comment_template self.commented.author_id, "course_notice", self.id, "#{l(:label_notice_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
elsif self.commented.contest
|
||||
if self.parent.nil?
|
||||
if self.author_id != self.commented.author_id
|
||||
self.contest_messages << ContestMessage.new(:user_id => self.commented.author_id, :contest_id => self.commented.contest.id, :viewed => false)
|
||||
end
|
||||
else
|
||||
if self.author_id != self.parent.author_id
|
||||
self.contest_messages << ContestMessage.new(:user_id => self.parent.author_id, :contest_id => self.commented.contest.id, :viewed => false)
|
||||
end
|
||||
end
|
||||
else # 项目相关
|
||||
# if self.author_id != self.commented.author_id
|
||||
# self.forge_messages << ForgeMessage.new(:user_id => self.commented.author_id, :project_id => self.commented.project.id, :viewed => false)
|
||||
# #content = strip_html self.comments.html_safe, 200
|
||||
# #ws.comment_template self.commented.author_id, "blog_comment", self.id, "#{l(:label_news_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
def send_mail
|
||||
if self.commented.is_a?(News) && Setting.notified_events.include?('news_comment_added')
|
||||
Mailer.run.news_comment_added(self)
|
||||
end
|
||||
# if self.commented.is_a?(News) && Setting.notified_events.include?('news_comment_added')
|
||||
# Mailer.run.news_comment_added(self)
|
||||
# end
|
||||
end
|
||||
after_destroy :delete_kindeditor_assets
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
class Contest < ActiveRecord::Base
|
||||
attr_accessible :description, :invite_code, :invite_code_halt, :is_delete, :is_public, :name, :user_id, :visits
|
||||
|
||||
include ContestsHelper
|
||||
|
||||
belongs_to :user
|
||||
has_many :contest_members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}"
|
||||
has_many :memberships, :class_name => 'ContestMember'
|
||||
|
@ -10,18 +12,30 @@ class Contest < ActiveRecord::Base
|
|||
has_many :principals, :through => :member_principals, :source => :principal
|
||||
has_many :users, :through => :members
|
||||
has_many :contestants, :class_name => 'ContestantForContest', :source => :user
|
||||
has_many :works
|
||||
has_many :contestant_work_projects, :dependent => :destroy
|
||||
has_many :boards, :dependent => :destroy, :order => "position ASC"
|
||||
has_many :files
|
||||
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
|
||||
|
||||
has_many :news, :dependent => :destroy, :include => :author
|
||||
|
||||
has_many :contest_acts, :class_name => 'ContestActivity',:as =>:contest_act ,:dependent => :destroy
|
||||
has_many :contest_activities
|
||||
has_many :contest_messages, :class_name =>'ContestMessage', :as => :contest_message, :dependent => :destroy
|
||||
|
||||
acts_as_attachable
|
||||
validates_format_of :name,:with =>/^[^ ]+[a-zA-Z0-9_\u4e00-\u9fa5\s\S]*$/
|
||||
|
||||
before_destroy :delete_all_members
|
||||
#after_create :act_as_contest_activity
|
||||
after_create :create_board_sync
|
||||
|
||||
scope :visible, lambda {|*args| where(Contest.where("is_delete =?", 0).visible_condition(args.shift || User.current, *args)) }
|
||||
|
||||
def contest_judges
|
||||
self.contest_members.select{|cm| cm.roles.to_s.include?("Judge")}
|
||||
end
|
||||
|
||||
# 删除竞赛所有成员
|
||||
def delete_all_members
|
||||
if self.contest_members && self.contest_members.count > 0
|
||||
|
@ -102,4 +116,31 @@ class Contest < ActiveRecord::Base
|
|||
end
|
||||
code
|
||||
end
|
||||
|
||||
# 创建竞赛讨论区
|
||||
def create_board_sync
|
||||
@board = self.boards.build
|
||||
#self.name=" #{l(:label_borad_course) }"
|
||||
@board.name = " #{l(:label_board_contest) }"#self.name
|
||||
@board.description = self.name.to_s
|
||||
@board.project_id = -1
|
||||
@board.course_id = -1
|
||||
if @board.save
|
||||
logger.debug "[Contest Model] ===> #{@board.to_json}"
|
||||
else
|
||||
logger.error "[Contest Model] ===> Auto create board when contest saved, because #{@board.full_messages}"
|
||||
end
|
||||
end
|
||||
|
||||
# 新增竞赛留言
|
||||
def self.add_new_jour(user, notes, id, options={})
|
||||
contest = Contest.find(id)
|
||||
if options.count == 0
|
||||
pjfm = contest.journals_for_messages.build(:user_id => user.id, :notes => notes, :reply_id => 0)
|
||||
else
|
||||
pjfm = contest.journals_for_messages.build(options)
|
||||
end
|
||||
pjfm.save
|
||||
pjfm
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,6 +12,10 @@ class ContestMember < ActiveRecord::Base
|
|||
validates_uniqueness_of :user_id, :scope => [:contest_id]
|
||||
#validate :validate_role
|
||||
|
||||
def deletable?
|
||||
user != contest.user
|
||||
end
|
||||
|
||||
def role
|
||||
end
|
||||
|
||||
|
@ -22,30 +26,30 @@ class ContestMember < ActiveRecord::Base
|
|||
self.user.name
|
||||
end
|
||||
|
||||
alias :base_role_ids= :role_ids=
|
||||
def role_ids=(arg)
|
||||
ids = (arg || []).collect(&:to_i) - [0]
|
||||
|
||||
new_role_ids = ids - role_ids
|
||||
if (new_role_ids.include?(14) || new_role_ids.include?(13)) && role_ids.include?(15)
|
||||
contest_member_roles.where("role_id = 15").first.update_column('is_current', 0)
|
||||
end
|
||||
# Add new roles
|
||||
if new_role_ids.include?(14) && new_role_ids.include?(13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 14)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
|
||||
elsif new_role_ids.include?(13) && new_role_ids.include?(15)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 13)
|
||||
contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
|
||||
else
|
||||
new_role_ids.each {|id| contest_member_roles << ContestMemberRole.new(:role_id => id) }
|
||||
end
|
||||
# Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
|
||||
member_roles_to_destroy = contest_member_roles.select {|mr| !ids.include?(mr.role_id)}
|
||||
if member_roles_to_destroy.any?
|
||||
member_roles_to_destroy.each(&:destroy)
|
||||
end
|
||||
end
|
||||
# alias :base_role_ids= :role_ids=
|
||||
# def role_ids=(arg)
|
||||
# ids = (arg || []).collect(&:to_i) - [0]
|
||||
#
|
||||
# new_role_ids = ids - role_ids
|
||||
# if (new_role_ids.include?(14) || new_role_ids.include?(13)) && role_ids.include?(15)
|
||||
# contest_member_roles.where("role_id = 15").first.update_column('is_current', 0)
|
||||
# end
|
||||
# # Add new roles
|
||||
# if new_role_ids.include?(14) && new_role_ids.include?(13)
|
||||
# contest_member_roles << ContestMemberRole.new(:role_id => 14)
|
||||
# contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
|
||||
# elsif new_role_ids.include?(13) && new_role_ids.include?(15)
|
||||
# contest_member_roles << ContestMemberRole.new(:role_id => 13)
|
||||
# contest_member_roles << ContestMemberRole.new(:role_id => 15, :is_current => 0)
|
||||
# else
|
||||
# new_role_ids.each {|id| contest_member_roles << ContestMemberRole.new(:role_id => id) }
|
||||
# end
|
||||
# # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
|
||||
# member_roles_to_destroy = contest_member_roles.select {|mr| !ids.include?(mr.role_id)}
|
||||
# if member_roles_to_destroy.any?
|
||||
# member_roles_to_destroy.each(&:destroy)
|
||||
# end
|
||||
# end
|
||||
|
||||
protected
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ class ContestMemberRole < ActiveRecord::Base
|
|||
belongs_to :contest_member
|
||||
belongs_to :role
|
||||
|
||||
after_destroy :remove_member_if_empty
|
||||
#after_destroy :remove_member_if_empty
|
||||
|
||||
validates_presence_of :role
|
||||
#validate :validate_role_member
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
class ContestMessage < ActiveRecord::Base
|
||||
attr_accessible :content, :contest_message_id, :course_message_type, :status, :viewed
|
||||
# Work:status:
|
||||
# nil:发布了作业; 1:截止时间到了提醒!;2:开启在线评审; 3:关闭在线评审; 4:匿评开始失败; 5:在线评审时间快到了
|
||||
|
||||
attr_accessible :content, :contest_message_id, :contest_message_type, :status, :viewed, :user_id, :contest_id
|
||||
|
||||
belongs_to :contest_message ,:polymorphic => true
|
||||
belongs_to :user
|
||||
|
|
|
@ -4,5 +4,5 @@ class ContestantForContest < ActiveRecord::Base
|
|||
|
||||
belongs_to :contestants, :class_name => 'User', :foreign_key => :student_id
|
||||
validates_presence_of :contest_id, :student_id
|
||||
validates_uniqueness_of :student_id, :scope => :course_id
|
||||
validates_uniqueness_of :student_id, :scope => :contest_id
|
||||
end
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
class ContestantWork < ActiveRecord::Base
|
||||
include ContestantWorksHelper
|
||||
belongs_to :work
|
||||
belongs_to :user
|
||||
belongs_to :project
|
||||
attr_accessible :commit_time, :description, :is_delete, :name, :work_score, :work_status
|
||||
attr_accessible :commit_time, :description, :is_delete, :name, :work_score, :work_status, :work_id, :user_id, :project_id
|
||||
|
||||
has_many :contestant_work_projects, :dependent => :destroy
|
||||
has_many :contestant_work_scores, :dependent => :destroy
|
||||
has_many :contest_messages, :class_name =>'ContestMessage', :as => :contest_message, :dependent => :destroy
|
||||
has_many :attachments, :dependent => :destroy
|
||||
has_many :contestant_work_evaluation_distributions
|
||||
|
||||
before_save :set_work_score
|
||||
|
||||
scope :has_committed, lambda{where("work_status != 0 and work_status != 3")}
|
||||
scope :no_copy, lambda{where("work_status != 3")}
|
||||
|
||||
after_create :act_as_message
|
||||
acts_as_attachable
|
||||
|
@ -17,4 +24,10 @@ class ContestantWork < ActiveRecord::Base
|
|||
self.contest_messages << ContestMessage.new(:user_id => self.user_id, :contest_id => self.work.contest_id, :viewed => false, :status => false)
|
||||
end
|
||||
end
|
||||
|
||||
def set_work_score
|
||||
if self.id
|
||||
set_final_score self.work,self
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class ContestantWorkEvaluationDistribution < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
belongs_to :contestant_work
|
||||
attr_accessible :user_id, :contestant_work_id
|
||||
end
|
|
@ -4,5 +4,5 @@ class ContestantWorkProject < ActiveRecord::Base
|
|||
belongs_to :contestant_work
|
||||
belongs_to :project
|
||||
belongs_to :user
|
||||
attr_accessible :is_leader
|
||||
attr_accessible :is_leader, :contest_id, :work_id, :contestant_work_id, :project_id, :user_id
|
||||
end
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
class ContestantWorkScore < ActiveRecord::Base
|
||||
belongs_to :contestant_work
|
||||
belongs_to :user
|
||||
attr_accessible :comment, :reviewer_role, :score
|
||||
attr_accessible :comment, :reviewer_role, :score, :contestant_work_id, :user_id
|
||||
acts_as_attachable
|
||||
|
||||
has_many :journals_for_messages
|
||||
end
|
||||
|
|
|
@ -55,6 +55,7 @@ class Course < ActiveRecord::Base
|
|||
has_many :student_works, :through => :homework_commons, :dependent => :destroy
|
||||
|
||||
has_many :course_groups, :dependent => :destroy
|
||||
has_many :course_homework_statisticss, :dependent => :destroy
|
||||
# 课程动态
|
||||
has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy
|
||||
|
||||
|
@ -99,7 +100,8 @@ class Course < ActiveRecord::Base
|
|||
'is_delete',
|
||||
'syllabus_id',
|
||||
'end_time',
|
||||
'end_term'
|
||||
'end_term',
|
||||
'os_allow'
|
||||
|
||||
acts_as_customizable
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
class CourseHomeworkStatistics < ActiveRecord::Base
|
||||
# attr_accessible :title, :body
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :course
|
||||
end
|
|
@ -24,7 +24,7 @@ class Document < ActiveRecord::Base
|
|||
after_save :be_user_score # user_score
|
||||
after_destroy :down_user_score
|
||||
acts_as_attachable :delete_permission => :delete_documents
|
||||
after_create :send_mail
|
||||
# after_create :send_mail
|
||||
# 被ForgeActivity虚拟关联
|
||||
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||
# end
|
||||
|
@ -89,7 +89,7 @@ class Document < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_mail
|
||||
Mailer.run.document_added(self) if Setting.notified_events.include?('document_added')
|
||||
# Mailer.run.document_added(self) if Setting.notified_events.include?('document_added')
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -31,7 +31,7 @@ class HomeworkCommon < ActiveRecord::Base
|
|||
:description => :description,
|
||||
:author => :author,
|
||||
:url => Proc.new {|o| {:controller => 'student_work', :action => 'index', :homework => o.id}}
|
||||
after_create :act_as_activity, :send_mail,:act_as_course_message
|
||||
after_create :act_as_activity, :act_as_course_message
|
||||
after_update :update_activity
|
||||
after_save :act_as_course_activity
|
||||
after_destroy :delete_kindeditor_assets
|
||||
|
@ -129,9 +129,9 @@ class HomeworkCommon < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_mail
|
||||
if self.homework_detail_manual.comment_status != 0
|
||||
Mailer.run.homework_added(self)
|
||||
end
|
||||
# if self.homework_detail_manual.comment_status != 0
|
||||
# Mailer.run.homework_added(self)
|
||||
# end
|
||||
end
|
||||
|
||||
def is_program_homework?
|
||||
|
|
|
@ -19,10 +19,10 @@ class IssueObserver < ActiveRecord::Observer
|
|||
|
||||
def after_create(issue)
|
||||
# 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
|
||||
recipients = issue.recipients - issue.watcher_recipients + issue.watcher_recipients
|
||||
recipients.each do |rec|
|
||||
Mailer.run.issue_add(issue,rec) if Setting.notified_events.include?('issue_added')
|
||||
end
|
||||
# recipients = issue.recipients - issue.watcher_recipients + issue.watcher_recipients
|
||||
# recipients.each do |rec|
|
||||
# Mailer.run.issue_add(issue,rec) if Setting.notified_events.include?('issue_added')
|
||||
# end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,36 +2,36 @@ class IssueOverdue < ActiveRecord::Base
|
|||
#缺陷到期后发送邮件提示
|
||||
#只监听已经提交的未到期的缺陷,已过期的缺陷默认已经发过邮件通知,不再提醒。
|
||||
def self.mail_issue
|
||||
threads = []
|
||||
issues = Issue.where("done_ratio <> 100 and closed_on is null and due_date is not null")
|
||||
puts issues
|
||||
issues.each do |issue|
|
||||
thread = Thread.new do
|
||||
while true
|
||||
cur_issue = Issue.find issue.id
|
||||
if cur_issue.done_ratio == 100 || cur_issue.closed_on != nil
|
||||
break
|
||||
end
|
||||
if Time.now < Time.parse(cur_issue.due_date.to_s)
|
||||
#休眠一个小时。。。
|
||||
puts cur_issue.id.to_s
|
||||
sleep 5
|
||||
else
|
||||
#发邮件
|
||||
#puts "11" + issue.id.to_s
|
||||
#Mailer.issue_expire(issue).deliver
|
||||
recipients = issue.recipients
|
||||
recipients.each do |rec|
|
||||
|
||||
Mailer.issue_edit(issue,rec).deliver
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
threads << thread
|
||||
end
|
||||
puts threads
|
||||
return threads
|
||||
# threads = []
|
||||
# issues = Issue.where("done_ratio <> 100 and closed_on is null and due_date is not null")
|
||||
# puts issues
|
||||
# issues.each do |issue|
|
||||
# thread = Thread.new do
|
||||
# while true
|
||||
# cur_issue = Issue.find issue.id
|
||||
# if cur_issue.done_ratio == 100 || cur_issue.closed_on != nil
|
||||
# break
|
||||
# end
|
||||
# if Time.now < Time.parse(cur_issue.due_date.to_s)
|
||||
# #休眠一个小时。。。
|
||||
# puts cur_issue.id.to_s
|
||||
# sleep 5
|
||||
# else
|
||||
# #发邮件
|
||||
# #puts "11" + issue.id.to_s
|
||||
# #Mailer.issue_expire(issue).deliver
|
||||
# recipients = issue.recipients
|
||||
# recipients.each do |rec|
|
||||
#
|
||||
# Mailer.issue_edit(issue,rec).deliver
|
||||
# end
|
||||
# break
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# threads << thread
|
||||
# end
|
||||
# puts threads
|
||||
# return threads
|
||||
end
|
||||
end
|
|
@ -17,18 +17,18 @@
|
|||
|
||||
class JournalObserver < ActiveRecord::Observer
|
||||
def after_create(journal)
|
||||
if journal.notify? &&
|
||||
(Setting.notified_events.include?('issue_updated') ||
|
||||
(Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
|
||||
(Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
|
||||
(Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
|
||||
)
|
||||
# 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
|
||||
recipients = journal.recipients - journal.watcher_recipients + journal.watcher_recipients
|
||||
recipients.each do |rec|
|
||||
|
||||
Mailer.run.issue_edit(journal,rec)
|
||||
end
|
||||
end
|
||||
# if journal.notify? &&
|
||||
# (Setting.notified_events.include?('issue_updated') ||
|
||||
# (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
|
||||
# (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
|
||||
# (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
|
||||
# )
|
||||
# # 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
|
||||
# recipients = journal.recipients - journal.watcher_recipients + journal.watcher_recipients
|
||||
# recipients.each do |rec|
|
||||
#
|
||||
# Mailer.run.issue_edit(journal,rec)
|
||||
# end
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -76,10 +76,10 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
has_one :praise_tread_cache, as: :object, dependent: :destroy
|
||||
|
||||
validates :notes, presence: true, if: :is_homework_jour?
|
||||
after_create :act_as_course_activity, :act_as_course_message,
|
||||
after_create :act_as_course_activity, :act_as_course_message, :act_as_contest_activity,
|
||||
act_as_at_message(:notes, :user_id), :act_as_user_feedback_message,
|
||||
:act_as_principal_activity
|
||||
# after_create :reset_counters!
|
||||
:act_as_principal_activity, :act_as_contest_message
|
||||
after_create :act_as_student_score
|
||||
#after_update :update_activity
|
||||
# after_destroy :reset_counters!
|
||||
# after_save :be_user_score
|
||||
|
@ -222,6 +222,13 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
#竞赛动态公共表记录
|
||||
def act_as_contest_activity
|
||||
if self.jour_type == 'Contest' && self.m_parent_id.nil?
|
||||
self.contest_acts << ContestActivity.new(:user_id => self.user_id,:contest_id => self.jour_id)
|
||||
end
|
||||
end
|
||||
|
||||
# 课程/作品回复 留言消息通知
|
||||
def act_as_course_message
|
||||
if self.jour_type == 'StudentWorksScore'
|
||||
|
@ -318,6 +325,23 @@ class JournalsForMessage < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
# 竞赛留言消息通知
|
||||
def act_as_contest_message
|
||||
# 主留言
|
||||
if self.jour_type == 'Contest'
|
||||
if self.m_parent_id.nil?
|
||||
receivers = self.jour.contest_members.select{|cm| cm.roles.to_s.include?("ContestManager") && cm.user_id != self.user_id}
|
||||
receivers.each do |r|
|
||||
self.contest_messages << ContestMessage.new(:user_id => r.user_id, :contest_id => self.jour.id, :viewed => false)
|
||||
end
|
||||
else # 留言回复
|
||||
if self.user_id != self.reply_id # 添加我回复的那个人
|
||||
self.contest_messages << ContestMessage.new(:user_id => self.reply_id, :contest_id => self.jour.id, :viewed => false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# 课程成员得分(活跃度)
|
||||
def act_as_student_score
|
||||
if self.jour_type == "Course"
|
||||
|
|
|
@ -34,13 +34,13 @@ class Mailer < ActionMailer::Base
|
|||
@target = cls
|
||||
end
|
||||
def method_missing(name, *args, &block)
|
||||
if Setting.delayjob_enabled? && Object.const_defined?('Delayed')
|
||||
# with delayed_job
|
||||
@target.delay.send(name, *args, &block)
|
||||
else
|
||||
# if Setting.delayjob_enabled? && Object.const_defined?('Delayed')
|
||||
# # with delayed_job
|
||||
# @target.delay.send(name, *args, &block)
|
||||
# else
|
||||
# without delayed_job
|
||||
@target.send(name, *args, &block).deliver
|
||||
end
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -50,59 +50,59 @@ class Mailer < ActionMailer::Base
|
|||
|
||||
# 作业匿评开启
|
||||
def send_mail_anonymous_comment_open(homework_common)
|
||||
course = homework_common.course
|
||||
recipients ||= []
|
||||
course.members.each do |member|
|
||||
user = User.find(member.user_id)
|
||||
@subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_anonymous_comment_open)}"
|
||||
@token = Token.get_token_from_user(user, 'autologin')
|
||||
@anonymous_comment_close_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
@anonymous_comment_close_name = homework_common.name
|
||||
@author = homework_common.user
|
||||
#收件人邮箱
|
||||
recipients << user.mail
|
||||
end
|
||||
mail :to => recipients,
|
||||
:subject => @subject
|
||||
# course = homework_common.course
|
||||
# recipients ||= []
|
||||
# course.members.each do |member|
|
||||
# user = User.find(member.user_id)
|
||||
# @subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_anonymous_comment_open)}"
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
# @anonymous_comment_close_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
# @anonymous_comment_close_name = homework_common.name
|
||||
# @author = homework_common.user
|
||||
# #收件人邮箱
|
||||
# recipients << user.mail
|
||||
# end
|
||||
# mail :to => recipients,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
# 作业匿评关闭
|
||||
def send_mail_anonymous_comment_close(homework_common)
|
||||
course = homework_common.course
|
||||
recipients ||= []
|
||||
course.members.each do |member|
|
||||
user = User.find(member.user_id)
|
||||
@subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_anonymous_comment_close)}"
|
||||
@token = Token.get_token_from_user(user, 'autologin')
|
||||
@anonymous_comment_close_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
@anonymous_comment_close_name = homework_common.name
|
||||
@author = homework_common.user
|
||||
#收件人邮箱
|
||||
recipients << user.mail
|
||||
end
|
||||
mail :to => recipients,
|
||||
:subject => @subject
|
||||
# course = homework_common.course
|
||||
# recipients ||= []
|
||||
# course.members.each do |member|
|
||||
# user = User.find(member.user_id)
|
||||
# @subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_anonymous_comment_close)}"
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
# @anonymous_comment_close_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
# @anonymous_comment_close_name = homework_common.name
|
||||
# @author = homework_common.user
|
||||
# #收件人邮箱
|
||||
# recipients << user.mail
|
||||
# end
|
||||
# mail :to => recipients,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
# 匿评失败给老师发送邮件通知
|
||||
def send_mail_anonymous_comment_fail(homework_common)
|
||||
course = homework_common.course
|
||||
recipients ||= []
|
||||
# 只给该课程的老师发送邮件提醒
|
||||
course.members.each do |member|
|
||||
if member.user.allowed_to?(:as_teacher,course)
|
||||
user = User.find(member.user_id)
|
||||
@subject = "[#{l(:mail_homework)} #{homework_common.name}] #{l(:mail_anonymous_comment_failed)}"
|
||||
@token = Token.get_token_from_user(user, 'autologin')
|
||||
@anonymous_comment_fail_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
@anonymous_comment_fail_name = homework_common.name
|
||||
@author = homework_common.user
|
||||
#收件人邮箱
|
||||
recipients << user.mail
|
||||
end
|
||||
end
|
||||
mail :to => recipients,
|
||||
:subject => @subject
|
||||
# course = homework_common.course
|
||||
# recipients ||= []
|
||||
# # 只给该课程的老师发送邮件提醒
|
||||
# course.members.each do |member|
|
||||
# if member.user.allowed_to?(:as_teacher,course)
|
||||
# user = User.find(member.user_id)
|
||||
# @subject = "[#{l(:mail_homework)} #{homework_common.name}] #{l(:mail_anonymous_comment_failed)}"
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
# @anonymous_comment_fail_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
# @anonymous_comment_fail_name = homework_common.name
|
||||
# @author = homework_common.user
|
||||
# #收件人邮箱
|
||||
# recipients << user.mail
|
||||
# end
|
||||
# end
|
||||
# mail :to => recipients,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
# author: alan
|
||||
|
@ -146,149 +146,149 @@ class Mailer < ActionMailer::Base
|
|||
end
|
||||
|
||||
# 邀请信息消息 注:forge_message_id 为邀请人ID(特殊情况)
|
||||
def send_message_request_member(user, project)
|
||||
key = newpass(6).to_s
|
||||
ForgeMessage.create(:user_id => user.id, :project_id => project.id, :forge_message_type => "ProjectInvite",:forge_message_id => User.current.id, :viewed => false, :secret_key =>key)
|
||||
end
|
||||
# def send_message_request_member(user, project)
|
||||
# key = newpass(6).to_s
|
||||
# ForgeMessage.create(:user_id => user.id, :project_id => project.id, :forge_message_type => "ProjectInvite",:forge_message_id => User.current.id, :viewed => false, :secret_key =>key)
|
||||
# end
|
||||
|
||||
# author: alan
|
||||
# 根据用户选择发送个人日报或周报
|
||||
# 发送内容: 项目【缺陷,讨论区,新闻】,课程【通知,留言,新闻】, 贴吧, 个人留言
|
||||
def send_for_user_activities(user, date_to, days)
|
||||
date_from = date_to - days.days
|
||||
date_from = "#{date_from} 17:59:59"
|
||||
date_to = "#{date_to} 17:59:59"
|
||||
# 生成token用于直接点击登录
|
||||
@user = user
|
||||
@token = Token.get_token_from_user(user, 'autologin')
|
||||
|
||||
# 查询user参加的项目及课程
|
||||
projects = user.projects
|
||||
courses = user.courses
|
||||
project_ids = projects.map{|project| project.id}.join(",")
|
||||
course_ids = courses.map {|course| course.id}.join(",")
|
||||
|
||||
# 查询user的缺陷,项目中成员都能收到
|
||||
sql = "select DISTINCT * from members m, issues i where i.project_id = m.project_id and m.user_id='#{user.id}'
|
||||
and (i.updated_on between '#{date_from}' and '#{date_to}') order by i.project_id, i.updated_on desc"
|
||||
@issues = Issue.find_by_sql(sql)
|
||||
|
||||
# issue回复
|
||||
@issues_journals = Journal.find_by_sql("select j.* from journals j, members m, projects p, issues i
|
||||
where m.user_id = '#{user.id}' and p.id = m.project_id and i.project_id = p.id and j.journalized_id = i.id
|
||||
and j.journalized_type='Issue' and (j.created_on between '#{date_from}' and '#{date_to}') order by i.project_id, created_on desc")
|
||||
|
||||
# @bids 查询课程作业,包括老师发布的作业,以及user提交作业
|
||||
# @attachments查询课程课件更新
|
||||
@attachments ||= []
|
||||
@bids ||= [] # 老师发布的作业
|
||||
unless courses.first.nil?
|
||||
count = courses.count
|
||||
count = count - 1
|
||||
for i in 0..count do
|
||||
bids = courses[i].homework_commons.where("homework_commons.created_at between '#{date_from}' and '#{date_to}'").order("homework_commons.created_at desc")
|
||||
attachments = courses[i].attachments.where("attachments.created_on between '#{date_from}' and '#{date_to}'")
|
||||
@bids += bids if bids.count > 0
|
||||
@attachments += attachments if attachments.count > 0
|
||||
end
|
||||
# @bids = @bids.sort_by { |obj| obj.created_at }
|
||||
end
|
||||
|
||||
# 项目附件
|
||||
@project_attachments = Attachment.find_by_sql("select DISTINCT a.* from members m, attachments a
|
||||
where a.container_id = m.project_id and m.user_id='#{user.id}' and container_type = 'Project' and (a.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, a.created_on desc")
|
||||
|
||||
# user 提交的作业
|
||||
# @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
|
||||
|
||||
# 查询user所在项目添加wiki
|
||||
@wiki_contents = WikiContent.find_by_sql("select DISTINCT wc.* from wikis w, members m, projects p, wiki_pages wp, wiki_contents wc where
|
||||
m.user_id = '#{user.id}' and m.project_id = p.id and w.project_id = p.id and w.id = wp.wiki_id and wc.page_id = wp.id and w.project_id>0
|
||||
and (wc.updated_on between '#{date_from}' and '#{date_to}') order by m.project_id, updated_on desc")
|
||||
|
||||
# 查询user在课程中发布的讨论帖子
|
||||
course_mesages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
|
||||
b.id = me.board_id and b.course_id = m.course_id
|
||||
and b.course_id is not Null and m.user_id = '#{user.id}'
|
||||
and (me.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
|
||||
# 查询user在项目中发布的讨论帖子
|
||||
project_messages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
|
||||
b.id = me.board_id and b.project_id = m.project_id
|
||||
and b.project_id != '-1' and m.user_id = '#{user.id}' and (me.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
# messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
|
||||
@course_messages ||= []
|
||||
@project_messages ||= []
|
||||
unless course_mesages.first.nil?
|
||||
course_mesages.each do |msg|
|
||||
@course_messages << msg
|
||||
end
|
||||
end
|
||||
unless project_messages.first.nil?
|
||||
project_messages.each do |msg|
|
||||
@project_messages << msg
|
||||
end
|
||||
end
|
||||
# wiki
|
||||
|
||||
# 查询user在课程中发布的通知和回复通知
|
||||
@course_news = (course_ids && !course_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n
|
||||
where n.course_id in (#{course_ids})
|
||||
and (created_on between '#{date_from}' and '#{date_to}') order by n.course_id, created_on desc") : []
|
||||
|
||||
@course_news_comments = Comment.find_by_sql("select cm.* from comments cm, members m, courses c, news n
|
||||
where m.user_id = '#{user.id}' and c.id = m.course_id and n.course_id = c.id and cm.commented_id = n.id
|
||||
and cm.commented_type ='News' and (cm.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
|
||||
# 查询user在项目中添加新闻和回复新闻
|
||||
@project_news = (project_ids && !project_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
|
||||
and (created_on between '#{date_from}' and '#{date_to}') order by n.project_id, created_on desc") : []
|
||||
|
||||
@project_news_comments = Comment.find_by_sql("select c.* from comments c, members m, projects p, news n
|
||||
where m.user_id = '#{user.id}' and p.id = m.project_id and n.project_id = p.id and c.commented_id = n.id
|
||||
and c.commented_type ='News' and (c.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
|
||||
# 查询user在课程及个人中留言
|
||||
@course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, courses c
|
||||
where m.user_id = '#{user.id}' and c.id = m.course_id and jfm.jour_id = c.id
|
||||
and jfm.jour_type='Course' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
|
||||
@user_journal_messages = user.journals_for_messages.where("jour_type='Principal' and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
|
||||
|
||||
# 查询user在项目中留言(用户反馈)
|
||||
@project_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, projects p
|
||||
where m.user_id = '#{user.id}' and p.id = m.project_id and jfm.jour_id = p.id
|
||||
and jfm.jour_type='Project' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
|
||||
# 查询user新建贴吧或发布帖子
|
||||
@forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between '#{date_from}' and '#{date_to}') order by created_at desc")
|
||||
@memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id}))
|
||||
and (m.created_at between '#{date_from}' and '#{date_to}') order by m.created_at desc")
|
||||
|
||||
has_content = [@issues,@issues_journals,@course_messages,@project_messages,@course_news,@course_news_comments,@project_news,@project_news_comments,@project_attachments,
|
||||
@course_journal_messages,@user_journal_messages,@project_journal_messages,@forums,@memos,@attachments,@bids,@wiki_contents].any? {|o| !o.empty?}
|
||||
total_count = @issues.count + @issues_journals.count + @course_messages.count + @project_messages.count + @course_news.count + @course_news_comments.count + @project_news.count + @project_news_comments.count +
|
||||
@project_attachments.count + @course_journal_messages.count + @user_journal_messages.count + @project_journal_messages.count + @forums.count + @memos.count + @attachments.count +
|
||||
@bids.count + @wiki_contents.count
|
||||
subject = "[ #{user.show_name}#{l(:label_day_mail_first)}#{total_count}#{l(:label_day_mail_last)}]"
|
||||
@subject = " #{user.show_name}#{l(:label_day_mail_first)}#{total_count}#{l(:label_day_mail_last)}"
|
||||
mylogger.debug "Sent activity mail : #{user.mail} - #{has_content}"
|
||||
#有内容才发,没有不发
|
||||
mail :to => user.mail,:subject => @subject if has_content
|
||||
# date_from = date_to - days.days
|
||||
# date_from = "#{date_from} 17:59:59"
|
||||
# date_to = "#{date_to} 17:59:59"
|
||||
# # 生成token用于直接点击登录
|
||||
# @user = user
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
#
|
||||
# # 查询user参加的项目及课程
|
||||
# projects = user.projects
|
||||
# courses = user.courses
|
||||
# project_ids = projects.map{|project| project.id}.join(",")
|
||||
# course_ids = courses.map {|course| course.id}.join(",")
|
||||
#
|
||||
# # 查询user的缺陷,项目中成员都能收到
|
||||
# sql = "select DISTINCT * from members m, issues i where i.project_id = m.project_id and m.user_id='#{user.id}'
|
||||
# and (i.updated_on between '#{date_from}' and '#{date_to}') order by i.project_id, i.updated_on desc"
|
||||
# @issues = Issue.find_by_sql(sql)
|
||||
#
|
||||
# # issue回复
|
||||
# @issues_journals = Journal.find_by_sql("select j.* from journals j, members m, projects p, issues i
|
||||
# where m.user_id = '#{user.id}' and p.id = m.project_id and i.project_id = p.id and j.journalized_id = i.id
|
||||
# and j.journalized_type='Issue' and (j.created_on between '#{date_from}' and '#{date_to}') order by i.project_id, created_on desc")
|
||||
#
|
||||
# # @bids 查询课程作业,包括老师发布的作业,以及user提交作业
|
||||
# # @attachments查询课程课件更新
|
||||
# @attachments ||= []
|
||||
# @bids ||= [] # 老师发布的作业
|
||||
# unless courses.first.nil?
|
||||
# count = courses.count
|
||||
# count = count - 1
|
||||
# for i in 0..count do
|
||||
# bids = courses[i].homework_commons.where("homework_commons.created_at between '#{date_from}' and '#{date_to}'").order("homework_commons.created_at desc")
|
||||
# attachments = courses[i].attachments.where("attachments.created_on between '#{date_from}' and '#{date_to}'")
|
||||
# @bids += bids if bids.count > 0
|
||||
# @attachments += attachments if attachments.count > 0
|
||||
# end
|
||||
# # @bids = @bids.sort_by { |obj| obj.created_at }
|
||||
# end
|
||||
#
|
||||
# # 项目附件
|
||||
# @project_attachments = Attachment.find_by_sql("select DISTINCT a.* from members m, attachments a
|
||||
# where a.container_id = m.project_id and m.user_id='#{user.id}' and container_type = 'Project' and (a.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, a.created_on desc")
|
||||
#
|
||||
# # user 提交的作业
|
||||
# # @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
|
||||
#
|
||||
# # 查询user所在项目添加wiki
|
||||
# @wiki_contents = WikiContent.find_by_sql("select DISTINCT wc.* from wikis w, members m, projects p, wiki_pages wp, wiki_contents wc where
|
||||
# m.user_id = '#{user.id}' and m.project_id = p.id and w.project_id = p.id and w.id = wp.wiki_id and wc.page_id = wp.id and w.project_id>0
|
||||
# and (wc.updated_on between '#{date_from}' and '#{date_to}') order by m.project_id, updated_on desc")
|
||||
#
|
||||
# # 查询user在课程中发布的讨论帖子
|
||||
# course_mesages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
|
||||
# b.id = me.board_id and b.course_id = m.course_id
|
||||
# and b.course_id is not Null and m.user_id = '#{user.id}'
|
||||
# and (me.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
#
|
||||
# # 查询user在项目中发布的讨论帖子
|
||||
# project_messages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
|
||||
# b.id = me.board_id and b.project_id = m.project_id
|
||||
# and b.project_id != '-1' and m.user_id = '#{user.id}' and (me.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
# # messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
|
||||
# @course_messages ||= []
|
||||
# @project_messages ||= []
|
||||
# unless course_mesages.first.nil?
|
||||
# course_mesages.each do |msg|
|
||||
# @course_messages << msg
|
||||
# end
|
||||
# end
|
||||
# unless project_messages.first.nil?
|
||||
# project_messages.each do |msg|
|
||||
# @project_messages << msg
|
||||
# end
|
||||
# end
|
||||
# # wiki
|
||||
#
|
||||
# # 查询user在课程中发布的通知和回复通知
|
||||
# @course_news = (course_ids && !course_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n
|
||||
# where n.course_id in (#{course_ids})
|
||||
# and (created_on between '#{date_from}' and '#{date_to}') order by n.course_id, created_on desc") : []
|
||||
#
|
||||
# @course_news_comments = Comment.find_by_sql("select cm.* from comments cm, members m, courses c, news n
|
||||
# where m.user_id = '#{user.id}' and c.id = m.course_id and n.course_id = c.id and cm.commented_id = n.id
|
||||
# and cm.commented_type ='News' and (cm.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
#
|
||||
# # 查询user在项目中添加新闻和回复新闻
|
||||
# @project_news = (project_ids && !project_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
|
||||
# and (created_on between '#{date_from}' and '#{date_to}') order by n.project_id, created_on desc") : []
|
||||
#
|
||||
# @project_news_comments = Comment.find_by_sql("select c.* from comments c, members m, projects p, news n
|
||||
# where m.user_id = '#{user.id}' and p.id = m.project_id and n.project_id = p.id and c.commented_id = n.id
|
||||
# and c.commented_type ='News' and (c.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
#
|
||||
# # 查询user在课程及个人中留言
|
||||
# @course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, courses c
|
||||
# where m.user_id = '#{user.id}' and c.id = m.course_id and jfm.jour_id = c.id
|
||||
# and jfm.jour_type='Course' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by m.course_id, created_on desc")
|
||||
#
|
||||
# @user_journal_messages = user.journals_for_messages.where("jour_type='Principal' and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
|
||||
#
|
||||
# # 查询user在项目中留言(用户反馈)
|
||||
# @project_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, projects p
|
||||
# where m.user_id = '#{user.id}' and p.id = m.project_id and jfm.jour_id = p.id
|
||||
# and jfm.jour_type='Project' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by m.project_id, created_on desc")
|
||||
#
|
||||
# # 查询user新建贴吧或发布帖子
|
||||
# @forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between '#{date_from}' and '#{date_to}') order by created_at desc")
|
||||
# @memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id}))
|
||||
# and (m.created_at between '#{date_from}' and '#{date_to}') order by m.created_at desc")
|
||||
#
|
||||
# has_content = [@issues,@issues_journals,@course_messages,@project_messages,@course_news,@course_news_comments,@project_news,@project_news_comments,@project_attachments,
|
||||
# @course_journal_messages,@user_journal_messages,@project_journal_messages,@forums,@memos,@attachments,@bids,@wiki_contents].any? {|o| !o.empty?}
|
||||
# total_count = @issues.count + @issues_journals.count + @course_messages.count + @project_messages.count + @course_news.count + @course_news_comments.count + @project_news.count + @project_news_comments.count +
|
||||
# @project_attachments.count + @course_journal_messages.count + @user_journal_messages.count + @project_journal_messages.count + @forums.count + @memos.count + @attachments.count +
|
||||
# @bids.count + @wiki_contents.count
|
||||
# subject = "[ #{user.show_name}#{l(:label_day_mail_first)}#{total_count}#{l(:label_day_mail_last)}]"
|
||||
# @subject = " #{user.show_name}#{l(:label_day_mail_first)}#{total_count}#{l(:label_day_mail_last)}"
|
||||
# mylogger.debug "Sent activity mail : #{user.mail} - #{has_content}"
|
||||
# #有内容才发,没有不发
|
||||
# mail :to => user.mail,:subject => @subject if has_content
|
||||
end
|
||||
|
||||
# 作业截止时间邮件提醒
|
||||
def homework_endtime__added(homework_common, user_id)
|
||||
user = User.find(user_id)
|
||||
@subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_homework_endtime)} "
|
||||
@token = Token.get_token_from_user(user, 'autologin')
|
||||
@homework_endtime_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
@homework_endtime_name = homework_common.name
|
||||
@author = homework_common.user
|
||||
#收件人邮箱
|
||||
recipient = user.mail
|
||||
mail :to => recipient,
|
||||
:subject => @subject
|
||||
# user = User.find(user_id)
|
||||
# @subject = "#{l(:mail_homework)}#{homework_common.name} #{l(:mail_homework_endtime)} "
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
# @homework_endtime_url = url_for(student_work_index_url(:homework => homework_common.id, :token => @token.value))
|
||||
# @homework_endtime_name = homework_common.name
|
||||
# @author = homework_common.user
|
||||
# #收件人邮箱
|
||||
# recipient = user.mail
|
||||
# mail :to => recipient,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
# 公共讨论区发帖、回帖添加邮件发送信息
|
||||
|
@ -382,20 +382,20 @@ class Mailer < ActionMailer::Base
|
|||
|
||||
# issue截止时间提醒
|
||||
def issue_due_date(issue)
|
||||
recipients ||= []
|
||||
if issue.author.id != issue.assigned_to_id
|
||||
recipients << issue.author.mail
|
||||
end
|
||||
|
||||
# 被指派人邮箱地址加入数组
|
||||
recipients << issue.assigned_to.mail
|
||||
# cc = wiki_content.page.wiki.watcher_recipients - recipients
|
||||
@author = issue.author
|
||||
@issue_name = issue.subject
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
@subject = "#{l(:mail_issue)}#{issue.subject} #{l(:mail_issue_due_date)} "
|
||||
mail :to => recipients,
|
||||
:subject => @subject
|
||||
# recipients ||= []
|
||||
# if issue.author.id != issue.assigned_to_id
|
||||
# recipients << issue.author.mail
|
||||
# end
|
||||
#
|
||||
# # 被指派人邮箱地址加入数组
|
||||
# recipients << issue.assigned_to.mail
|
||||
# # cc = wiki_content.page.wiki.watcher_recipients - recipients
|
||||
# @author = issue.author
|
||||
# @issue_name = issue.subject
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
# @subject = "#{l(:mail_issue)}#{issue.subject} #{l(:mail_issue_due_date)} "
|
||||
# mail :to => recipients,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
# Builds a Mail::Message object used to email recipients of the added issue.
|
||||
|
@ -404,31 +404,31 @@ class Mailer < ActionMailer::Base
|
|||
# issue_add(issue) => Mail::Message object
|
||||
# Mailer.issue_add(issue).deliver => sends an email to issue recipients
|
||||
def issue_add(issue, recipients)
|
||||
issue_id = issue.project_index
|
||||
redmine_headers 'Project' => issue.project.identifier,
|
||||
'Issue-Id' => issue_id,
|
||||
'Issue-Author' => issue.author.login
|
||||
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
message_id issue
|
||||
|
||||
@author = issue.author
|
||||
@issue = issue
|
||||
user = User.find_by_mail(recipients)
|
||||
@user = user
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
|
||||
# edit
|
||||
@issue_author_url = url_for(user_activities_url(@author))
|
||||
@project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id)
|
||||
|
||||
@user_url = url_for(my_account_url(user))
|
||||
|
||||
|
||||
subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
|
||||
mail :to => recipients,
|
||||
:subject => subject,
|
||||
:filter => true
|
||||
# issue_id = issue.project_index
|
||||
# redmine_headers 'Project' => issue.project.identifier,
|
||||
# 'Issue-Id' => issue_id,
|
||||
# 'Issue-Author' => issue.author.login
|
||||
# redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
# message_id issue
|
||||
#
|
||||
# @author = issue.author
|
||||
# @issue = issue
|
||||
# user = User.find_by_mail(recipients)
|
||||
# @user = user
|
||||
# # @token = Token.get_token_from_user(user, 'autologin')
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
#
|
||||
# # edit
|
||||
# @issue_author_url = url_for(user_activities_url(@author))
|
||||
# @project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id)
|
||||
#
|
||||
# @user_url = url_for(my_account_url(user))
|
||||
#
|
||||
#
|
||||
# subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
|
||||
# mail :to => recipients,
|
||||
# :subject => subject,
|
||||
# :filter => true
|
||||
end
|
||||
# issue.attachments.each do |attach|
|
||||
# attachments["#{attach.filename}"] = File.read("#{attach.disk_filename}")
|
||||
|
@ -445,36 +445,36 @@ class Mailer < ActionMailer::Base
|
|||
# issue_edit(journal) => Mail::Message object
|
||||
# Mailer.issue_edit(journal).deliver => sends an email to issue recipients
|
||||
def issue_edit(journal,recipients)
|
||||
issue = journal.journalized.reload
|
||||
issue_id = issue.project_index
|
||||
redmine_headers 'Project' => issue.project.identifier,
|
||||
'Issue-Id' => issue_id.to_s,
|
||||
'Issue-Author' => issue.author.login
|
||||
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
message_id journal
|
||||
references issue
|
||||
@author = journal.user
|
||||
|
||||
user = User.find_by_mail(recipients)
|
||||
@user = user
|
||||
# @token = Token.get_token_from_user(user, 'autologin')
|
||||
|
||||
|
||||
# edit
|
||||
@issue_author_url = url_for(:controller => 'users', :action => 'show', :id => issue.author_id)
|
||||
@project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id)
|
||||
@user_url = url_for(my_account_url(user))
|
||||
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :anchor => "change-#{journal.id}")
|
||||
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
|
||||
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
||||
s << issue.subject
|
||||
@issue = issue
|
||||
@journal = journal
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
|
||||
mail :to => recipients,
|
||||
:subject => s,
|
||||
:filter => true
|
||||
# issue = journal.journalized.reload
|
||||
# issue_id = issue.project_index
|
||||
# redmine_headers 'Project' => issue.project.identifier,
|
||||
# 'Issue-Id' => issue_id.to_s,
|
||||
# 'Issue-Author' => issue.author.login
|
||||
# redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
# message_id journal
|
||||
# references issue
|
||||
# @author = journal.user
|
||||
#
|
||||
# user = User.find_by_mail(recipients)
|
||||
# @user = user
|
||||
# # @token = Token.get_token_from_user(user, 'autologin')
|
||||
#
|
||||
#
|
||||
# # edit
|
||||
# @issue_author_url = url_for(:controller => 'users', :action => 'show', :id => issue.author_id)
|
||||
# @project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id)
|
||||
# @user_url = url_for(my_account_url(user))
|
||||
#
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :anchor => "change-#{journal.id}")
|
||||
# s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
|
||||
# s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
||||
# s << issue.subject
|
||||
# @issue = issue
|
||||
# @journal = journal
|
||||
# # @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
|
||||
# mail :to => recipients,
|
||||
# :subject => s,
|
||||
# :filter => true
|
||||
end
|
||||
|
||||
def self.deliver_mailer(to,cc, subject)
|
||||
|
@ -510,19 +510,19 @@ class Mailer < ActionMailer::Base
|
|||
|
||||
#缺陷到期邮件通知
|
||||
def issue_expire issue
|
||||
issue_id = issue.project_index
|
||||
redmine_headers 'Project' => issue.project.identifier,
|
||||
'Issue-Id' => issue_id,
|
||||
'Issue-Author' => issue.author.login
|
||||
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
message_id issue
|
||||
@author = issue.author
|
||||
@issue = issue
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
recipients = issue.recipients
|
||||
s = l(:text_issue_expire,:issue => "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}")
|
||||
mail :to => recipients,
|
||||
:subject => s
|
||||
# issue_id = issue.project_index
|
||||
# redmine_headers 'Project' => issue.project.identifier,
|
||||
# 'Issue-Id' => issue_id,
|
||||
# 'Issue-Author' => issue.author.login
|
||||
# redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
# message_id issue
|
||||
# @author = issue.author
|
||||
# @issue = issue
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
# recipients = issue.recipients
|
||||
# s = l(:text_issue_expire,:issue => "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}")
|
||||
# mail :to => recipients,
|
||||
# :subject => s
|
||||
#########################################################################################################
|
||||
#@issues = issues
|
||||
#s = l(:text_issue_expire,:issue => "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}")
|
||||
|
@ -627,19 +627,19 @@ class Mailer < ActionMailer::Base
|
|||
# attachments_added(attachments) => Mail::Message object
|
||||
# Mailer.attachments_added(attachments).deliver => sends an email to the project's recipients
|
||||
def homework_added(homework_common)
|
||||
logger.info "homework added"
|
||||
@homework_common = homework_common
|
||||
@author = homework_common.user
|
||||
@homework_common_url = url_for(:controller => "homework_common", :action =>"index", :homework => @homework_common.id)
|
||||
@homework_author_url = url_for(user_activities_url(@author))
|
||||
recipients ||= []
|
||||
#将帖子创建者邮箱地址加入数组
|
||||
@homework_common.course.members.each do |member|
|
||||
recipients << member.user.mail
|
||||
end
|
||||
mail :to => recipients,
|
||||
:subject => "[ #{l(:label_user_homework)} : #{homework_common.name} #{l(:label_memo_create_succ)}]",
|
||||
:filter => true
|
||||
# logger.info "homework added"
|
||||
# @homework_common = homework_common
|
||||
# @author = homework_common.user
|
||||
# @homework_common_url = url_for(:controller => "homework_common", :action =>"index", :homework => @homework_common.id)
|
||||
# @homework_author_url = url_for(user_activities_url(@author))
|
||||
# recipients ||= []
|
||||
# #将帖子创建者邮箱地址加入数组
|
||||
# @homework_common.course.members.each do |member|
|
||||
# recipients << member.user.mail
|
||||
# end
|
||||
# mail :to => recipients,
|
||||
# :subject => "[ #{l(:label_user_homework)} : #{homework_common.name} #{l(:label_memo_create_succ)}]",
|
||||
# :filter => true
|
||||
end
|
||||
|
||||
# Builds a Mail::Message object used to email recipients of a news' project when a news item is added.
|
||||
|
@ -649,28 +649,28 @@ class Mailer < ActionMailer::Base
|
|||
# Mailer.news_added(news).deliver => sends an email to the news' project recipients
|
||||
def news_added(news)
|
||||
|
||||
if news.project
|
||||
# redmine_headers 'Project' => news.project.identifier
|
||||
# @author = news.author
|
||||
# @issue_author_url = url_for(user_activities_url(@author))
|
||||
# message_id news
|
||||
# @news = news
|
||||
# @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# mail :to => news.recipients,
|
||||
# :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}",
|
||||
# :filter => true
|
||||
elsif news.course
|
||||
redmine_headers 'Course' => news.course.id
|
||||
@author = news.author
|
||||
@issue_author_url = url_for(user_activities_url(@author))
|
||||
message_id news
|
||||
@news = news
|
||||
recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
|
||||
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
mail :to => recipients,
|
||||
:subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}",
|
||||
:filter => true
|
||||
end
|
||||
# if news.project
|
||||
# # redmine_headers 'Project' => news.project.identifier
|
||||
# # @author = news.author
|
||||
# # @issue_author_url = url_for(user_activities_url(@author))
|
||||
# # message_id news
|
||||
# # @news = news
|
||||
# # @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# # mail :to => news.recipients,
|
||||
# # :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}",
|
||||
# # :filter => true
|
||||
# elsif news.course
|
||||
# redmine_headers 'Course' => news.course.id
|
||||
# @author = news.author
|
||||
# @issue_author_url = url_for(user_activities_url(@author))
|
||||
# message_id news
|
||||
# @news = news
|
||||
# recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
|
||||
# @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# mail :to => recipients,
|
||||
# :subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}",
|
||||
# :filter => true
|
||||
# end
|
||||
end
|
||||
|
||||
# Builds a Mail::Message object used to email recipients of a news' project when a news comment is added.
|
||||
|
@ -679,33 +679,33 @@ class Mailer < ActionMailer::Base
|
|||
# news_comment_added(comment) => Mail::Message object
|
||||
# Mailer.news_comment_added(comment) => sends an email to the news' project recipients
|
||||
def news_comment_added(comment)
|
||||
news = comment.commented
|
||||
if news.project
|
||||
# redmine_headers 'Project' => news.project.identifier
|
||||
# @author = comment.author
|
||||
# @issue_author_url = url_for(user_activities_url(@author))
|
||||
# message_id comment
|
||||
# @news = news
|
||||
# @comment = comment
|
||||
# @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# mail :to => news.recipients,
|
||||
# :cc => news.watcher_recipients,
|
||||
# :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}",
|
||||
# :filter => true
|
||||
elsif news.course
|
||||
redmine_headers 'Course' => news.course.id
|
||||
@author = comment.author
|
||||
@issue_author_url = url_for(user_activities_url(@author))
|
||||
message_id comment
|
||||
@news = news
|
||||
@comment = comment
|
||||
@news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
|
||||
|
||||
mail :to => recipients,
|
||||
:subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}",
|
||||
:filter => true
|
||||
end
|
||||
# news = comment.commented
|
||||
# if news.project
|
||||
# # redmine_headers 'Project' => news.project.identifier
|
||||
# # @author = comment.author
|
||||
# # @issue_author_url = url_for(user_activities_url(@author))
|
||||
# # message_id comment
|
||||
# # @news = news
|
||||
# # @comment = comment
|
||||
# # @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# # mail :to => news.recipients,
|
||||
# # :cc => news.watcher_recipients,
|
||||
# # :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}",
|
||||
# # :filter => true
|
||||
# elsif news.course
|
||||
# redmine_headers 'Course' => news.course.id
|
||||
# @author = comment.author
|
||||
# @issue_author_url = url_for(user_activities_url(@author))
|
||||
# message_id comment
|
||||
# @news = news
|
||||
# @comment = comment
|
||||
# @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
|
||||
# recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
|
||||
#
|
||||
# mail :to => recipients,
|
||||
# :subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}",
|
||||
# :filter => true
|
||||
# end
|
||||
end
|
||||
|
||||
# Builds a Mail::Message object used to email the recipients of the specified message that was posted.
|
||||
|
@ -848,9 +848,10 @@ class Mailer < ActionMailer::Base
|
|||
def register(token)
|
||||
set_language_if_valid(token.user.language)
|
||||
@token = token
|
||||
@login = token.user.try(:login)
|
||||
@url = url_for(:controller => 'account', :action => 'activate', :token => token.value)
|
||||
mail :to => token.user.mail,
|
||||
:subject => l(:mail_subject_register, Setting.app_title)
|
||||
:subject => "#{Setting.mail_subject}"
|
||||
end
|
||||
|
||||
def test_email(user)
|
||||
|
@ -1032,21 +1033,21 @@ class Mailer < ActionMailer::Base
|
|||
end
|
||||
|
||||
def join_course_request(course, user, role)
|
||||
@receive = User.find(course.tea_id)
|
||||
@course = course
|
||||
@user = user
|
||||
@role = role
|
||||
@subject = "#{@user.show_name} #{l(:label_apply_join_course)} #{@course.name} "
|
||||
mail :to => @receive.mail,
|
||||
:subject => @subject
|
||||
# @receive = User.find(course.tea_id)
|
||||
# @course = course
|
||||
# @user = user
|
||||
# @role = role
|
||||
# @subject = "#{@user.show_name} #{l(:label_apply_join_course)} #{@course.name} "
|
||||
# mail :to => @receive.mail,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
def apply_for_homework_request(homework, user)
|
||||
@receive = User.find(homework.user_id)
|
||||
@user = user
|
||||
@subject = "#{@user.show_name} #{l(:label_apply_for_homework)} #{homework.name} "
|
||||
mail :to => @receive.mail,
|
||||
:subject => @subject
|
||||
# @receive = User.find(homework.user_id)
|
||||
# @user = user
|
||||
# @subject = "#{@user.show_name} #{l(:label_apply_for_homework)} #{homework.name} "
|
||||
# mail :to => @receive.mail,
|
||||
# :subject => @subject
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -55,6 +55,9 @@ class Member < ActiveRecord::Base
|
|||
if (new_role_ids.include?(7) || new_role_ids.include?(9)) && role_ids.include?(10)
|
||||
member_roles.where("role_id = 10").first.update_column('is_current', 0)
|
||||
end
|
||||
if ids.include?(10) && !ids.include?(7) && !ids.include?(9) && role_ids.include?(10)
|
||||
member_roles.where("role_id = 10").first.update_column('is_current', 1)
|
||||
end
|
||||
# Add new roles
|
||||
if new_role_ids.include?(7) && new_role_ids.include?(10)
|
||||
member_roles << MemberRole.new(:role_id => 7)
|
||||
|
|
|
@ -124,7 +124,7 @@ class Memo < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_mail
|
||||
Mailer.run.forum_message_added(self) if Setting.notified_events.include?('forum_message_added')
|
||||
# Mailer.run.forum_message_added(self) if Setting.notified_events.include?('forum_message_added')
|
||||
end
|
||||
|
||||
def creator_user
|
||||
|
@ -203,7 +203,7 @@ class Memo < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def destroyable_by? user
|
||||
(user && self.author == user) || user.admin?
|
||||
(user && self.author == user) || user.admin? || self.forum.creator == user || Memo.find(self.root_id).author == user
|
||||
#self.author == user || user.admin?
|
||||
end
|
||||
|
||||
|
@ -218,9 +218,9 @@ class Memo < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_notification
|
||||
if Setting.notified_events.include?('message_posted')
|
||||
Mailer.run.message_posted(self)
|
||||
end
|
||||
# if Setting.notified_events.include?('message_posted')
|
||||
# Mailer.run.message_posted(self)
|
||||
# end
|
||||
end
|
||||
|
||||
def plusParentAndForum
|
||||
|
|
|
@ -86,7 +86,7 @@ class Message < ActiveRecord::Base
|
|||
# after_create :add_author_as_watcher, :reset_counters!, :add_boards_count
|
||||
after_update :update_messages_board, :update_activity
|
||||
after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets, :decrease_boards_count, :down_course_score
|
||||
after_create :act_as_course_activity, :act_as_forge_activity, :act_as_student_score, act_as_at_message(:content, :author_id), :add_author_as_watcher, :reset_counters!, :add_boards_count, :act_as_system_message, :delay_message_send
|
||||
after_create :act_as_course_activity, :act_as_forge_activity, :act_as_contest_activity, :act_as_student_score, act_as_at_message(:content, :author_id), :add_author_as_watcher, :reset_counters!, :add_boards_count, :act_as_system_message, :delay_message_send
|
||||
#before_save :be_user_score
|
||||
|
||||
scope :visible, lambda {|*args|
|
||||
|
@ -103,8 +103,10 @@ class Message < ActiveRecord::Base
|
|||
:if => lambda {|message, user|
|
||||
if message.project
|
||||
user.allowed_to?(:edit_messages, message.project)
|
||||
else
|
||||
elsif message.course
|
||||
user.allowed_to?(:edit_messages, message.course)
|
||||
elsif message.contest
|
||||
user.admin_of_contest?(message.contest)
|
||||
end
|
||||
}
|
||||
|
||||
|
@ -188,6 +190,18 @@ class Message < ActiveRecord::Base
|
|||
board.course
|
||||
end
|
||||
|
||||
def contest
|
||||
board.contest
|
||||
end
|
||||
|
||||
def contest_editable_by?(usr)
|
||||
usr && usr.logged? && (usr.admin_of_contest?(contest) || self.author == usr || usr.admin?)
|
||||
end
|
||||
|
||||
def contest_destroyable_by?(usr)
|
||||
usr && usr.logged? && (usr.admin_of_contest?(contest) || self.author == usr || usr.admin?)
|
||||
end
|
||||
|
||||
def course_editable_by?(usr)
|
||||
usr && usr.logged? && (usr.allowed_to?(:edit_messages, course) || (self.author == usr && usr.allowed_to?(:edit_own_messages, course)))
|
||||
end
|
||||
|
@ -223,6 +237,7 @@ class Message < ActiveRecord::Base
|
|||
#动态的更新
|
||||
def update_activity
|
||||
update_course_activity(self.class, self.id)
|
||||
update_contest_activity(self.class, self.id)
|
||||
update_user_activity(self.class, self.id)
|
||||
update_forge_activity(self.class, self.id)
|
||||
update_org_activity(self.class, self.id)
|
||||
|
@ -269,6 +284,13 @@ class Message < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
#竞赛动态公共表记录
|
||||
def act_as_contest_activity
|
||||
if self.contest && self.parent_id.nil?
|
||||
self.contest_acts << ContestActivity.new(:user_id => self.author_id,:contest_id => self.board.contest_id)
|
||||
end
|
||||
end
|
||||
|
||||
# 课程讨论区添加消息:
|
||||
# 老师发帖所有人都能收到消息
|
||||
# 学生发帖,有人回复则给该学生消息,没回复则不给其它人发送消息
|
||||
|
@ -324,6 +346,29 @@ class Message < ActiveRecord::Base
|
|||
# end
|
||||
end
|
||||
end
|
||||
elsif self.contest
|
||||
if self.parent_id.nil? # 主贴
|
||||
self.contest.contest_members.includes(:user).each do |m|
|
||||
if self.author.admin_of_contest?(self.contest) && m.user_id != self.author_id # 老师 自己的帖子不给自己发送消息
|
||||
#self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false)
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course.id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.subject, 200
|
||||
# ws.topic_publish_template m.user_id, "course_discussion", self.id, "#{l(:label_course_topic_template)}", content, self.author.try(:realname), format_time(self.created_on)
|
||||
# end
|
||||
end
|
||||
end
|
||||
else # 回帖
|
||||
parent_author_id = Message.find(self.parent_id).author_id
|
||||
if parent_author_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息
|
||||
self.contest_messages << ContestMessage.new(:user_id => parent_author_id, :contest_id => self.board.contest_id, :viewed => false)
|
||||
# count = ShieldWechatMessage.where("container_type='User' and container_id=#{parent_author_id} and shield_type='Course' and shield_id=#{self.board.course_id}").count
|
||||
# if count == 0
|
||||
# content = strip_html self.content.html_safe, 200
|
||||
# ws.comment_template parent_author_id, "course_discussion", self.parent_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), content
|
||||
# end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -346,6 +391,25 @@ class Message < ActiveRecord::Base
|
|||
self.delay.contain_messages_message(dm)
|
||||
end
|
||||
|
||||
end
|
||||
elsif self.contest
|
||||
if self.parent_id.nil? # 发帖
|
||||
dm = []
|
||||
self.contest.contest_members.includes(:user).each do |m|
|
||||
if self.author.admin_of_contest?(self.contest) && m.user_id != self.author_id # 老师 自己的帖子不给自己发送消息
|
||||
dm << {contest_message_type:'Message',contest_message_id:self.id, :user_id => m.user_id,
|
||||
:contest_id => self.board.contest_id, :viewed => false}
|
||||
if dm.size >= 30
|
||||
self.delay.contain_contest_messages_message(dm)
|
||||
dm.clear
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
unless dm.empty?
|
||||
self.delay.contain_contest_messages_message(dm)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -354,6 +418,10 @@ class Message < ActiveRecord::Base
|
|||
CourseMessage.create(vs)
|
||||
end
|
||||
|
||||
def contain_contest_messages_message vs
|
||||
ContestMessage.create(vs)
|
||||
end
|
||||
|
||||
#更新用户分数 -by zjc
|
||||
def be_user_score
|
||||
#新建message且无parent的为发帖
|
||||
|
@ -391,7 +459,7 @@ class Message < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_mail
|
||||
Mailer.run.message_posted(self) if Setting.notified_events.include?('message_posted')
|
||||
# Mailer.run.message_posted(self) if Setting.notified_events.include?('message_posted')
|
||||
end
|
||||
|
||||
# Time 2015-03-31 09:15:06
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
class MessageAll < ActiveRecord::Base
|
||||
attr_accessible :message_id, :message_type, :user_id
|
||||
belongs_to :user
|
||||
# 虚拟关联---项目消息表/课程消息表/用户留言消息表/贴吧消息表
|
||||
belongs_to :forge_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'ForgeMessage'"
|
||||
belongs_to :course_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'CourseMessage'"
|
||||
belongs_to :applied_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'AppliedMessage'"
|
||||
belongs_to :at_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'AtMessage'"
|
||||
belongs_to :memo_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'MemoMessage'"
|
||||
belongs_to :org_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'OrgMessage'"
|
||||
belongs_to :system_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'SystemMessage'"
|
||||
belongs_to :user_feedback_message, foreign_key: 'message_id', conditions: "message_alls.message_type = 'UserFeedbackMessage'"
|
||||
belongs_to :message ,:polymorphic => true
|
||||
|
||||
end
|
||||
|
|
|
@ -25,6 +25,7 @@ class News < ActiveRecord::Base
|
|||
has_many_kindeditor_assets :assets, :dependent => :destroy
|
||||
#added by nwb
|
||||
belongs_to :course,:touch => true
|
||||
belongs_to :contest,:touch => true
|
||||
belongs_to :org_subfield, :touch => true
|
||||
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
||||
has_many :comments, :as => :commented, :dependent => :destroy, :order => "created_on"
|
||||
|
@ -68,7 +69,7 @@ class News < ActiveRecord::Base
|
|||
:author_key => :author_id
|
||||
acts_as_watchable
|
||||
|
||||
after_create :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score,:delay_news_wechat_send, :delay_news_send
|
||||
after_create :act_as_course_activity, :add_author_as_watcher, :add_news_count, :act_as_student_score,:delay_news_wechat_send, :delay_news_send, :act_as_contest_message
|
||||
after_update :update_activity
|
||||
after_destroy :delete_kindeditor_assets, :decrease_news_count, :delete_org_activities, :down_course_score
|
||||
|
||||
|
@ -79,6 +80,10 @@ class News < ActiveRecord::Base
|
|||
scope :course_visible, lambda {|*args|
|
||||
includes(:course).where(Course.allowed_to_condition(args.shift || User.current, :view_course_news, *args))
|
||||
}
|
||||
|
||||
scope :contest_visible, lambda {|*args|
|
||||
includes(:contest).where(Contest.allowed_to_condition(args.shift || User.current, :view_contest_news, *args))
|
||||
}
|
||||
safe_attributes 'title', 'summary', 'description', 'sticky'
|
||||
|
||||
#动态的更新
|
||||
|
@ -160,6 +165,8 @@ class News < ActiveRecord::Base
|
|||
def act_as_course_activity
|
||||
if self.course
|
||||
self.course_acts << CourseActivity.new(:user_id => self.author_id,:course_id => self.course_id)
|
||||
elsif self.contest
|
||||
self.contest_acts << ContestActivity.new(:user_id => self.author_id,:contest_id => self.contest_id)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -209,6 +216,16 @@ class News < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def act_as_contest_message
|
||||
if self.contest_id
|
||||
self.contest.contest_members.each do | m|
|
||||
if m.user_id != self.author_id
|
||||
self.contest_messages << ContestMessage.new(:user_id => m.user_id, :contest_id => self.contest_id, :viewed => false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def delay_news_send
|
||||
if self.course
|
||||
|
||||
|
@ -218,6 +235,8 @@ class News < ActiveRecord::Base
|
|||
vs << {course_message_type:'News',course_message_id:self.id, :user_id => m.user_id,
|
||||
:course_id => self.course_id, :viewed => false}
|
||||
|
||||
#delayed_job卡住的原因是一次执行的条数太多,导致超时。
|
||||
#现在把每次只执行不超过30条,就不会超了。
|
||||
if vs.size >= 30
|
||||
self.delay.contain_news_message(vs)
|
||||
vs.clear
|
||||
|
@ -229,6 +248,23 @@ class News < ActiveRecord::Base
|
|||
self.delay.contain_news_message(vs)
|
||||
end
|
||||
|
||||
elsif self.contest_id
|
||||
vs = []
|
||||
self.contest.contest_members.each do | m|
|
||||
if m.user_id != self.author_id
|
||||
vs << {contest_message_type:'Contest',contest_message_id:self.id, :user_id => m.user_id,
|
||||
:contest_id => self.contest_id, :viewed => false}
|
||||
|
||||
if vs.size >= 30
|
||||
self.delay.contain_contst_news_message(vs)
|
||||
vs.clear
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
unless vs.empty?
|
||||
self.delay.contain_contst_news_message(vs)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -236,6 +272,10 @@ class News < ActiveRecord::Base
|
|||
CourseMessage.create(vs)
|
||||
end
|
||||
|
||||
def contain_contst_news_message(vs)
|
||||
ContestMessage.create(vs)
|
||||
end
|
||||
|
||||
# Time 2015-03-31 13:50:54
|
||||
# Author lizanle
|
||||
# Description 删除news后删除对应的资源
|
||||
|
@ -244,7 +284,7 @@ class News < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_mail
|
||||
Mailer.run.news_added(self) if Setting.notified_events.include?('news_added')
|
||||
# Mailer.run.news_added(self) if Setting.notified_events.include?('news_added')
|
||||
end
|
||||
|
||||
def delete_org_activities
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
class OrgMessage < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
belongs_to :organization
|
||||
has_many :message_alls, :as => :message, :dependent => :destroy
|
||||
has_many :message_alls, :class_name => 'MessageAll', :as => :message, :dependent => :destroy
|
||||
validates :message_type, :presence => true
|
||||
validates :message_id, :presence => true
|
||||
validates :organization_id, :presence => true
|
||||
|
|
|
@ -10,6 +10,7 @@ class Organization < ActiveRecord::Base
|
|||
has_many :users, :through => :org_members
|
||||
has_many :files
|
||||
has_many :org_messages, :class_name => 'OrgMessage', :dependent => :destroy
|
||||
has_many :applied_messages, :class_name => 'AppliedMessage', :dependent => :destroy
|
||||
acts_as_attachable
|
||||
validates_uniqueness_of :name
|
||||
after_create :save_as_org_activity, :add_default_subfields
|
||||
|
|
|
@ -35,7 +35,7 @@ class Principal < ActiveRecord::Base
|
|||
has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify
|
||||
|
||||
has_many :contest_members, :foreign_key => 'user_id', :dependent => :destroy
|
||||
has_many :contestmemberships, :class_name => 'ContestMember', :foreign_key => 'user_id', :include => [:contest, :roles], :conditions => "#{Contest.table_name}.is_delete != 0", :order => "#{Contest.table_name}.name"
|
||||
has_many :contestmemberships, :class_name => 'ContestMember', :foreign_key => 'user_id', :include => [:contest, :roles], :order => "#{Contest.table_name}.name"
|
||||
has_many :contests, :through => :contestmemberships
|
||||
|
||||
# Groups and active users
|
||||
|
@ -91,6 +91,16 @@ class Principal < ActiveRecord::Base
|
|||
end
|
||||
}
|
||||
|
||||
scope :not_member_of_contest, lambda {|contests|
|
||||
contests = [contests] unless contests.is_a?(Array)
|
||||
if contests.empty?
|
||||
where("1=0")
|
||||
else
|
||||
ids = contests.map(&:id)
|
||||
where("#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{ContestMember.table_name} WHERE contest_id IN (?))", ids)
|
||||
end
|
||||
}
|
||||
|
||||
scope :not_member_of_org, lambda {|org|
|
||||
orgs = [org] unless org.is_a?(Array)
|
||||
if orgs.empty?
|
||||
|
|
|
@ -43,7 +43,8 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
has_many :student_work_projects,:dependent => :destroy
|
||||
has_many :student_work_projects, :dependent => :destroy
|
||||
has_many :contestant_work_projects, :dependent => :destroy
|
||||
has_many :student_works
|
||||
has_many :time_entry_activities
|
||||
has_many :members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
class PullRequest < ActiveRecord::Base
|
||||
# status 1:创建 2:接受 3:重新打开 4:关闭
|
||||
attr_accessible :gpid, :pull_request_id, :user_id, :project_id, :title
|
||||
attr_accessible :gpid, :pull_request_id, :user_id, :project_id, :title, :status
|
||||
validates_uniqueness_of :pull_request_id
|
||||
|
||||
has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy
|
||||
|
|
|
@ -158,9 +158,9 @@ class RelativeMemo < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def send_notification
|
||||
if Setting.notified_events.include?('message_posted')
|
||||
Mailer.run.message_posted(self)
|
||||
end
|
||||
# if Setting.notified_events.include?('message_posted')
|
||||
# Mailer.run.message_posted(self)
|
||||
# end
|
||||
end
|
||||
|
||||
# def plusParentAndForum
|
||||
|
|
|
@ -19,6 +19,7 @@ class StudentWork < ActiveRecord::Base
|
|||
before_destroy :delete_praise
|
||||
before_save :set_program_score, :set_src
|
||||
|
||||
after_save :update_avg_sum_score
|
||||
after_create :act_as_message
|
||||
acts_as_attachable
|
||||
|
||||
|
@ -173,6 +174,20 @@ class StudentWork < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
#更新course_homework_statistics中的avg_score和total_score
|
||||
def update_avg_sum_score
|
||||
course_homework_statistics = CourseHomeworkStatistics.where(:user_id => self.user_id, :course_id => self.homework_common.course_id).first
|
||||
if course_homework_statistics
|
||||
course = self.homework_common.course
|
||||
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
|
||||
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
|
||||
user = self.user
|
||||
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
|
||||
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
|
||||
course_homework_statistics.update_attributes(:average_score => average_score, :total_score => total_score)
|
||||
end
|
||||
end
|
||||
|
||||
# status == 0 : delay
|
||||
def act_as_message
|
||||
if self.work_status != 0 && self.created_at > self.homework_common.end_time + 1
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
class StudentWorksScore < ActiveRecord::Base
|
||||
#reviewer_role: 1:教师评分;2:教辅评分;3:学生匿评
|
||||
#appeal_status: 0:正常;1:申诉中,2:撤销申诉;3:申诉成功;4申诉被拒绝
|
||||
attr_accessible :student_work_id, :user_id, :score, :comment, :reviewer_role
|
||||
attr_accessible :student_work_id, :user_id, :score, :comment, :reviewer_role, :is_hidden
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :student_work
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#encoding: utf-8
|
||||
class StudentsForCourse < ActiveRecord::Base
|
||||
attr_accessible :course_id, :student_id
|
||||
|
||||
|
@ -8,8 +9,8 @@ class StudentsForCourse < ActiveRecord::Base
|
|||
validates_presence_of :course_id, :student_id
|
||||
validates_uniqueness_of :student_id, :scope => :course_id
|
||||
|
||||
after_destroy :delete_student_works
|
||||
after_create :recovery_student_works
|
||||
after_destroy :delete_student_works, :delete_course_homework_statistic
|
||||
after_create :recovery_student_works, :create_student_works, :create_course_homework_statistic, :create_course_contribute_score
|
||||
|
||||
#退出班级或删除学生时隐藏学生的作品
|
||||
def delete_student_works
|
||||
|
@ -26,4 +27,70 @@ class StudentsForCourse < ActiveRecord::Base
|
|||
student_works = StudentWork.where("user_id = #{self.student_id} && homework_common_id in #{homework_ids}")
|
||||
student_works.update_all(:is_delete => 0)
|
||||
end
|
||||
|
||||
#加入班级时创建已发布作业的作品
|
||||
def create_student_works
|
||||
course = self.course
|
||||
course.homework_commons.each do |hw|
|
||||
if hw.homework_type != 3 && hw.student_works.where("user_id = #{self.student_id}").count == 0
|
||||
hw.student_works << StudentWork.new(:user_id => self.student_id, :name => hw.name.to_s+"的作品提交", :work_status => 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#加入班级时创建一条记录
|
||||
def create_course_homework_statistic
|
||||
if CourseHomeworkStatistics.where(:user_id => self.student_id, :course_id => self.course_id).count == 0
|
||||
course = self.course
|
||||
user = self.student
|
||||
hw_count = course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").count
|
||||
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
|
||||
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
|
||||
is_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
|
||||
is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
|
||||
has_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
|
||||
has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
|
||||
|
||||
committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
|
||||
un_commit_work_num = (hw_count - committed_work_num) < 0 ? 0 : (hw_count - committed_work_num)
|
||||
late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
|
||||
absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
|
||||
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
|
||||
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
|
||||
un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
|
||||
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
|
||||
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
|
||||
appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
|
||||
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
|
||||
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
|
||||
CourseHomeworkStatistics.create(:course_id => course.id, :user_id => user.id, :committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
|
||||
:late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
|
||||
:appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
|
||||
end
|
||||
end
|
||||
|
||||
def delete_course_homework_statistic
|
||||
CourseHomeworkStatistics.where(:user_id => self.student_id, :course_id => self.course_id).destroy_all
|
||||
end
|
||||
|
||||
def create_course_contribute_score
|
||||
ccs = CourseContributorScore.where("course_id =? and user_id =?", self.course_id, self.student_id).first
|
||||
unless ccs
|
||||
course = self.course
|
||||
user_id = self.student_id
|
||||
message_num = Message.find_by_sql("select DISTINCT me.* from messages me, boards b where b.id = me.board_id and b.course_id = #{course.id} and b.project_id = '-1' and me.author_id = #{user_id} and me.parent_id is null;").count
|
||||
message_reply_num = Message.find_by_sql("select DISTINCT me.* from messages me, boards b where b.id = me.board_id and b.course_id = #{course.id} and b.project_id = '-1' and me.author_id = #{user_id} and me.parent_id is not null").count
|
||||
news_reply_num = Comment.find_by_sql("select cm.* from comments cm, news n where cm.author_id = #{user_id} and n.course_id = #{course.id} and cm.commented_id = n.id and cm.commented_type ='News'").count
|
||||
|
||||
resource_num = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{course.id} and author_id = #{user_id} and container_type ='Course'").count
|
||||
journal_num = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =?", user_id, course.id, "Course").count
|
||||
journal_reply_num = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =? and m_parent_id is not null", user_id, course.id, "Course").count
|
||||
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map(&:id).join(',') + ")"
|
||||
homework_journal_num = JournalsForMessage.where("user_id =? and jour_id in #{homework_ids} and jour_type =?", user_id, "HomeworkCommon").count
|
||||
news_num = News.where("author_id = #{user_id} and course_id =#{course.id}").count
|
||||
total = message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1
|
||||
CourseContributorScore.create(:course_id => self.course_id, :user_id => self.student_id, :message_num => message_num, :message_reply_num => message_reply_num, :news_reply_num => news_reply_num,
|
||||
:resource_num => resource_num, :journal_num => journal_num, :journal_reply_num => journal_reply_num, :total_score => total, :homework_journal_num => homework_journal_num, :news_num => news_num)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -80,12 +80,12 @@ class User < Principal
|
|||
|
||||
|
||||
#每日一报、一事一报、不报
|
||||
MAIL_NOTIFICATION_OPTIONS = [
|
||||
# MAIL_NOTIFICATION_OPTIONS = [
|
||||
#['week', :label_user_mail_option_week],
|
||||
# ['day', :label_user_mail_option_day],
|
||||
['all', :label_user_mail_option_all],
|
||||
['none', :label_user_mail_option_none]
|
||||
]
|
||||
# ['all', :label_user_mail_option_all],
|
||||
# ['none', :label_user_mail_option_none]
|
||||
# ]
|
||||
|
||||
has_many :homework_users
|
||||
has_many :homework_attaches, :through => :homework_users
|
||||
|
@ -114,6 +114,13 @@ class User < Principal
|
|||
has_many :apply_homeworks, :dependent => :destroy
|
||||
has_many :apply_resources, :dependent => :destroy
|
||||
#end
|
||||
#竞赛
|
||||
has_many :contests, :dependent => :destroy
|
||||
has_many :works, :dependent => :destroy
|
||||
has_many :contestant_works, :dependent => :destroy
|
||||
has_many :contestant_work_evaluation_distributions, :dependent => :destroy
|
||||
has_many :contestant_work_scores
|
||||
has_many :contestant_work_projects
|
||||
|
||||
has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
|
||||
:after_remove => Proc.new {|user, group| group.user_removed(user)}
|
||||
|
@ -176,6 +183,8 @@ class User < Principal
|
|||
# 课程贡献榜
|
||||
has_many :course_contributor_scores, :dependent => :destroy
|
||||
|
||||
has_many :course_homework_statisticss, :dependent => :destroy
|
||||
|
||||
######added by nie
|
||||
has_many :project_infos, :dependent => :destroy
|
||||
has_one :user_status, :dependent => :destroy
|
||||
|
@ -244,7 +253,7 @@ class User < Principal
|
|||
validates_format_of :mail, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, :allow_blank => true
|
||||
validates_length_of :mail, :maximum => MAIL_LENGTH_LIMIT, :allow_nil => true
|
||||
validates_confirmation_of :password, :allow_nil => true
|
||||
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
|
||||
# validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
|
||||
validate :validate_password_length
|
||||
# validates_email_realness_of :mail
|
||||
before_create :set_mail_notification
|
||||
|
@ -392,6 +401,7 @@ class User < Principal
|
|||
user = User.current
|
||||
onclick_time = user.onclick_time.onclick_time
|
||||
course_count = CourseMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
contest_count = ContestMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
forge_count = ForgeMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
user_memo_count = MemoMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
|
@ -399,7 +409,8 @@ class User < Principal
|
|||
at_count = AtMessage.where("user_id =? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
org_count = OrgMessage.where("user_id=? and viewed =? and created_at >?", user.id,0, onclick_time).count
|
||||
applied_count = AppliedMessage.where("user_id=? and viewed =? and created_at >?", user.id, 0, onclick_time).count
|
||||
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count + org_count + applied_count
|
||||
blog_message_count = BlogMessage.where("user_id=? and viewed=? and created_at >?", user.id, 0, onclick_time).count
|
||||
messages_count = course_count + contest_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count + org_count + applied_count + blog_message_count
|
||||
end
|
||||
|
||||
# 查询指派给我的缺陷记录
|
||||
|
@ -882,7 +893,8 @@ class User < Principal
|
|||
end
|
||||
|
||||
def member_of_contest?(contest)
|
||||
contests.to_a.include?(contest)
|
||||
contest.contest_members.where(:user_id => self.id).count > 0
|
||||
#contests.to_a.include?(contest)
|
||||
end
|
||||
|
||||
def member_of_org?(org)
|
||||
|
@ -916,15 +928,15 @@ class User < Principal
|
|||
|
||||
# 判断是否是竞赛的主办人
|
||||
def admin_of_contest?(contest)
|
||||
if self.admin?
|
||||
return true
|
||||
if contest.nil?
|
||||
return false
|
||||
end
|
||||
if ContestMember.where("user_id =? and contest_id =?", self.id, contest.id).count == 0
|
||||
return false
|
||||
end
|
||||
role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].roles[0]
|
||||
unless role.nil?
|
||||
role.name == 'ContestManager' ? true : false
|
||||
member_role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].contest_member_roles.where(:is_current => true)[0]
|
||||
unless member_role.nil?
|
||||
member_role.role.name == 'ContestManager' ? true : false
|
||||
else
|
||||
false
|
||||
end
|
||||
|
@ -935,22 +947,22 @@ class User < Principal
|
|||
if ContestMember.where("user_id =? and contest_id =?", self.id, contest.id).count == 0
|
||||
return false
|
||||
end
|
||||
role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].roles[0]
|
||||
unless role.nil?
|
||||
role.name == 'Judge' ? true : false
|
||||
member_role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].contest_member_roles.where(:is_current => true)[0]
|
||||
unless member_role.nil?
|
||||
member_role.role.name == 'Judge' ? true : false
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
# 判断是否是竞赛的参赛者
|
||||
def judge_of_contest?(contest)
|
||||
def contestant_of_contest?(contest)
|
||||
if ContestMember.where("user_id =? and contest_id =?", self.id, contest.id).count == 0
|
||||
return false
|
||||
end
|
||||
role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].roles[0]
|
||||
unless role.nil?
|
||||
role.name == 'Contestant' ? true : false
|
||||
member_role = ContestMember.where("user_id =? and contest_id =?", self.id, contest.id)[0].contest_member_roles.where(:is_current => true)[0]
|
||||
unless member_role.nil?
|
||||
member_role.role.name == 'Contestant' ? true : false
|
||||
else
|
||||
false
|
||||
end
|
||||
|
@ -1062,6 +1074,7 @@ class User < Principal
|
|||
# Admin users are authorized for anything else
|
||||
return true if admin?
|
||||
|
||||
# 课程:作品关联项目的老师也可以访问私有项目
|
||||
course_ids = context.student_work_projects.blank? ? "(-1)" : "(" + context.student_work_projects.map{|swp| swp.course_id}.join(",") + ")"
|
||||
courses = Course.where("id in #{course_ids}")
|
||||
courses.each do |course|
|
||||
|
@ -1069,6 +1082,16 @@ class User < Principal
|
|||
return true
|
||||
end
|
||||
end
|
||||
|
||||
# 竞赛:作品关联项目的管理员也可以访问私有项目
|
||||
contest_ids = context.contestant_work_projects.map{|swp| swp.contest_id}
|
||||
contests = Contest.where(:id => contest_ids)
|
||||
contests.each do |contest|
|
||||
if self.admin_of_contest?(contest)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
roles = roles_for_project(context)
|
||||
return false unless roles
|
||||
roles.any? {|role|
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
|
||||
class WikiContentObserver < ActiveRecord::Observer
|
||||
def after_create(wiki_content)
|
||||
Mailer.run.wiki_content_added(wiki_content) if Setting.notified_events.include?('wiki_content_added')
|
||||
# Mailer.run.wiki_content_added(wiki_content) if Setting.notified_events.include?('wiki_content_added')
|
||||
end
|
||||
|
||||
def after_update(wiki_content)
|
||||
if wiki_content.text_changed?
|
||||
Mailer.run.wiki_content_updated(wiki_content) if Setting.notified_events.include?('wiki_content_updated')
|
||||
end
|
||||
# if wiki_content.text_changed?
|
||||
# Mailer.run.wiki_content_updated(wiki_content) if Setting.notified_events.include?('wiki_content_updated')
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
class Work < ActiveRecord::Base
|
||||
# work_status 0:未发布/挂起 1:提交中 2:提交截止 3:启动在线评审 4:评审结束
|
||||
belongs_to :user
|
||||
belongs_to :contest
|
||||
attr_accessible :description, :end_time, :is_delete, :is_open, :name, :publish_time, :score_open, :work_status, :work_type
|
||||
attr_accessible :description, :end_time, :is_delete, :is_open, :name, :publish_time, :score_open, :work_status, :work_type, :contest_id, :user_id
|
||||
include ApplicationHelper
|
||||
|
||||
has_one :work_detail_group, :dependent => :destroy
|
||||
has_one :work_detail_manual, :dependent => :destroy
|
||||
has_many :contestant_work_projects, :dependent => :destroy
|
||||
has_many :contestant_works, :dependent => :destroy, :conditions => "is_delete != 1"
|
||||
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
|
||||
|
@ -20,6 +23,10 @@ class Work < ActiveRecord::Base
|
|||
after_save :act_as_contest_activity
|
||||
#after_destroy :delete_kindeditor_assets
|
||||
|
||||
def is_group_work?
|
||||
self.work_type == 3 && self.work_detail_group
|
||||
end
|
||||
|
||||
###添加回复
|
||||
def self.add_work_jour(user, notes, id, root_id, options = {})
|
||||
homework = Work.find(id)
|
||||
|
@ -55,10 +62,8 @@ class Work < ActiveRecord::Base
|
|||
if self.work_status == 0
|
||||
self.contest_messages.destroy_all
|
||||
else
|
||||
self.contest.contest_members.each do |m|
|
||||
if m.user_id != self.user_id
|
||||
self.contest_messages << ContestMessage.new(:user_id => m.user_id, :contest_id => self.contest_id, :viewed => false)
|
||||
end
|
||||
self.contest.contestants.each do |m|
|
||||
self.contest_messages << ContestMessage.new(:user_id => m.student_id, :contest_id => self.contest_id, :viewed => false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class WorkDetailGroup < ActiveRecord::Base
|
||||
belongs_to :work
|
||||
attr_accessible :base_on_project, :max_num, :min_num
|
||||
attr_accessible :base_on_project, :max_num, :min_num, :work_id
|
||||
end
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
class WorkDetailManual < ActiveRecord::Base
|
||||
belongs_to :work
|
||||
attr_accessible :evaluation_end, :evaluation_num, :evaluation_start, :work_id
|
||||
end
|
|
@ -23,13 +23,18 @@ class ContestsService
|
|||
else
|
||||
if params[:invite_code].present?
|
||||
role_ids = params[:role]
|
||||
role_str = role_ids.join(",")
|
||||
|
||||
#如果已经发送过消息了,那么就要给个提示
|
||||
if AppliedContest.where(:contest_id => contest.id, :user_id => current_user.id, :role => role_str, :status => 0).count != 0
|
||||
if AppliedContest.where(:contest_id => contest.id, :user_id => current_user.id, :status => 0).count != 0
|
||||
@state = 7
|
||||
else
|
||||
AppliedContest.create(:contest_id => contest.id, :user_id => current_user.id, :role => role_str, :status => 0)
|
||||
if role_ids.size == 1
|
||||
AppliedContest.create(:contest_id => contest.id, :user_id => current_user.id, :role => role_ids[0], :status => 0)
|
||||
else
|
||||
role_ids.each do |role_id|
|
||||
AppliedContest.create(:contest_id => contest.id, :user_id => current_user.id, :role => role_id, :status => 0)
|
||||
end
|
||||
end
|
||||
@state = 6
|
||||
end
|
||||
else
|
||||
|
|
|
@ -658,7 +658,7 @@ class CoursesService
|
|||
@state = 7
|
||||
end
|
||||
else
|
||||
Mailer.run.join_course_request(course, current_user, params[:role])
|
||||
# Mailer.run.join_course_request(course, current_user, params[:role])
|
||||
CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> role_str,:course_message_id=>current_user.id,:course_message_type=>'JoinCourseRequest',:status=>0)
|
||||
|
||||
#----------------微信通知----------------------
|
||||
|
|
|
@ -232,25 +232,27 @@ class UsersService
|
|||
|
||||
#修改密码
|
||||
def change_password params
|
||||
@current_user = User.find(params[:current_user_id])
|
||||
if @current_user.check_password?(params[:password])
|
||||
@current_user.password, @current_user.password_confirmation = params[:new_password], params[:new_password_confirmation]
|
||||
@current_user.save
|
||||
# 修改密码同步gitlab密码修改
|
||||
unless @current_user.gid.nil?
|
||||
begin
|
||||
g = Gitlab.client
|
||||
g.edit_user(@current_user.gid, :password => params[:new_password])
|
||||
rescue Exception => e
|
||||
logger.error "change users password failed! ===> #{e}"
|
||||
ActiveRecord::Base.transaction do
|
||||
@current_user = User.find(params[:current_user_id])
|
||||
if @current_user.check_password?(params[:password])
|
||||
@current_user.password, @current_user.password_confirmation = params[:new_password], params[:new_password_confirmation]
|
||||
@current_user.save
|
||||
# 修改密码同步gitlab密码修改
|
||||
unless @current_user.gid.nil?
|
||||
begin
|
||||
g = Gitlab.client
|
||||
g.edit_user(@current_user.gid, :password => params[:new_password])
|
||||
rescue Exception => e
|
||||
logger.error "change users password failed! ===> #{e}"
|
||||
end
|
||||
end
|
||||
end
|
||||
#raise @current_user.errors.full_message
|
||||
#return @current_user
|
||||
else
|
||||
raise l(:notice_account_wrong_password,:locale => 'zh')
|
||||
else
|
||||
raise l(:notice_account_wrong_password,:locale => 'zh')
|
||||
end
|
||||
@current_user
|
||||
end
|
||||
@current_user
|
||||
end
|
||||
|
||||
#搜索用户
|
||||
|
|
|
@ -0,0 +1,281 @@
|
|||
require "base64"
|
||||
require 'zip'
|
||||
|
||||
module ZipService
|
||||
|
||||
SAVE_FOLDER = "#{Rails.root}/files"
|
||||
OUTPUT_FOLDER = "#{Rails.root}/files/archiveZip"
|
||||
MAX_PATH = 50
|
||||
|
||||
def zip_bid(bid)
|
||||
# Todo: User Access Controll
|
||||
bid_homework_path = []
|
||||
digests = []
|
||||
bid.homeworks.each do |homeattach|
|
||||
unless homeattach.attachments.empty?
|
||||
out_file = zip_homework_by_user(homeattach)
|
||||
bid_homework_path << out_file.file_path
|
||||
digests << out_file.file_digest
|
||||
end
|
||||
end
|
||||
homework_id = bid.id
|
||||
user_id = bid.author_id
|
||||
out_file = find_or_pack(homework_id, user_id, digests.sort){
|
||||
zipping("#{Time.now.to_i}_#{bid.name}.zip",
|
||||
bid_homework_path, OUTPUT_FOLDER)
|
||||
}
|
||||
[{files:[out_file.file_path], count: 1, index: 1,
|
||||
real_file: out_file.file_path,
|
||||
file: File.basename(out_file.file_path),
|
||||
base64file: encode64(File.basename(out_file.file_path)),
|
||||
size:(out_file.pack_size / 1024.0 / 1024.0).round(2)
|
||||
}]
|
||||
end
|
||||
|
||||
def encode64(str)
|
||||
Base64.urlsafe_encode64(str)
|
||||
end
|
||||
|
||||
def decode64(str)
|
||||
Base64.urlsafe_decode64(str)
|
||||
end
|
||||
|
||||
def zip_homework_common homework_common
|
||||
bid_homework_path = []
|
||||
digests = []
|
||||
homework_common.student_works.each do |work|
|
||||
unless work.attachments.empty?
|
||||
out_file = zip_student_work_by_user(work)
|
||||
|
||||
bid_homework_path << out_file.file_path
|
||||
digests << out_file.file_digest
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
homework_id = homework_common.id
|
||||
user_id = homework_common.user_id
|
||||
out_file = find_or_pack(homework_id, user_id, digests.sort){
|
||||
zipping("#{Time.now.to_i}_#{homework_common.name}.zip",
|
||||
bid_homework_path, OUTPUT_FOLDER)
|
||||
}
|
||||
[{files:[out_file.file_path], count: 1, index: 1,
|
||||
real_file: out_file.file_path,
|
||||
file: File.basename(out_file.file_path),
|
||||
base64file: encode64(File.basename(out_file.file_path)),
|
||||
size:(out_file.pack_size / 1024.0 / 1024.0).round(2)
|
||||
}]
|
||||
end
|
||||
|
||||
def zip_contest_work homework_common
|
||||
bid_homework_path = []
|
||||
digests = []
|
||||
homework_common.contestant_works.each do |work|
|
||||
unless work.attachments.empty?
|
||||
out_file = zip_contestant_work_by_user(work)
|
||||
|
||||
bid_homework_path << out_file.file_path
|
||||
digests << out_file.file_digest
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
homework_id = homework_common.id
|
||||
user_id = homework_common.user_id
|
||||
out_file = find_or_pack(homework_id, user_id, digests.sort){
|
||||
zipping("#{Time.now.to_i}_#{homework_common.name}.zip",
|
||||
bid_homework_path, OUTPUT_FOLDER)
|
||||
}
|
||||
[{files:[out_file.file_path], count: 1, index: 1,
|
||||
real_file: out_file.file_path,
|
||||
file: File.basename(out_file.file_path),
|
||||
base64file: encode64(File.basename(out_file.file_path)),
|
||||
size:(out_file.pack_size / 1024.0 / 1024.0).round(2)
|
||||
}]
|
||||
end
|
||||
|
||||
def zip_homework_by_user(homework_attach)
|
||||
homeworks_attach_path = []
|
||||
not_exist_file = []
|
||||
# 需要将所有homework.attachments遍历加入zip
|
||||
digests = []
|
||||
homework_attach.attachments.each do |attach|
|
||||
if File.exist?(attach.diskfile)
|
||||
homeworks_attach_path << attach.diskfile
|
||||
digests << attach.digest
|
||||
else
|
||||
not_exist_file << attach.filename
|
||||
digests << 'not_exist_file'
|
||||
end
|
||||
end
|
||||
out_file = find_or_pack(homework_attach.bid_id, homework_attach.user_id, digests.sort){
|
||||
zipping("#{homework_attach.user.show_name}_#{((homework_attach.user.user_extensions.nil? || homework_attach.user.user_extensions.student_id.nil?) ? "" : homework_attach.user.user_extensions.student_id)}_#{Time.now.to_i.to_s}.zip",
|
||||
homeworks_attach_path, OUTPUT_FOLDER, true, not_exist_file)
|
||||
}
|
||||
end
|
||||
|
||||
def make_zip_name(work)
|
||||
"#{work.user.show_name}_#{((work.user.user_extensions.nil? || work.user.user_extensions.student_id.nil?) ? "" : work.user.user_extensions.student_id)}_#{Time.now.to_i.to_s}"
|
||||
end
|
||||
|
||||
def zip_student_work_by_user(work)
|
||||
homeworks_attach_path = []
|
||||
not_exist_file = []
|
||||
# 需要将所有homework.attachments遍历加入zip
|
||||
digests = []
|
||||
work.attachments.each do |attach|
|
||||
if File.exist?(attach.diskfile)
|
||||
homeworks_attach_path << attach.diskfile
|
||||
digests << attach.digest
|
||||
else
|
||||
not_exist_file << attach.filename
|
||||
digests << 'not_exist_file'
|
||||
end
|
||||
end
|
||||
|
||||
#单个文件的话,不需要压缩,只改名
|
||||
out_file = nil
|
||||
if homeworks_attach_path.size == 1
|
||||
out_file = find_or_pack(work.homework_common_id, work.user_id, digests.sort){
|
||||
des_path = "#{OUTPUT_FOLDER}/#{make_zip_name(work)}_#{File.basename(homeworks_attach_path.first)}"
|
||||
FileUtils.cp homeworks_attach_path.first, des_path
|
||||
des_path
|
||||
}
|
||||
else
|
||||
out_file = find_or_pack(work.homework_common_id, work.user_id, digests.sort){
|
||||
zipping("#{make_zip_name(work)}.zip",
|
||||
homeworks_attach_path, OUTPUT_FOLDER, true, not_exist_file)
|
||||
}
|
||||
end
|
||||
out_file
|
||||
|
||||
end
|
||||
|
||||
def zip_contestant_work_by_user(work)
|
||||
homeworks_attach_path = []
|
||||
not_exist_file = []
|
||||
# 需要将所有homework.attachments遍历加入zip
|
||||
digests = []
|
||||
work.attachments.each do |attach|
|
||||
if File.exist?(attach.diskfile)
|
||||
homeworks_attach_path << attach.diskfile
|
||||
digests << attach.digest
|
||||
else
|
||||
not_exist_file << attach.filename
|
||||
digests << 'not_exist_file'
|
||||
end
|
||||
end
|
||||
|
||||
#单个文件的话,不需要压缩,只改名
|
||||
out_file = nil
|
||||
if homeworks_attach_path.size == 1
|
||||
out_file = find_or_pack(work.work_id, work.user_id, digests.sort){
|
||||
des_path = "#{OUTPUT_FOLDER}/#{make_zip_name(work)}_#{File.basename(homeworks_attach_path.first)}"
|
||||
FileUtils.cp homeworks_attach_path.first, des_path
|
||||
des_path
|
||||
}
|
||||
else
|
||||
out_file = find_or_pack(work.work_id, work.user_id, digests.sort){
|
||||
zipping("#{make_zip_name(work)}.zip",
|
||||
homeworks_attach_path, OUTPUT_FOLDER, true, not_exist_file)
|
||||
}
|
||||
end
|
||||
out_file
|
||||
|
||||
end
|
||||
|
||||
|
||||
def find_or_pack(homework_id, user_id, digests)
|
||||
raise "please given a pack block" unless block_given?
|
||||
|
||||
out_file = ZipPack.packed?(homework_id, user_id, digests.sort)
|
||||
|
||||
unless out_file && out_file.file_valid?
|
||||
file = yield
|
||||
|
||||
ZipPack.where(homework_id: homework_id,
|
||||
user_id: user_id).delete_all
|
||||
|
||||
out_file = ZipPack.create(homework_id: homework_id,
|
||||
user_id: user_id,
|
||||
file_digest: Trustie::Utils.digest(file),
|
||||
file_path: file,
|
||||
pack_size: File.size(file),
|
||||
file_digests: digests.join(',')
|
||||
)
|
||||
else
|
||||
out_file.pack_times = out_file.pack_times + 1
|
||||
out_file.save
|
||||
end
|
||||
|
||||
out_file
|
||||
end
|
||||
|
||||
|
||||
def zipping(zip_name_refer, files_paths, output_path, is_attachment=false, not_exist_file=[])
|
||||
rename_zipfile = zip_name_refer ||= "#{Time.now.to_i.to_s}.zip"
|
||||
# 文件名过长
|
||||
|
||||
if rename_zipfile.size > MAX_PATH
|
||||
rename_zipfile = rename_zipfile[0,rename_zipfile.size-4][0,MAX_PATH-4] + rename_zipfile[-4,4]
|
||||
end
|
||||
|
||||
zipfile_name = "#{output_path}/#{rename_zipfile}"
|
||||
|
||||
Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name))
|
||||
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
||||
files_paths.each do |filename|
|
||||
rename_file = File.basename(filename)
|
||||
rename_file = filename_to_real( File.basename(filename)) if is_attachment
|
||||
|
||||
begin
|
||||
zipfile.add(rename_file, filename)
|
||||
rescue Exception => e
|
||||
zipfile.get_output_stream('FILE_NOTICE.txt'){|os| os.write l(:label_file_exist)}
|
||||
next
|
||||
end
|
||||
end
|
||||
unless not_exist_file.empty?
|
||||
zipfile.get_output_stream('FILE_LOST.txt'){|os| os.write l(:label_file_lost) + not_exist_file.join(',').to_s}
|
||||
end
|
||||
end
|
||||
zipfile_name
|
||||
end
|
||||
|
||||
# 合理分配文件打包
|
||||
# 如果小于 pack_attachment_max_size, 则返回单个文件
|
||||
# 反之则切分为多个文件组返回
|
||||
def split_pack_files(files, pack_attachment_max_size)
|
||||
max_size = 0
|
||||
last_files = []
|
||||
ret_files = []
|
||||
files.each_with_index do |f,i|
|
||||
if (max_size += File.size(f)) > pack_attachment_max_size
|
||||
max_size = 0
|
||||
if last_files.empty? #如果单个文件超过大小,也将此文件作为一组
|
||||
ret_files << {files: [f], count: 1, index: ret_files.count+1}
|
||||
last_files.clear
|
||||
else
|
||||
ret_files << {files:last_files, count: last_files.count, index: ret_files.count+1}
|
||||
last_files.clear
|
||||
redo
|
||||
end
|
||||
else
|
||||
last_files << f
|
||||
end
|
||||
end
|
||||
|
||||
ret_files << {files:last_files, count: last_files.count, index: ret_files.count+1} unless last_files.empty?
|
||||
ret_files
|
||||
end
|
||||
|
||||
def detect_content_type(name)
|
||||
content_type = Redmine::MimeType.of(name)
|
||||
content_type.to_s
|
||||
end
|
||||
|
||||
def filename_to_real(name)
|
||||
attach = Attachment.find_by_disk_filename(name)
|
||||
attach.filename
|
||||
end
|
||||
end
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue