はじめに
Redmineで、表示とかその辺の地味に使いにくい所をソースコードいじったので紹介。
ここちょっと直したいと思っても、対応するソースコード見付けるのに数時間掛けて、1行直して終わりとかよくあるので改造箇所の参考にでもなれば…。
一応ソースコードの考察?解説?モドキを書いてますが、RedmineもRubyも、触り始めて半年なので間違ってたらご指摘下さい。
ソースコードの変更は自己責任でお願いします。
動作環境
- Windows Server 2019 Standard
- Bitnami Redmine Stack 4.1.1-4
再起動
thinの再起動?コンパイル?リビルド?イマイチわかってないけど、ソースコード(rbファイル)変更した後にURL先のコマンド実行してから、Bitnamiのサーバーリスタートしてます。
プロジェクト選択ボックスの表示固定
プロジェクトたくさんある(社内用プロジェクトが乱立してる…)ので右上のプロジェクト選択よく使うけど、「最近利用したもの」に表示されると階層構造が崩れて見にくくなるので固定。
(そもそもプロジェクトを入れ子にしまくってるのが悪い気が…)
ソースコード
ヘッダー部分なので全体?(application)のヘルパー。
プロジェクトの一覧から履歴とブックマークに設定してるプロジェクト消してるのでコメントアウト。
def render_projects_for_jump_box(projects, selected=nil)
…省略…
projects = projects - (recents + bookmarked)
def render_projects_for_jump_box(projects, selected=nil)
…省略…
# projects = projects - (recents + bookmarked)
プロジェクト移動した時にカスタムクエリ保持
プロジェクトたくさんある(2度目)ので、プロジェクト移動した時にカスタムクエリリセットしてほしくない!
(普通は頻繁にプロジェクト移動とかしないんだろう)
ソースコード
クエリなのでクエリヘルパー(そのまま)。
プロジェクト変わった時にちゃんとクエリリセットしてるので、条件からプロジェクトIDが変わったっていう条件を削除。
ページまたがってる機能はどこ探せばいいかわからなくて(ページ固定の機能はviewsから遡れるからまだ楽)延々悩んでた気がする。
初期表示のときにやってるんだろうってあたりをつけて探したら、controllerのindexにqueryって文字があったからそれで見付けた覚えがある。
# Retrieve query from session or build a new query
def retrieve_query(klass=IssueQuery, use_session=true, options={})
…省略…
elsif api_request? || params[:set_filter] || !use_session || session[session_key].nil? || session[session_key][:project_id] != (@project ? @project.id : nil)
# Retrieve query from session or build a new query
def retrieve_query(klass=IssueQuery, use_session=true, options={})
…省略…
elsif api_request? || params[:set_filter] || !use_session || session[session_key].nil?
ガントチャートのトラッカー名削除
ガントチャートのトラッカー名、プロジェクターに写す時横幅とって邪魔だから消してって言われて消した。
ソースコード
gannt.rbはappじゃなくてlibの下なので注意。
表示消すだけならすぐかな、と思ったらlibの下にあるとは考えつかなくてすごい悩んだ。
ガントチャートの表示系はlibにまとまってる。
ちょうどいいオプションが元々実装されてたので使用。
def html_subject_content(object)
…省略…
s << view.link_to_issue(issue).html_safe
def html_subject_content(object)
…省略…
s << view.link_to_issue(issue, :tracker => false).html_safe
なぜかIDまで徹底して消してる。
リンクの関係で矢印入れた気がする。
def link_to_issue(issue, options={})
…省略…
text = options[:tracker] == false ? "##{issue.id}" : "#{issue.tracker} ##{issue.id}"
…省略…
s << h(": #{subject}") if subject
def link_to_issue(issue, options={})
…省略…
text = options[:tracker] == false ? "≫" : "#{issue.tracker} ##{issue.id}"
…省略…
s << h("#{subject}") if subject