diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 5590d9e87..ad53a4b3f 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -180,6 +180,7 @@ class IssuesController < ApplicationController elsif params[:issue_tag_ids].is_a?(Array) && params[:issue_tag_ids].size == 1 @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| + next if tag == [""] IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) end else @@ -246,7 +247,7 @@ class IssuesController < ApplicationController end if params[:status_id].to_i == 5 #任务由非关闭状态到关闭状态时 @issue.issue_times.update_all(end_time: Time.now) - @issue.update_closed_issues_count_in_project! + # @issue.update_closed_issues_count_in_project! if @issue.issue_type.to_s == "2" && last_status_id != 5 if @issue.assigned_to_id.present? && last_status_id == 3 #只有当用户完成100%时,才给token post_to_chain("add", @issue.token, @issue.get_assign_user.try(:login)) diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index c355e8fd2..77fa844b8 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -12,6 +12,7 @@ class PraiseTreadController < ApplicationController begin return normal_status(2, "你已点过赞了") if current_user.liked?(@project) current_user.like!(@project) + SendTemplateMessageJob.perform_later('ProjectPraised', current_user.id, @project.id) if Site.has_notice_menu? render_ok({praises_count: @project.praises_count, praised: current_user.liked?(@project)}) rescue Exception => e uid_logger_error(e.message) diff --git a/app/controllers/users/template_message_settings_controller.rb b/app/controllers/users/template_message_settings_controller.rb index 2234e7301..5421a29d5 100644 --- a/app/controllers/users/template_message_settings_controller.rb +++ b/app/controllers/users/template_message_settings_controller.rb @@ -22,6 +22,8 @@ class Users::TemplateMessageSettingsController < Users::BaseController def get_current_setting @current_setting = @_observed_user.user_template_message_setting + @current_setting.notification_body.merge!(UserTemplateMessageSetting.init_notification_body.except(*@current_setting.notification_body.keys)) + @current_setting.email_body.merge!(UserTemplateMessageSetting.init_email_body.except(*@current_setting.email_body.keys)) @current_setting = UserTemplateMessageSetting.build(@_observed_user.id) if @current_setting.nil? end diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index f416d488d..dc3faea8e 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -91,10 +91,9 @@ await octokit.request('GET /api/users/:login/messages.json') 类型|说明 --------- | ----------- |IssueAssigned | 有新指派给我的疑修 | -|IssueAssignerExpire | 我负责的疑修截止日期到达最后一天 | +|IssueExpire | 我创建或负责的疑修截止日期到达最后一天 | |IssueAtme | 在疑修中@我 | |IssueChanged | 我创建或负责的疑修状态变更 | -|IssueCreatorExpire | 我创建的疑修截止日期到达最后一天 | |IssueDeleted | 我创建或负责的疑修删除 | |IssueJournal | 我创建或负责的疑修有新的评论 | |LoginIpTip | 登录异常提示 | @@ -109,6 +108,7 @@ await octokit.request('GET /api/users/:login/messages.json') |ProjectLeft | 账号被移出项目 | |ProjectMemberJoined | 我管理的仓库有成员加入 | |ProjectMemberLeft | 我管理的仓库有成员移出 | +|ProjectMilestoneCompleted | 我管理的仓库有里程碑完成度100% | |ProjectMilestone | 我管理的仓库有新的里程碑 | |ProjectPraised | 我管理的仓库被点赞 | |ProjectPullRequest | 我管理/关注的仓库有新的合并请求 | diff --git a/app/jobs/delay_expired_issue_job.rb b/app/jobs/delay_expired_issue_job.rb index bf0e1d2e4..ed390e15b 100644 --- a/app/jobs/delay_expired_issue_job.rb +++ b/app/jobs/delay_expired_issue_job.rb @@ -3,8 +3,7 @@ class DelayExpiredIssueJob < ApplicationJob def perform Issue.where(due_date: Date.today + 1.days).find_each do |issue| - SendTemplateMessageJob.perform_later('IssueAssignerExpire', issue.id) if Site.has_notice_menu? - SendTemplateMessageJob.perform_later('IssueCreatorExpire', issue.id) if Site.has_notice_menu? + SendTemplateMessageJob.perform_later('IssueExpire', issue.id) if Site.has_notice_menu? end end diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index f17755420..4cde94c4b 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -24,13 +24,6 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::IssueAssigned.get_email_message_content(receiver, operator, issue) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end - when 'IssueAssignerExpire' - issue_id = args[0] - issue = Issue.find_by_id(issue_id) - return unless issue.present? - receivers = User.where(id: issue&.assigned_to_id) - receivers_string, content, notification_url = MessageTemplate::IssueAssignerExpire.get_message_content(receivers, issue) - Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {issue_id: issue.id}) when 'IssueAtme' receivers, operator_id, issue_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -52,12 +45,12 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::IssueChanged.get_email_message_content(receiver, operator, issue, change_params) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end - when 'IssueCreatorExpire' + when 'IssueExpire' issue_id = args[0] issue = Issue.find_by_id(issue_id) return unless issue.present? - receivers = User.where(id: issue&.author_id) - receivers_string, content, notification_url = MessageTemplate::IssueCreatorExpire.get_message_content(receivers, issue) + receivers = User.where(id: [issue&.assigned_to_id, issue&.author_id]) + receivers_string, content, notification_url = MessageTemplate::IssueExpire.get_message_content(receivers, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {issue_id: issue.id}) when 'IssueDeleted' operator_id, issue_title, issue_assigned_to_id, issue_author_id = args[0], args[1], args[2], args[3] @@ -94,6 +87,14 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::OrganizationLeft.get_email_message_content(receiver, organization) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end + when 'ProjectForked' + operator_id, project_id = args[0], args[1] + operator = User.find_by_id(operator_id) + project = Project.find_by_id(project_id) + return unless operator.present? && project.present? + receivers = project&.all_managers.where.not(id: operator&.id) + receivers_string, content, notification_url = MessageTemplate::ProjectForked.get_message_content(receivers, operator, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id}) when 'ProjectIssue' operator_id, issue_id = args[0], args[1] operator = User.find_by_id(operator_id) @@ -163,6 +164,37 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::ProjectMemberLeft.get_email_message_content(receiver, user, project) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end + when 'ProjectMilestoneCompleted' + milestone_id = args[0] + milestone = Version.find_by_id(milestone_id) + return unless milestone.present? && milestone&.project.present? + receivers = milestone&.project&.all_managers + receivers_string, content, notification_url = MessageTemplate::ProjectMilestoneCompleted.get_message_content(receivers, milestone) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {milestone_id: milestone_id}) + receivers.find_each do |receiver| + receivers_email_string, email_title, email_content = MessageTemplate::ProjectMilestoneCompleted.get_email_message_content(receiver, milestone) + Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) + end + when 'ProjectMilestone' + milestone_id, operator_id = args[0], args[1] + milestone = Version.find_by_id(milestone_id) + operator = User.find_by_id(operator_id) + return unless milestone.present? && milestone&.project.present? && operator.present? + receivers = milestone&.project&.all_managers.where.not(id: operator_id) + receivers_string, content, notification_url = MessageTemplate::ProjectMilestone.get_message_content(receivers, operator, milestone) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {milestone_id: milestone_id, operator_id: operator_id}) + receivers.find_each do |receiver| + receivers_email_string, email_title, email_content = MessageTemplate::ProjectMilestone.get_email_message_content(receiver, operator, milestone) + Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) + end + when 'ProjectPraised' + operator_id, project_id = args[0], args[1] + operator = User.find_by_id(operator_id) + project = Project.find_by_id(project_id) + return unless operator.present? && project.present? + receivers = project&.all_managers.where.not(id: operator&.id) + receivers_string, content, notification_url = MessageTemplate::ProjectPraised.get_message_content(receivers, operator, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id}) when 'ProjectPullRequest' operator_id, pull_request_id = args[0], args[1] operator = User.find_by_id(operator_id) diff --git a/app/models/issue.rb b/app/models/issue.rb index 47445245e..52915cbf8 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -76,7 +76,7 @@ class Issue < ApplicationRecord scope :issue_index_includes, ->{includes(:tracker, :priority, :version, :issue_status, :journals,:issue_tags,user: :user_extension)} scope :closed, ->{where(status_id: 5)} after_create :incre_project_common, :incre_user_statistic, :incre_platform_statistic - after_update :change_versions_count + after_save :change_versions_count after_destroy :update_closed_issues_count_in_project!, :decre_project_common, :decre_user_statistic, :decre_platform_statistic def incre_project_common @@ -171,11 +171,25 @@ class Issue < ApplicationRecord end def change_versions_count - if self.version.present? && self.saved_change_to_status_id? + if self.saved_change_to_fixed_version_id? + before_version = Version.find_by_id(self.fixed_version_id_before_last_save) + Rails.logger.info self.fixed_version_id_before_last_save + if before_version.present? + Rails.logger.info self.status_id + Rails.logger.info self.status_id_before_last_save + # 更改前状态为完成 或者 更改前后都为完成状态 + if self.status_id_before_last_save == 5 + percent = before_version.issues_count == 0 ? 0.0 : ((before_version.closed_issues_count - 1).to_f / before_version.issues_count) + before_version.update_attributes(closed_issues_count: (before_version.closed_issues_count - 1), percent: percent) + end + end + end + + if self.version.present? && (self.saved_change_to_status_id? || self.saved_change_to_fixed_version_id?) if self.status_id == 5 percent = self.version.issues_count == 0 ? 0.0 : ((self.version.closed_issues_count + 1).to_f / self.version.issues_count) self.version.update_attributes(closed_issues_count: (self.version.closed_issues_count + 1), percent: percent) - elsif self.status_id_before_last_save == 5 + elsif self.status_id_before_last_save == 5 && !self.saved_change_to_fixed_version_id? percent = self.version.issues_count == 0 ? 0.0 : ((self.version.closed_issues_count - 1).to_f / self.version.issues_count) self.version.update_attributes(closed_issues_count: (self.version.closed_issues_count - 1), percent: percent) end @@ -183,7 +197,7 @@ class Issue < ApplicationRecord end def update_closed_issues_count_in_project! - self.project.decrement!(:closed_issues_count) + self.project.decrement!(:closed_issues_count) if self.status_id == 5 end end diff --git a/app/models/message_template.rb b/app/models/message_template.rb index c9812e511..13864184a 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -13,61 +13,67 @@ # class MessageTemplate < ApplicationRecord + PLATFORM = 'GitLink' def self.build_init_data + MessageTemplate::IssueAssignerExpire.destroy_all + MessageTemplate::IssueCreatorExpire.destroy_all self.create(type: 'MessageTemplate::FollowedTip', sys_notice: '{nickname} 关注了你', notification_url: '{baseurl}/{login}') email_html = File.read("#{email_template_html_dir}/issue_assigned.html") - self.create(type: 'MessageTemplate::IssueAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个疑修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}', email: email_html, email_title: 'GitLink: {nickname1} 在 {nickname2}/{repository} 指派给你一个疑修') - self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的疑修 {title} 已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个疑修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 指派给你一个疑修") self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname} 在疑修 {title} 中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') email_html = File.read("#{email_template_html_dir}/issue_changed.html") - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目 {nickname2}/{repository} 的疑修 {title} 中:{ifassigner}{nickname1}将负责人从 {assigner1} 修改为 {assigner2} {endassigner}{ifstatus}{nickname1}将状态从 {status1} 修改为 {status2} {endstatus}{iftracker}{nickname1}将类型从 {tracker1} 修改为 {tracker2} {endtracker}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifdoneratio}{nickname1}将完成度从 {doneratio1} 修改为 {doneratio2} {enddoneratio}{ifbranch}{nickname1}将指定分支从 {branch1} 修改为 {branch2} {endbranch}{ifstartdate}{nickname1}将开始日期从 {startdate1} 修改为 {startdate2} {endstartdate}{ifduedate}{nickname1}将结束日期从 {duedate1} 修改为 {duedate2} {endduedate}', email: email_html, email_title: 'GitLink: 疑修 {title} 有状态变更', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的疑修 {title} 已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目 {nickname2}/{repository} 的疑修 {title} 中:{ifassigner}{nickname1}将负责人从 {assigner1} 修改为 {assigner2} {endassigner}{ifstatus}{nickname1}将状态从 {status1} 修改为 {status2} {endstatus}{iftracker}{nickname1}将类型从 {tracker1} 修改为 {tracker2} {endtracker}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifdoneratio}{nickname1}将完成度从 {doneratio1} 修改为 {doneratio2} {enddoneratio}{ifbranch}{nickname1}将指定分支从 {branch1} 修改为 {branch2} {endbranch}{ifstartdate}{nickname1}将开始日期从 {startdate1} 修改为 {startdate2} {endstartdate}{ifduedate}{nickname1}将结束日期从 {duedate1} 修改为 {duedate2} {endduedate}', email: email_html, email_title: "#{PLATFORM}: 疑修 {title} 有状态变更", notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + email_html = File.read("#{email_template_html_dir}/issue_expire.html") + self.create(type: 'MessageTemplate::IssueExpire', sys_notice: '疑修 {title} 已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}', email: email_html, email_title: "#{PLATFORM}: 疑修截止日期到达最后一天") email_html = File.read("#{email_template_html_dir}/issue_deleted.html") - self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将疑修 {title} 删除', email: email_html, email_title: 'GitLink: 疑修 {title} 有状态变更', notification_url: '') + self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将疑修 {title} 删除', email: email_html, email_title: "#{PLATFORM}: 疑修 {title} 有状态变更", notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论疑修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::LoginIpTip', sys_notice: '您的账号{nickname}于{login_time)在非常用的IP地址{ip}登录,如非本人操作,请立即修改密码', notification_url: '') email_html = File.read("#{email_template_html_dir}/organization_joined.html") - self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入 {organization} 组织', notification_url: '{baseurl}/{login}', email: email_html, email_title: 'GitLink: 你已加入 {organization} 组织') + self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入 {organization} 组织', notification_url: '{baseurl}/{login}', email: email_html, email_title: "#{PLATFORM}: 你已加入 {organization} 组织") email_html = File.read("#{email_template_html_dir}/organization_left.html") - self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出 {organization} 组织', notification_url: '', email: email_html, email_title: 'GitLink: 你已被移出 {organization} 组织') + self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出 {organization} 组织', notification_url: '', email: email_html, email_title: "#{PLATFORM}: 你已被移出 {organization} 组织") self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname} 关注了你管理的仓库', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1} 复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1} 复刻了你管理的仓库 {nickname2}/{repository}{nickname1}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') email_html = File.read("#{email_template_html_dir}/project_issue.html") - self.create(type: 'MessageTemplate::ProjectIssue', sys_notice: '{nickname1}在 {nickname2}/{repository} 新建疑修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}', email: email_html, email_title: 'GitLink: {nickname1} 在 {nickname2}/{repository} 新建了一个疑修') + self.create(type: 'MessageTemplate::ProjectIssue', sys_notice: '{nickname1}在 {nickname2}/{repository} 新建疑修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 新建了一个疑修") email_html = File.read("#{email_template_html_dir}/project_joined.html") - self.create(type: 'MessageTemplate::ProjectJoined', sys_notice: '你已加入 {repository} 项目', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: 'GitLink: 你已加入 {repository} 项目') + self.create(type: 'MessageTemplate::ProjectJoined', sys_notice: '你已加入 {repository} 项目', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: "#{PLATFORM}: 你已加入 {repository} 项目") email_html = File.read("#{email_template_html_dir}/project_left.html") - self.create(type: 'MessageTemplate::ProjectLeft', sys_notice: '你已被移出 {repository} 项目', notification_url: '', email: email_html, email_title: 'GitLink: 你已被移出 {repository} 项目') + self.create(type: 'MessageTemplate::ProjectLeft', sys_notice: '你已被移出 {repository} 项目', notification_url: '', email: email_html, email_title: "#{PLATFORM}: 你已被移出 {repository} 项目") email_html = File.read("#{email_template_html_dir}/project_member_joined.html") - self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1} 已加入项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: 'GitLink: {nickname1} 已加入项目 {nickname2}/{repository}') + self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1} 已加入项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 已加入项目 {nickname2}/{repository}") email_html = File.read("#{email_template_html_dir}/project_member_left.html") - self.create(type: 'MessageTemplate::ProjectMemberLeft', sys_notice: '{nickname1} 已被移出项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: 'GitLink: {nickname1} 已被移出项目 {nickname2}/{repository}') - self.create(type: 'MessageTemplate::ProjectMilestone', sys_notice: '{nickname1}在 {nickname2}/{repository} 创建了一个里程碑:{title}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}') - self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname} 点赞了你管理的仓库', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectMemberLeft', sys_notice: '{nickname1} 已被移出项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 已被移出项目 {nickname2}/{repository}") + email_html = File.read("#{email_template_html_dir}/project_milestone.html") + self.create(type: 'MessageTemplate::ProjectMilestone', sys_notice: '{nickname1}在 {nickname2}/{repository} 创建了一个里程碑:{name}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 新建了一个里程碑") + email_html = File.read("#{email_template_html_dir}/project_milestone_completed.html") + self.create(type: 'MessageTemplate::ProjectMilestoneCompleted', sys_notice: '在 {nickname}/{repository} 仓库,里程碑 {name} 的完成度已达到100%', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}', email: email_html, email_title: "#{PLATFORM}: 仓库 {nickname}/{repository} 有里程碑已完成") + self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname1} 点赞了你管理的仓库 {nickname2}/{repository}', notification_url: '{baseurl}/{login}') email_html = File.read("#{email_template_html_dir}/project_pull_request.html") - self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: 'GitLink: {nickname1} 在 {nickname2}/{repository} 提交了一个合并请求') + self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 提交了一个合并请求") email_html = File.read("#{email_template_html_dir}/project_role.html") - self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库 {nickname}/{repository} 已把你的角色改为 {role}', email: email_html, email_title: 'GitLink: 在 {nickname}/{repository} 项目你的账号有权限变更', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库 {nickname}/{repository} 已把你的角色改为 {role}', email: email_html, email_title: '#{PLATFORM}: 在 {nickname}/{repository} 项目你的账号有权限变更', notification_url: '{baseurl}/{owner}/{identifier}') email_html = File.read("#{email_template_html_dir}/project_setting_changed.html") - self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了 {nickname2}/{repository} 仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifidentifier}更改项目标识为"{identifier}"{endidentifier}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings', email: email_html, email_title: 'GitLink: 您管理的仓库 {nickname2}/{repository} 仓库设置已被更改') + self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了 {nickname2}/{repository} 仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifidentifier}更改项目标识为"{identifier}"{endidentifier}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings', email: email_html, email_title: "#{PLATFORM}: 您管理的仓库 {nickname2}/{repository} 仓库设置已被更改") self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在 {nickname2}/{repository} 创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') email_html = File.read("#{email_template_html_dir}/pull_request_assigned.html") - self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: 'GitLink: {nickname1} 在 {nickname2}/{repository} 指派给你一个合并请求') + self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 指派给你一个合并请求") self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname} 在合并请求 {title} 中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/pull_request_changed.html") - self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求 {title} 中:{ifassigner}{nickname1}将审查成员从 {assigner1} 修改为 {assigner2} {endassigner}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}', email: email_html, email_title: 'GitLink: 合并请求 {title} 有状态变更', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求 {title} 中:{ifassigner}{nickname1}将审查成员从 {assigner1} 修改为 {assigner2} {endassigner}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}', email: email_html, email_title: "#{PLATFORM}: 合并请求 {title} 有状态变更", notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/pull_request_closed.html") - self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title} 被拒绝', email: email_html, email_title: 'GitLink: 合并请求 {title} 有状态变更', notification_url: '') + self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title} 被拒绝', email: email_html, email_title: "#{PLATFORM}: 合并请求 {title} 有状态变更", notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/pull_request_merged.html") - self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title} 已通过', email: email_html, email_title: 'GitLink: 合并请求 {title} 有状态变更', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') + self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title} 已通过', email: email_html, email_title: "#{PLATFORM}: 合并请求 {title} 有状态变更", notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/team_joined.html") - self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有{role}权限', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有{role}权限', email: email_html, email_title: "#{PLATFORM}: 在 {organization} 组织你的账号有权限变更", notification_url: '{baseurl}/{login}') email_html = File.read("#{email_template_html_dir}/team_left.html") - self.create(type: 'MessageTemplate::TeamLeft', sys_notice: '你已被移出组织 {organization}{team} 团队', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::TeamLeft', sys_notice: '你已被移出组织 {organization}{team} 团队', email: email_html, email_title: "#{PLATFORM}: 在 {organization} 组织你的账号有权限变更", notification_url: '{baseurl}/{login}') end def self.sys_notice diff --git a/app/models/message_template/issue_assigned.rb b/app/models/message_template/issue_assigned.rb index 7ce7f10c2..7f8494f69 100644 --- a/app/models/message_template/issue_assigned.rb +++ b/app/models/message_template/issue_assigned.rb @@ -53,6 +53,7 @@ class MessageTemplate::IssueAssigned < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{title}', issue&.subject) content.gsub!('{id}', issue&.id.to_s) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index 4d9e132cb..e8a5e5cdb 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -359,6 +359,7 @@ class MessageTemplate::IssueChanged < MessageTemplate else content.gsub!(/({ifduedate})(.*)({endduedate})/, '') end + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb index 475c05ce0..e6f42fcc4 100644 --- a/app/models/message_template/issue_creator_expire.rb +++ b/app/models/message_template/issue_creator_expire.rb @@ -1,29 +1,3 @@ -# == Schema Information -# -# Table name: message_templates -# -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null -# notification_url :string(255) -# email_title :string(255) -# - -# 我创建的疑修截止日期到达最后一天 class MessageTemplate::IssueCreatorExpire < MessageTemplate - # MessageTemplate::IssueCreatorExpire.get_message_content(User.where(login: 'yystopf'), Issue.last) - def self.get_message_content(receivers, issue) - project = issue&.project - owner = project&.owner - content = sys_notice.gsub('{title}', issue&.subject) - url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) - return receivers_string(receivers), content, url - rescue => e - Rails.logger.info("MessageTemplate::IssueAssignerExpire.get_message_content [ERROR] #{e}") - return '', '', '' - end -end +end \ No newline at end of file diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index a3eae75de..599cc2359 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -41,6 +41,7 @@ class MessageTemplate::IssueDeleted < MessageTemplate content.gsub!('{login}', operator&.login) content.gsub!('{baseurl}', base_url) content.gsub!('{title}', issue_title) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/issue_expire.rb b/app/models/message_template/issue_expire.rb new file mode 100644 index 000000000..88593d848 --- /dev/null +++ b/app/models/message_template/issue_expire.rb @@ -0,0 +1,61 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 我创建或负责的疑修截止日期到达最后一天 +class MessageTemplate::IssueExpire < MessageTemplate + + # MessageTemplate::IssueCreatorExpire.get_message_content(User.where(login: 'yystopf'), Issue.last) + def self.get_message_content(receiver, issue) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::IssueExpire"] + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + + return receivers_string(receivers), content, url + else + return '', '', '' + end + rescue => e + Rails.logger.info("MessageTemplate::IssueExpire.get_message_content [ERROR] #{e}") + return '', '', '' + end + + def self.get_email_message_content(receiver, issue) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::IssueExpire"] + project = issue&.project + owner = project&.owner + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{nickname}', owner&.real_name) + content.gsub!('{login}', 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) + content.gsub!('{platform}', PLATFORM) + + return receiver&.mail, title, content + else + return '', '', '' + end + rescue => e + Rails.logger.info("MessageTemplate::IssueExpire.get_email_message_content [ERROR] #{e}") + return '', '', '' + end +end diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index 30f91ac98..daa3f0fe5 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -41,6 +41,7 @@ class MessageTemplate::OrganizationJoined < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{login}', organization&.login) content.gsub!('{organization}', organization&.real_name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index 50a771385..f21982e96 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -41,6 +41,7 @@ class MessageTemplate::OrganizationLeft < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{login}', organization&.login) content.gsub!('{organization}', organization&.real_name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index 207712956..3919dc94e 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -43,6 +43,7 @@ class MessageTemplate::OrganizationRole < MessageTemplate content.gsub!('{login}', organization&.login) content.gsub!('{organization}', organization&.real_name) content.gsub!('{role}', role) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_forked.rb b/app/models/message_template/project_forked.rb index 7cd17222d..a395d0db6 100644 --- a/app/models/message_template/project_forked.rb +++ b/app/models/message_template/project_forked.rb @@ -12,11 +12,19 @@ # email_title :string(255) # -# TODO 我管理的仓库被复刻 +# 我管理的仓库被复刻 class MessageTemplate::ProjectForked < MessageTemplate # MessageTemplate::ProjectForked.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + def self.get_message_content(receivers, user, project) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Forked"] + end + end + return '', '', '' if receivers.blank? + content = sys_notice.gsub('{nickname1}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{login}', user&.login).gsub('{identifier}', project&.identifier) return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectForked.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index 5904a4285..e04830836 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -56,6 +56,7 @@ class MessageTemplate::ProjectIssue < MessageTemplate content.gsub!('{identifier}', project&.identifier) content.gsub!('{id}', issue&.id.to_s) content.gsub!('{title}', issue&.subject) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb index c2d23fbd2..1f83c3129 100644 --- a/app/models/message_template/project_joined.rb +++ b/app/models/message_template/project_joined.rb @@ -44,6 +44,7 @@ class MessageTemplate::ProjectJoined < MessageTemplate content.gsub!('{identifier}', project&.identifier) content.gsub!('{nickname}', project&.owner&.real_name) content.gsub!('{repository}', project&.name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb index 6f5bafa02..4df14c15e 100644 --- a/app/models/message_template/project_left.rb +++ b/app/models/message_template/project_left.rb @@ -43,6 +43,7 @@ class MessageTemplate::ProjectLeft < MessageTemplate content.gsub!('{identifier}', project&.identifier) content.gsub!('{nickname}', project&.owner&.real_name) content.gsub!('{repository}', project&.name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index e9b6b5d51..4c0a77a0a 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -48,6 +48,7 @@ class MessageTemplate::ProjectMemberJoined < MessageTemplate content.gsub!('{nickname1}', user&.real_name) content.gsub!('{nickname2}', project&.owner&.real_name) content.gsub!('{repository}', project&.name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index 23d4ef5f3..d1891e7bd 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -48,6 +48,7 @@ class MessageTemplate::ProjectMemberLeft < MessageTemplate content.gsub!('{nickname1}', user&.real_name) content.gsub!('{nickname2}', project&.owner&.real_name) content.gsub!('{repository}', project&.name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_milestone.rb b/app/models/message_template/project_milestone.rb index 14f992cdd..8c9c47d16 100644 --- a/app/models/message_template/project_milestone.rb +++ b/app/models/message_template/project_milestone.rb @@ -12,14 +12,57 @@ # email_title :string(255) # -# TODO 我管理的仓库有新的里程碑 +# 我管理的仓库有新的里程碑 class MessageTemplate::ProjectMilestone < MessageTemplate # MessageTemplate::ProjectMilestone.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + def self.get_message_content(receivers, operator, milestone) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Milestone"] + end + end + return '', '', '' if receivers.blank? + project = milestone&.project + owner = project&.owner + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{name}', milestone&.name) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', milestone&.id.to_s) + return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectMilestone.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receiver, operator, milestone) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::Milestone"] + project = milestone&.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!('{nickname1}', operator&.real_name) + content.gsub!('{nickname2}', owner&.real_name) + content.gsub!('{repository}', project&.name) + content.gsub!('{login}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{id}', milestone&.id.to_s) + content.gsub!('{name}', milestone&.name) + content.gsub!('{platform}', PLATFORM) + + return receiver&.mail, title, content + else + return '', '', '' + end + + rescue => e + Rails.logger.info("MessageTemplate::ProjectMilestone.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_milestone_completed.rb b/app/models/message_template/project_milestone_completed.rb new file mode 100644 index 000000000..eec895a6b --- /dev/null +++ b/app/models/message_template/project_milestone_completed.rb @@ -0,0 +1,66 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 我管理的仓库有里程碑完成 +class MessageTemplate::ProjectMilestoneCompleted < MessageTemplate + + # MessageTemplate::ProjectMilestoneCompleted.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers, milestone) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::MilestoneCompleted"] + end + end + return '', '', '' if receivers.blank? + project = milestone&.project + owner = project&.owner + content = sys_notice.gsub('{nickname}', owner&.real_name).gsub('{repository}', project&.name).gsub('{name}', milestone&.name) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', milestone&.id.to_s) + + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMilestoneCompleted.get_message_content [ERROR] #{e}") + return '', '', '' + end + + def self.get_email_message_content(receiver, milestone) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::MilestoneCompleted"] + project = milestone&.project + owner = project&.owner + title = email_title + title.gsub!('{nickname}', owner&.real_name) + title.gsub!('{repository}', project&.name) + + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{nickname}', owner&.real_name) + content.gsub!('{repository}', project&.name) + content.gsub!('{login}', owner&.login) + content.gsub!('{identifier}', project&.identifier) + content.gsub!('{id}', milestone&.id.to_s) + content.gsub!('{name}', milestone&.name) + content.gsub!('{platform}', PLATFORM) + + return receiver&.mail, title, content + else + return '', '', '' + end + + rescue => e + Rails.logger.info("MessageTemplate::ProjectMilestoneCompleted.get_email_message_content [ERROR] #{e}") + return '', '', '' + end +end diff --git a/app/models/message_template/project_praised.rb b/app/models/message_template/project_praised.rb index e6acee6f5..35af6148f 100644 --- a/app/models/message_template/project_praised.rb +++ b/app/models/message_template/project_praised.rb @@ -12,11 +12,19 @@ # email_title :string(255) # -# TODO 我管理的仓库被点赞 +# 我管理的仓库被点赞 class MessageTemplate::ProjectPraised < MessageTemplate # MessageTemplate::ProjectPraised.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + def self.get_message_content(receivers, user, project) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Praised"] + end + end + return '', '', '' if receivers.blank? + content = sys_notice.gsub('{nickname1}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{login}', user&.login) return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectPraised.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index 40c700b29..f36ac0865 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -56,6 +56,7 @@ class MessageTemplate::ProjectPullRequest < MessageTemplate content.gsub!('{identifier}', project&.identifier) content.gsub!('{id}', pull_request&.id.to_s) content.gsub!('{title}', pull_request&.title) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb index f7f4940df..560f345ed 100644 --- a/app/models/message_template/project_role.rb +++ b/app/models/message_template/project_role.rb @@ -46,6 +46,7 @@ class MessageTemplate::ProjectRole < MessageTemplate content.gsub!('{identifier}', project&.identifier) content.gsub!('{repository}', project&.name) content.gsub!('{role}', role) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 49cf7821a..0920dfe7a 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -300,6 +300,7 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate else content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') end + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index bca37151a..642ca9120 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -53,6 +53,7 @@ class MessageTemplate::PullRequestAssigned < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{title}', pull_request&.title) content.gsub!('{id}', pull_request&.id.to_s) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index ab2c73b6b..a2071c23e 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -118,6 +118,7 @@ class MessageTemplate::PullRequestChanged < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{title}', pull_request&.title) content.gsub!('{id}', pull_request&.id.to_s) + content.gsub!('{platform}', PLATFORM) change_count = change_params.keys.size # 合并请求审查成员修改 diff --git a/app/models/message_template/pull_request_closed.rb b/app/models/message_template/pull_request_closed.rb index ea1ffabcb..cb8b1b742 100644 --- a/app/models/message_template/pull_request_closed.rb +++ b/app/models/message_template/pull_request_closed.rb @@ -51,6 +51,7 @@ class MessageTemplate::PullRequestClosed < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{title}', pull_request&.title) content.gsub!('{id}', pull_request&.id.to_s) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/pull_request_merged.rb b/app/models/message_template/pull_request_merged.rb index eb4bb5e17..384cf8f11 100644 --- a/app/models/message_template/pull_request_merged.rb +++ b/app/models/message_template/pull_request_merged.rb @@ -51,6 +51,7 @@ class MessageTemplate::PullRequestMerged < MessageTemplate content.gsub!('{baseurl}', base_url) content.gsub!('{title}', pull_request&.title) content.gsub!('{id}', pull_request&.id.to_s) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/team_joined.rb b/app/models/message_template/team_joined.rb index f49940952..90f153d99 100644 --- a/app/models/message_template/team_joined.rb +++ b/app/models/message_template/team_joined.rb @@ -45,6 +45,7 @@ class MessageTemplate::TeamJoined < MessageTemplate content.gsub!('{organization}', organization&.real_name) content.gsub!('{team}', team&.nickname) content.gsub!('{role}', team&.authorize_name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/message_template/team_left.rb b/app/models/message_template/team_left.rb index 572422633..1618f41b7 100644 --- a/app/models/message_template/team_left.rb +++ b/app/models/message_template/team_left.rb @@ -45,6 +45,7 @@ class MessageTemplate::TeamLeft < MessageTemplate content.gsub!('{organization}', organization&.real_name) content.gsub!('{team}', team&.nickname) content.gsub!('{role}', team&.authorize_name) + content.gsub!('{platform}', PLATFORM) return receiver&.mail, title, content else diff --git a/app/models/template_message_setting.rb b/app/models/template_message_setting.rb index a9c81500b..67f9586d0 100644 --- a/app/models/template_message_setting.rb +++ b/app/models/template_message_setting.rb @@ -22,6 +22,7 @@ class TemplateMessageSetting < ApplicationRecord end def self.build_init_data + TemplateMessageSetting.destroy_all TemplateMessageSetting::CreateOrAssign.build_init_data TemplateMessageSetting::ManageProject.build_init_data TemplateMessageSetting::Normal.build_init_data diff --git a/app/models/template_message_setting/create_or_assign.rb b/app/models/template_message_setting/create_or_assign.rb index 50ef86433..4c392b4b7 100644 --- a/app/models/template_message_setting/create_or_assign.rb +++ b/app/models/template_message_setting/create_or_assign.rb @@ -27,5 +27,6 @@ class TemplateMessageSetting::CreateOrAssign < TemplateMessageSetting def self.build_init_data self.find_or_create_by(name: "疑修状态变更", key: "IssueChanged") self.find_or_create_by(name: "合并请求状态变更", key: "PullRequestChanged") + self.find_or_create_by(name: "疑修截止日期到达最后一天", key: "IssueExpire", notification_disabled: false) end end diff --git a/app/models/template_message_setting/manage_project.rb b/app/models/template_message_setting/manage_project.rb index 7a80c9999..978761f94 100644 --- a/app/models/template_message_setting/manage_project.rb +++ b/app/models/template_message_setting/manage_project.rb @@ -29,5 +29,9 @@ class TemplateMessageSetting::ManageProject < TemplateMessageSetting self.find_or_create_by(name: "有新的合并请求", key: "PullRequest") self.find_or_create_by(name: "有成员变动", key: "Member") self.find_or_create_by(name: "仓库设置被更改", key: "SettingChanged") + self.find_or_create_by(name: "被点赞", key: "Praised", notification_disabled: false, email_disabled: true) + self.find_or_create_by(name: "被fork", key: "Forked", notification_disabled: false, email_disabled: true) + self.find_or_create_by(name: "有新的里程碑", key: "Milestone", notification_disabled: false) + self.find_or_create_by(name: "有里程碑已完成", key: "MilestoneCompleted", notification_disabled: false) end end diff --git a/app/models/user_template_message_setting.rb b/app/models/user_template_message_setting.rb index 3a3416ee3..49db51d4d 100644 --- a/app/models/user_template_message_setting.rb +++ b/app/models/user_template_message_setting.rb @@ -35,10 +35,15 @@ class UserTemplateMessageSetting < ApplicationRecord "Normal::PullRequestAssigned": true, "CreateOrAssign::IssueChanged": true, "CreateOrAssign::PullRequestChanged": true, + "CreateOrAssign::IssueExpire": true, "ManageProject::Issue": true, "ManageProject::PullRequest": true, "ManageProject::Member": true, "ManageProject::SettingChanged": true, + "ManageProject::Praised": true, + "ManageProject::Forked": true, + "ManageProject::Milestone": true, + "ManageProject::MilestoneCompleted": true, }.stringify_keys! end @@ -51,10 +56,15 @@ class UserTemplateMessageSetting < ApplicationRecord "Normal::PullRequestAssigned": false, "CreateOrAssign::IssueChanged": false, "CreateOrAssign::PullRequestChanged": false, + "CreateOrAssign::IssueExpire": false, "ManageProject::Issue": false, "ManageProject::PullRequest": false, "ManageProject::Member": false, "ManageProject::SettingChanged": false, + "ManageProject::Praised": false, + "ManageProject::Forked": false, + "ManageProject::Milestone": false, + "ManageProject::MilestoneCompleted": false, }.stringify_keys! end diff --git a/app/models/version.rb b/app/models/version.rb index 77cb58a7e..41256833a 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -40,8 +40,19 @@ class Version < ApplicationRecord # issues.select(:id,:status_id).where(status_id: 5).size # end + after_create :send_create_message_to_notice_system + after_save :send_update_message_to_notice_system + def version_user User.select(:login, :lastname,:firstname, :nickname)&.find_by_id(self.user_id) end + private + def send_create_message_to_notice_system + SendTemplateMessageJob.perform_later('ProjectMilestone', self.id, self.user_id) if Site.has_notice_menu? + end + + def send_update_message_to_notice_system + SendTemplateMessageJob.perform_later('ProjectMilestoneCompleted', self.id) if Site.has_notice_menu? && self.percent == 1.0 + end end diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 84b80f50f..5ae26d6bb 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -35,6 +35,8 @@ class Projects::ForkService < ApplicationService ForkUser.create(project_id: @project.id, fork_project_id: clone_project.id, user_id: clone_project.user_id) clone_project + + SendTemplateMessageJob.perform_later('ProjectForked', @target_owner.id, @project.id) if Site.has_notice_menu? end rescue => e puts "clone project service error: #{e.message}" diff --git a/app/views/admins/sites/_form.html.erb b/app/views/admins/sites/_form.html.erb index 1776bcd03..6a879d9d3 100644 --- a/app/views/admins/sites/_form.html.erb +++ b/app/views/admins/sites/_form.html.erb @@ -29,7 +29,7 @@
- <%= p.select :site_type, options_for_select(Site.site_types.map { |key, value| [key.humanize, key] }), {}, class: "form-control" %> + <%= p.select :site_type, options_for_select(Site.site_types.map { |key, value| [key.humanize, key] }, @site.site_type), {}, class: "form-control" %>
diff --git a/public/message_template/issue_changed.html b/public/message_template/issue_changed.html index 537a12dc1..db696a0cc 100755 --- a/public/message_template/issue_changed.html +++ b/public/message_template/issue_changed.html @@ -48,7 +48,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/issue_deleted.html b/public/message_template/issue_deleted.html index 4207144c8..335fdfbc0 100755 --- a/public/message_template/issue_deleted.html +++ b/public/message_template/issue_deleted.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/issue_expire.html b/public/message_template/issue_expire.html new file mode 100644 index 000000000..34701a0a3 --- /dev/null +++ b/public/message_template/issue_expire.html @@ -0,0 +1,47 @@ + + + 疑修截止日期到达最后一天 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

