|
- class OrgSubfieldsController < ApplicationController
- helper :attachments
- include FilesHelper
- layout 'base_org'
- def create
- if OrgSubfield.where("organization_id=#{params[:organization_id]} and name=?",params[:name]).count == 0
- @res = true
- @organization = Organization.find(params[:organization_id])
- @subfield = OrgSubfield.create(:name => params[:name], :organization_id => params[:organization_id], :priority => @organization.org_subfields.order("priority").last.priority + 1)
- if !params[:sub_dir].blank?
- sql = "select subfield_subdomain_dirs.* from subfield_subdomain_dirs, org_subfields where subfield_subdomain_dirs.org_subfield_id = org_subfields.id "+
- "and org_subfields.organization_id=#{@organization.id} and subfield_subdomain_dirs.name='#{params[:sub_dir]}'"
- if SubfieldSubdomainDir.find_by_sql(sql).count == 0
- SubfieldSubdomainDir.create(:org_subfield_id => @subfield.id, :name => params[:sub_dir].downcase)
- end
- end
- #默认类型为帖子
- @subfield.update_attributes(:field_type => params[:field_type]||"Post")
- # admin配置的类型
- update_status_by_type(@subfield, params[:field_type]||"Post")
- else
- @res = false
- end
- end
-
- # status类型说明,详见SubField
- def update_status_by_type subfield, type
- case type
- when "Resource"
- subfield.update_attribute(:status, 6)
- when "Comptec"
- subfield.update_attribute(:status, 6)
- when "Compstu"
- subfield.update_attribute(:status, 7)
- when "Comppro"
- subfield.update_attribute(:status, 5)
- when "Compcou"
- subfield.update_attribute(:status, 2)
- when "Compact"
- subfield.update_attribute(:status, 4)
- end
- end
-
- def show
- @flag = params[:flag] || false
- sort = ""
- @sort = ""
- @order = ""
- @is_remote = false
- if params[:id]
- @organization = Organization.find(params[:id])
- else
- domain = Secdomain.where("subname=?", request.subdomain).first
- 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,"+
- "subfield_subdomain_dirs where org_subfields.id = subfield_subdomain_dirs.org_subfield_id and "+
- " org_subfields.organization_id=#{@organization.id} and subfield_subdomain_dirs.name='#{params[:sub_dir_name]}'").first
- if @org_subfield.nil?
- render_404
- return
- end
- if @org_subfield.field_type == 'Post'
- @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0
- @org_activities = OrgActivity.where("(org_act_type='OrgDocumentComment'and org_act_id in (#{@org_subfield_ids.join(",")})) || (container_type='OrgSubfield' and container_id=#{@org_subfield.id})").order('updated_at desc').page(params[:page] || 1).per(10)
- #redirect_to organization_path(@organization, :org_subfield_id => @org_subfield.id)
- else
- 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
- @container_type = 2
- @containers = [OrgSubfield.includes(:attachments).reorder(sort).find(@org_subfield.id)]
- @organization = Organization.find(@containers.first.organization_id)
- show_attachments @containers
- @tag_list = attachment_tag_list @all_attachments
- end
- @page = params[:page] || 1
- else
- render_403
- end
- #render :layout => 'base_org'
- end
-
- def destroy
- @subfield = OrgSubfield.find(params[:id])
- @organization = Organization.find(@subfield.organization_id)
- @subfield.destroy
- end
-
- def update
- @subfield = OrgSubfield.find(params[:id])
- @organization = Organization.find(@subfield.organization_id)
- @subfield.update_attributes(:name => params[:name])
- end
-
- def update_sub_dir
- @org_subfield = OrgSubfield.find(params[:id])
- sql = "select subfield_subdomain_dirs.* from subfield_subdomain_dirs, org_subfields where subfield_subdomain_dirs.org_subfield_id = org_subfields.id "+
- "and org_subfields.organization_id=#{@org_subfield.organization.id} and subfield_subdomain_dirs.name='#{params[:sub_dir_name]}'"
- if SubfieldSubdomainDir.find_by_sql(sql).count == 0
- if @org_subfield.subfield_subdomain_dir
- @sub_dir = @org_subfield.subfield_subdomain_dir
- @sub_dir = SubfieldSubdomainDir.update(@sub_dir.id, :name => params[:sub_dir_name])
- #@sub_dir.update_attribute(:name, params[:sub_dir_name])
- else
- @sub_dir = SubfieldSubdomainDir.create(:org_subfield_id => @org_subfield.id, :name => params[:sub_dir_name])
- end
- @exist = false
- else
- @exist = true
- end
- end
-
- def update_priority
- @org_subfield = OrgSubfield.find(params[:id])
- @org_subfield.update_attribute(:priority, params[:priority].to_i)
- @organization = @org_subfield.organization
- end
-
- def update_status
- @subfield = OrgSubfield.find(params[:id])
- @organization = Organization.find(@subfield.organization_id)
- @subfield.update_attributes(:status => params[:status])
- end
-
- def show_attachments obj
- @attachments = []
- obj.each do |container|
- @attachments += container.attachments
- end
- @all_attachments = User.current.admin? ? @attachments : visable_attachemnts(@attachments)
- @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
- end
-
- #获取指定资源列表的TAG的集合以及每个TAG的数量,降序排序
- def attachment_tag_list attachments
- tag_list = Hash.new
- attachments.each do |attachment|
- attachment.tag_list.map{|tag| tag_list.has_key?(tag) ? tag_list[tag] = tag_list[tag] + 1 : tag_list[tag] = 1}
- end
- tag_list.sort {|a,b| b[1]<=>a[1]}
- end
- end
|