[ADD]org team search, project teams add\remove, org can create field

[FIX]
This commit is contained in:
viletyy 2021-02-04 17:03:56 +08:00
parent 4f6f257b37
commit 54204d4db8
12 changed files with 150 additions and 80 deletions

View File

@ -18,6 +18,7 @@ class Organizations::OrganizationsController < Organizations::BaseController
end end
def show def show
@can_create_project = @organization.can_create_project?(current_user.id)
@is_admin = can_edit_org? @is_admin = can_edit_org?
@is_member = @organization.is_member?(current_user.id) @is_member = @organization.is_member?(current_user.id)
end end
@ -60,15 +61,15 @@ class Organizations::OrganizationsController < Organizations::BaseController
private private
def convert_image! def convert_image!
return unless params[:image].present? return unless params[:image].present?
max_size = EduSetting.get('upload_avatar_max_size').to_i || 2 * 1024 * 1024 # 2M max_size = EduSetting.get('upload_avatar_max_size') || 2 * 1024 * 1024 # 2M
if params[:image].class == ActionDispatch::Http::UploadedFile if params[:image].class == ActionDispatch::Http::UploadedFile
@image = params[:image] @image = params[:image]
render_error('请上传文件') if @image.size.zero? render_error('请上传文件') if @image.size.zero?
render_error('文件大小超过限制') if @image.size > max_size render_error('文件大小超过限制') if @image.size > max_size.to_i
else else
image = params[:image].to_s.strip image = params[:image].to_s.strip
return render_error('请上传正确的图片') if image.blank? return render_error('请上传正确的图片') if image.blank?
@image = Util.convert_base64_image(image, max_size: max_size) @image = Util.convert_base64_image(image, max_size: max_size.to_i)
end end
rescue Base64ImageConverter::Error => ex rescue Base64ImageConverter::Error => ex
render_error(ex.message) render_error(ex.message)

View File

@ -15,6 +15,18 @@ class Organizations::TeamsController < Organizations::BaseController
@teams = kaminari_paginate(@teams) @teams = kaminari_paginate(@teams)
end end
def search
tip_exception("请输入搜索关键词") if params[:search].nil?
if @organization.is_owner?(current_user) || current_user.admin?
@teams = @organization.teams
else
@teams = @organization.teams.joins(:team_users).where(team_users: {user_id: current_user.id})
end
@is_admin = can_edit_org?
@teams = @teams.ransack(name_cont: params[:search]).result if params[:search].present?
@teams = @teams.includes(:team_units, :team_users)
end
def show def show
@is_admin = can_edit_org? @is_admin = can_edit_org?
@is_member = @team.is_member?(current_user.id) @is_member = @team.is_member?(current_user.id)

View File

@ -1,10 +1,47 @@
class Projects::TeamsController < Projects::BaseController class Projects::TeamsController < Projects::BaseController
before_action :load_operate_team, only: [:create, :destroy]
before_action :load_team_project, only: :destroy
def index def index
if @project.owner.is_a?(Organization) if @project.owner.is_a?(Organization)
@teams = @project.owner.teams @teams = Team.joins(:team_projects).where(team_projects: {project_id: @project.id})
else else
@teams = Team.none @teams = Team.none
end end
@teams = paginate(@teams) @teams = paginate(@teams)
end end
def create
ActiveRecord::Base.transaction do
@team_project = TeamProject.build(@owner.id, @operate_team.id, @project.id)
Gitea::Organization::TeamProject::CreateService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier)
render_ok
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
end
def destroy
ActiveRecord::Base.transaction do
@team_project.destroy!
Gitea::Organization::TeamProject::DeleteService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier)
render_ok
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
end
private
def load_operate_team
@operate_team = Team.find_by(id: params[:team_id]) || Team.find_by(id: params[:id])
tip_exception("项目不存在") if @operate_team.nil?
tip_exception("该组织团队拥有组织所有项目,无法进行操作") if @operate_team.includes_all_project
end
def load_team_project
@team_project = TeamProject.find_by(organization_id: @owner.id, team_id: @operate_team.id, project_id: @project.id)
tip_exception("组织团队项目不存在") if @team_project.nil?
end
end end