+ {receiver},您好!
+ 疑修 {title} 已临近截止日期,请尽快处理
+

+
+
+
+

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
+ QQ群:1071514693

+

{platform}团队

+
+
+
+
+ + \ No newline at end of file diff --git a/public/message_template/organization_joined.html b/public/message_template/organization_joined.html index e3848f473..7d50ebdb3 100755 --- a/public/message_template/organization_joined.html +++ b/public/message_template/organization_joined.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/organization_left.html b/public/message_template/organization_left.html index 32b1dc30e..b2eeffbbe 100755 --- a/public/message_template/organization_left.html +++ b/public/message_template/organization_left.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/organization_role.html b/public/message_template/organization_role.html index b411c7340..ad597dea6 100755 --- a/public/message_template/organization_role.html +++ b/public/message_template/organization_role.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_issue.html b/public/message_template/project_issue.html index 653bd7a3d..4b6812fce 100755 --- a/public/message_template/project_issue.html +++ b/public/message_template/project_issue.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_joined.html b/public/message_template/project_joined.html index dfafd5d92..fa8f0771b 100755 --- a/public/message_template/project_joined.html +++ b/public/message_template/project_joined.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_left.html b/public/message_template/project_left.html index 94a0e9862..81453d22d 100755 --- a/public/message_template/project_left.html +++ b/public/message_template/project_left.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_member_joined.html b/public/message_template/project_member_joined.html index d2fec456d..b22ced2d7 100755 --- a/public/message_template/project_member_joined.html +++ b/public/message_template/project_member_joined.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_member_left.html b/public/message_template/project_member_left.html index 8dfca4a2e..d1a8b044f 100755 --- a/public/message_template/project_member_left.html +++ b/public/message_template/project_member_left.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_milestone.html b/public/message_template/project_milestone.html new file mode 100644 index 000000000..0b2a0725c --- /dev/null +++ b/public/message_template/project_milestone.html @@ -0,0 +1,47 @@ + + + 管理的仓库有新的里程碑 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

