From 65d51e857804d1bf2bbdea7adc6297aed45fecec Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Wed, 28 Apr 2021 15:15:45 +0800 Subject: [PATCH 1/2] add: project operate add organization team users --- app/controllers/pull_requests_controller.rb | 2 +- app/helpers/tag_chosen_helper.rb | 15 ++++++--------- app/models/concerns/project_operable.rb | 6 ++++++ app/models/user.rb | 3 +++ app/views/pull_requests/_merge_item.json.jbuilder | 10 +++++----- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index c59a196b5..48735e787 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -215,7 +215,7 @@ class PullRequestsController < ApplicationController def get_relatived @project_tags = @project.issue_tags&.select(:id,:name, :color).as_json @project_versions = @project.versions&.select(:id,:name, :status).as_json - @project_members = @project.members_user_infos + @project_members = @project.all_collaborators @project_priories = IssuePriority&.select(:id,:name, :position).as_json end diff --git a/app/helpers/tag_chosen_helper.rb b/app/helpers/tag_chosen_helper.rb index afd51170d..1e7879d18 100644 --- a/app/helpers/tag_chosen_helper.rb +++ b/app/helpers/tag_chosen_helper.rb @@ -124,14 +124,13 @@ module TagChosenHelper end def render_cache_collaborators(project) - cache_key = "all_collaborators/#{project.members.maximum('created_on')}" - + cache_key = "all_collaborators/#{project.all_collaborators.maximum('created_on')}" Rails.cache.fetch(cache_key) do - project.members.includes(:user).collect do |event| + project.all_collaborators.order(created_on: :desc).collect do |user| { - id: event.user&.id, - name: event.user&.show_real_name, - avatar_url: url_to_avatar(event.user), + id: user&.id, + name: user&.show_real_name, + avatar_url: url_to_avatar(user), is_chosen: '0' } end @@ -171,10 +170,8 @@ module TagChosenHelper # depended_issues_id = @depended_issues_id end - project_members = project.members_user_infos project_members_info = [] #指派给 - project_members.includes(user: :user_extension).each do |member| - user = member&.user + project.all_collaborators.includes(:user_extension).each do |user| if user real_name = user.try(:show_real_name) user_id = user.id diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index e151613d5..5937126d3 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -92,4 +92,10 @@ module ProjectOperable def has_menu_permission(unit_type) self.project_units.where(unit_type: unit_type).exists? end + + def all_collaborators + member_sql = User.joins(members: :roles).where(members: {project_id: self.id}, roles: {name: %w(Manager Developer Reporter)}).to_sql + team_user_sql = User.joins(teams: :team_projects).where(team_projects: {project_id: self.id}).to_sql + return User.from("( #{ member_sql } UNION #{ team_user_sql } ) AS users").distinct + end end diff --git a/app/models/user.rb b/app/models/user.rb index e41e47d93..256cc7b41 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -152,6 +152,9 @@ class User < Owner # 项目 has_many :applied_projects, dependent: :destroy has_many :operate_applied_transfer_projects, class_name: 'AppliedTransferProject', dependent: :destroy + has_many :members, dependent: :destroy + has_many :team_users, dependent: :destroy + has_many :teams, through: :team_users # 教学案例 # has_many :libraries, dependent: :destroy diff --git a/app/views/pull_requests/_merge_item.json.jbuilder b/app/views/pull_requests/_merge_item.json.jbuilder index 8475c468d..0db17e265 100644 --- a/app/views/pull_requests/_merge_item.json.jbuilder +++ b/app/views/pull_requests/_merge_item.json.jbuilder @@ -5,10 +5,10 @@ json.issue_priories @project_priories json.project_author @project.owner.try(:show_real_name) json.project_name @project.try(:name) json.members do - json.array! @project_members.to_a.each do |member| - json.id member.user_id - json.login member.user.try(:login) - json.name member.user.try(:show_real_name) - json.avatar_url url_to_avatar(member.user) + json.array! @project_members.to_a.each do |user| + json.id user.id + json.login user.try(:login) + json.name user.try(:show_real_name) + json.avatar_url url_to_avatar(user) end end \ No newline at end of file From ea42b0d6edc01ed6daad025b1a4256a37c812ca3 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Wed, 28 Apr 2021 20:10:21 +0800 Subject: [PATCH 2/2] fix: pull_request can not select reporter and compare userinfo lose --- app/controllers/pull_requests_controller.rb | 2 +- app/models/concerns/project_operable.rb | 6 ++++++ app/views/compare/show.json.jbuilder | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 48735e787..d0221b768 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -215,7 +215,7 @@ class PullRequestsController < ApplicationController def get_relatived @project_tags = @project.issue_tags&.select(:id,:name, :color).as_json @project_versions = @project.versions&.select(:id,:name, :status).as_json - @project_members = @project.all_collaborators + @project_members = @project.all_managers @project_priories = IssuePriority&.select(:id,:name, :position).as_json end diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index 5937126d3..5f8f929e7 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -98,4 +98,10 @@ module ProjectOperable team_user_sql = User.joins(teams: :team_projects).where(team_projects: {project_id: self.id}).to_sql return User.from("( #{ member_sql } UNION #{ team_user_sql } ) AS users").distinct end + + def all_managers + member_sql = User.joins(members: :roles).where(members: {project_id: self.id}, roles: {name: %w(Manager)}).to_sql + team_user_sql = User.joins(teams: :team_projects).where(teams: {authorize: %w(owner admin)},team_projects: {project_id: self.id}).to_sql + return User.from("( #{ member_sql} UNION #{ team_user_sql } ) AS users").distinct + end end diff --git a/app/views/compare/show.json.jbuilder b/app/views/compare/show.json.jbuilder index 8257cc7fa..8b75fa3dd 100644 --- a/app/views/compare/show.json.jbuilder +++ b/app/views/compare/show.json.jbuilder @@ -4,7 +4,7 @@ json.commits do json.array! @compare_result['Commits'] do |commit| json.author do # TODO: 获取头像地址待优化 - forge_user = User.includes(:user_extension).select(:id, :login).find_by(login: commit['Author']['Name']) + forge_user = User.includes(:user_extension).find_by(login: commit['Author']['Name']) json.login commit['Author']['Name'] json.name commit['Author']['Name'] json.image_url forge_user.nil? ? '' : url_to_avatar(forge_user) @@ -12,7 +12,7 @@ json.commits do json.committer do # TODO: 获取头像地址待优化 - forge_user = User.includes(:user_extension).select(:id, :login).find_by(login: commit['Committer']['Name']) + forge_user = User.includes(:user_extension).find_by(login: commit['Committer']['Name']) json.login commit['Committer']['Name'] json.name commit['Committer']['Name'] json.image_url forge_user.nil? ? '' : url_to_avatar(forge_user)