You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							325 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							325 lines
						
					
					
						
							12 KiB
						
					
					
				# encoding: utf-8
 | 
						|
class OrganizationsController < ApplicationController
 | 
						|
 | 
						|
 | 
						|
  helper :sort
 | 
						|
  include SortHelper
 | 
						|
  helper :custom_fields
 | 
						|
  include CustomFieldsHelper
 | 
						|
  include AvatarHelper
 | 
						|
  include WordsHelper
 | 
						|
  include GitlabHelper
 | 
						|
  include UserScoreHelper
 | 
						|
 | 
						|
  include PollHelper
 | 
						|
  helper :user_score
 | 
						|
  helper :journals
 | 
						|
  helper :attachments
 | 
						|
  # added by liuping 关注
 | 
						|
 | 
						|
  helper :watchers
 | 
						|
  helper :activities
 | 
						|
 | 
						|
  ### added by william
 | 
						|
  include ActsAsTaggableOn::TagsHelper
 | 
						|
 | 
						|
  #  fq
 | 
						|
  helper :words
 | 
						|
  helper :project_score
 | 
						|
  helper :issues
 | 
						|
  include UsersHelper
 | 
						|
  before_filter :find_organization, :only => [:show, :members, :apply_subdomain]
 | 
						|
  layout 'base_org'
 | 
						|
  def index
 | 
						|
 | 
						|
  end
 | 
						|
  def new
 | 
						|
    @organization = Organization.new
 | 
						|
    render :layout => 'new_base'
 | 
						|
  end
 | 
						|
 | 
						|
  def edit
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
  end
 | 
						|
 | 
						|
  def destroy
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    @organization.destroy
 | 
						|
    respond_to do |format|
 | 
						|
      format.html{ redirect_to admin_organization_path }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def create
 | 
						|
    @organization = Organization.new
 | 
						|
    @organization.name = params[:organization][:name]
 | 
						|
    @organization.description = params[:organization][:description]
 | 
						|
    @organization.is_public = params[:organization][:is_public]
 | 
						|
    @organization.creator_id = User.current.id
 | 
						|
    member = OrgMember.new(:user_id => User.current.id)
 | 
						|
 | 
						|
    @organization.org_members << member
 | 
						|
    if @organization.save
 | 
						|
      OrgMemberRole.create(:org_member_id => member.id, :role_id => 11)
 | 
						|
      redirect_to organization_path(@organization)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def show
 | 
						|
    if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization)
 | 
						|
      @organization = Organization.find(params[:id])
 | 
						|
      if params[:org_subfield_id]
 | 
						|
        @org_subfield = OrgSubfield.find(params[:org_subfield_id])
 | 
						|
        @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)
 | 
						|
      else
 | 
						|
        shield_project_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Project'").map(&:shield_id)
 | 
						|
        shield_course_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Course'").map(&:shield_id)
 | 
						|
        project_ids = (@organization.projects.map(&:id)-shield_project_ids) << 0
 | 
						|
        course_ids = (@organization.courses.map(&:id)-shield_course_ids) << 0
 | 
						|
        course_types = "('Message','News','HomeworkCommon','Poll','Course')"
 | 
						|
        case params[:type]
 | 
						|
          when nil
 | 
						|
            @org_activities  = OrgActivity.where("(container_id =? and container_type =?) " +
 | 
						|
                                                     "or (container_type ='Project' and org_act_type in ('Issue','Message','ProjectCreateInfo') and container_id in (#{project_ids.join(',')})) "+
 | 
						|
                                                     "or (container_type ='Course' and org_act_type in #{course_types} and container_id in (#{course_ids.join(',')}))",
 | 
						|
                                                 @organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'project_issue'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Issue' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'project_message'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Message' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'org'
 | 
						|
            @org_activities = OrgActivity.where("container_id =? and container_type =?",@organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'course_homework'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'HomeworkCommon' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'course_news'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'News' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'course_message'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Message' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
          when 'course_poll'
 | 
						|
            @org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Poll' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      @page = params[:page] ? params[:page].to_i : 1
 | 
						|
      respond_to do |format|
 | 
						|
        format.html
 | 
						|
        format.js
 | 
						|
      end
 | 
						|
    else
 | 
						|
      render_403
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def update
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    @organization.name = params[:organization][:name]
 | 
						|
    @organization.description = params[:organization][:description]
 | 
						|
    # @organization.domain = params[:organization][:domain]
 | 
						|
    @organization.is_public = params[:organization][:is_public] == 'on' ? 1 : 0
 | 
						|
    #@organization.name = params[:organization][:name]
 | 
						|
    @organization.save
 | 
						|
     respond_to do |format|
 | 
						|
       format.html { redirect_to setting_organization_path(@organization)}
 | 
						|
     end
 | 
						|
  end
 | 
						|
 | 
						|
  def check_uniq
 | 
						|
    @check = false;
 | 
						|
    @org_name = params[:org_name].strip
 | 
						|
    @config_page = params[:config_page]
 | 
						|
    sameName =  @config_page ? Organization.where('name = ? and id != ?',params[:org_name],params[:org_id].to_i).count == 0 : Organization.where('name = ?',params[:org_name]).count == 0
 | 
						|
    if sameName == true
 | 
						|
      @check = true
 | 
						|
    end
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def check_uniq_domain
 | 
						|
    @is_exist = (Organization.where("domain=?", params[:org_domain]).count > 0)
 | 
						|
  end
 | 
						|
 | 
						|
  def find_organization
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
  end
 | 
						|
 | 
						|
  def setting
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
 | 
						|
    if User.current.admin? || User.current.admin_of_org?(@organization)
 | 
						|
    else
 | 
						|
      render_403
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
 | 
						|
  def clear_org_avatar_temp
 | 
						|
 | 
						|
  end
 | 
						|
 | 
						|
  def set_homepage
 | 
						|
    @org = Organization.find(params[:id])
 | 
						|
    @org.home_id = params[:home_id]
 | 
						|
    @org.save
 | 
						|
    # respond_to do |format|
 | 
						|
    #   format.html {redirect_to organization_path(org)}
 | 
						|
    # end
 | 
						|
  end
 | 
						|
 | 
						|
  def cancel_homepage
 | 
						|
    @org = Organization.find(params[:id])
 | 
						|
    @org.home_id = nil
 | 
						|
    @org.save
 | 
						|
  end
 | 
						|
 | 
						|
  def autocomplete_search
 | 
						|
    @project = Project.find(params[:project_id])
 | 
						|
    #@flag = params[:flag] || false
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def members
 | 
						|
    if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization)
 | 
						|
      @members = OrgMember.where("organization_id =?", @organization.id)
 | 
						|
    else
 | 
						|
      render_403
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def  more_org_projects
 | 
						|
    @organization = Organization.find params[:id]
 | 
						|
    @page = params[:page]
 | 
						|
    @org_projects = @organization.projects.reorder('created_at').uniq.page((params[:page].to_i || 1) +1).per(5)
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def more_org_courses
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    @page = params[:page]
 | 
						|
    @org_courses = @organization.courses.reorder('created_at').uniq.page((params[:page].to_i || 1) + 1 ).per(5)
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def join_course_menu
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def search_courses
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    condition = '%%'
 | 
						|
    if !params[:name].nil?
 | 
						|
      condition = "%#{params[:name].strip}%".gsub(" ","")
 | 
						|
    end
 | 
						|
    sql = "select courses.* from courses inner join members on courses.id = members.course_id where members.user_id = #{User.current.id} and courses.name like '#{condition}'"+
 | 
						|
        "and courses.id not in (select distinct org_courses.course_id from org_courses where org_courses.organization_id = #{@organization.id})"
 | 
						|
    #user_courses = Course.find_by_sql(sql)
 | 
						|
    @courses = Course.find_by_sql(sql)
 | 
						|
    # @added_course_ids = @organization.courses.map(&:id)
 | 
						|
    # @courses = []
 | 
						|
    # user_courses.each do |course|
 | 
						|
    #   if !@added_course_ids.include?(course.id)
 | 
						|
    #     @courses << course
 | 
						|
    #   end
 | 
						|
    # end
 | 
						|
  end
 | 
						|
 | 
						|
  def join_courses
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    course_ids = params[:courseNames]
 | 
						|
    course_ids.each do |id|
 | 
						|
      OrgCourse.create(:organization_id => @organization.id, :course_id => id.to_i, :created_at => Time.now)
 | 
						|
    end
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def join_project_menu
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def logout
 | 
						|
    logout_user
 | 
						|
    respond_to do |format|
 | 
						|
      format.html {redirect_to organization_path(params[:id])}
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def search_projects
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    condition = '%%'
 | 
						|
    if !params[:name].nil?
 | 
						|
      condition = "%#{params[:name].strip}%".gsub(" ","")
 | 
						|
    end
 | 
						|
    sql = "select projects.* from projects inner join members on projects.id = members.project_id where members.user_id = #{User.current.id} and projects.status != 9 and projects.name like '#{condition}'" +
 | 
						|
          " and projects.id not in (select org_projects.project_id from org_projects where organization_id = #{@organization.id})"
 | 
						|
    #user_projects = Course.find_by_sql(sql)
 | 
						|
    @projects = Course.find_by_sql(sql)
 | 
						|
    # @added_course_ids = @organization.projects.map(&:id)
 | 
						|
    # @projects = []
 | 
						|
    # user_projects.each do |project|
 | 
						|
    #   if !@added_course_ids.include?(project.id)
 | 
						|
    #     @projects << project
 | 
						|
    #   end
 | 
						|
    # end
 | 
						|
  end
 | 
						|
 | 
						|
  def join_projects
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    project_ids = params[:projectNames]
 | 
						|
    project_ids.each do |id|
 | 
						|
      OrgProject.create(:organization_id => @organization.id, :project_id => id.to_i, :created_at => Time.now)
 | 
						|
    end
 | 
						|
    respond_to do |format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def hide_org_subfield
 | 
						|
    @org_subfield = OrgSubfield.find(params[:org_subfield_id])
 | 
						|
    @org_subfield.update_attribute(:hide, 1)
 | 
						|
  end
 | 
						|
 | 
						|
  def show_org_subfield
 | 
						|
    @org_subfield = OrgSubfield.find(params[:org_subfield_id])
 | 
						|
    @org_subfield.update_attribute(:hide, 0)
 | 
						|
  end
 | 
						|
 | 
						|
  def org_resources_subfield
 | 
						|
    @org = Organization.find(params[:id])
 | 
						|
    @subfield = @org.org_subfields.where('field_type = "Resource" ')
 | 
						|
    respond_to do | format|
 | 
						|
      format.js
 | 
						|
    end
 | 
						|
  end
 | 
						|
  def apply_subdomain
 | 
						|
    @organization = Organization.find(params[:id])
 | 
						|
    admins = User.where("admin=1")
 | 
						|
    admins.each do |admin|
 | 
						|
      OrgMessage.create(:user_id => admin.id, :organization_id => @organization.id, :message_type => 'ApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:domain])
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def agree_apply_subdomain
 | 
						|
    @organization = Organization.find(params[:organization_id])
 | 
						|
    OrgMessage.find(params[:act_id]).update_attribute(:viewed, 1)
 | 
						|
    @organization.update_attribute(:domain, params[:org_domain])
 | 
						|
    if OrgMessage.where("message_type='AgreeApplySubdomain' and organization_id=#{@organization.id} and content=?",params[:org_domain]).count == 0
 | 
						|
      OrgMessage.create(:user_id => params[:user_id], :organization_id => @organization.id, :message_type => 'AgreeApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:org_domain])
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |