From 3958944bf11128b6f4811d9c62eac4e0fdc2446b Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 25 Oct 2024 11:49:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E9=A1=B9=E6=98=AF=E5=90=A6=E5=9C=A8=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=86=85=E4=BB=A5=E5=8F=8A=E6=98=AF=E5=90=A6=E6=9C=89?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E7=9A=84=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../change_issue_status_by_message_job.rb | 21 ++++++++++++++++++- app/models/journal.rb | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 7db38a4dc..c7f06a8fe 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -7,6 +7,24 @@ class ChangeIssueStatusByMessageJob < ApplicationJob # Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing # 以上关键词后接 issue_id 例如:Closes #234 Closes #123, #245, #992 + + def get_pm_issue_data(user, org, pm_project_id, issue_id) + url = URI("#{EduSetting.get("pms_server_url")}/api/pms/#{org.login}/pmsProjectIssues/#{issue_id}?pmProjectId=#{pm_project_id}") + + + https = Net::HTTP.new(url.host, url.port) + https.use_ssl = true + request = Net::HTTP::Get.new(url) + request["Cookie"] = "autologin_trustie=#{Token.get_or_create_permanent_login_token(user, 'autologin')&.value}" + response = https.request(request) + + puts response.read_body + return JSON.parse(response.read_body)['code'].to_i == 200 + rescue + return false + end + + def perform(commitsha, project, user, tag_issue_id_content, status_id=1) Rails.logger.info "需要操作的issue_id内容为 #{tag_issue_id_content}" tag_issue_id_content = tag_issue_id_content.gsub(/\s+/, '') @@ -15,7 +33,8 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 next if issue.project.present? && !user.admin? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.pm_project_id.present? && !user.admin? && project.owner.is_a?(Organization) && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") diff --git a/app/models/journal.rb b/app/models/journal.rb index 9094c2d71..77c806ca8 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -88,7 +88,7 @@ class Journal < ApplicationRecord if self.operate_by.starts_with?("Project#") project_id, commit_sha = self.operate_by.scan(/#(\d+).*?@(\w+)/)[0] project =Project.find_by_id(project_id) - return "通过#{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" + return "通过 #{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" end rescue return '' From e9b8f2aee74e3b9db28768c3be34a6ee41178e28 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 25 Oct 2024 13:49:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=94=B9:=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=9C=A8commit=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BB=BB=E6=84=8Fissue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/change_issue_status_by_message_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index c7f06a8fe..6e273d3ac 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -32,8 +32,8 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue_id = tag_issue.gsub('#', '') issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 - next if issue.project.present? && !user.admin? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && !user.admin? && project.owner.is_a?(Organization) && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.project.present? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 + next if issue.pm_project_id.present? && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? From b891d995698df19b68461d4bffa6433abfb53135 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 25 Oct 2024 14:27:48 +0800 Subject: [PATCH 3/3] fix --- app/jobs/change_issue_status_by_message_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 6e273d3ac..5fa970c14 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -33,7 +33,7 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 next if issue.project.present? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.pm_project_id.present? && !get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present?