# 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, :select_org_layout] 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.allow_guest_download = params[:organization][:allow_guest_download] == '1' ? 1 : 0 @organization.show_mode = params[:show_mode] @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 # 组织新类型 show_mode:判断标准 1为新类型,0为旧 if @organization.show_mode == 1 && params[:org_subfield_id].nil? && params[:type] .nil? @subfield_content = @organization.org_subfields.order("priority") # 项目两种动态 @project_issue_acts = get_project_issue_activities_org @organization @project_message_acts = get_project_message_activities_org @organization # 磕碜动态 #@project_acts_issues = get_project_activities_org @organization @course_acts_homework = get_course_homework_activities_org @organization @course_acts_message = get_course_message_activities_org @organization @course_acts_news = get_course_news_activities_org @organization render :layout => 'base_org_newstyle' else if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization) @organization = Organization.find(params[:id]) # 统计访问量 @organization.update_attribute(:visits, @organization.visits.to_i + 1) 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 end def get_project_message_activities_org org project_ids = org.projects.map{|project| project.id}.join(",") project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{project_ids}) and container_type = 'project' and org_act_type = 'Message' order by updated_at desc limit 2;") end def get_project_issue_activities_org org project_ids = org.projects.map{|project| project.id}.join(",") project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{project_ids}) and container_type = 'project' and org_act_type = 'issue' order by updated_at desc limit 4;") end def get_course_homework_activities_org org course_ids = org.courses.map{|course| course.id}.join(",") #project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{course_ids}) and container_type = 'course' order by updated_at desc limit 5;") project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{course_ids}) and container_type = 'course' and org_act_type = 'HomeworkCommon' order by updated_at desc limit 1;") end def get_course_message_activities_org org course_ids = org.courses.map{|course| course.id}.join(",") project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{course_ids}) and container_type = 'course' and org_act_type = 'Message' order by updated_at desc limit 1;") end def get_course_news_activities_org org course_ids = org.courses.map{|course| course.id}.join(",") project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{course_ids}) and container_type = 'course' and org_act_type = 'News' order by updated_at desc limit 1;") 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.allow_guest_download = params[:organization][:allow_guest_download] == 'on' ? 1 : 0 @organization.show_mode = params[:show_mode] #@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 = (Secdomain.where("subname=?",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}) and courses.is_delete=0" #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}) and status=1" #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]) if params[:send_type].present? and (params[:send_type] == 'news' or params[:send_type] == 'message') @subfield = @org.org_subfields.where("field_type = 'Post'") else @subfield = @org.org_subfields.where('field_type = "Resource" ') end 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].downcase) end end def agree_apply_subdomain @organization = Organization.find(params[:organization_id]) OrgMessage.find(params[:act_id]).update_attribute(:viewed, 1) if Secdomain.where("pid=? and sub_type=2",@organization.id).count > 0 domain = Secdomain.where("pid=? and sub_type=2",params[:organization_id]).first Secdomain.update(domain.id, :subname => params[:org_domain]) else Secdomain.create(:sub_type => 2, :pid => params[:organization_id], :subname => params[:org_domain]) end 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