すえひろがりっっっっ! このページをアンテナに追加 RSSフィード

2015-06-03

管理者権限でログインしているかどうかをひと目で分かるようにする Redmine プラグインを作った

Redmine管理者と一般ユーザを分けていると、よくある失敗として、

管理者権限でログインしたままでいることを忘れたままチケットを作成・更新してしまう、

ということがあります。

そうすると、チケットの更新者が自分じゃなくて管理者ユーザになってしまって悲しい思いをします。

そういった事故を減らすために管理者ログインしているかどうかをテーマでひと目で分かるようにするプラグインを作りました。

環境

Redmine 3.0.0

ソースコード

https://github.com/suer/redmine_admin_class

機能

管理者ユーザでログインしている時のみ <body> タグの class に "admin" を追加します。

この class を利用したテーマを自作することで管理者と一般ユーザの画面の見た目を切り替えることができるようになります。

利用手順

テーマを作成します。

例えば、public/themes/admin/stylesheets/application.css を以下のように作成します。

@import url(../../../stylesheets/application.css);
body.admin #top-menu { background-color: #f0908d; }
body.admin #header { background-color: #f2a0a1; }

管理画面で作成したテーマを指定します。

f:id:suer:20150603232342p:image:w400


この例の場合は、一般ユーザでログインした場合は通常の画面

f:id:suer:20150603232344p:image:w400

管理者ログインした場合は別の見た目になります。

f:id:suer:20150603232345p:image:w400

これで誤ったアカウントでチケットを更新する事故をかなり防げるようになります。

まとめ

2011-10-16

Redmineのチケットの勢いを見える化するプラグインを放置してたら公開されてた

だいぶ前に書きっぱなしで放置してたプラグインを隣の人がいつの間にか公開していました。

http://suer.github.com/

何をするプラグイン

こんな感じで時系列のチケットの open / close 数のグラフを表示するプラグインです。

f:id:suer:20111016171635p:image

特徴はクローズと見なすステータスを指定できることです。

通常はRedmine自体に設定している終了ステータスを見ればいいんですが、

  • チケット自体は残ってても自分の仕事が終わってたら「完了」として見たい
  • フィードバックがあるかもしれないけど、取り急ぎ終わったと思っているチケットは「完了」として見たい

といった場合に便利です。そういう意味では管理者ではなく開発担当者目線での利用を想定しています。

インストール

$ cd $RAILS_ROOT/vender/plugins
$ git clone git://github.com/suer/redmine_issues_summary_graph.git

動作環境

Redmine 1.1 以降なら動くと思います。

リポジトリ

https://github.com/suer/redmine_issues_summary_graph

2011-05-31

2010-10-03

履歴付チケット一覧出力プラグインを書いてみた

Redmineのチケット一覧のCSV出力は説明は出力されますが、履歴が付いてきません。

チケットを長らくメンテしてると、重要な情報は履歴にあったりするので、一覧するときには履歴が付いていた方が便利なことが多々あります。

そこで通常のCSV出力の末尾に履歴を追記するプラグインを書いてみました。

もしかしたら世の中には既に作っている人がいるかも知れません...

リポジトリ

http://github.com/suer/redmine_export_with_journals

環境

Redmine 1.0.0 で確認しています。

0.9 系でも使えるかも。

インストール

Redmineのルートディレクトリで

$ ruby script/plugin install git://github.com/suer/redmine_export_with_journals.git

してからRailsを再起動。

使用方法

設定

システム管理者アカウントログインし、

「管理」メニューの「ロールと権限」から許可したいロールの「Export csv with journals」にチェックを入れて保存します。

f:id:suer:20101004002234p:image

出力
  1. 許可したロールのユーザでログイン後、プロジェクトにアクセスし、「チケット」メニューをクリックします
  2. 適当に検索します
  3. チケットリストの右下の「csv with journals」をクリックします

f:id:suer:20101004002235p:image

