Skip to content

Commit

Permalink
Merge pull request #2 from zaneli/send_mail_per_project
Browse files Browse the repository at this point in the history
  • Loading branch information
zaneli committed Sep 1, 2014
2 parents 2362f96 + ecda2a1 commit 4e1387f
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 49 deletions.
66 changes: 40 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,40 @@
#あかヤギさんからお手紙着いた!
赤山羊はちょっとしたメール設定を行う Redmine プラグインです。

## 動作確認バージョン
Redmine version 2.1.2.stable
Ruby version 1.9.3 (i686-linux)
Rails version 3.2.8

## 使用方法
### 全体の設定
管理 -> 設定 -> メール通知タブに[件名の接頭辞]入力フィールドが追加されます。
Redmine から送信される全てのメール(後述するプロジェクトごとの設定を行った場合を除く)の
件名の先頭に[件名の接頭辞]に入力した値が付与されます。
(なお、入力値を変更し、[保存]を押下しないまま[テストメールを送信]した場合、
変更した値ではなく[保存]押下により保存された接頭辞が使用されます。
他の入力フィールドも同様であったため、特別の処理を施していません)

### プロジェクトごとの設定
プロジェクトメニューの設定ページに赤山羊タブが追加されます。
(このタブは管理者及び 管理 -> ロールと権限にて[赤山羊の設定]にチェックしたユーザーにのみ表示されます)
[プロジェクト固有の接頭辞を設定する]をチェックしない場合、全体の設定の[件名の接頭辞]が使用されます。
[プロジェクト固有の接頭辞を設定する]をチェックした場合、プロジェクトメニューの設定ページの[件名の接頭辞]に入力した値が
該当プロジェクトに関係するメールの件名の先頭に付与されます。
(特定のプロジェクトのみ接頭辞を付与したくない場合、[プロジェクト固有の接頭辞を設定する」をチェックし、
プロジェクトメニューの設定ページの[件名の接頭辞]に何も入力せず[保存]を押下してください。)
また、[送信元アドレス]にメールアドレスを入力した場合、該当プロジェクトに関係するメールの送信元として使用されます。
# Akayagi

This is Redmine plugin to extend mail settings.
"Akayagi" means Red Goat in Japanese (赤山羊).

## Versions that is confirmed to working

* Redmine version 2.5.2.stable
* Ruby version 2.0.0-p481 (2014-05-08) [x86_64-linux]
* Rails version 3.2.19

## Getting started

### 1. Install the plugin

```
cd <REDMINE_HOME>/plugins
git clone https://github.com/zaneli/akayagi.git
```

or download source code, unzip (or extract the archive), and move directories to `<REDMINE_HOME>/plugins`.

### 2. Run db migration

```
rake redmine:plugins:migrate RAILS_ENV=<development or production>
```

## Usage

### General Settings

Specify mail prefix.
![General Settings](http://www.zaneli.com/img/akayagi/akayagi01.png "General Settings")

### Settings per project

Specify mail prefix, from address, to address, cc address and bcc address.
(It can specify comma-separated multiple address at to, cc and bcc address)
![Settings per project](http://www.zaneli.com/img/akayagi/akayagi02.png "Settings per project")
3 changes: 3 additions & 0 deletions app/controllers/akayagi_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ def save
@settings = AkayagiProjectSettings::find_or_create_by_project_id(project.id)
@settings.subject_prefix = params[:subject_prefix]
@settings.from_address = params[:from_address]
@settings.to_address = params[:to_address]
@settings.cc_address = params[:cc_address]
@settings.bcc_address = params[:bcc_address]
@settings.save
flash[:notice] = l(:notice_successful_update)
rescue => e
Expand Down
71 changes: 51 additions & 20 deletions app/helpers/method_chain/mailer_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,40 +14,71 @@ class << self

module ClassMethods
def deliver_mail_with_akayagi(mail, &block)
project_identifier = mail.header["X-Redmine-Project"]
mail.subject = get_prefix(project_identifier) + mail.subject
mail.from = get_from(project_identifier, mail.from)
project_settings = get_project_settings(mail.header["X-Redmine-Project"])
mail.subject = get_prefix(project_settings) + mail.subject
mail.from = get_from(project_settings, mail.from)
mail.to = get_to(project_settings, mail.to)
mail.cc = get_cc(project_settings, mail.cc)
mail.bcc = get_bcc(project_settings, mail.bcc)
deliver_mail_without_akayagi(mail, &block)
end

private
def get_prefix(project_identifier)
def get_project_settings(project_identifier)
if project_identifier.blank?
AkayagiGeneralSettings::safe_subject_prefix
nil
else
project = Project::find_by_identifier(project_identifier.to_s)
project_settings = AkayagiProjectSettings::find_by_project_id(project.id)
if project_settings.nil? || project_settings.subject_prefix.nil?
AkayagiGeneralSettings::safe_subject_prefix
else
project_settings.subject_prefix
end
AkayagiProjectSettings::find_by_project_id(project.id)
end
end

def get_from(project_identifier, org_from)
if project_identifier.blank?
def get_prefix(project_settings)
if project_settings.nil? || project_settings.subject_prefix.nil?
AkayagiGeneralSettings::safe_subject_prefix
else
project_settings.subject_prefix
end
end

def get_from(project_settings, org_from)
if project_settings.nil? || project_settings.from_address.blank?
org_from
else
project = Project::find_by_identifier(project_identifier.to_s)
project_settings = AkayagiProjectSettings::find_by_project_id(project.id)
if project_settings.nil? || project_settings.from_address.blank?
org_from
else
project_settings.from_address
end
project_settings.from_address
end
end

def get_to(project_settings, org_to)
if project_settings.nil? || project_settings.to_address.blank?
org_to
elsif org_to.nil?
project_settings.to_address.split(",")
else
org_to + project_settings.to_address.split(",")
end
end

def get_cc(project_settings, org_cc)
if project_settings.nil? || project_settings.cc_address.blank?
org_cc
elsif org_cc.nil?
project_settings.cc_address.split(",")
else
org_cc + project_settings.cc_address.split(",")
end
end

def get_bcc(project_settings, org_bcc)
if project_settings.nil? || project_settings.bcc_address.blank?
org_bcc
elsif org_bcc.nil?
project_settings.bcc_address.split(",")
else
org_bcc + project_settings.bcc_address.split(",")
end
end
end

Mailer::send(:include, MailerPatch)

12 changes: 12 additions & 0 deletions app/views/akayagi/_settings.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,18 @@
<label for="from_address"><%= l(:from_address) %></label>
<input id="from_address" name="from_address" type="text" value="<%=h @settings.from_address %>"/>
</p>
<p>
<label for="to_address"><%= l(:to_address) %></label>
<input id="to_address" name="to_address" type="text" value="<%=h @settings.to_address %>"/>
</p>
<p>
<label for="cc_address"><%= l(:cc_address) %></label>
<input id="cc_address" name="cc_address" type="text" value="<%=h @settings.cc_address %>"/>
</p>
<p>
<label for="bcc_address"><%= l(:bcc_address) %></label>
<input id="bcc_address" name="bcc_address" type="text" value="<%=h @settings.bcc_address %>"/>
</p>
<input id="general_subject_prefix" type="hidden" value="<%=h @general_subject_prefix %>"/>
<%= submit_tag l(:button_save) %>
<% end %>
Expand Down
5 changes: 4 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ en:
permission_akayagi_settings: "Akayagi Settings"
subject_prefix: "Subject Prefix"
from_address: "From Address"
enable_subject_prefix: "Set the prefix of each project."
to_address: "To Address"
cc_address: "CC Address"
bcc_address: "BCC Address"
enable_subject_prefix: "Set the prefix of per project."
3 changes: 3 additions & 0 deletions config/locales/ja.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ ja:
permission_akayagi_settings: "赤山羊の設定"
subject_prefix: "件名の接頭辞"
from_address: "送信元アドレス"
to_address: "送信先アドレス(TO)"
cc_address: "送信先アドレス(CC)"
bcc_address: "送信先アドレス(BCC)"
enable_subject_prefix: "プロジェクト固有の接頭辞を設定する"
7 changes: 7 additions & 0 deletions db/migrate/003_add_akayagi_project_settings_to_cc_bcc.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class AddAkayagiProjectSettingsToCcBcc < ActiveRecord::Migration
def change
add_column :akayagi_project_settings, :to_address, :string
add_column :akayagi_project_settings, :cc_address, :string
add_column :akayagi_project_settings, :bcc_address, :string
end
end
4 changes: 2 additions & 2 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
Redmine::Plugin.register :akayagi do
name 'Akayagi plugin'
author 'Shunsuke Ohtani'
description 'Akayagi san kara otegami tsuita!'
version '0.0.1'
description 'Mail settings extension'
version '0.0.2'
url 'https://github.com/zaneli/akayagi'
author_url 'http://www.zaneli.com/'

Expand Down

0 comments on commit 4e1387f

Please sign in to comment.