2015-11-03 10:28:13 +08:00
#encoding: utf-8
2014-10-23 11:30:34 +08:00
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# 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 FilesController < ApplicationController
2016-01-13 10:08:48 +08:00
layout 'base_projects' #by young
2014-10-29 16:13:49 +08:00
2014-10-23 11:30:34 +08:00
menu_item :files
2015-02-11 20:23:50 +08:00
before_filter :auth_login1 , :only = > [ :index ]
2015-03-11 11:22:58 +08:00
before_filter :logged_user_by_apptoken , :only = > [ :index ]
2014-10-23 11:30:34 +08:00
before_filter :find_project_by_project_id #, :except => [:getattachtype]
2016-01-06 16:22:13 +08:00
before_filter :authorize , :except = > [ :create , :getattachtype , :quote_resource_show , :search , :searchone4reload , :search_project , :quote_resource_show_project ,
:search_tag_attachment , :subfield_upload_file , :search_org_subfield_tag_attachment ,
:search_tag_attachment , :quote_resource_show_org_subfield , :find_org_subfield_attache ,
2016-10-09 15:09:18 +08:00
:search_files_in_subfield , :upload_files_menu , :file_hidden , :republish_file , :update_file_description , :edit_file_description ]
2014-10-23 11:30:34 +08:00
helper :sort
include SortHelper
2014-11-22 13:45:17 +08:00
include FilesHelper
2014-10-23 11:30:34 +08:00
helper :project_score
2014-11-26 14:54:31 +08:00
include CoursesHelper
2015-03-31 10:03:52 +08:00
include ApplicationHelper
2014-10-23 11:30:34 +08:00
def show_attachments obj
2014-11-22 13:45:17 +08:00
@attachments = [ ]
2014-10-23 11:30:34 +08:00
obj . each do | container |
2014-11-22 13:45:17 +08:00
@attachments += container . attachments
2014-10-23 11:30:34 +08:00
end
2015-07-01 10:30:26 +08:00
@all_attachments = User . current . admin? ? @attachments : visable_attachemnts ( @attachments )
2014-10-23 11:30:34 +08:00
@limit = 10
2014-11-18 18:02:01 +08:00
@feedback_count = @all_attachments . count
2014-10-23 11:30:34 +08:00
@feedback_pages = Paginator . new @feedback_count , @limit , params [ 'page' ]
@offset || = @feedback_pages . offset
2015-03-30 17:14:52 +08:00
#@curse_attachments_all = @all_attachments[@offset, @limit]
@obj_attachments = paginateHelper @all_attachments , 10
2014-10-23 11:30:34 +08:00
end
2015-05-20 11:56:34 +08:00
def searchone4reload
attachment = Attachment . find_by_id ( params [ :fileid ] ) ;
respond_to do | format |
format . html { render :layout = > nil , :locals = > { :file = > attachment , :course = > @course } }
end
end
2014-11-21 11:38:53 +08:00
def search
2014-11-28 11:33:51 +08:00
sort = " "
@sort = " "
@order = " "
@is_remote = true
2015-04-15 19:57:16 +08:00
@q = params [ :name ] . strip
2014-11-28 11:33:51 +08:00
if params [ :sort ]
order_by = params [ :sort ] . split ( " : " )
@sort = order_by [ 0 ]
if order_by . count > 1
@order = order_by [ 1 ]
end
sort = " #{ @sort } #{ @order } "
end
2015-04-15 17:31:15 +08:00
# show_attachments [@course]
2014-11-21 11:38:53 +08:00
begin
q = " % #{ params [ :name ] . strip } % "
#(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
if params [ :insite ]
2015-04-15 17:43:08 +08:00
if q == " %% "
@result = [ ]
2016-08-13 14:17:50 +08:00
# @searched_attach = paginateHelper @result,10
2015-04-15 17:43:08 +08:00
else
@result = find_public_attache q , sort
@result = visable_attachemnts_insite @result , @course
2016-08-13 14:17:50 +08:00
# @searched_attach = paginateHelper @result,10
2015-04-15 17:43:08 +08:00
end
2014-11-21 11:38:53 +08:00
else
2014-11-28 11:33:51 +08:00
@result = find_course_attache q , @course , sort
2014-11-22 13:45:17 +08:00
@result = visable_attachemnts @result
2016-09-02 11:27:35 +08:00
# @searched_attach = paginateHelper @result,10
2015-04-16 14:21:05 +08:00
@tag_list = get_course_tag_list @course
2014-11-21 11:38:53 +08:00
end
2016-08-13 14:17:50 +08:00
@all_attachments = @result
2016-09-02 14:50:06 +08:00
get_attachment_for_tip ( @all_attachments )
2016-08-13 14:17:50 +08:00
@limit = 10
@feedback_count = @all_attachments . count
@feedback_pages = Paginator . new @feedback_count , @limit , params [ 'page' ]
@offset || = @feedback_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@obj_attachments = paginateHelper @all_attachments , 10
2016-09-02 11:27:35 +08:00
#rescue Exception => e
# #render 'stores'
# redirect_to search_course_files_url
2014-11-21 11:38:53 +08:00
end
2016-02-23 11:04:19 +08:00
end
def file_hidden
@file = Attachment . find params [ :id ]
@course = Course . find params [ :course_id ]
respond_to do | format |
format . js
end
end
def republish_file
@file = Attachment . find params [ :id ]
@course = Course . find params [ :course_id ]
if params [ :publish_time ]
unless params [ :publish_time ] == " "
@file . publish_time = params [ :publish_time ]
end
end
if @file . publish_time > Date . today
@file . is_publish = 0
2016-02-23 11:35:07 +08:00
else
@file . is_publish = 1
2016-02-23 11:04:19 +08:00
end
@file . save
respond_to do | format |
format . js
end
2014-11-21 11:38:53 +08:00
end
2015-03-31 15:57:15 +08:00
def search_project
sort = " "
@sort = " "
@order = " "
@is_remote = true
2016-01-06 11:05:52 +08:00
@q = params [ :name ] . strip
2015-03-31 15:57:15 +08:00
if params [ :sort ]
order_by = params [ :sort ] . split ( " : " )
@sort = order_by [ 0 ]
if order_by . count > 1
@order = order_by [ 1 ]
end
sort = " #{ @sort } #{ @order } "
end
2016-01-06 11:05:52 +08:00
# show_attachments [@course]
2015-03-31 15:57:15 +08:00
begin
q = " % #{ params [ :name ] . strip } % "
#(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
if params [ :insite ]
2015-05-23 10:40:15 +08:00
if q == " %% "
2016-01-06 11:05:52 +08:00
@project_attachment_result = [ ]
2016-08-13 14:17:50 +08:00
# @searched_attach = paginateHelper @project_attachment_result, 10
2015-05-23 10:40:15 +08:00
else
2016-01-06 11:05:52 +08:00
@project_attachment_result = find_public_attache q , sort
@project_attachment_result = visable_attachemnts_insite @project_attachment_result , @project
2016-08-13 14:17:50 +08:00
# @searched_attach = paginateHelper @project_attachment_result, 10
2015-05-23 10:40:15 +08:00
end
2015-03-31 15:57:15 +08:00
else
2016-01-06 11:05:52 +08:00
@project_attachment_result = find_project_attache q , @project , sort
@project_attachment_result = visable_attachemnts @project_attachment_result
2016-08-13 14:17:50 +08:00
# @searched_attach = paginateHelper @project_attachment_result,10
2016-01-06 18:07:35 +08:00
@tag_list = get_project_tag_list @project
2016-01-06 11:05:52 +08:00
end
2016-08-13 14:17:50 +08:00
@all_attachments = @project_attachment_result
2016-09-02 14:50:06 +08:00
get_attachment_for_tip ( @all_attachments )
2016-08-13 14:17:50 +08:00
@limit = 10
@feedback_count = @all_attachments . count
@feedback_pages = Paginator . new @feedback_count , @limit , params [ 'page' ]
@offset || = @feedback_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@obj_attachments = paginateHelper @all_attachments , 10
2015-03-31 15:57:15 +08:00
#rescue Exception => e
# #render 'stores'
# redirect_to search_course_files_url
end
end
2016-09-02 11:27:35 +08:00
def search_files_in_subfield
sort = " "
@sort = " "
@order = " "
@is_remote = true
@q = params [ :name ] . strip
if params [ :sort ]
order_by = params [ :sort ] . split ( " : " )
@sort = order_by [ 0 ]
if order_by . count > 1
@order = order_by [ 1 ]
2015-12-14 10:26:34 +08:00
end
2016-09-02 11:27:35 +08:00
sort = " #{ @sort } #{ @order } "
end
# show_attachments [@course]
begin
q = " % #{ params [ :name ] . strip } % "
#(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
if params [ :insite ]
if q == " %% "
@result = [ ]
@searched_attach = paginateHelper @result , 10
2015-12-14 10:26:34 +08:00
else
2016-09-02 11:27:35 +08:00
@result = find_public_attache q , sort
@result = visable_attachemnts_insite @result , @org_subfield
2015-12-14 10:26:34 +08:00
@searched_attach = paginateHelper @result , 10
end
2016-09-02 11:27:35 +08:00
else
@result = find_org_subfield_attache q , @org_subfield , sort
@result = visable_attachemnts @result
@searched_attach = paginateHelper @result , 10
@tag_list = attachment_tag_list @result
2015-12-14 10:26:34 +08:00
end
2016-09-02 11:27:35 +08:00
#rescue Exception => e
# #render 'stores'
# redirect_to search_course_files_url
2015-12-14 10:26:34 +08:00
end
2016-09-02 11:27:35 +08:00
@page = params [ :page ] || 1
end
2015-12-14 10:26:34 +08:00
2014-11-28 11:33:51 +08:00
def find_course_attache keywords , course , sort = " "
if sort == " "
sort = " created_on DESC "
end
2015-10-09 09:06:01 +08:00
if keywords != " %% "
2016-09-02 11:27:35 +08:00
resultSet = Attachment . where ( " attachments.container_type = 'Course' And attachments.container_id = ' #{ course . id } ' AND filename LIKE :like " , like : " % #{ keywords } % " ) . reorder ( sort )
2015-10-09 09:06:01 +08:00
else
resultSet = Attachment . where ( " attachments.container_type = 'Course' And attachments.container_id = ' #{ course . id } ' " ) . reorder ( sort )
end
2014-11-27 17:17:33 +08:00
#resultSet = Attachment.find_by_sql("SELECT `attachments`.* FROM `attachments` LEFT OUTER JOIN `homework_attaches` ON `attachments`.container_type = 'HomeworkAttach' AND `attachments`.container_id = `homework_attaches`.id LEFT OUTER JOIN `homework_for_courses` ON `homework_attaches`.bid_id = `homework_for_courses`.bid_id LEFT OUTER JOIN `homework_for_courses` AS H_C ON `attachments`.container_type = 'Bid' AND `attachments`.container_id = H_C.bid_id WHERE (`homework_for_courses`.course_id = 117 OR H_C.course_id = 117 OR (`attachments`.container_type = 'Course' AND `attachments`.container_id = 117)) AND `attachments`.filename LIKE '%#{keywords}%'").reorder("created_on DESC")
2014-11-21 11:38:53 +08:00
end
2015-12-14 10:26:34 +08:00
def find_org_subfield_attache keywords , org_subfield , sort = " "
if sort == " "
sort = " created_on DESC "
end
if keywords != " %% "
resultSet = Attachment . where ( " attachments.container_type = 'OrgSubfield' And attachments.container_id = ' #{ org_subfield . id } ' AND filename LIKE :like " , like : " % #{ keywords } % " ) .
reorder ( sort )
else
resultSet = Attachment . where ( " attachments.container_type = 'OrgSubfield' And attachments.container_id = ' #{ org_subfield . id } ' " ) . reorder ( sort )
end
#resultSet = Attachment.find_by_sql("SELECT `attachments`.* FROM `attachments` LEFT OUTER JOIN `homework_attaches` ON `attachments`.container_type = 'HomeworkAttach' AND `attachments`.container_id = `homework_attaches`.id LEFT OUTER JOIN `homework_for_courses` ON `homework_attaches`.bid_id = `homework_for_courses`.bid_id LEFT OUTER JOIN `homework_for_courses` AS H_C ON `attachments`.container_type = 'Bid' AND `attachments`.container_id = H_C.bid_id WHERE (`homework_for_courses`.course_id = 117 OR H_C.course_id = 117 OR (`attachments`.container_type = 'Course' AND `attachments`.container_id = 117)) AND `attachments`.filename LIKE '%#{keywords}%'").reorder("created_on DESC")
end
2015-03-31 15:57:15 +08:00
def find_project_attache keywords , project , sort = " "
if sort == " "
sort = " created_on DESC "
end
2016-01-06 11:05:52 +08:00
if keywords != " %% "
resultSet = Attachment . where ( " attachments.container_type = 'Project' And attachments.container_id = ' #{ project . id } ' AND filename LIKE :like " , like : " % #{ keywords } % " ) . reorder ( sort )
2015-04-21 09:49:10 +08:00
else
2016-01-06 11:05:52 +08:00
resultSet = Attachment . where ( " attachments.container_type = 'Project' And attachments.container_id = ' #{ project . id } ' " ) . reorder ( sort )
2015-04-21 09:49:10 +08:00
end
2016-09-02 11:27:35 +08:00
end
2015-03-31 15:57:15 +08:00
2014-11-28 11:33:51 +08:00
def find_public_attache keywords , sort = " "
2014-11-21 11:38:53 +08:00
# StoresController#search 将每条文件都查出来,再次进行判断过滤。---> resultSet.to_a.map
# 此时内容不多速度还可, 但文件增长, 每条判断多则进行3-4次表连接。
# 现在还木有思路 药丸
2014-11-28 11:33:51 +08:00
if sort == " "
sort = " created_on DESC "
end
2014-12-02 15:41:10 +08:00
resultSet = Attachment . where ( " attachments.container_type IS NOT NULL AND attachments.copy_from IS NULL AND filename LIKE :like " , like : " % #{ keywords } % " ) .
2016-09-02 11:27:35 +08:00
reorder ( sort )
2014-11-21 11:38:53 +08:00
end
2014-10-23 11:30:34 +08:00
def index
2016-10-10 10:41:41 +08:00
# 顶部导航
@project_menu_type = 4
2015-03-11 15:32:50 +08:00
@flag = params [ :flag ] || false
2014-10-23 11:30:34 +08:00
sort = " "
2014-11-19 17:40:24 +08:00
@sort = " "
@order = " "
2014-11-21 11:38:53 +08:00
@is_remote = false
2014-10-23 11:30:34 +08:00
if params [ :project_id ]
2016-05-20 15:34:35 +08:00
# 更新资源申请消息为已读
# ar_ids = ApplyResource.where("user_id =? and container_id =? and container_type =?", User.current.id, params[:project_id].to_i, "Project").map{|ar| ar.id}
# cms = CourseMessage.where("course_message_type =? and user_id =? and course_message_id in (#{ar_ids.empty? ? '0': ar_ids.join(',')})", "ApplyResource", User.current.id)
# cms.each do |cm|
# cm.update_column(:viewed, true)
# end
# over
2016-01-08 20:10:43 +08:00
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 2
2015-12-10 15:53:05 +08:00
@container_type = 0
2014-10-23 11:30:34 +08:00
if params [ :sort ]
params [ :sort ] . split ( " , " ) . each do | sort_type |
order_by = sort_type . split ( " : " )
case order_by [ 0 ]
when " filename "
attribute = " filename "
when " size "
attribute = " filesize "
when " attach_type "
attribute = " attachtype "
when " content_type "
attribute = " created_on "
when " field_file_dense "
attribute = " is_public "
when " downloads "
attribute = " downloads "
when " created_on "
attribute = " created_on "
2015-03-30 17:14:52 +08:00
when " quotes "
attribute = " quotes "
2015-03-31 09:34:27 +08:00
else
attribute = " created_on "
2014-10-23 11:30:34 +08:00
end
2015-03-30 17:14:52 +08:00
@sort = order_by [ 0 ]
@order = order_by [ 1 ]
if order_by . count == 1 && attribute
sort += " #{ Attachment . table_name } . #{ attribute } asc "
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
elsif order_by . count == 2 && order_by [ 1 ]
sort += " #{ Attachment . table_name } . #{ attribute } #{ order_by [ 1 ] } "
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
2014-10-23 11:30:34 +08:00
end
end
2015-03-31 09:34:27 +08:00
else
sort = " #{ Attachment . table_name } .created_on desc "
2014-10-23 11:30:34 +08:00
end
2016-01-08 11:01:29 +08:00
# @containers = [ Project.includes(:attachments).find(@project.id)]
# @containers += @project.versions.includes(:attachments).all
2014-10-23 11:30:34 +08:00
2016-01-06 18:07:35 +08:00
@containers = [ Project . includes ( :attachments ) . reorder ( sort ) . find ( @project . id ) ]
2014-10-23 11:30:34 +08:00
2015-03-10 21:50:47 +08:00
show_attachments @containers
2016-09-02 11:27:35 +08:00
get_attachment_for_tip ( @all_attachments )
2015-03-06 14:55:21 +08:00
2016-01-06 18:07:35 +08:00
@tag_list = attachment_tag_list @all_attachments
render :layout = > 'base_projects'
2014-10-23 11:30:34 +08:00
elsif params [ :course_id ]
2015-12-10 15:53:05 +08:00
@container_type = 1
2016-01-08 18:09:11 +08:00
@page = params [ :page ] ? params [ :page ] . to_i + 1 : 2
2014-10-23 11:30:34 +08:00
if params [ :sort ]
params [ :sort ] . split ( " , " ) . each do | sort_type |
order_by = sort_type . split ( " : " )
case order_by [ 0 ]
when " filename "
attribute = " filename "
when " size "
attribute = " filesize "
when " attach_type "
attribute = " attachtype "
when " content_type "
attribute = " created_on "
when " field_file_dense "
attribute = " is_public "
when " downloads "
attribute = " downloads "
when " created_on "
attribute = " created_on "
2014-12-02 15:30:32 +08:00
when " quotes "
attribute = " quotes "
2015-03-31 09:34:27 +08:00
else
2016-09-02 11:27:35 +08:00
attribute = " created_on "
2014-10-23 11:30:34 +08:00
end
2014-11-20 17:44:30 +08:00
@sort = order_by [ 0 ]
@order = order_by [ 1 ]
2014-12-04 14:53:53 +08:00
if order_by . count == 1 && attribute
2014-10-23 11:30:34 +08:00
sort += " #{ Attachment . table_name } . #{ attribute } asc "
2014-12-04 14:53:53 +08:00
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
elsif order_by . count == 2 && order_by [ 1 ]
2014-10-23 11:30:34 +08:00
sort += " #{ Attachment . table_name } . #{ attribute } #{ order_by [ 1 ] } "
2014-12-04 14:53:53 +08:00
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
2014-10-23 11:30:34 +08:00
end
end
2015-03-31 09:34:27 +08:00
else
sort = " #{ Attachment . table_name } .created_on desc "
2014-10-23 11:30:34 +08:00
end
2014-10-28 23:38:14 +08:00
2014-10-23 11:30:34 +08:00
@containers = [ Course . includes ( :attachments ) . reorder ( sort ) . find ( @course . id ) ]
show_attachments @containers
2016-09-02 11:27:35 +08:00
get_attachment_for_tip ( @all_attachments )
2014-10-23 11:30:34 +08:00
2015-04-15 17:16:28 +08:00
@tag_list = attachment_tag_list @all_attachments
2016-07-22 15:32:37 +08:00
@left_nav_type = 5
2014-10-23 11:30:34 +08:00
render :layout = > 'base_courses'
2015-12-10 15:53:05 +08:00
elsif params [ :org_subfield_id ]
2015-12-14 10:26:34 +08:00
if params [ :sort ]
params [ :sort ] . split ( " , " ) . each do | sort_type |
order_by = sort_type . split ( " : " )
case order_by [ 0 ]
when " filename "
attribute = " filename "
when " size "
attribute = " filesize "
when " attach_type "
attribute = " attachtype "
when " content_type "
attribute = " created_on "
when " field_file_dense "
attribute = " is_public "
when " downloads "
attribute = " downloads "
when " created_on "
attribute = " created_on "
when " quotes "
attribute = " quotes "
else
attribute = " created_on "
end
@sort = order_by [ 0 ]
@order = order_by [ 1 ]
if order_by . count == 1 && attribute
sort += " #{ Attachment . table_name } . #{ attribute } asc "
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
elsif order_by . count == 2 && order_by [ 1 ]
sort += " #{ Attachment . table_name } . #{ attribute } #{ order_by [ 1 ] } "
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
end
end
else
sort = " #{ Attachment . table_name } .created_on desc "
end
2015-12-10 15:53:05 +08:00
@container_type = 2
2015-12-11 16:30:50 +08:00
@containers = [ OrgSubfield . includes ( :attachments ) . reorder ( sort ) . find ( @org_subfield . id ) ]
2015-12-14 16:41:18 +08:00
@organization = Organization . find ( @containers . first . organization_id )
2016-03-07 10:29:37 +08:00
if @organization . is_public? or User . current . admin? or User . current . member_of_org? ( @organization )
show_attachments @containers
@tag_list = attachment_tag_list @all_attachments
@page = params [ :page ] || 1
render :layout = > 'base_org'
else
render_403
end
2015-12-10 15:53:05 +08:00
# @subfield = params[:org_subfield_id]
2014-10-23 11:30:34 +08:00
end
end
2016-08-26 16:26:12 +08:00
# 获取提示中私有、公开总数信息
def get_attachment_for_tip all_attachment
2016-08-26 17:34:17 +08:00
2016-08-26 16:26:12 +08:00
@tip_all_public_attachments = all_attachment . select { | attach | attach . is_public == 1 } . count
2016-08-26 17:34:17 +08:00
if params [ :project_id ]
if User . current . member_of? ( @project ) || User . current . admin?
@tip_all_attachments = all_attachment . count
@tip_all_private_attachments = all_attachment . select { | attach | attach . is_public == 0 } . count
else
if params [ :tag_name ]
@tip_all_attachments = all_attachment . count
@tip_all_private_attachments = 0
else
@tip_all_attachments = Attachment . where ( :container_id = > params [ :project_id ] , :container_type = > " Project " ) . count
@tip_all_private_attachments = Attachment . where ( :container_id = > params [ :project_id ] , :container_type = > " Project " , :is_public = > 0 ) . count
end
end
elsif params [ :course_id ]
if User . current . member_of_course? ( @course ) || User . current . admin?
@tip_all_attachments = all_attachment . count
@tip_all_private_attachments = all_attachment . select { | attach | attach . is_public == 0 } . count
else
if params [ :tag_name ]
@tip_all_attachments = all_attachment . count
@tip_all_private_attachments = 0
else
@tip_all_attachments = Attachment . where ( :container_id = > params [ :course_id ] , :container_type = > " Course " ) . count
@tip_all_private_attachments = Attachment . where ( :container_id = > params [ :course_id ] , :container_type = > " Course " , :is_public = > 0 ) . count
end
end
end
2016-08-26 16:26:12 +08:00
end
2014-11-20 17:44:30 +08:00
def quote_resource_show
@file = Attachment . find ( params [ :id ] )
2014-12-22 16:16:33 +08:00
@can_quote = attachment_candown @file
2014-11-19 17:40:24 +08:00
end
2015-03-31 15:57:15 +08:00
def quote_resource_show_project
@file = Attachment . find ( params [ :id ] )
@can_quote = attachment_candown @file
end
2015-12-17 14:51:02 +08:00
def quote_resource_show_org_subfield
@file = Attachment . find ( params [ :id ] )
@org_subfield = OrgSubfield . find ( params [ :org_subfield_id ] )
@can_quote = attachment_candown @file
end
2014-10-23 11:30:34 +08:00
def new
@versions = @project . versions . sort
@course_tag = @project . project_type
if @project . project_type == 1
2016-07-22 15:32:37 +08:00
@left_nav_type = 5
2014-10-23 11:30:34 +08:00
render :layout = > 'base_courses'
end
end
def create
2016-09-02 11:27:35 +08:00
if params [ :add_tag ]
@addTag = true
#render :back
2014-10-23 11:30:34 +08:00
tag_saveEx
#render :text =>"success"
respond_to do | format |
2016-09-02 11:27:35 +08:00
format . js
end
else
#modify by nwb
if @project
@addTag = false
if params [ :in_project_toolbar ]
@in_project_toolbar = params [ :in_project_toolbar ]
end
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 ] )
# 生成动态
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 " )
end
# 更新资源总数, 根据上传的附件数累加
@project . project_score . update_attribute ( :attach_num , @project . project_score . attach_num + attachments [ :files ] . count ) unless @project . project_score . nil?
end
# end
if params [ :project_attachment_type ] && params [ :project_attachment_type ] . is_a? ( Array )
params [ :project_attachment_type ] . each do | type |
tag_name = get_project_tag_name_by_type_nmuber type
if ! attachments . empty? && attachments [ :files ] && tag_name != " "
attachments [ :files ] . each do | attachment |
attachment . tag_list . add ( tag_name )
attachment . description = params [ :description ]
attachment . save
end
end
end
else
if params [ :project_attachment_type ] && params [ :project_attachment_type ] != " 6 "
tag_name = get_project_tag_name_by_type_nmuber params [ :project_attachment_type ]
if ! attachments . empty? && attachments [ :files ] && tag_name != " "
attachments [ :files ] . each do | attachment |
attachment . tag_list . add ( tag_name )
attachment . description = params [ :description ]
attachment . save
end
end
end
end
# TODO: 临时用 nyan
sort_init 'created_on' , 'desc'
sort_update 'created_on' = > " #{ Attachment . table_name } .created_on " ,
'filename' = > " #{ Attachment . table_name } .filename " ,
'size' = > " #{ Attachment . table_name } .filesize " ,
'downloads' = > " #{ Attachment . table_name } .downloads "
@containers = [ Project . includes ( :attachments ) . reorder ( " #{ Attachment . table_name } .created_on DESC " ) . find ( @project . id ) ]
show_attachments @containers
@tag_list = attachment_tag_list @all_attachments
@attachtype = 0
@contenttype = 0
respond_to do | format |
format . js
format . html {
redirect_to project_files_url ( @project )
}
end
elsif @course
@addTag = false
if params [ :in_course_toolbar ]
@in_course_toolbar = params [ :in_course_toolbar ]
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 ]
attachments [ :files ] . each do | attachment |
if params [ :publish_time ]
if params [ :publish_time ] == " "
attachment . publish_time = Date . today
else
attachment . publish_time = params [ :publish_time ]
end
else
attachment . publish_time = Date . today
end
if attachment . publish_time > Date . today
attachment . is_publish = 0
end
attachment . description = params [ :description ]
attachment . save
end
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
if ! attachments . empty? && attachments [ :files ] && tag_name != " "
attachments [ :files ] . each do | attachment |
attachment . tag_list . add ( tag_name )
attachment . save
end
end
end
else
if params [ :course_attachment_type ] && params [ :course_attachment_type ] != " 5 "
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 )
attachment . save
end
end
end
end
# 更新课程英雄榜得分
course_member_score ( @course . id , attachments [ :files ] . first . author_id , " Attachment " )
# end
# end
# TODO: 临时用 nyan
sort_init 'created_on' , 'desc'
sort_update 'created_on' = > " #{ Attachment . table_name } .created_on " ,
'filename' = > " #{ Attachment . table_name } .filename " ,
'size' = > " #{ Attachment . table_name } .filesize " ,
'downloads' = > " #{ Attachment . table_name } .downloads "
@containers = [ Course . includes ( :attachments ) . reorder ( " #{ Attachment . table_name } .created_on DESC " ) . find ( @course . id ) ]
show_attachments @containers
@tag_list = attachment_tag_list @all_attachments
@attachtype = 0
@contenttype = 0
respond_to do | format |
format . js
format . html {
redirect_to course_files_url ( @course )
}
end
elsif @org_subfield
@addTag = false
attachments = Attachment . attach_filesex ( @org_subfield , params [ :attachments ] , params [ :org_subfield_attachment_type ] )
if params [ :org_subfield_attachment_type ] && params [ :org_subfield_attachment_type ] . is_a? ( Array )
params [ :org_subfield_attachment_type ] . each do | 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 )
attachment . description = params [ :description ]
attachment . save
end
end
end
else
if params [ :org_subfield_attachment_type ] && params [ :org_subfield_attachment_type ] != " 5 "
tag_name = get_tag_name_by_type_number params [ :org_subfield_attachment_type ]
if ! attachments . empty? && attachments [ :files ] && tag_name != " "
attachments [ :files ] . each do | attachment |
attachment . tag_list . add ( tag_name )
attachment . description = params [ :description ]
attachment . save
end
end
end
end
# TODO: 临时用 nyan
sort_init 'created_on' , 'desc'
sort_update 'created_on' = > " #{ Attachment . table_name } .created_on " ,
'filename' = > " #{ Attachment . table_name } .filename " ,
'size' = > " #{ Attachment . table_name } .filesize " ,
'downloads' = > " #{ Attachment . table_name } .downloads "
@containers = [ OrgSubfield . includes ( :attachments ) . reorder ( " #{ Attachment . table_name } .created_on DESC " ) . find ( @org_subfield . id ) ]
show_attachments @containers
@tag_list = attachment_tag_list @all_attachments
@attachtype = 0
@contenttype = 0
respond_to do | format |
format . js
# format.html {
# redirect_to org_subfield_files_url(@org_subfield)
# }
end
# 组织添加附件,为了修改图片
elsif params [ :organization_id ]
@organization = Organization . find ( params [ :organization_id ] )
@addTag = false
# atttchment_type = 0为logo 1为banner
if params [ :logo ]
attachments = Attachment . attach_filesex ( @organization , params [ :attachments ] , false )
else
attachments = Attachment . attach_filesex ( @organization , params [ :attachments ] , true )
end
# TODO: 临时用 nyan
sort_init 'created_on' , 'desc'
sort_update 'created_on' = > " #{ Attachment . table_name } .created_on " ,
'filename' = > " #{ Attachment . table_name } .filename " ,
'size' = > " #{ Attachment . table_name } .filesize " ,
'downloads' = > " #{ Attachment . table_name } .downloads "
@containers = [ Organization . includes ( :attachments ) . reorder ( " #{ Attachment . table_name } .created_on DESC " ) . find ( @organization . id ) ]
show_attachments @containers
@tag_list = attachment_tag_list @all_attachments
@attachtype = 0
@contenttype = 0
respond_to do | format |
format . js
# format.html {
# redirect_to org_subfield_files_url(@org_subfield)
# }
end
end
end
2014-10-23 11:30:34 +08:00
end
2016-01-06 18:07:35 +08:00
def get_project_tag_name_by_type_nmuber type
case type
when " 1 "
tag_name = " 软件版本 "
when " 2 "
tag_name = " 文档 "
when " 3 "
tag_name = " 代码 "
when " 4 "
tag_name = " 媒体 "
when " 5 "
tag_name = " 论文 "
when " 6 "
tag_name = " 其它 "
else
tag_name = " "
end
end
2015-11-13 11:17:47 +08:00
def get_tag_name_by_type_number type
case type
when " 1 "
tag_name = l ( :label_courseware )
when " 2 "
tag_name = l ( :label_software )
when " 3 "
tag_name = l ( :label_media )
when " 4 "
tag_name = l ( :label_code )
when " 6 "
tag_name = " 论文 "
else
tag_name = " "
end
end
2014-10-23 11:30:34 +08:00
def tag_saveEx
@tags = params [ :tag_name ] [ :name ]
@obj_id = params [ :object_id ]
@obj_flag = params [ :object_flag ]
case @obj_flag
when '1' then
@obj = User . find_by_id ( @obj_id )
when '2' then
@obj = Project . find_by_id ( @obj_id )
when '3' then
@obj = Issue . find_by_id ( @obj_id )
when '4' then
@obj = Bid . find_by_id ( @obj_id )
when '5' then
@obj = Forum . find_by_id ( @obj_id )
when '6'
@obj = Attachment . find_by_id ( @obj_id )
when '7' then
@obj = Contest . find_by_id ( @obj_id )
when '8'
@obj = OpenSourceProject . find_by_id ( @obj_id )
when '9'
@obj = Course . find_by_id ( @obj_id )
else
@obj = nil
end
unless @obj . nil?
@obj . tag_list . add ( @tags . split ( " , " ) )
else
return
end
if @obj . save
## 执行成功的操作。
else
#捕获异常
end
2016-09-02 11:27:35 +08:00
end
2014-10-23 11:30:34 +08:00
# 返回指定资源类型的资源列表
# added by nwb
def getattachtype
2016-09-02 11:27:35 +08:00
sort_init 'created_on' , 'desc'
sort_update 'created_on' = > " #{ Attachment . table_name } .created_on " ,
2014-10-23 11:30:34 +08:00
'filename' = > " #{ Attachment . table_name } .filename " ,
'size' = > " #{ Attachment . table_name } .filesize " ,
'downloads' = > " #{ Attachment . table_name } .downloads "
2014-10-28 23:38:14 +08:00
sort = ''
2014-10-31 16:38:04 +08:00
2014-10-28 23:38:14 +08:00
if params [ :sort ]
params [ :sort ] . split ( " , " ) . each do | sort_type |
order_by = sort_type . split ( " : " )
case order_by [ 0 ]
when " filename "
attribute = " filename "
when " size "
attribute = " filesize "
when " attach_type "
attribute = " attachtype "
when " content_type "
attribute = " created_on "
when " field_file_dense "
attribute = " is_public "
when " downloads "
attribute = " downloads "
when " created_on "
attribute = " created_on "
end
if order_by . count == 1
sort += " #{ Attachment . table_name } . #{ attribute } asc "
elsif order_by . count == 2
sort += " #{ Attachment . table_name } . #{ attribute } #{ order_by [ 1 ] } "
end
if sort_type != params [ :sort ] . split ( " , " ) . last
sort += " , "
end
end
end
2014-10-23 11:30:34 +08:00
2016-09-02 11:27:35 +08:00
if @project
@isproject = true
@containers = [ Project . includes ( :attachments ) . reorder ( " #{ Attachment . table_name } .created_on DESC " ) . find ( @project . id ) ]
@containers += @project . versions . includes ( :attachments ) . reorder ( sort ) . all
show_attachments @containers
@attachtype = params [ :type ] . to_i
@contenttype = params [ :contentType ] . to_s
2014-10-29 16:13:49 +08:00
respond_to do | format |
format . js
2016-09-02 11:27:35 +08:00
format . html {
render :layout = > 'base_projects'
}
2014-10-29 16:13:49 +08:00
end
2014-10-23 11:30:34 +08:00
2016-09-02 11:27:35 +08:00
elsif @course
2014-10-28 23:38:14 +08:00
@isproject = false
@containers = [ Course . includes ( :attachments ) . reorder ( sort ) . find ( @course . id ) ]
2014-10-29 16:13:49 +08:00
show_attachments @containers
@attachtype = params [ :type ] . to_i
@contenttype = params [ :contentType ] . to_s
2016-09-02 11:27:35 +08:00
# render layout: 'base_courses'
2016-07-22 15:32:37 +08:00
@left_nav_type = 5
2014-10-29 16:13:49 +08:00
respond_to do | format |
format . js
format . html {
render :layout = > 'base_courses'
}
end
2016-09-02 11:27:35 +08:00
else
show_attachments @containers
@attachtype = params [ :type ] . to_i
@contenttype = params [ :contentType ] . to_s
2014-12-26 15:35:38 +08:00
2016-09-02 11:27:35 +08:00
respond_to do | format |
2014-12-26 15:35:38 +08:00
format . js
format . html
2016-09-02 11:27:35 +08:00
end
end
2015-04-15 19:57:16 +08:00
end
2014-10-28 23:38:14 +08:00
2016-09-02 11:27:35 +08:00
#查找指定TAG的按条件过滤的资源列表, 只有课程内搜索有此功能
2015-04-15 19:57:16 +08:00
def search_tag_attachment
@q , @tag_name , @order = params [ :q ] , params [ :tag_name ]
@is_remote = true
if params [ :sort ]
order_by = params [ :sort ] . split ( " : " )
@sort = order_by [ 0 ]
if order_by . count > 1
@order = order_by [ 1 ]
end
sort = " #{ @sort } #{ @order } "
end
2014-12-02 15:30:32 +08:00
2015-04-15 19:57:16 +08:00
q = " % #{ @q . strip } % "
2016-01-07 10:31:22 +08:00
if @project
@result = find_project_attache q , @project , sort
else
@result = find_course_attache q , @course , sort
end
2015-04-15 19:57:16 +08:00
@result = visable_attachemnts @result
2015-12-28 16:19:30 +08:00
if params [ :other ]
2016-01-07 10:31:22 +08:00
if @project
@result = @result . select { | attachment | ! attachment . tag_list . include? ( '软件版本' ) && ! attachment . tag_list . include? ( '文档' ) && ! attachment . tag_list . include? ( '代码' ) && ! attachment . tag_list . include? ( '媒体' ) && ! attachment . tag_list . include? ( '论文' ) }
else
@result = @result . select { | attachment |
! attachment . tag_list . include? ( '课件' ) &&
! attachment . tag_list . include? ( '软件' ) &&
! attachment . tag_list . include? ( '媒体' ) &&
! attachment . tag_list . include? ( '代码' ) &&
! attachment . tag_list . include? ( '论文' ) }
end
2015-12-28 16:19:30 +08:00
else
@result = @result . select { | attachment | attachment . tag_list . include? ( @tag_name ) } unless @tag_name . blank?
end
2016-08-12 17:05:46 +08:00
@all_attachments = @result
2016-08-26 16:26:12 +08:00
get_attachment_for_tip ( @all_attachments )
2016-08-12 17:05:46 +08:00
@limit = 10
@feedback_count = @all_attachments . count
@feedback_pages = Paginator . new @feedback_count , @limit , params [ 'page' ]
@offset || = @feedback_pages . offset
#@curse_attachments_all = @all_attachments[@offset, @limit]
@obj_attachments = paginateHelper @all_attachments , 10
# @searched_attach = paginateHelper @result,10
2016-01-07 10:31:22 +08:00
if @project
@tag_list = get_project_tag_list @project
@result_search_project = @result
else
@tag_list = get_course_tag_list @course
end
2015-04-15 19:57:16 +08:00
respond_to do | format |
format . js
# format.html
end
2014-10-23 11:30:34 +08:00
end
2015-12-14 16:41:18 +08:00
2015-12-15 17:30:24 +08:00
#搜索资源栏目的指定TAG的资源列表
def search_org_subfield_tag_attachment
@q , @tag_name , @order = params [ :q ] , params [ :tag_name ]
@is_remote = true
if params [ :sort ]
order_by = params [ :sort ] . split ( " : " )
@sort = order_by [ 0 ]
if order_by . count > 1
@order = order_by [ 1 ]
end
sort = " #{ @sort } #{ @order } "
end
q = " % #{ @q . strip } % "
@result = find_org_subfield_attache q , @org_subfield , sort
@result = visable_attachemnts @result
2016-03-07 16:14:44 +08:00
if params [ :other ]
@result = @result . select { | attachment |
2016-03-14 15:39:45 +08:00
attachment . tag_list . index { | tag | tag != '软件' and tag != '媒体' and tag != '代码' } . present?
2016-03-07 16:14:44 +08:00
}
else
@result = @result . select { | attachment | attachment . tag_list . include? ( @tag_name ) } unless @tag_name . blank?
end
2015-12-15 17:30:24 +08:00
@searched_attach = paginateHelper @result , 10
@tag_list = get_org_subfield_tag_list @org_subfield
respond_to do | format |
format . js
# format.html
end
end
2015-12-14 16:41:18 +08:00
def subfield_upload_file
@org_subfield = OrgSubfield . find ( params [ :org_subfield_id ] )
end
2016-01-06 16:22:13 +08:00
def upload_files_menu
2016-01-08 20:09:57 +08:00
2016-06-16 14:04:12 +08:00
end
2016-10-09 15:09:18 +08:00
def edit_file_description
@attachment = Attachment . find ( params [ :id ] )
@attachment . description = params [ :file_description_edit ]
@attachment . save
end
2016-06-16 14:04:12 +08:00
def update_file_description
@attachment = Attachment . find ( params [ :id ] )
@attachment . description = params [ :description ]
@attachment . save
end
2014-10-23 11:30:34 +08:00
end