Skip to content

Commit

Permalink
add: rake-task for delivery
Browse files Browse the repository at this point in the history
  • Loading branch information
rubynovich committed Apr 19, 2013
1 parent 4591265 commit 0f814b1
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 1 deletion.
24 changes: 24 additions & 0 deletions app/views/mailer/solved_issues_mail.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
%p= l(:mail_body_greeting, :firstname => @firstname, :lastname => @lastname )

- if @solved_issues.present?
- issues_count = @solved_issues.count
- case issues_count
- when 1
%p= l(:mail_body_solved_issues1, :count => issues_count)
- when 2..4
%p= l(:mail_body_solved_issues2, :count => issues_count)
- else
%p= l(:mail_body_solved_issues5, :count => issues_count)

%ul
- @solved_issues.each do |issue|
%li
=h issue.due_date
="-"
=h issue.project
="-"
=link_to("#{issue.tracker} ##{issue.id}", :controller => 'issues', :action => 'show', :id => issue, :only_path => false)
=":"
=h issue.subject

%p= link_to l(:label_issue_view_all), @issues_url
16 changes: 16 additions & 0 deletions app/views/mailer/solved_issues_mail.text.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
= l(:mail_body_greeting, :firstname => @firstname, :lastname => @lastname )

- if @solved_issues.present?
- issues_count = @solved_issues.count
- case issues_count
- when 1
= l(:mail_body_solved_issues1, :count => issues_count)
- when 2..4
= l(:mail_body_solved_issues2, :count => issues_count)
- else
= l(:mail_body_solved_issues5, :count => issues_count)

- @solved_issues.each do |issue|
= "* #{issue.due_date} - #{issue.project} - #{issue.tracker} ##{issue.id}: #{issue.subject}"

= @issues_url
9 changes: 8 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,11 @@
en:
issuesreportedbymewithstatus: "Solved issues"
label_solved_issue_plural: "Solved issues"
label_solved_issue_status: "Status for solved issues"
label_solved_issue_status: "Status for solved issues"
mail_body_greeting: "Dear %{firstname} %{lastname},"
mail_subject_solved_issues1: " %{count} solved issue must be closed"
mail_subject_solved_issues2: " %{count} solved issues must be closed"
mail_subject_solved_issues5: " %{count} solved issues must be closed"
mail_body_solved_issues1: " %{count} solved issue must be closed:"
mail_body_solved_issues2: " %{count} solved issues must be closed:"
mail_body_solved_issues5: " %{count} solved issues must be closed:"
7 changes: 7 additions & 0 deletions config/locales/ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,10 @@ ru:
issuesreportedbymewithstatus: "Решенные задачи"
label_solved_issue_plural: "Решенные задачи"
label_solved_issue_status: "Статус решенных задач"
mail_body_greeting: "Уважаемый %{firstname} %{lastname},"
mail_subject_solved_issues1: " %{count} решенная задача должна быть закрыта"
mail_subject_solved_issues2: " %{count} решенные задачи должны быть закрыты"
mail_subject_solved_issues5: " %{count} решенных задач должны быть закрыты"
mail_body_solved_issues1: " %{count} решенная задача, поставленная Вами, должна быть закрыта:"
mail_body_solved_issues2: " %{count} решенные задачи, поставленные Вами, должны быть закрыты:"
mail_body_solved_issues3: " %{count} решенных задач, поставленных Вами, должны быть закрыты:"
21 changes: 21 additions & 0 deletions init.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require 'redmine'

Redmine::Plugin.register :redmine_solved_issues do
name 'Redmine Solved Issues plugin'
author 'Roman Shipiev'
Expand All @@ -11,3 +13,22 @@
},
:partial => 'settings/settings'
end

if Rails::VERSION::MAJOR < 3
require 'dispatcher'
object_to_prepare = Dispatcher
else
object_to_prepare = Rails.configuration
end

object_to_prepare.to_prepare do
[:mailer].each do |cl|
require "solved_issues_#{cl}_patch"
end

[
[Mailer, SolvedIssuesPlugin::MailerPatch]
].each do |cl, patch|
cl.send(:include, patch) unless cl.included_modules.include? patch
end
end
43 changes: 43 additions & 0 deletions lib/solved_issues_mailer_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require_dependency 'mailer'

module SolvedIssuesPlugin
module MailerPatch
def self.included(base)
base.extend(ClassMethods)

base.send(:include, InstanceMethods)

base.class_eval do
end
end

module ClassMethods
def solved_issues(options={})
mailcopy = options[:cc]
status_id = Setting[:plugin_redmine_solved_issues][:issue_status]
solved_issues = Issue.open.where(:status_id => status_id)
solved_issues.map(&:author).uniq.map do |user|
solved_issues_mail(user, solved_issues.where(:author_id => user.id), mailcopy).deliver
end
end
end

module InstanceMethods
def solved_issues_mail(user, solved_issues, mailcopy)
set_language_if_valid user.language
issues_count = solved_issues.count
subject = case issues_count
when 1 then l(:mail_subject_solved_issues1, :count => issues_count)
when 2..4 then l(:mail_subject_solved_issues2, :count => issues_count)
else l(:mail_subject_solved_issues5, :count => issues_count)
end
status_id = Setting[:plugin_redmine_solved_issues][:issue_status]
@solved_issues = solved_issues
@firstname = user.firstname
@lastname = user.lastname
@issues_url = url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :author_id => 'me', :status_id => status_id, :sort => 'priority:desc,updated_on:desc')
mail(:to => user.mail, :cc => mailcopy, :subject => subject) if user.mail.present? && issues_count.nonzero?
end
end
end
end
16 changes: 16 additions & 0 deletions lib/tasks/send_solved_issues.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
desc <<-END_DESC
Send mails about solved issues.
Available options:
* cc => send a copy of each message to this address (no copy per default)
Example:
rake redmine:send_solved_issues [email protected] RAILS_ENV="production"
END_DESC

namespace :redmine do
task :send_solved_issues => :environment do
options = {}
options[:cc] = ENV['cc'] if ENV['cc']
Mailer.solved_issues(options)
end
end

0 comments on commit 0f814b1

Please sign in to comment.