@ -1,3 +1,4 @@
#encoding: utf-8
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
@ -14,6 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class UsersController < ApplicationController
layout :setting_layout
@ -41,13 +43,15 @@ class UsersController < ApplicationController
:user_watchlist , :user_fanslist , :update , :user_courses , :user_homeworks , :watch_projects , :show_score , :topic_score_index , :project_score_index ,
: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 , :update_score , :user_activities , :user_projects_index ,
:user_courses4show , :user_projects4show , :user_course_activities , :user_project_activities , :user_feedback4show , :user_visitorlist , :user_messages ]
:user_courses4show , :user_projects4show , :user_course_activities , :user_project_activities , :user_feedback4show , :user_visitorlist ,
:user_resource , :user_resource_create , :user_resource_delete , :rename_resource , :search_user_course , :add_exist_file_to_course ,
:search_user_project , :resource_preview , :resource_search , :add_exist_file_to_project ]
#edit has been deleted by huang, 2013-9-23
before_filter :find_user , :only = > [ :user_fanslist , :user_watchlist , :show , :edit , :update , :destroy , :edit_membership , :user_courses ,
:user_homeworks , :destroy_membership , :user_activities , :user_projects , :user_newfeedback , :user_comments ,
:watch_contests , :info , :watch_projects , :show_score , :topic_score_index , :project_score_index ,
: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 ,
:activity_new_score_index , :influence_new_score_index , :score_new_index , :user_projects_index , :user_resource ,
:user_courses4show , :user_projects4show , :user_course_activities , :user_project_activities , :user_feedback4show , :user_visitorlist , :user_messages ]
before_filter :auth_user_extension , only : :show
#before_filter :rest_user_score, only: :show
@ -889,6 +893,272 @@ class UsersController < ApplicationController
end
end
# 上传用户资源
def user_resource_create
@user = User . find ( params [ :id ] )
#@user.save_attachments(params[:attachments],User.current)
# Container_type为Principal
Attachment . attach_filesex ( @user , params [ :attachments ] , params [ :attachment_type ] )
if ( params [ :type ] . nil? || params [ :type ] == " 1 " ) #全部
if User . current . id . to_i == params [ :id ] . to_i
user_course_ids = User . current . courses . map { | c | c . id } #我的资源库的话,那么应该是我上传的所有资源 加上 我加入的课程的所有资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #Ta的资源库的话, 应该是他上传的公开资源 加上 他加入的所有我可见课程里的公开资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 " +
" and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 2 " #课程资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type = 'Course') " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #如果课程私有资源,那么要看这个资源的课程是不是在 这个user的所有我可见的课程中
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Course') " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 3 " #项目资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type = 'Project' " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Project' " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 4 " #附件
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
end
end
@type = params [ :type ] || 1
@limit = 10
@is_remote = true
@obj_count = @attachments . count
@obj_pages = Paginator . new @obj_count , @limit , params [ 'page' ] || 1
@offset || = @obj_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@attachments = paginateHelper @attachments , 10
respond_to do | format |
format . js
end
end
# 删除用户资源,分为批量删除 和 单个删除,只能删除自己上传的资源
def user_resource_delete
if params [ :resource_id ] . present?
Attachment . where ( " author_id = #{ User . current . id } " ) . delete ( params [ :resource_id ] )
elsif params [ :checkbox1 ] . present?
params [ :checkbox1 ] . each do | id |
Attachment . where ( " author_id = #{ User . current . id } " ) . delete ( id )
end
end
if ( params [ :type ] . nil? || params [ :type ] == " 1 " ) #全部
if User . current . id . to_i == params [ :id ] . to_i
user_course_ids = User . current . courses . map { | c | c . id } #我的资源库的话,那么应该是我上传的所有资源 加上 我加入的课程的所有资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #Ta的资源库的话, 应该是他上传的公开资源 加上 他加入的所有我可见课程里的公开资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 " +
" and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 2 " #课程资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type = 'Course') " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #如果课程私有资源,那么要看这个资源的课程是不是在 这个user的所有我可见的课程中
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Course') " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 3 " #项目资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type = 'Project' " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Project' " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 4 " #附件
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
end
end
@type = params [ :type ]
@limit = 10
@is_remote = true
@obj_count = @attachments . count
@obj_pages = Paginator . new @obj_count , @limit , params [ 'page' ] || 1
@offset || = @obj_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@attachments = paginateHelper @attachments , 10
respond_to do | format |
format . js
end
end
#根据id或者名称搜索教师或者助教为当前用户的课程
def search_user_course
@user = User . current
if ! params [ :search ] . nil?
@course = @user . courses . where ( " #{ Course . table_name } .id = #{ params [ :search ] . to_i } or #{ Course . table_name } .name like '% #{ params [ :search . to_s ] } %' " )
. select { | course | @user . allowed_to? ( :as_teacher , course ) }
else
@course = @user . courses
. select { | course | @user . allowed_to? ( :as_teacher , course ) }
end
#这里仅仅是传递需要发送的资源id
@send_id = params [ :send_id ]
@send_ids = params [ :checkbox1 ] || params [ :send_ids ]
respond_to do | format |
format . js
end
end
# 根据id或者名称搜索当前用户所在的项目
def search_user_project
@user = User . current
if ! params [ :search ] . nil?
@projects = @user . projects . where ( " #{ Project . table_name } .id = #{ params [ :search ] . to_i } or #{ Project . table_name } .name like '% #{ params [ :search . to_s ] } %' " )
else
@projects = @user . projects
end
#这里仅仅是传递需要发送的资源id
@send_id = params [ :send_id ]
@send_ids = params [ :checkbox1 ] || params [ :send_ids ] #搜索的时候 和 直接 用表格提交的时候的send_ids
respond_to do | format |
format . js
end
end
# 将资源发送到对应的课程,分为发送单个,或者批量发送
def add_exist_file_to_course
if params [ :send_id ] . present?
send_id = params [ :send_id ]
ori = Attachment . find_by_id ( send_id )
course_ids = params [ :course_ids ]
unless course_ids . nil?
course_ids . each do | id |
next if ori . blank?
attach_copied_obj = ori . copy
attach_copied_obj . tag_list . add ( ori . tag_list ) # tag关联
attach_copied_obj . container = Course . find ( id )
attach_copied_obj . created_on = Time . now
attach_copied_obj . author_id = User . current . id
if attach_copied_obj . attachtype == nil
attach_copied_obj . attachtype = 4
end
attach_copied_obj . save
@save_message = attach_copied_obj . errors . full_messages
end
end
elsif params [ :send_ids ] . present?
send_ids = params [ :send_ids ] . split ( " " )
send_ids . each do | send_id |
ori = Attachment . find_by_id ( send_id )
course_ids = params [ :course_ids ]
unless course_ids . nil?
course_ids . each do | id |
next if ori . blank?
attach_copied_obj = ori . copy
attach_copied_obj . tag_list . add ( ori . tag_list ) # tag关联
attach_copied_obj . container = Course . find ( id )
attach_copied_obj . created_on = Time . now
attach_copied_obj . author_id = User . current . id
if attach_copied_obj . attachtype == nil
attach_copied_obj . attachtype = 4
end
attach_copied_obj . save
@save_message = attach_copied_obj . errors . full_messages
end
end
end
end
respond_to do | format |
format . js
end
end
# 添加资源到对应的项目
def add_exist_file_to_project
if params [ :send_id ] . present?
send_id = params [ :send_id ]
project_ids = params [ :projects_ids ]
ori = Attachment . find_by_id ( send_id )
unless project_ids . nil?
project_ids . each do | project_id |
next if ori . blank?
attach_copied_obj = ori . copy
attach_copied_obj . tag_list . add ( ori . tag_list ) # tag关联
attach_copied_obj . container = Project . find ( project_id )
attach_copied_obj . created_on = Time . now
attach_copied_obj . author_id = User . current . id
if attach_copied_obj . attachtype == nil
attach_copied_obj . attachtype = 1
end
attach_copied_obj . save
end
end
elsif params [ :send_ids ] . present?
send_ids = params [ :send_ids ] . split ( " " )
send_ids . each do | send_id |
project_ids = params [ :projects_ids ]
ori = Attachment . find_by_id ( send_id )
unless project_ids . nil?
project_ids . each do | project_id |
next if ori . blank?
attach_copied_obj = ori . copy
attach_copied_obj . tag_list . add ( ori . tag_list ) # tag关联
attach_copied_obj . container = Project . find ( project_id )
attach_copied_obj . created_on = Time . now
attach_copied_obj . author_id = User . current . id
if attach_copied_obj . attachtype == nil
attach_copied_obj . attachtype = 1
end
attach_copied_obj . save
end
end
end
else
end
respond_to do | format |
format . js
end
end
# 资源预览
def resource_preview
preview_id = params [ :resource_id ]
@file = Attachment . find ( preview_id )
@preview_able = false ;
if %w( pdf pptx doc docx xls xlsx ) . any? { | x | @file . filename . downcase . end_with? ( x ) }
@preview_able = true ;
end
respond_to do | format |
format . js
end
end
# 重命名资源
def rename_resource
@attachment = Attachment . find ( params [ :res_id ] ) if params [ :res_id ] . present?
if @attachment != nil
@attachment . filename = params [ :res_name ]
@flag = @attachment . save
end
# respond_to do |format|
# format.js
# end
if @flag
render :text = > download_named_attachment_path ( @attachment . id , @attachment . filename )
else
render :text = > 'fail'
end
end
def destroy
@user . destroy
respond_to do | format |
@ -1090,6 +1360,111 @@ class UsersController < ApplicationController
@user = User . find ( params [ :id ] )
end
# 资源库 分为全部 课程资源 项目资源 附件
def user_resource
#确定container_type
# @user = User.find(params[:id])
# 别人的资源库是没有权限去看的
if User . current . id . to_i != params [ :id ] . to_i
render_403
return
end
if ( params [ :type ] . nil? || params [ :type ] == " 1 " ) #全部
if User . current . id . to_i == params [ :id ] . to_i
user_course_ids = User . current . courses . map { | c | c . id } #我的资源库的话,那么应该是我上传的所有资源 加上 我加入的课程的所有资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #Ta的资源库的话, 应该是他上传的公开资源 加上 他加入的所有我可见课程里的公开资源
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 " +
" and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 2 " #课程资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and container_type = 'Course') " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #如果课程私有资源,那么要看这个资源的课程是不是在 这个user的所有我可见的课程中
@attachments = Attachment . where ( " (author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Course') " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 3 " #项目资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type = 'Project' " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Project' " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 4 " #附件
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') " ) . order ( " created_on desc " )
end
end
@type = params [ :type ]
@limit = 10
@is_remote = true
@obj_count = @attachments . count
@obj_pages = Paginator . new @obj_count , @limit , params [ 'page' ] || 1
@offset || = @obj_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@attachments = paginateHelper @attachments , 10
respond_to do | format |
format . js
format . html { render :layout = > 'base_users_new' }
end
end
# 根据资源关键字进行搜索
def resource_search
search = params [ :search ] . to_s . strip . downcase
if ( params [ :type ] . nil? || params [ :type ] == " 1 " ) #全部
if User . current . id . to_i == params [ :id ] . to_i
user_course_ids = User . current . courses . map { | c | c . id } #我的资源库的话,那么应该是我上传的所有资源 加上 我加入的课程的所有资源 取交集并查询
@attachments = Attachment . where ( " ((author_id = #{ params [ :id ] } and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and container_id in ( #{ user_course_ids . join ( ',' ) } ))) and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #如果课程私有资源,那么要看这个资源的课程是不是在 这个user的所有我可见的课程中
@attachments = Attachment . where ( " ((author_id = #{ params [ :id ] } and is_public = 1 and container_type in " +
" ('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) ) " +
" and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 2 " #课程资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type = 'Course' and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
else
user_course_ids = User . find ( params [ :id ] ) . courses . visible . map { | c | c . id } #如果课程私有资源,那么要看这个资源的课程是不是在 这个user的所有我可见的课程中
@attachments = Attachment . where ( " ((author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Course') " +
" or (container_type = 'Course' and is_public = 1 and container_id in ( #{ user_course_ids . join ( ',' ) } )) ) " +
" and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 3 " #项目资源
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type = 'Project' and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type = 'Project' and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
end
elsif params [ :type ] == " 4 " #附件
if User . current . id . to_i == params [ :id ] . to_i
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and container_type in('Project','Issue','Document','Message','News','StudentWorkScore','HomewCommon') and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
else
@attachments = Attachment . where ( " author_id = #{ params [ :id ] } and is_public = 1 and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon') and (filename like '% #{ search } %') " ) . order ( " created_on desc " )
end
end
@type = params [ :type ]
@limit = 10
@is_remote = true
@obj_count = @attachments . count
@obj_pages = Paginator . new @obj_count , @limit , params [ 'page' ] || 1
@offset || = @obj_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@attachments = paginateHelper @attachments , 10
respond_to do | format |
format . js
end
end
private
def find_user
@ -1103,7 +1478,7 @@ class UsersController < ApplicationController
render_404
end
def setting_layout ( default_base = 'base_users ')
def setting_layout ( default_base = 'base_users _new ')
User . current . admin? ? default_base : default_base
end
@ -1153,4 +1528,7 @@ class UsersController < ApplicationController
impl . save
end
end
end