プラグインの設定画面を作る

プラグインでユーザが設定を変えられるようにしたいことがあります。
Redmine ではその機能が用意されています。管理ページのプラグインリストのところででてくる [設定] のリンクから開くページです。
このプラグインの設定ページの追加方法を紹介します。

サンプルコード

サンプルプラグインの準備

サンプルはメーリングリストの html ページにリンクをはる wiki マクロにします。
他の Tips で wikipedia の用語にリンクをはるサンプル を紹介しました。 wikipedia はアドレスが固定だったので、アドレスをハードコーディングしてもかまわなかったのですが、メーリングリストはユーザごとにアドレスを変える必要があります。これを設定画面で変更できるようにしています。

まずはプラグイン名を MailingListLink にしてスケルトンを作成します。今回のプラグインではこのうち init.rb と app/views のディレクトリのみ使います。
その後 Redmine::Plugin.register の description などを適当に変更しておきます。

設定を追加する

それではプラグイン用の設定を追加していきましょう。

設定ですから、データベースに値を保存する必要があります。しかし、プラグインの設定の保存は Redmine が自動的にやってくれるので、特にプラグイン側で設定用の Model などを用意する必要はありません。
resister メソッドの中で settings メソッドを呼ぶだけで設定が保存できるようになります。

1  settings :default => {
2    'mlist_view_string' => 'ruby-list#',
3    'mlist_address' => 'http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/'
4  }, :partial => 'settings/mlist_settings'

設定はハッシュマップを使って指定します。 2, 3 行目が設定のパラメータを決めているところでハッシュの値はデフォルト値となります。ここではリンクの表示用の文字列とメーリングリストのアドレスをパラメータとしています。
4 行目の第 2 引数で設定ページを指定しています。

デフォルト値は Ruby のメーリングリスト にしています。

設定ページを追加する

設定用の model や controller は作る必要はありませんが、設定ページの view は作る必要があります。

settings メソッドで 'settings/mlist_settings' と指定したので、以下の表示用のファイルを作成します。

    app/views/settings/_mlist_settings.html.erb

ファイルには設定するパラメータの設定フォームを記述します。

 1<p>
 2  <table> 
 3  <tr><td> View string </td><td>
 4  <%= text_field_tag('settings[mlist_view_string]', @settings['mlist_view_string'])%>
 5  </td></tr>
 6  <tr><td> Addrss </td><td>
 7  <%= text_field_tag('settings[mlist_address]', @settings['mlist_address'], :size => 80)%>
 8  </td></tr>
 9  </table>
10</p>

基本的に通常の設定フォームの中身を書く要領で自由に書いてかまいませんが、 submit ボタンなどは Redmine 側で書いてくれるので書く必要はありません。

設定値を使用する

設定値を利用してメーリングリストの wiki マクロを作成します。設定値を利用する部分以外はほぼ wikipedia リンクのマクロと同じものです。

 1Redmine::WikiFormatting::Macros.register do
 2  desc "Mailing list link macro" 
 3  macro :mlist do |obj, args|
 4    if (args.size != 1)
 5      raise "this macro is given only one argument." 
 6    else
 7      word = args.first.strip
 8      addr = Setting.plugin_redmine_mailing_list_link['mlist_address'] + CGI.escape(word)
 9      viewstr = Setting.plugin_redmine_mailing_list_link['mlist_view_string'] + word
10      return link_to(viewstr, addr, :class => "external")
11    end
12  end
13end

Setting.plugin_プラグイン名 で設定値のハッシュにアクセスできます。
8 行目で設定値のアドレスを使ってアドレスを決め、 9 行目で表示文字を作っています。

wiki で次のように書くとメーリングリストにリンクをはるようになります。

* {{mlist(1)}}

plugin_settings.png (11.7 kB) Mitsuyoshi Yoshida, 05/29/2011 01:58 am

mlist_settings.png (11.9 kB) Mitsuyoshi Yoshida, 05/29/2011 01:58 am

sample_mlist.png (2 kB) Mitsuyoshi Yoshida, 05/29/2011 01:58 am

Plugin_settings Mlist_settings Sample_mlist