こんな感じで履歴が後ろに出力されます。

f:id:suer:20101004002237p:image

まとめ

履歴まで一覧できたらどうだろう、ということでやってみましたがどうなんでしょう。

それなりに便利そうならメンテを続けるかもしれません。


2011/6/12 追記

出力件数の上限のロジックを変更しました。

チケット一覧で25件表示だったら25件しか出力していなかったのですが、標準のCSV出力と合わせました。

管理者アカウント

  • 「管理」 > 「設定」 > 「チケットトラッキング」タブ

と進み、「出力するチケット数の上限」の数値を設定してください。

f:id:suer:20110612225252p:image

2010-01-19

Redmine自体に手を入れずに見た目を変更する方法

Redmine は Rails 製なので、ちょっとした気に入らない部分は直接手を入れたくなるのだけれども、本家のアップデートが早いのでやはりプラグイン形式にしておいた方がいい。なので、拡張ポイントというか、できることをメモしておきます。


以下の4つの方法とそれぞれの例を紹介します。


他に方法があればコメントください。(それが目的



テーマで見た目を変える

これが一番簡単。

例えば、チケットの履歴って、デフォルトではこんな感じで、パッと見でいくつあるのか分かりづらい。

区切り先がユーザ名と変更内容の間に入っていることが原因だと考えられます。

f:id:suer:20100119205638p:image


そこで、テーマを作って見やすくすることを考えます。

1.既存テーマをコピー

まず、theme ディレクトリ以下の既存のテーマをコピーします。

  $ cd Redmineインストールディレクトリ/pulbic/themes/
  $ cp -R alternate newtheme

2.スタイルシートの編集

newtheme/stylesheets/application.css にはこんな感じで追記します。

/* history */
div#history {
  border: solid 1px #898989;
  background-color: #dedede;
}

div#history h3 {
  border-bottom: solid 1px #898989;
}

div#history .journal {
  border-bottom: solid 1px #898989;
  padding-left: 10px;
}

3.テーマの変更

管理者権限で 管理>設定>表示(タブ) より、「テーマ」を 「newtheme」にします

f:id:suer:20100119205738p:image

4.結果の確認

こんな感じになります。

f:id:suer:20100119205739p:image


プラグインで表示を追加(View Hooks)

Redmineプラグインで拡張することが意識されています。

View Hook はあらかじめ定められた場所にプラグインから表示項目の追加を可能とする機構です。

Hookの一覧は Hooks - Redmine にあります。

また,

 $ rake redmine:plugins:hook_list

でも確認することができます。

ここでは :view_account_left_bottom を使って、アカウント情報の左下に担当チケット数を表示してみます。

デフォルトはこんな感じです。

f:id:suer:20100119213409p:image

1.プラグインの作成

プラグインの作成方法の詳細は Redmine プラグイン開発入門 - mallowlabsの備忘録 を参照。

$ ruby script/generate redmine_plugin AccountTichets

2.リスナの作成

vendor/plugins/redmine_account_tichets/lib/account_listener.rb として以下のリスナを作成します。

class AccountListener < Redmine::Hook::ViewListener
  def view_account_left_bottom(context)
    user = context[:user] 
    assigned_issues = Issue.visible.open.find(:all,
                         :conditions => {:assigned_to_id => User.current.id})
    reported_issues = Issue.visible.find(:all,
                         :conditions => {:author_id => User.current.id })
    html = ''
    html << '<h3>Tickets</h3><ul>'
    html << '<li>assigned: ' + assigned_issues.size.to_s + ' Tickets</li>'
    html << '<li>reported: ' + reported_issues.size.to_s + ' Tickets</li>'
    html << '</ul>'
    html
  end
end
  • ViewHookを利用するには Redmine::Hook::ViewListener を継承したリスナクラスを作成します。
  • :view_account_left_bottom にフックする場合は view_account_left_bottom というメソッドにします。
  • view_account_left_bottom の引数はハッシュで、Hooks - Redmine の Context に相当します。context[:user]で Userオブジェクトが取得できます。この場合はログインユーザ本人です
  • ViewListener のメソッドは HTMLを返す必要があります。返されたHTMLはそのまま該当箇所に表示されます。
