|  |  | 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])
 | 
						
						
						
							|  |  |       # admin配置的类型
 | 
						
						
						
							|  |  |       update_status_by_type(@subfield, params[:field_type])
 | 
						
						
						
							|  |  |     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
 | 
						
						
						
							|  |  |       @organization = Organization.find(domain.pid)
 | 
						
						
						
							|  |  |     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
 |