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/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/message_template.rb b/app/models/message_template.rb index c9812e511..48b1b69c6 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -22,7 +22,8 @@ class MessageTemplate < ApplicationRecord 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}') + 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: 'GitLink: 疑修截止日期到达最后一天') 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::IssueJournal', sys_notice: '{nickname}评论疑修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') @@ -33,7 +34,7 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出 {organization} 组织', notification_url: '', email: email_html, email_title: 'GitLink: 你已被移出 {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} 新建了一个疑修') email_html = File.read("#{email_template_html_dir}/project_joined.html") @@ -44,8 +45,11 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1} 已加入项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}', email: email_html, email_title: 'GitLink: {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}') + 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: 'GitLink: {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: 'GitLink: 仓库 {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} 提交了一个合并请求') email_html = File.read("#{email_template_html_dir}/project_role.html") diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb new file mode 100644 index 000000000..e6f42fcc4 --- /dev/null +++ b/app/models/message_template/issue_creator_expire.rb @@ -0,0 +1,3 @@ +class MessageTemplate::IssueCreatorExpire < MessageTemplate + +end \ No newline at end of file diff --git a/app/models/message_template/issue_expire.rb b/app/models/message_template/issue_expire.rb index 882504dc2..1f48c5637 100644 --- a/app/models/message_template/issue_expire.rb +++ b/app/models/message_template/issue_expire.rb @@ -16,14 +16,45 @@ class MessageTemplate::IssueExpire < 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 + 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) + + 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/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_milestone.rb b/app/models/message_template/project_milestone.rb index 14f992cdd..c2560c0a9 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!('{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}', milestone&.id.to_s) + content.gsub!('{name}', milestone&.name) + + 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..877bf0335 --- /dev/null +++ b/app/models/message_template/project_milestone_completed.rb @@ -0,0 +1,65 @@ +# == 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) + + 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/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/public/docs/api.html b/public/docs/api.html index 1df920eef..45da64400 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -1141,8 +1141,8 @@ Success — a happy kitten is an authenticated kitten! 有新指派给我的疑修 -IssueAssignerExpire -我负责的疑修截止日期到达最后一天 +IssueExpire +我创建或负责的疑修截止日期到达最后一天 IssueAtme @@ -1153,10 +1153,6 @@ Success — a happy kitten is an authenticated kitten! 我创建或负责的疑修状态变更 -IssueCreatorExpire -我创建的疑修截止日期到达最后一天 - - IssueDeleted 我创建或负责的疑修删除 @@ -1213,6 +1209,10 @@ Success — a happy kitten is an authenticated kitten! 我管理的仓库有成员移出 +ProjectMilestoneCompleted +我管理的仓库有里程碑完成度100% + + ProjectMilestone 我管理的仓库有新的里程碑 diff --git a/public/message_template/issue_expire.html b/public/message_template/issue_expire.html new file mode 100644 index 000000000..641742bb0 --- /dev/null +++ b/public/message_template/issue_expire.html @@ -0,0 +1,47 @@ + + + 疑修截止日期到达最后一天 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

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

+
+
+
+

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

+

GitLink团队

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

确实开源,协同创新

+
+
+
+

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

+
+
+
+

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

+

GitLink团队

+
+
+
+
+ + \ 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..89960e3c9 --- /dev/null +++ b/public/message_template/project_milestone_completed.html @@ -0,0 +1,47 @@ + + + 管理的仓库有里程碑已完成 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

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

+
+
+
+

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

+

GitLink团队

+
+
+
+
+ + \ No newline at end of file