3.リスナの登録

pluginディレクトリ直下のinit.rb で require するだけです。

require 'redmine'
require 'account_listener'  # ここを追加

Redmine::Plugin.register :redmine_account_tichets do
  name 'Redmine Account Tichets plugin'
  author 'Author name'
  description 'This is a plugin for Redmine'
  version '0.0.1'
end
4.Redmine を再起動して確認

プラグインの反映には再起動が必要です。

左下に担当中のチケット数と報告したチケット数が表示されます。

f:id:suer:20100119213410p:image


プラグインで言語ファイルの上書き

言語ファイル(config/locales/*.yml)の内容は、プラグインの方が優先されます。

これを利用して文言を変更することができます。

1. プラグイン作成

上記と同様にコマンドで作成します。

  $ ruby script/generate redmine_plugin LiteralOverwrite


2. 言語ファイルの作成

vendor/plugins/redmine_literal_overwrite/config/locales/ja.yml を作成し、以下のように config/locales/ja.yml にある項目を上書きします。

ja:
  field_tracker: チケット種別
  field_tilte: タイトル
  field_description: 詳細 
  field_status: 状態
3. Redmine を再起動して確認

こんな感じで文言が変わります。

f:id:suer:20100120235824p:image

プラグインでrhtmlファイルの上書き

どうしようもない場合はもとからあるrhtmlファイルを上書きしてしまうこともできます。

ただし、この方法は本体がアップデートしたときに、もとのファイルが変更されていることに気づかなかったり、もとのファイルが消されて、もう使われなくなっていたりする可能性があるので気を付けましょう。

ここでは、チケット画面の Atom のリンクを削除します。

1. プラグインの作成

上記と同じです。

 $ ruby script/generate redmine_plugin IssueViewOverwrite

2. もとのファイルをコピーする

チケット画面は app/views/issues/show.rhtml です。

これを、プラグインディレクトリに、まったく同じ構造で配置します。

一から書き直すよりはもとのファイルをコピーして編集するほうが楽です。(ライセンスに注意)

 $ mkdir vendor/plugins/redmine_issue_view_overwrite/app/views/issues
 $ cp app/views/issues/show.rhtml vendor/plugins/redmine_issue_view_overwrite/app/views/issues

3. 上書きするファイルの編集

vendor/plugins/redmine_issue_view_overwrite/app/views/issues/show.rhtml を編集します

もとのファイルの最後あたり。

<% other_formats_links do |f| %>
        <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
        <%= f.link_to 'PDF' %>
<% end %>
<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>

<% content_for :sidebar do %>    <%= render :partial => 'issues/sidebar' %>
<% end %>
<% content_for :header_tags do %>
    <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
    <%= stylesheet_link_tag 'scm' %>
<% end %>

ここから Atom の出力部分を削除します。

<% other_formats_links do |f| %>
        <%= f.link_to 'PDF' %>
<% end %>
<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
<% content_for :sidebar do %>
    <%= render :partial => 'issues/sidebar' %>
<% end %>
<% content_for :header_tags do %>
    <%= stylesheet_link_tag 'scm' %>
<% end %>
4. Redmineを再起動して確認

このように右下がPDFだけになります。

f:id:suer:20100119222234p:image

まとめ

  • テーマ -> CSSだけで済む(HTMLタグが増えたり減ったりしない)場合
  • ViewHook -> フックポイントが用意されている場合
  • 言語ファイルの上書き -> 固定の文言を変える場合
  • rhtmlファイル上書き -> 最後の手段

という感じです。

もっとエレガントな方法があればコメントください。


入門Redmine Linux/Windows対応
前田 剛
秀和システム
売り上げランキング: 112182