Redmineのプラグイン製作

Redmine2.5でプラグイン作成のチュートリアルやってみた

投稿日:2014年5月27日 更新日:

参考

このあたりを参考に投票プラグイン作成のチュートリアルをやってみた

Plugin Tutorial
プラグイン チュートリアル <日本語訳だけどちょっと古いバージョンのもの

環境

Environment:
Redmine version 2.5.1.devel
Ruby version 2.1.1-p76 (2014-02-24) [x86_64-darwin13.0]
Rails version 3.2.18
Environment development
Database adapter SQLite

Mac OSX

デベロップメント環境のRedmineを準備

まず、GitHubからソースをクローン

そして、普通に bundle

プラグインを作成

redmineのルートで rails g とすると、次のジェネレータがみつけられる

単に、 rails g redmine_plugin などとやってみれば、ヘルプがみられる

さっそく適当にプラグインを作成

plugin/sample_plugin/以下にファイルが作成される.

init.rb

init.rbにプラグインの情報やメニューの設定などをする

作者名などを作成して、Redmineを再起動すれば、管理>プラグインから、プラグインの情報を確認できるようになる

screenshot

モデルを作成する

ジェネレータを利用してモデルを作ってみる.Nameのところには上で作ったプラグイン名をいれる

チュートリアル通りに

データベースにマイグレート

rake -T でどんなrakeタスクが使えるか確認できる

チュートリアル通りにマイグレートファイルにデフォルト値をゼロにしておかないとゼロと表示されない

ちなみに、プラグインでマイグレートしたデータベースを削除したい場合はプラグイン名を指定して、VERSION=0を指定する

そして、データも作成してみる

voteメソッドも追加しておく

なんかunloadableとか書いてあるけど削除しないほうがいいらしい

Redmineプラグイン開発の注意事項

しかし、 Unable to autoload constant .... とか出て、変更しても、いちいちサーバーを再起動しないと読み込んでくれない.

開発中は、unloadableを外しておくのがいいかも.

コントローラーを作成してみる

indexアクションとvoteアクションをチュートリアル通りに作成

ビューを作成

index.html.erbをチュートリアル通りに作成

ルートを作成

プラグインルート以下にあるconfig/routes.rbを修正する

チュートリアル通りに追加

動作確認

redmineルート/pollsにアクセスして投票ページが表示されればOK

screenshot

アプリケーションメニューにリンクを追加する

init.rbに書けばOK

screenshot

メニューの種類は、「メニューに新規項目を追加する」を参照.

プロジェクトメニューに変えてみる

init.rb

init.rbを次のように変更

controller

プロジェクトメニューにPollsが表示されるけど、Pollsをクリックするとプロジェクトメニュー自体が消えてしまう.
controllerで@projectをイニシャライズしていないから.
controllerで@projectをイニシャライズすればPollsをクリックしてもプロジェクトメニューは消えない.

*redmine3.0時点では、params[:project_id]にidentifierが入ってきてしまう.
その場合、find_byで取得する.

パーミッションの設定

Redmineではプロジェクト内の閲覧や操作にはパーミッションを細かく設定できる.パーミッションを上のpublicから、自由に設定できるように変更する.

これで権限レポートに表示される.roles/permissionsにアクセスして確認できる.

screenshot

実際に権限で制御するにはコントローラーに設定が必要.

:indexの設定はこう.rails3のbefore_filterを使う

:voteの設定は

Redmineプラグインチュートリアルについて」を参考にした.

つまり、そのまま上の設定でvoteすると、indexのアドレスが/polls?project_id=proj1とかなのに、そのままproject_idなしの/pollsにリダイレクトされて404になってしまう.ので、これを直してやる必要がある.

redirect_to :back でもとりあえず動く

そして、:voteアクションについても:authorizeすればよい.

日本語化

パーミッションのシンボルをマルチリンガルで表示したい場合は、プラグインのconfig/locale/ja.ymlとかに登録すればOK.

screenshot

プロジェクトモジュールの翻訳は、project_module_モジュール名で指定できる.

プロジェクトモジュールにする

全部のプロジェクトではなくて、指定したプロジェクトだけにPollsを表示したい場合はプロジェクトモジュールにする.
やり方は簡単で、init.rbのpermissionをproject_moduleで囲むだけ.

プロジェクトの設定からモジュールを有効にできる.

screenshot

ログインしているときだけメニューを表示する

ifオプションを使えばOK
RE: Edit the top menuを参考に.

global_authorize

現状では、authorizeはプロジェクトのレベルでしか機能しない.
プロジェクト外の機能についてはpermissionも設定が難しい.
そこで、global_authorizeというメソッドで確認する.
ここでは、Userのtypeが”User”かどうかで判別している.

参考:  RE: Adding security to custom plugin vi the :authorize hook

ビューの見た目を変更する

スタイルシート

assets/stylesheets/voting.cssを作成(scssでない.scssの使い方はまた調べる).

Redmineプラグイン内でJavascriptや画像やCSSを使いたい場合

プラグインのビューからスタイルシートを読み込む.

プラグイン名を指定すること

link_toタグでクラスをつける

こういう感じで.

screenshot

Stylesheetは変更のたびにサーバーを再起動する必要がある.

htmlタイトルをつける

-Redmineのプラグイン製作
-

執筆者:

関連記事

Redmineプラグインで既存のモデルを修正する

By: Allen McGregor – CC BY 2.0 プラグイン インターナルを参考にした 目次1 Rubyのモジュール2 既存のモデルを拡張するRedmineプラグイン3 App …

Redmine3におけるインテグレーションテスト、UIテスト

By: Karoly Lorentey – CC BY 2.0 目次1 インテグレーションテスト?UIテスト?2 インテグレーションテスト3 UIテスト インテグレーションテスト?UIテス …

Selenium IDEからRubyのテストケースを書き出す

By: Kenny Louie – CC BY 2.0 目次1 Selenium IDE2 Selenium IDEのインストール3 Selenium IDEの立ち上げ方4 はじめてのSe …

Redmineプラグインのviewを作るための情報あれこれ

By: amanderson2 – CC BY 2.0 目次1 環境2 サイドバーへの表示3 領域 box4 動作などの領域 contextual5 アイコン6 nodata7 テーブル8 …

Redmineでプロジェクトの一覧を表示するプラグインつくった〜projects_table

目次1 機能2 作った理由3 リポジトリ4 同名のプラグイン発見 機能 プロジェクトの一覧を表示する 期日が一番近いバージョンを表示する 最後に更新したチケットを表示する 期日が一番近いチケットを表示 …