View File

@ -13,7 +13,7 @@ module ProjectOperable
def add_member!(user_id, role_name='Developer') def add_member!(user_id, role_name='Developer')
member = members.create!(user_id: user_id) member = members.create!(user_id: user_id)
set_developer_role(member) set_developer_role(member, role_name)
end end
def remove_member!(user_id) def remove_member!(user_id)
@ -84,8 +84,8 @@ module ProjectOperable
end end
end end
def set_developer_role(member) def set_developer_role(member, role_name)
role = Role.find_by_name 'Developer' role = Role.find_by(name: role_name)
member.member_roles.create!(role: role) member.member_roles.create!(role: role)
end end

View File

@ -78,6 +78,10 @@ class Organization < Owner
self.create!(login: name, gitea_token: gitea_token) self.create!(login: name, gitea_token: gitea_token)
end end
def can_create_project?(user_id)
team_users.joins(:team).where(user_id: user_id, teams: {can_create_org_project: true}).present?
end
def is_member?(user_id) def is_member?(user_id)
organization_users.where(user_id: user_id).present? organization_users.where(user_id: user_id).present?
end end

View File

@ -108,6 +108,7 @@ class Project < ApplicationRecord
has_many :praise_treads, as: :praise_tread_object, dependent: :destroy has_many :praise_treads, as: :praise_tread_object, dependent: :destroy
has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
has_one :project_detail, dependent: :destroy has_one :project_detail, dependent: :destroy
has_many :team_projects, dependent: :destroy
after_save :check_project_members after_save :check_project_members
scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)}

View File

@ -135,8 +135,8 @@ class User < Owner
has_many :attachments,foreign_key: :author_id, :dependent => :destroy has_many :attachments,foreign_key: :author_id, :dependent => :destroy
# 关注 # 关注
has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 # has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注
has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 # has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户
has_many :watchers, as: :watchable, dependent: :destroy has_many :watchers, as: :watchable, dependent: :destroy
has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy

View File

@ -13,6 +13,7 @@ class Repositories::CreateService < ApplicationService
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
if repository.save! if repository.save!
create_gitea_repository create_gitea_repository
create_manager_member
sync_project sync_project
sync_repository sync_repository
# if project.project_type == "common" # if project.project_type == "common"
@ -51,6 +52,11 @@ class Repositories::CreateService < ApplicationService
end end
end end
def create_manager_member
return if project.owner.is_owner?(user.id)
project.add_member!(user.id, "Manager")
end
def sync_project def sync_project
if gitea_repository if gitea_repository
project.update_columns( project.update_columns(

View File

@ -1,3 +1,4 @@
json.partial! "detail", organization: @organization json.partial! "detail", organization: @organization
json.can_create_project @can_create_project
json.is_admin @is_admin json.is_admin @is_admin
json.is_member @is_member json.is_member @is_member

View File

@ -0,0 +1,4 @@
json.total_count @teams.size
json.teams @teams do |team|
json.partial! "detail", team: team, organization: @organization
end

View File

@ -1,4 +1,5 @@
json.total_count @teams.total_count json.total_count @teams.total_count
json.teams @teams.each do |team| json.teams @teams.each do |team|
json.(team, :id, :name, :authorize) json.(team, :id, :name, :authorize)
json.can_remove !team.includes_all_project && team&.organization&.repo_admin_change_team_access
end end

View File

@ -113,6 +113,9 @@ Rails.application.routes.draw do
end end
end end
resources :teams, except: [:edit, :new] do resources :teams, except: [:edit, :new] do
collection do
get :search
end
resources :team_users, only: [:index, :create, :destroy] do resources :team_users, only: [:index, :create, :destroy] do
collection do collection do
delete :quit delete :quit
@ -519,7 +522,7 @@ Rails.application.routes.draw do
end end
scope module: :projects do scope module: :projects do
resources :teams, only: [:index] resources :teams, only: [:index, :create, :destroy]
scope do scope do
get( get(
'/blob/*id/diff', '/blob/*id/diff',