+ {receiver},您好!
+ {nickname1}在仓库 {nickname2}/{repository} 新建了一个里程碑:{name}
+

+
+
+
+

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
+ QQ群:1071514693

+

{platform}团队

+
+
+
+
+ + \ No newline at end of file diff --git a/public/message_template/project_milestone_completed.html b/public/message_template/project_milestone_completed.html new file mode 100644 index 000000000..6b62a8cb9 --- /dev/null +++ b/public/message_template/project_milestone_completed.html @@ -0,0 +1,47 @@ + + + 管理的仓库有里程碑已完成 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

+ {receiver},您好!
+ 在 {nickname}/{repository} 里程碑{name}的完成度已达到100%
+

+
+
+
+

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
+ QQ群:1071514693

+

{platform}团队

+
+
+
+
+ + \ No newline at end of file diff --git a/public/message_template/project_pull_request.html b/public/message_template/project_pull_request.html index 78aa5c2d4..fe389e98c 100755 --- a/public/message_template/project_pull_request.html +++ b/public/message_template/project_pull_request.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_role.html b/public/message_template/project_role.html index 17f53e37b..3e8e8b55c 100755 --- a/public/message_template/project_role.html +++ b/public/message_template/project_role.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/project_setting_changed.html b/public/message_template/project_setting_changed.html index 4d1f9762d..ecea17ef8 100755 --- a/public/message_template/project_setting_changed.html +++ b/public/message_template/project_setting_changed.html @@ -45,7 +45,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/pull_request_assigned.html b/public/message_template/pull_request_assigned.html index c12924d1b..1d1810613 100755 --- a/public/message_template/pull_request_assigned.html +++ b/public/message_template/pull_request_assigned.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/pull_request_changed.html b/public/message_template/pull_request_changed.html index ab9c3f6a1..ccbefad92 100755 --- a/public/message_template/pull_request_changed.html +++ b/public/message_template/pull_request_changed.html @@ -42,7 +42,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/pull_request_closed.html b/public/message_template/pull_request_closed.html index dca5e1c7d..c860a54a1 100755 --- a/public/message_template/pull_request_closed.html +++ b/public/message_template/pull_request_closed.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/pull_request_merged.html b/public/message_template/pull_request_merged.html index 8c6e3469c..59812ddd3 100755 --- a/public/message_template/pull_request_merged.html +++ b/public/message_template/pull_request_merged.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/team_joined.html b/public/message_template/team_joined.html index 231f8b795..36610f728 100755 --- a/public/message_template/team_joined.html +++ b/public/message_template/team_joined.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队

diff --git a/public/message_template/team_left.html b/public/message_template/team_left.html index 1321e7b4d..ea2cce649 100755 --- a/public/message_template/team_left.html +++ b/public/message_template/team_left.html @@ -38,7 +38,7 @@

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
QQ群:1071514693

-

GitLink团队

+

{platform}团队