diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 8e8e3ec91..c8918d1c4 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -43,7 +43,7 @@ class CompareController < ApplicationController def load_compare_params @base = Addressable::URI.unescape(params[:base]) - @head = params[:head].include?('json') ? params[:head]&.split('.json')[0] : params[:head] + @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] end diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 409133f06..c740c8b03 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -13,7 +13,7 @@ class ForksController < ApplicationController if current_user&.id == @project.user_id render_result(-1, "自己不能fork自己的项目") elsif Project.exists?(user_id: current_user.id, identifier: @project.identifier) - render_result(-1, "fork失败,你已拥有了这个项目") + render_result(0, "fork失败,你已拥有了这个项目") end # return if current_user != @project.owner # render_result(-1, "自己不能fork自己的项目") diff --git a/app/controllers/issue_tags_controller.rb b/app/controllers/issue_tags_controller.rb index f3691f3d4..dc2ad7976 100644 --- a/app/controllers/issue_tags_controller.rb +++ b/app/controllers/issue_tags_controller.rb @@ -2,7 +2,7 @@ class IssueTagsController < ApplicationController before_action :require_login, except: [:index] before_action :load_repository before_action :set_user - before_action :check_issue_permission, except: :index + before_action :check_issue_tags_permission before_action :set_issue_tag, only: [:edit, :update, :destroy] @@ -122,9 +122,9 @@ class IssueTagsController < ApplicationController @user = @project.owner end - def check_issue_permission - unless @project.member?(current_user) || current_user.admin? - normal_status(-1, "您没有权限") + def check_issue_tags_permission + unless @project.manager?(current_user) || current_user.admin? + return render_forbidden('你不是管理员,没有权限操作') end end diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 77087770a..92ad4ccbb 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -3,7 +3,7 @@ class MembersController < ApplicationController before_action :load_project before_action :find_user_with_id, only: %i[create remove change_role] before_action :check_user_profile_completed, only: [:create] - before_action :operate!, except: %i[index] + before_action :operate! before_action :check_member_exists!, only: %i[create] before_action :check_member_not_exists!, only: %i[remove change_role] diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index b73d1efac..dd4f5066f 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -46,7 +46,7 @@ class Organizations::OrganizationsController < Organizations::BaseController @organization.save! sync_organization_extension! - Gitea::Organization::UpdateService.call(@organization.gitea_token, login, @organization.reload) + Gitea::Organization::UpdateService.call(current_user.gitea_token, login, @organization.reload) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? end rescue Exception => e @@ -57,10 +57,14 @@ class Organizations::OrganizationsController < Organizations::BaseController def destroy tip_exception("密码不正确") unless current_user.check_password?(password) ActiveRecord::Base.transaction do - Gitea::Organization::DeleteService.call(@organization.gitea_token, @organization.login) - @organization.destroy! + gitea_status, gitea_message = Gitea::Organization::DeleteService.call(current_user.gitea_token, @organization.login) + if gitea_status == 204 + @organization.destroy! + render_ok + else + tip_exception("当组织内含有仓库时,无法删除此组织") + end end - render_ok rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 675c6523b..86b877170 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -56,6 +56,7 @@ class PullRequestsController < ApplicationController end def create + return render_forbidden("你没有权限操作.") unless @project.operator?(current_user) ActiveRecord::Base.transaction do @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) if @gitea_pull_request[:status] == :success @@ -78,6 +79,7 @@ class PullRequestsController < ApplicationController end def update + return render_forbidden("你没有权限操作.") unless @project.operator?(current_user) if params[:title].nil? normal_status(-1, "名称不能为空") elsif params[:issue_tag_ids].nil? @@ -197,7 +199,7 @@ class PullRequestsController < ApplicationController def check_can_merge target_head = params[:head] #源分支 target_base = params[:base] #目标分支 - is_original = params[:is_original] + is_original = params[:is_original] || false if target_head.blank? || target_base.blank? normal_status(-2, "请选择分支") elsif target_head === target_base && !is_original @@ -228,11 +230,11 @@ class PullRequestsController < ApplicationController private def load_pull_request - @pull_request = PullRequest.find params[:id] + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) end def find_pull_request - @pull_request = PullRequest.find_by_id(params[:id]) + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) @issue = @pull_request&.issue if @pull_request.blank? normal_status(-1, "合并请求不存在") diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index c08655fbc..c20bb6ea1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -32,7 +32,8 @@ class UsersController < ApplicationController @waiting_applied_messages = @user.applied_messages.waiting @common_applied_transfer_projects = AppliedTransferProject.where(owner_id: @user.id).common + AppliedTransferProject.where(owner_id: Organization.joins(team_users: :team).where(team_users: {user_id: @user.id}, teams: {authorize: %w(admin owner)} )).common @common_applied_projects = AppliedProject.where(project_id: @user.full_admin_projects).common - @undo_events = @waiting_applied_messages.size + @common_applied_transfer_projects.size + @common_applied_projects.size + #@undo_events = @waiting_applied_messages.size + @common_applied_transfer_projects.size + @common_applied_projects.size + @undo_events = @common_applied_transfer_projects.size + @common_applied_projects.size else @waiting_applied_messages = AppliedMessage.none @common_applied_transfer_projects = AppliedTransferProject.none diff --git a/app/forms/organizations/create_form.rb b/app/forms/organizations/create_form.rb index d92a99040..48c8e23d0 100644 --- a/app/forms/organizations/create_form.rb +++ b/app/forms/organizations/create_form.rb @@ -8,4 +8,11 @@ class Organizations::CreateForm < BaseForm validates :description, length: { maximum: 200 } validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } + validate do + check_name(name) unless name.blank? + end + + def check_name(name) + raise "组织账号已被使用." if Owner.where(login: name.strip).exists? + end end diff --git a/app/models/message_template/issue_assigned.rb b/app/models/message_template/issue_assigned.rb index 23632c3ef..10ad5eb2d 100644 --- a/app/models/message_template/issue_assigned.rb +++ b/app/models/message_template/issue_assigned.rb @@ -36,26 +36,28 @@ class MessageTemplate::IssueAssigned < MessageTemplate def self.get_email_message_content(receiver, operator, issue) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::IssueAssigned"] + project = issue&.project + owner = project&.owner + title = email_title + title.gsub!('{nickname1}', operator&.real_name) + title.gsub!('{nickname2}', owner&.real_name) + title.gsub!('{repository}', project&.name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', issue&.subject) + content.gsub!('{id}', issue&.id.to_s) + + return receiver&.mail, title, content + else + return '', '', '' end - project = issue&.project - owner = project&.owner - title = email_title - title.gsub!('{nickname1}', operator&.real_name) - title.gsub!('{nickname2}', owner&.real_name) - title.gsub!('{repository}', project&.name) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', issue&.subject) - content.gsub!('{id}', issue&.id.to_s) - - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::IssueAssigned.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index 90a72d1a0..10007cfb0 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -191,177 +191,180 @@ class MessageTemplate::IssueChanged < MessageTemplate return '', '', '' if change_params.blank? if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["CreateOrAssign::IssueChanged"] - end - project = issue&.project - owner = project&.owner - title = email_title - title.gsub!('{title}', issue&.subject) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{title}', issue&.subject) - content.gsub!('{id}', issue&.id.to_s) - change_count = change_params.keys.size - # 易修负责人修改 - if change_params[:assigned_to_id].present? - assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) - assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) - if change_count > 1 - content.sub!('{ifassigner}', '
') + project = issue&.project + owner = project&.owner + title = email_title + title.gsub!('{title}', issue&.subject) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{title}', issue&.subject) + content.gsub!('{id}', issue&.id.to_s) + change_count = change_params.keys.size + # 易修负责人修改 + if change_params[:assigned_to_id].present? + assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) + assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) + if change_count > 1 + content.sub!('{ifassigner}', '
') + else + content.sub!('{ifassigner}', '') + end + content.sub!('{endassigner}', '') + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') else - content.sub!('{ifassigner}', '') + content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end - content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') - content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') - else - content.gsub!(/({ifassigner})(.*)({endassigner})/, '') - end - # 易修状态修改 - if change_params[:status_id].present? - status1 = IssueStatus.find_by_id(change_params[:status_id][0]) - status2 = IssueStatus.find_by_id(change_params[:status_id][1]) - if change_count > 1 - content.sub!('{ifstatus}', '
') + # 易修状态修改 + if change_params[:status_id].present? + status1 = IssueStatus.find_by_id(change_params[:status_id][0]) + status2 = IssueStatus.find_by_id(change_params[:status_id][1]) + if change_count > 1 + content.sub!('{ifstatus}', '
') + else + content.sub!('{ifstatus}', '') + end + content.sub!('{endstatus}', '') + content.gsub!('{status1}', status1&.name) + content.gsub!('{status2}', status2&.name) else - content.sub!('{ifstatus}', '') + content.gsub!(/({ifstatus})(.*)({endstatus})/, '') end - content.sub!('{endstatus}', '') - content.gsub!('{status1}', status1&.name) - content.gsub!('{status2}', status2&.name) - else - content.gsub!(/({ifstatus})(.*)({endstatus})/, '') - end - # 易修类型修改 - if change_params[:tracker_id].present? - tracker1 = Tracker.find_by_id(change_params[:tracker_id][0]) - tracker2 = Tracker.find_by_id(change_params[:tracker_id][1]) - if change_count > 1 - content.sub!('{iftracker}', '
') + # 易修类型修改 + if change_params[:tracker_id].present? + tracker1 = Tracker.find_by_id(change_params[:tracker_id][0]) + tracker2 = Tracker.find_by_id(change_params[:tracker_id][1]) + if change_count > 1 + content.sub!('{iftracker}', '
') + else + content.sub!('{iftracker}', '') + end + content.sub!('{endtracker}', '') + content.gsub!('{tracker1}', tracker1&.name) + content.gsub!('{tracker2}', tracker2&.name) else - content.sub!('{iftracker}', '') + content.gsub!(/({iftracker})(.*)({endtracker})/, '') end - content.sub!('{endtracker}', '') - content.gsub!('{tracker1}', tracker1&.name) - content.gsub!('{tracker2}', tracker2&.name) - else - content.gsub!(/({iftracker})(.*)({endtracker})/, '') - end - # 易修里程碑修改 - if change_params[:fixed_version_id].present? - fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) - fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) - if change_count > 1 - content.sub!('{ifmilestone}', '
') + # 易修里程碑修改 + if change_params[:fixed_version_id].present? + fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) + fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) + if change_count > 1 + content.sub!('{ifmilestone}', '
') + else + content.sub!('{ifmilestone}', '') + end + content.sub!('{endmilestone}', '') + content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') + content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') else - content.sub!('{ifmilestone}', '') + content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end - content.sub!('{endmilestone}', '') - content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') - content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') - else - content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') - end - # 易修标记修改 - if change_params[:issue_tags_value].present? - issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct - issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct - tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") - tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") - if change_count > 1 - content.sub!('{iftag}', '
') + # 易修标记修改 + if change_params[:issue_tags_value].present? + issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct + issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") + if change_count > 1 + content.sub!('{iftag}', '
') + else + content.sub!('{iftag}', '') + end + content.sub!('{endtag}', '') + content.gsub!('{tag1}', tag1) + content.gsub!('{tag2}', tag2) else - content.sub!('{iftag}', '') + content.gsub!(/({iftag})(.*)({endtag})()/, '') end - content.sub!('{endtag}', '') - content.gsub!('{tag1}', tag1) - content.gsub!('{tag2}', tag2) - else - content.gsub!(/({iftag})(.*)({endtag})()/, '') - end - # 易修优先级修改 - if change_params[:priority_id].present? - priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) - priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) - if change_count > 1 - content.sub!('{ifpriority}', '
') + # 易修优先级修改 + if change_params[:priority_id].present? + priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) + priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) + if change_count > 1 + content.sub!('{ifpriority}', '
') + else + content.sub!('{ifpriority}', '') + end + content.sub!('{endpriority}', '') + content.gsub!('{priority1}', priority1&.name) + content.gsub!('{priority2}', priority2&.name) else - content.sub!('{ifpriority}', '') + content.gsub!(/({ifpriority})(.*)({endpriority})/, '') end - content.sub!('{endpriority}', '') - content.gsub!('{priority1}', priority1&.name) - content.gsub!('{priority2}', priority2&.name) - else - content.gsub!(/({ifpriority})(.*)({endpriority})/, '') - end - # 易修完成度修改 - if change_params[:done_ratio].present? - doneratio1 = change_params[:done_ratio][0] - doneratio2 = change_params[:done_ratio][1] - if change_count > 1 - content.sub!('{ifdoneratio}', '
') + # 易修完成度修改 + if change_params[:done_ratio].present? + doneratio1 = change_params[:done_ratio][0] + doneratio2 = change_params[:done_ratio][1] + if change_count > 1 + content.sub!('{ifdoneratio}', '
') + else + content.sub!('{ifdoneratio}', '') + end + content.sub!('{enddoneratio}', '') + content.gsub!('{doneratio1}', "#{doneratio1}%") + content.gsub!('{doneratio2}', "#{doneratio2}%") else - content.sub!('{ifdoneratio}', '') + content.gsub!(/({ifdoneratio})(.*)({enddoneratio})/, '') end - content.sub!('{enddoneratio}', '') - content.gsub!('{doneratio1}', "#{doneratio1}%") - content.gsub!('{doneratio2}', "#{doneratio2}%") - else - content.gsub!(/({ifdoneratio})(.*)({enddoneratio})/, '') - end - # 易修指定分支修改 - if change_params[:branch_name].present? - branch1 = change_params[:branch_name][0].blank? ? '分支未指定' : change_params[:branch_name][0] - branch2 = change_params[:branch_name][1].blank? ? '分支未指定' : change_params[:branch_name][1] - if change_count > 1 - content.sub!('{ifbranch}', '
') + # 易修指定分支修改 + if change_params[:branch_name].present? + branch1 = change_params[:branch_name][0].blank? ? '分支未指定' : change_params[:branch_name][0] + branch2 = change_params[:branch_name][1].blank? ? '分支未指定' : change_params[:branch_name][1] + if change_count > 1 + content.sub!('{ifbranch}', '
') + else + content.sub!('{ifbranch}', '') + end + content.sub!('{endbranch}', '') + content.gsub!('{branch1}', branch1) + content.gsub!('{branch2}', branch2) else - content.sub!('{ifbranch}', '') + content.gsub!(/({ifbranch})(.*)({endbranch})/, '') end - content.sub!('{endbranch}', '') - content.gsub!('{branch1}', branch1) - content.gsub!('{branch2}', branch2) - else - content.gsub!(/({ifbranch})(.*)({endbranch})/, '') - end - # 易修开始日期修改 - if change_params[:start_date].present? - startdate1 = change_params[:start_date][0].blank? ? "未选择开始日期" : change_params[:start_date][0] - startdate2 = change_params[:start_date][1].blank? ? "未选择开始日期" : change_params[:start_date][1] - if change_count > 1 - content.sub!('{ifstartdate}', '
') + # 易修开始日期修改 + if change_params[:start_date].present? + startdate1 = change_params[:start_date][0].blank? ? "未选择开始日期" : change_params[:start_date][0] + startdate2 = change_params[:start_date][1].blank? ? "未选择开始日期" : change_params[:start_date][1] + if change_count > 1 + content.sub!('{ifstartdate}', '
') + else + content.sub!('{ifstartdate}', '') + end + content.sub!('{endstartdate}', '') + content.gsub!('{startdate1}', startdate1 ) + content.gsub!('{startdate2}', startdate2) else - content.sub!('{ifstartdate}', '') + content.gsub!(/({ifstartdate})(.*)({endstartdate})/, '') end - content.sub!('{endstartdate}', '') - content.gsub!('{startdate1}', startdate1 ) - content.gsub!('{startdate2}', startdate2) - else - content.gsub!(/({ifstartdate})(.*)({endstartdate})/, '') - end - # 易修结束日期修改 - if change_params[:due_date].present? - duedate1 = change_params[:due_date][0].blank? ? '未选择结束日期' : change_params[:due_date][0] - duedate2 = change_params[:due_date][1].blank? ? '未选择结束日期' : change_params[:due_date][1] - if change_count > 1 - content.sub!('{ifduedate}', '
') + # 易修结束日期修改 + if change_params[:due_date].present? + duedate1 = change_params[:due_date][0].blank? ? '未选择结束日期' : change_params[:due_date][0] + duedate2 = change_params[:due_date][1].blank? ? '未选择结束日期' : change_params[:due_date][1] + if change_count > 1 + content.sub!('{ifduedate}', '
') + else + content.sub!('{ifduedate}', '') + end + content.sub!('{endduedate}', '') + content.gsub!('{duedate1}', duedate1) + content.gsub!('{duedate2}', duedate2) else - content.sub!('{ifduedate}', '') + content.gsub!(/({ifduedate})(.*)({endduedate})/, '') end - content.sub!('{endduedate}', '') - content.gsub!('{duedate1}', duedate1) - content.gsub!('{duedate2}', duedate2) - else - content.gsub!(/({ifduedate})(.*)({endduedate})/, '') - end - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end + rescue => e Rails.logger.info("MessageTemplate::IssueChanged.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index c08ee0439..d51782cf1 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -33,17 +33,19 @@ class MessageTemplate::IssueDeleted < MessageTemplate def self.get_email_message_content(receiver, operator, issue_title) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["CreateOrAssign::IssueChanged"] - end - title = email_title - title.gsub!('{title}', issue_title) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname}', operator&.real_name) - content.gsub!('{login}', operator&.login) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', issue_title) + title = email_title + title.gsub!('{title}', issue_title) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname}', operator&.real_name) + content.gsub!('{login}', operator&.login) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', issue_title) - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end rescue => e Rails.logger.info("MessageTemplate::IssueDeleted.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index 22cfb48d0..30f91ac98 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -34,16 +34,19 @@ class MessageTemplate::OrganizationJoined < MessageTemplate def self.get_email_message_content(receiver, organization) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Organization"] + title = email_title + title.gsub!('{organization}', organization&.real_name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', organization&.login) + content.gsub!('{organization}', organization&.real_name) + + return receiver&.mail, title, content + else + return '', '', '' end - title = email_title - title.gsub!('{organization}', organization&.real_name) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', organization&.login) - content.gsub!('{organization}', organization&.real_name) - - return receiver&.mail, title, content + rescue => e Rails.logger.info("MessageTemplate::OrganizationJoined.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index eee752f05..50a771385 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -34,16 +34,19 @@ class MessageTemplate::OrganizationLeft < MessageTemplate def self.get_email_message_content(receiver, organization) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Organization"] + title = email_title + title.gsub!('{organization}', organization&.real_name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', organization&.login) + content.gsub!('{organization}', organization&.real_name) + + return receiver&.mail, title, content + else + return '', '', '' end - title = email_title - title.gsub!('{organization}', organization&.real_name) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', organization&.login) - content.gsub!('{organization}', organization&.real_name) - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::OrganizationLeft.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index b6024f614..207712956 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -34,18 +34,21 @@ class MessageTemplate::OrganizationRole < MessageTemplate def self.get_email_message_content(receiver, organization, role) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Permission"] + title = email_title + title.gsub!('{organization}', organization&.real_name) + title.gsub!('{role}', role) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', organization&.login) + content.gsub!('{organization}', organization&.real_name) + content.gsub!('{role}', role) + + return receiver&.mail, title, content + else + return '', '', '' end - title = email_title - title.gsub!('{organization}', organization&.real_name) - title.gsub!('{role}', role) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', organization&.login) - content.gsub!('{organization}', organization&.real_name) - content.gsub!('{role}', role) - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::OrganizationRole.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index 9106bcc8f..8d7d99aa7 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -38,27 +38,30 @@ class MessageTemplate::ProjectIssue < MessageTemplate def self.get_email_message_content(receiver, is_manager, operator, issue) if receiver.user_template_message_setting.present? && is_manager return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::Issue"] + project = issue&.project + owner = project&.owner + title = email_title + title.gsub!('{nickname1}', operator&.real_name) + title.gsub!('{nickname2}', owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{repository}', project&.name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{id}', issue&.id.to_s) + content.gsub!('{title}', issue&.subject) + + return receiver&.mail, title, content + else + return '', '', '' end - project = issue&.project - owner = project&.owner - title = email_title - title.gsub!('{nickname1}', operator&.real_name) - title.gsub!('{nickname2}', owner&.real_name) - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{repository}', project&.name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{id}', issue&.id.to_s) - content.gsub!('{title}', issue&.subject) - - return receiver&.mail, title, content + rescue => e Rails.logger.info("MessageTemplate::ProjectIssue.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb index b46dc51a7..c2d23fbd2 100644 --- a/app/models/message_template/project_joined.rb +++ b/app/models/message_template/project_joined.rb @@ -34,19 +34,22 @@ class MessageTemplate::ProjectJoined < MessageTemplate def self.get_email_message_content(receiver, project) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Project"] - end - title = email_title - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', project&.owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{nickname}', project&.owner&.real_name) - content.gsub!('{repository}', project&.name) + title = email_title + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', project&.owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{nickname}', project&.owner&.real_name) + content.gsub!('{repository}', project&.name) - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end + rescue => e Rails.logger.info("MessageTemplate::ProjectJoined.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb index 3dfa7bb61..6f5bafa02 100644 --- a/app/models/message_template/project_left.rb +++ b/app/models/message_template/project_left.rb @@ -33,19 +33,22 @@ class MessageTemplate::ProjectLeft < MessageTemplate def self.get_email_message_content(receiver, project) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Project"] - end - title = email_title - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', project&.owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{nickname}', project&.owner&.real_name) - content.gsub!('{repository}', project&.name) + title = email_title + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', project&.owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{nickname}', project&.owner&.real_name) + content.gsub!('{repository}', project&.name) - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end + rescue => e Rails.logger.info("MessageTemplate::ProjectLeft.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index 7a781750c..e9b6b5d51 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -34,23 +34,25 @@ class MessageTemplate::ProjectMemberJoined < MessageTemplate def self.get_email_message_content(receiver, user, project) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::Member"] - end - title = email_title - title.gsub!('{nickname1}', user&.real_name) - title.gsub!('{nickname2}', project&.owner&.real_name) - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', user&.login) - content.gsub!('{login2}', project&.owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{nickname1}', user&.real_name) - content.gsub!('{nickname2}', project&.owner&.real_name) - content.gsub!('{repository}', project&.name) + title = email_title + title.gsub!('{nickname1}', user&.real_name) + title.gsub!('{nickname2}', project&.owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', user&.login) + content.gsub!('{login2}', project&.owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{nickname1}', user&.real_name) + content.gsub!('{nickname2}', project&.owner&.real_name) + content.gsub!('{repository}', project&.name) - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end rescue => e Rails.logger.info("MessageTemplate::ProjectMemberJoined.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index f41791233..23d4ef5f3 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -34,23 +34,26 @@ class MessageTemplate::ProjectMemberLeft < MessageTemplate def self.get_email_message_content(receiver, user, project) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::Member"] + title = email_title + title.gsub!('{nickname1}', user&.real_name) + title.gsub!('{nickname2}', project&.owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', user&.login) + content.gsub!('{login2}', project&.owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{nickname1}', user&.real_name) + content.gsub!('{nickname2}', project&.owner&.real_name) + content.gsub!('{repository}', project&.name) + + return receiver&.mail, title, content + else + return '', '', '' end - title = email_title - title.gsub!('{nickname1}', user&.real_name) - title.gsub!('{nickname2}', project&.owner&.real_name) - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', user&.login) - content.gsub!('{login2}', project&.owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{nickname1}', user&.real_name) - content.gsub!('{nickname2}', project&.owner&.real_name) - content.gsub!('{repository}', project&.name) - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::ProjectMemberLeft.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index ac04651ef..40c700b29 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -38,27 +38,29 @@ class MessageTemplate::ProjectPullRequest < MessageTemplate def self.get_email_message_content(receiver, is_manager, operator, pull_request) if receiver.user_template_message_setting.present? && is_manager return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::PullRequest"] + project = pull_request&.project + owner = project&.owner + title = email_title + title.gsub!('{nickname1}', operator&.real_name) + title.gsub!('{nickname2}', owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{repository}', project&.name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{id}', pull_request&.id.to_s) + content.gsub!('{title}', pull_request&.title) + + return receiver&.mail, title, content + else + return '', '', '' end - project = pull_request&.project - owner = project&.owner - title = email_title - title.gsub!('{nickname1}', operator&.real_name) - title.gsub!('{nickname2}', owner&.real_name) - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{repository}', project&.name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{id}', pull_request&.id.to_s) - content.gsub!('{title}', pull_request&.title) - - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::ProjectPullRequest.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb index e306f5c02..f7f4940df 100644 --- a/app/models/message_template/project_role.rb +++ b/app/models/message_template/project_role.rb @@ -34,21 +34,24 @@ class MessageTemplate::ProjectRole < MessageTemplate def self.get_email_message_content(receiver, project, role) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Permission"] + title = email_title + title.gsub!('{repository}', project&.name) + title.gsub!('{role}', role) + title.gsub!('{nickname}', project&.owner&.real_name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', project&.owner&.login) + content.gsub!('{nickname}', project&.owner&.real_name) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{role}', role) + + return receiver&.mail, title, content + else + return '', '', '' end - title = email_title - title.gsub!('{repository}', project&.name) - title.gsub!('{role}', role) - title.gsub!('{nickname}', project&.owner&.real_name) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login}', project&.owner&.login) - content.gsub!('{nickname}', project&.owner&.real_name) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{role}', role) - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::ProjectRole.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 457ab9207..3ce17433d 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -159,150 +159,152 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate end def self.get_email_message_content(receiver, operator, project, change_params) + return '', '', '' if change_params.blank? if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::SettingChanged"] - end - return '', '', '' if change_params.blank? - owner = project&.owner - title = email_title - title.gsub!('{nickname2}', owner&.real_name) - title.gsub!('{repository}', project&.name) - - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - change_count = change_params.keys.size - # 项目名称更改 - if change_params[:name].present? - if change_count > 1 - content.sub!('{ifname}', '
') - else - content.sub!('{ifname}', '') - end - content.sub!('{endname}', '') - content.gsub!('{name}', change_params[:name][1]) - else - content.gsub!(/({ifname})(.*)({endname})/, '') - end - # 项目标识更改 - if change_params[:identifier].present? - if change_count > 1 - content.sub!('{ifidentifier}', '
') - else - content.sub!('{ifidentifier}', '') - end - content.sub!('{endidentifier}', '') - content.gsub!('{identifier}', change_params[:identifier][1]) - else - content.gsub!(/({ifidentifier})(.*)({endidentifier})/, '') - end - # 项目简介更改 - if change_params[:description].present? - if change_params[:description][1].blank? + owner = project&.owner + title = email_title + title.gsub!('{nickname2}', owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + change_count = change_params.keys.size + # 项目名称更改 + if change_params[:name].present? if change_count > 1 - content.gsub!(/({ifdescription})(.*)({enddescription})/, '
删除了项目简介') + content.sub!('{ifname}', '
') else - content.gsub!(/({ifdescription})(.*)({enddescription})/, '删除了项目简介') + content.sub!('{ifname}', '') end + content.sub!('{endname}', '') + content.gsub!('{name}', change_params[:name][1]) else - if change_count > 1 - content.sub!('{ifdescription}', '
') - else - content.sub!('{ifdescription}', '') - end - content.sub!('{enddescription}', '') - content.gsub!('{description}', change_params[:description][1]) + content.gsub!(/({ifname})(.*)({endname})/, '') end - else - content.gsub!(/({ifdescription})(.*)({enddescription})/, '') - end - # 项目类别更改 - if change_params[:project_category_id].present? - category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) - if category.present? + # 项目标识更改 + if change_params[:identifier].present? if change_count > 1 - content.sub!('{ifcategory}', '
') + content.sub!('{ifidentifier}', '
') else - content.sub!('{ifcategory}', '') + content.sub!('{ifidentifier}', '') + end + content.sub!('{endidentifier}', '') + content.gsub!('{identifier}', change_params[:identifier][1]) + else + content.gsub!(/({ifidentifier})(.*)({endidentifier})/, '') + end + # 项目简介更改 + if change_params[:description].present? + if change_params[:description][1].blank? + if change_count > 1 + content.gsub!(/({ifdescription})(.*)({enddescription})/, '
删除了项目简介') + else + content.gsub!(/({ifdescription})(.*)({enddescription})/, '删除了项目简介') + end + else + if change_count > 1 + content.sub!('{ifdescription}', '
') + else + content.sub!('{ifdescription}', '') + end + content.sub!('{enddescription}', '') + content.gsub!('{description}', change_params[:description][1]) end - content.sub!('{endcategory}', '') - content.gsub!('{category}', category&.name) else - if change_count > 1 - content.gsub!(/({ifcategory})(.*)({endcategory})/, '
删除了项目类别') - else - content.gsub!(/({ifcategory})(.*)({endcategory})/, '删除了项目类别') + content.gsub!(/({ifdescription})(.*)({enddescription})/, '') + end + # 项目类别更改 + if change_params[:project_category_id].present? + category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) + if category.present? + if change_count > 1 + content.sub!('{ifcategory}', '
') + else + content.sub!('{ifcategory}', '') + end + content.sub!('{endcategory}', '') + content.gsub!('{category}', category&.name) + else + if change_count > 1 + content.gsub!(/({ifcategory})(.*)({endcategory})/, '
删除了项目类别') + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '删除了项目类别') + end end + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '') end - else - content.gsub!(/({ifcategory})(.*)({endcategory})/, '') - end - # 项目语言更改 - if change_params[:project_language_id].present? - language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) - if language.present? - if change_count > 1 - content.sub!('{iflanguage}', '
') + # 项目语言更改 + if change_params[:project_language_id].present? + language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) + if language.present? + if change_count > 1 + content.sub!('{iflanguage}', '
') + else + content.sub!('{iflanguage}', '') + end + content.sub!('{endlanguage}', '') + content.gsub!('{language}', language&.name) else - content.sub!('{iflanguage}', '') + if change_count > 1 + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '
删除了项目语言') + else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '删除了项目语言') + end end - content.sub!('{endlanguage}', '') - content.gsub!('{language}', language&.name) else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') + end + # 项目公私有更改 + if change_params[:is_public].present? + permission = change_params[:is_public][1] ? '公有' : '私有' if change_count > 1 - content.gsub!(/({iflanguage})(.*)({endlanguage})/, '
删除了项目语言') + content.sub!('{ifpermission}', '
') else - content.gsub!(/({iflanguage})(.*)({endlanguage})/, '删除了项目语言') + content.sub!('{ifpermission}', '') end - end - else - content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') - end - # 项目公私有更改 - if change_params[:is_public].present? - permission = change_params[:is_public][1] ? '公有' : '私有' - if change_count > 1 - content.sub!('{ifpermission}', '
') + content.sub!('{endpermission}', '') + content.gsub!('{permission}', permission) else - content.sub!('{ifpermission}', '') + content.gsub!(/({ifpermission})(.*)({endpermission})/, '') end - content.sub!('{endpermission}', '') - content.gsub!('{permission}', permission) - else - content.gsub!(/({ifpermission})(.*)({endpermission})/, '') - end - # 项目导航更改 - if change_params[:navbar].present? - unit_types = project.project_units.order(unit_type: :asc).pluck(:unit_type) - unit_types.delete('code') - unit_types.unshift('代码库') - unit_types.unshift('主页') - unit_types.append('动态') - navbar = unit_types.join(',') - navbar.gsub!('issues', '易修') - navbar.gsub!('pulls', '合并请求') - navbar.gsub!('wiki', 'Wiki') - navbar.gsub!('devops', '工作流') - navbar.gsub!('versions', '里程碑') - navbar.gsub!('resources', '资源库') - if change_count > 1 - content.sub!('{ifnavbar}', '
') + # 项目导航更改 + if change_params[:navbar].present? + unit_types = project.project_units.order(unit_type: :asc).pluck(:unit_type) + unit_types.delete('code') + unit_types.unshift('代码库') + unit_types.unshift('主页') + unit_types.append('动态') + navbar = unit_types.join(',') + navbar.gsub!('issues', '易修') + navbar.gsub!('pulls', '合并请求') + navbar.gsub!('wiki', 'Wiki') + navbar.gsub!('devops', '工作流') + navbar.gsub!('versions', '里程碑') + navbar.gsub!('resources', '资源库') + if change_count > 1 + content.sub!('{ifnavbar}', '
') + else + content.sub!('{ifnavbar}', '') + end + content.sub!('{endnavbar}', '') + content.gsub!('{navbar}', navbar) else - content.sub!('{ifnavbar}', '') + content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') end - content.sub!('{endnavbar}', '') - content.gsub!('{navbar}', navbar) + + return receiver&.mail, title, content else - content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') + return '', '', '' end - - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index 1101ca46b..bca37151a 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -36,26 +36,28 @@ class MessageTemplate::PullRequestAssigned < MessageTemplate def self.get_email_message_content(receiver, operator, pull_request) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::PullRequestAssigned"] - end - project = pull_request&.project - owner = project&.owner - title = email_title - title.gsub!('{nickname1}', operator&.real_name) - title.gsub!('{nickname2}', owner&.real_name) - title.gsub!('{repository}', project&.name) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', pull_request&.title) - content.gsub!('{id}', pull_request&.id.to_s) + project = pull_request&.project + owner = project&.owner + title = email_title + title.gsub!('{nickname1}', operator&.real_name) + title.gsub!('{nickname2}', owner&.real_name) + title.gsub!('{repository}', project&.name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', pull_request&.title) + content.gsub!('{id}', pull_request&.id.to_s) - return receiver&.mail, title, content + return receiver&.mail, title, content + else + return '', '', '' + end rescue => e Rails.logger.info("MessageTemplate::PullRequestAssigned.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index fc4457f37..ab2c73b6b 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -103,89 +103,92 @@ class MessageTemplate::PullRequestChanged < MessageTemplate return '', '', '' if change_params.blank? if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["CreateOrAssign::PullRequestChanged"] - end - project = pull_request&.project - owner = project&.owner - title = email_title - title.gsub!('{title}', pull_request&.title) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', pull_request&.title) - content.gsub!('{id}', pull_request&.id.to_s) - - change_count = change_params.keys.size - # 合并请求审查成员修改 - if change_params[:assigned_to_id].present? - assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) - assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) - if change_count > 1 - content.sub!('{ifassigner}', '
') + project = pull_request&.project + owner = project&.owner + title = email_title + title.gsub!('{title}', pull_request&.title) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', pull_request&.title) + content.gsub!('{id}', pull_request&.id.to_s) + + change_count = change_params.keys.size + # 合并请求审查成员修改 + if change_params[:assigned_to_id].present? + assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) + assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) + if change_count > 1 + content.sub!('{ifassigner}', '
') + else + content.sub!('{ifassigner}', '') + end + content.sub!('{endassigner}', '') + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') else - content.sub!('{ifassigner}', '') + content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end - content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') - content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') - else - content.gsub!(/({ifassigner})(.*)({endassigner})/, '') - end - # 合并请求里程碑修改 - if change_params[:fixed_version_id].present? - fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) - fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) - if change_count > 1 - content.sub!('{ifmilestone}', '
') + # 合并请求里程碑修改 + if change_params[:fixed_version_id].present? + fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) + fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) + if change_count > 1 + content.sub!('{ifmilestone}', '
') + else + content.sub!('{ifmilestone}', '') + end + content.sub!('{endmilestone}', '') + content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') + content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') else - content.sub!('{ifmilestone}', '') + content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end - content.sub!('{endmilestone}', '') - content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') - content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') - else - content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') - end - # 合并请求标记修改 - if change_params[:issue_tags_value].present? - issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct - issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct - tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") - tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") - if change_count > 1 - content.sub!('{iftag}', '
') + # 合并请求标记修改 + if change_params[:issue_tags_value].present? + issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct + issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") + if change_count > 1 + content.sub!('{iftag}', '
') + else + content.sub!('{iftag}', '') + end + content.sub!('{endtag}', '') + content.gsub!('{tag1}', tag1) + content.gsub!('{tag2}', tag2) else - content.sub!('{iftag}', '') + content.gsub!(/({iftag})(.*)({endtag})()/, '') end - content.sub!('{endtag}', '') - content.gsub!('{tag1}', tag1) - content.gsub!('{tag2}', tag2) - else - content.gsub!(/({iftag})(.*)({endtag})()/, '') - end - # 合并请求优先级修改 - if change_params[:priority_id].present? - priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) - priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) - if change_count > 1 - content.sub!('{ifpriority}', '
') + # 合并请求优先级修改 + if change_params[:priority_id].present? + priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) + priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) + if change_count > 1 + content.sub!('{ifpriority}', '
') + else + content.sub!('{ifpriority}', '') + end + content.sub!('{ifpriority}', '') + content.sub!('{endpriority}', '') + content.gsub!('{priority1}', priority1&.name) + content.gsub!('{priority2}', priority2&.name) else - content.sub!('{ifpriority}', '') + content.gsub!(/({ifpriority})(.*)({endpriority})/, '') end - content.sub!('{ifpriority}', '') - content.sub!('{endpriority}', '') - content.gsub!('{priority1}', priority1&.name) - content.gsub!('{priority2}', priority2&.name) + + return receiver&.mail, title, content else - content.gsub!(/({ifpriority})(.*)({endpriority})/, '') + return '', '', '' end - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::PullRequestChanged.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/pull_request_closed.rb b/app/models/message_template/pull_request_closed.rb index f160ebf20..ea1ffabcb 100644 --- a/app/models/message_template/pull_request_closed.rb +++ b/app/models/message_template/pull_request_closed.rb @@ -36,24 +36,27 @@ class MessageTemplate::PullRequestClosed < MessageTemplate def self.get_email_message_content(receiver, operator, pull_request) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["CreateOrAssign::PullRequestChanged"] + project = pull_request&.project + owner = project&.owner + title = email_title + title.gsub!('{title}', pull_request&.title) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', pull_request&.title) + content.gsub!('{id}', pull_request&.id.to_s) + + return receiver&.mail, title, content + else + return '', '', '' end - project = pull_request&.project - owner = project&.owner - title = email_title - title.gsub!('{title}', pull_request&.title) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', pull_request&.title) - content.gsub!('{id}', pull_request&.id.to_s) - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::PullRequestClosed.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/message_template/pull_request_merged.rb b/app/models/message_template/pull_request_merged.rb index 3dccffdd7..eb4bb5e17 100644 --- a/app/models/message_template/pull_request_merged.rb +++ b/app/models/message_template/pull_request_merged.rb @@ -36,24 +36,26 @@ class MessageTemplate::PullRequestMerged < MessageTemplate def self.get_email_message_content(receiver, operator, pull_request) if receiver.user_template_message_setting.present? return '', '', '' unless receiver.user_template_message_setting.email_body["CreateOrAssign::PullRequestChanged"] + project = pull_request&.project + owner = project&.owner + title = email_title + title.gsub!('{title}', pull_request&.title) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname1}', operator&.real_name) + content.gsub!('{login1}', operator&.login) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{login2}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{repository}', project&.name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{title}', pull_request&.title) + content.gsub!('{id}', pull_request&.id.to_s) + + return receiver&.mail, title, content + else + return '', '', '' end - project = pull_request&.project - owner = project&.owner - title = email_title - title.gsub!('{title}', pull_request&.title) - content = email - content.gsub!('{receiver}', receiver&.real_name) - content.gsub!('{nickname1}', operator&.real_name) - content.gsub!('{login1}', operator&.login) - content.gsub!('{nickname2}', owner&.real_name) - content.gsub!('{login2}', owner&.login) - content.gsub!('{identifier}', project&.identifier) - content.gsub!('{repository}', project&.name) - content.gsub!('{baseurl}', base_url) - content.gsub!('{title}', pull_request&.title) - content.gsub!('{id}', pull_request&.id.to_s) - - return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::PullRequestMerged.get_email_message_content [ERROR] #{e}") return '', '', '' diff --git a/app/models/project.rb b/app/models/project.rb index f3f2d5d5b..2ba5d5cf3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -130,7 +130,7 @@ class Project < ApplicationRecord after_create :incre_user_statistic, :incre_platform_statistic after_save :check_project_members, :reset_cache_data before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned - before_destroy :decre_project_common + before_destroy :decre_project_common, :decre_forked_from_project_count after_destroy :decre_user_statistic, :decre_platform_statistic scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :description, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} scope :no_anomory_projects, -> {where("projects.user_id is not null and projects.user_id != ?", 2)} @@ -172,6 +172,14 @@ class Project < ApplicationRecord CacheAsyncClearJob.perform_later('project_common_service', self.id) end + def decre_forked_from_project_count + forked_project = self.forked_from_project + if forked_project.present? + forked_project.decrement(:forked_count, 1) + forked_project.save + end + end + def incre_user_statistic CacheAsyncSetJob.perform_later("user_statistic_service", {project_count: 1, project_language_count_key: self.project_language&.name, project_language_count: 1}, self.user_id) end diff --git a/app/models/user_template_message_setting.rb b/app/models/user_template_message_setting.rb index c581e626e..3a3416ee3 100644 --- a/app/models/user_template_message_setting.rb +++ b/app/models/user_template_message_setting.rb @@ -44,17 +44,17 @@ class UserTemplateMessageSetting < ApplicationRecord def self.init_email_body { - "Normal::Permission": true, - "Normal::Project": true, - "Normal::Organization": true, - "Normal::IssueAssigned": true, - "Normal::PullRequestAssigned": true, - "CreateOrAssign::IssueChanged": true, - "CreateOrAssign::PullRequestChanged": true, - "ManageProject::Issue": true, - "ManageProject::PullRequest": true, - "ManageProject::Member": true, - "ManageProject::SettingChanged": true, + "Normal::Permission": false, + "Normal::Project": false, + "Normal::Organization": false, + "Normal::IssueAssigned": false, + "Normal::PullRequestAssigned": false, + "CreateOrAssign::IssueChanged": false, + "CreateOrAssign::PullRequestChanged": false, + "ManageProject::Issue": false, + "ManageProject::PullRequest": false, + "ManageProject::Member": false, + "ManageProject::SettingChanged": false, }.stringify_keys! end diff --git a/app/services/cache/v2/project_common_service.rb b/app/services/cache/v2/project_common_service.rb index 760c6d05b..8ed0a0636 100644 --- a/app/services/cache/v2/project_common_service.rb +++ b/app/services/cache/v2/project_common_service.rb @@ -196,6 +196,7 @@ class Cache::V2::ProjectCommonService < ApplicationService def reset_project_common load_project + return unless @project.present? return unless @project.is_full_public $redis_cache.del(project_common_key) reset_project_owner_id diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 90843cc98..7cdfdd495 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -144,6 +144,8 @@ class Gitea::ClientService < ApplicationService {status: 403, message: '你没有权限操作!'} when 404 {status: 404, message: '你访问的链接不存在!'} + when 500 + {status: 500, message: ''} else if response&.body.blank? message = "请求失败" diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index 42dfc676d..67766be64 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -94,7 +94,7 @@ class PullRequests::CreateService < ApplicationService user: @current_user, issue: pull_issue, fork_project_id: @params[:fork_project_id], - is_original: @params[:is_original], + is_original: is_original, files_count: @params[:files_count] || 0, commits_count: @params[:commits_count] || 0 }) @@ -145,7 +145,13 @@ class PullRequests::CreateService < ApplicationService raise "title参数不能为空" if @params[:title].blank? raise "head参数不能为空" if @params[:head].blank? raise "base参数不能为空" if @params[:base].blank? + raise "分支内容相同,无需创建合并请求" if @params[:head] === @params[:base] && !is_original + raise "合并请求已存在" if @project&.pull_requests.where(head: @params[:head], base: @params[:base], status: 0, is_original: is_original, fork_project_id: @params[:fork_project_id]).present? raise @pull_issue.errors.full_messages.join(", ") unless pull_issue.valid? raise @pull_request.errors.full_messages.join(", ") unless pull_request.valid? end + + def is_original + @params[:is_original] || false + end end diff --git a/app/views/projects/applied_transfer_projects/_detail.json.jbuilder b/app/views/projects/applied_transfer_projects/_detail.json.jbuilder index e583ed1d1..9e8cf2286 100644 --- a/app/views/projects/applied_transfer_projects/_detail.json.jbuilder +++ b/app/views/projects/applied_transfer_projects/_detail.json.jbuilder @@ -1,13 +1,17 @@ project = object.project -json.project do - json.id project.id - json.identifier project.identifier - json.name project.name - json.description project.description - json.is_public project.is_public - json.owner do - json.partial! "/users/user_simple", locals: {user: project.owner} +if project.present? + json.project do + json.id project.id + json.identifier project.identifier + json.name project.name + json.description project.description + json.is_public project.is_public + json.owner do + json.partial! "/users/user_simple", locals: {user: project.owner} + end end +else + json.project nil end json.user do json.partial! "/users/user_simple", locals: {user: object.user} diff --git a/app/views/pull_requests/index.json.jbuilder b/app/views/pull_requests/index.json.jbuilder index 6ae4eb4c3..d37901ef8 100644 --- a/app/views/pull_requests/index.json.jbuilder +++ b/app/views/pull_requests/index.json.jbuilder @@ -14,6 +14,7 @@ json.issues do json.array! @issues.to_a do |issue| pr = issue.pull_request json.pull_request_id pr.id + json.pull_request_number pr.gitea_number json.pull_request_status pr.status json.pull_request_head pr.head json.pull_request_base pr.base diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index f6f478625..bed2d1e6a 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -16,7 +16,7 @@ zh-CN: 'agreed': '已同意' trend: Issue: 易修(Issue) - PullRequest: 合并请求 + PullRequest: 合并请求(PR) VersionRelease: 版本发布 create: 创建了 journal: 回复了 diff --git a/public/500.html b/public/500.html index 8d60f59c0..7fd7c9407 100644 --- a/public/500.html +++ b/public/500.html @@ -12,12 +12,27 @@ body { font-family: "微软雅黑","宋体"; background: #fff; + margin: 0px; + padding: 0px; } h1 { font-size: 1.5em; } - p { - font-size: 0.8em; + img{ + vertical-align: middle; + border-style: none; + } + a{ + text-decoration: none; + } + .font-16{ + font-size: 16px !important; + } + .mt56{ + margin-top: 56px; + } + .color-blue{ + color:#466AFF !important; } .h_content{ text-align: center; @@ -33,6 +48,32 @@ align-items: center; display: -webkit-flex; } + .edu-txt-center { + text-align: center !important; + } + .newTable{ + background-color: #F0F5FF; + position: relative; + height: 100vh; + text-align: center; + } + .newMargin{ + position: absolute; + left: 0; + bottom: 0; + width: 100%; + } + + .mainImg { + position: absolute; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 10; + }