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])
      # 如果栏目是教师，不参入类型的配置，定义为右三模式
      # 新增模块命名规则，左边1开头，右边2开头，以前的不变
      # eg：23 右三
      if params[:field_type] == "Comptec"
        @subfield.update_attributes(:status => 23)
      end
    else
      @res = false
    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.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
