Redmineのちょっと使いにくい所を地味に改造

# はじめに

Redmineで、表示とかその辺の地味に使いにくい所をソースコードいじったので紹介。

ここちょっと直したいと思っても、対応するソースコード見付けるのに数時間掛けて、1行直して終わりとかよくあるので改造箇所の参考にでもなれば…。

一応ソースコードの考察？解説？モドキを書いてますが、RedmineもRubyも、触り始めて半年なので間違ってたらご指摘下さい。

**ソースコードの変更は自己責任でお願いします。**

# 動作環境

- Windows Server 2019 Standard
- Bitnami Redmine Stack 4.1.1-4

## 再起動

thinの再起動？コンパイル？リビルド？イマイチわかってないけど、ソースコード(rbファイル)変更した後にURL先のコマンド実行してから、Bitnamiのサーバーリスタートしてます。

https://taktak.jp/2018/02/01/2801/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1210891/ec422523-90f7-6f9a-4e80-6cc32e1e1ce1.png)
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1210891/b577c06e-ae2c-84e6-a70c-71f8ecc2f1b9.png)



# プロジェクト選択ボックスの表示固定

プロジェクトたくさんある(社内用プロジェクトが乱立してる…)ので右上のプロジェクト選択よく使うけど、「最近利用したもの」に表示されると階層構造が崩れて見にくくなるので固定。
（そもそもプロジェクトを入れ子にしまくってるのが悪い気が…）

変更後の見え方はこんな感じ↓
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1210891/bafecb6b-29f8-5e15-1dff-1edc4f15b69b.png)


## ソースコード

ヘッダー部分なので全体？（application）のヘルパー。
プロジェクトの一覧から履歴とブックマークに設定してるプロジェクト消してるのでコメントアウト。

```ruby:application_helper.rb（変更前）
  def render_projects_for_jump_box(projects, selected=nil)
    …省略…
    projects = projects - (recents + bookmarked)
```

```ruby:application_helper.rb（変更後）
  def render_projects_for_jump_box(projects, selected=nil)
    …省略…
    # projects = projects - (recents + bookmarked)
```

# プロジェクト移動した時にカスタムクエリ保持

プロジェクトたくさんある(2度目)ので、プロジェクト移動した時にカスタムクエリリセットしてほしくない！
（普通は頻繁にプロジェクト移動とかしないんだろう）

## ソースコード

クエリなのでクエリヘルパー（そのまま）。
プロジェクト変わった時にちゃんとクエリリセットしてるので、条件からプロジェクトIDが変わったっていう条件を削除。

ページまたがってる機能はどこ探せばいいかわからなくて（ページ固定の機能はviewsから遡れるからまだ楽）延々悩んでた気がする。
初期表示のときにやってるんだろうってあたりをつけて探したら、controllerのindexにqueryって文字があったからそれで見付けた覚えがある。

```ruby:queries_helper.rb（変更前）
  # 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)
```

```ruby:queries_helper.rb（変更後）
  # 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?
```

# ガントチャートのトラッカー名削除

ガントチャートのトラッカー名、プロジェクターに写す時横幅とって邪魔だから消してって言われて消した。


他にも色々変えてるので赤かったりするけど参考までに見え方↓
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1210891/01366a20-4d36-fbef-8ee7-ade5f368ce07.png)


## ソースコード

gannt.rbはappじゃなくてlibの下なので注意。
表示消すだけならすぐかな、と思ったらlibの下にあるとは考えつかなくてすごい悩んだ。
ガントチャートの表示系はlibにまとまってる。

ちょうどいいオプションが元々実装されてたので使用。

```ruby:gantt.rb（変更前）
      def html_subject_content(object)
          …省略…
          s << view.link_to_issue(issue).html_safe
```

```ruby:gantt.rb（変更後）
      def html_subject_content(object)
          …省略…
          s << view.link_to_issue(issue, :tracker => false).html_safe
```

なぜかIDまで徹底して消してる。
リンクの関係で矢印入れた気がする。

```ruby:application_helper.rb（変更前）
  def link_to_issue(issue, options={})
    …省略…
    text = options[:tracker] == false ? "##{issue.id}" : "#{issue.tracker} ##{issue.id}"
    …省略…
    s << h(": #{subject}") if subject
```

```ruby:application_helper.rb（変更後）
  def link_to_issue(issue, options={})
    …省略…
    text = options[:tracker] == false ? "≫" : "#{issue.tracker} ##{issue.id}"
    …省略…
    s << h("#{subject}") if subject
```