461 lines
20 KiB
Ruby
461 lines
20 KiB
Ruby
# 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])
|
||
begin
|
||
@organization = Organization.where("id =?", params[:id])
|
||
ensure
|
||
render_404
|
||
end
|
||
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 = 0
|
||
@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[:list] .nil?
|
||
if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization)
|
||
# REDO:时间紧,暂时先这样
|
||
@org_logo_attchment = Attachment.where("container_id =? and container_type =? and attachtype =?", @organization, "Organization", 0).order("created_on desc").first
|
||
@org_banner_attchment = Attachment.where("container_id =? and container_type =? and attachtype =?", @organization, "Organization", 1).order("created_on desc").first
|
||
|
||
@subfield_content = @organization.org_subfields.order("priority")
|
||
@organization = Organization.find(params[:id])
|
||
# @org_subfield = OrgSubfield.find(params[:org_subfield_id])
|
||
# @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0
|
||
# @org_acts = 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)
|
||
|
||
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')"
|
||
@project_acts = get_project_activities_org @organization, project_ids
|
||
@course_acts = get_course_activities_org @organization, course_ids
|
||
#@org_acts = OrgActivity.where("container_id =? and container_type =?",@organization.id, 'Organization').order('updated_at desc')
|
||
#@project_acts = OrgActivity.where("(container_id =? and container_type =?) " +
|
||
# "or (container_type ='Project' and org_act_type in ('Issue','Message') and container_id in (#{project_ids.join(',')})) ",
|
||
# @organization.id, 'Organization').order('updated_at desc').limit(8)
|
||
|
||
#@course_acts = OrgActivity.where("(container_id =? and container_type =?) " +
|
||
# "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').limit(8)
|
||
|
||
|
||
|
||
# 项目两种动态
|
||
#@project_acts = get_project_activities_org @organization
|
||
|
||
# 课程动态
|
||
#@project_acts_issues = get_project_activities_org @organization
|
||
#@course_acts = get_course_activities_org @organization
|
||
|
||
render :layout => 'base_org2'
|
||
else
|
||
render_403
|
||
end
|
||
else
|
||
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
|
||
|
||
end
|
||
|
||
def get_project_message_activities_org org
|
||
project_ids = org.projects.map{|project| project.id}.join(",")
|
||
unless project_ids.blank?
|
||
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;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
end
|
||
|
||
def get_project_issue_activities_org org
|
||
project_ids = org.projects.map{|project| project.id}.join(",")
|
||
unless project_ids.blank?
|
||
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;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
#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_project_activities_org org, project_ids
|
||
unless project_ids.blank?
|
||
project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{project_ids.join(',')}) and container_type = 'project'
|
||
and org_act_type in ('Message', 'Issue') order by updated_at desc limit 8;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
#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_activities_org org, course_ids
|
||
unless course_ids.blank?
|
||
project_acts = OrgActivity.find_by_sql("SELECT * FROM org_activities where container_id in (#{course_ids.join(',')}) and container_type = 'course'
|
||
and org_act_type in ('HomeworkCommon', 'Poll', 'Message', 'News', 'Course') order by updated_at desc limit 8;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
#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_homework_activities_org org
|
||
course_ids = org.courses.map{|course| course.id}.join(",")
|
||
unless course_ids.blank?
|
||
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;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
#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(",")
|
||
unless course_ids.blank?
|
||
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;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
end
|
||
|
||
def get_course_news_activities_org org
|
||
course_ids = org.courses.map{|course| course.id}.join(",")
|
||
unless course_ids.blank?
|
||
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;")
|
||
else
|
||
project_acts = nil
|
||
end
|
||
#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|
|
||
if @organization.show_mode == 1
|
||
format.html { redirect_to organization_path(@organization)}
|
||
else
|
||
format.html { redirect_to setting_organization_path(@organization)}
|
||
end
|
||
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 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.is_public = 1 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.is_public = 1 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
|