Redmineで「新しいチケット」の不要な項目を非表示にする方法

前置き

僕の場合、新しいチケットの作成時には入力しなくてもいい項目が多かったので、誤入力防止の意味も込めて、思い切って「新しいチケット」の画面では不要な項目を非表示にしました。
今回はその方法をご紹介しようと思います。

デモ環境

Redmine 2.4.1.stable

デフォルトの「新しいチケット」画面

デフォルトだと↓こんな感じ。

僕の場合、下記の赤枠の項目が不要

デフォルトの「新しいチケット」画面
デフォルトの「新しいチケット」画面
  • プライベート:使わない
  • ステータス:新しいチケット作成時にはデフォルトの「新規」に決まっている
  • 親チケット:新しいチケット作成時には使わない
  • 開始日:デフォルトで入力されている日付でOK
  • 予定工数:使わない
  • 進捗率:どうせ「0%」

というわけで、

やりたいこと

上記画面の赤枠部分を非表示にする

対象ファイル(修正するファイル)

/redmineのルートディレクトリ/app/view/issue/_form.html.erb
/redmineのルートディレクトリ/app/view/issue/_attributes.html.erb

修正内容

非表示にする項目に、ひたすら「style=”display:none;”」をつけていきます。

_form.html.erb

<%= labelled_fields_for :issue, @issue do |f| %>
<%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>

<% if @issue.safe_attribute? 'is_private' %>
- <p style="float:right; margin-right:1em;">
+ <p style="display:none; float:right; margin-right:1em;">
  <%= f.check_box :is_private, :no_label => true %><label class="inline" for="issue_is_private" id="issue_is_private_label"><%= l(:field_is_private) %></label>
</p>
<% end %>

_attributes.html.erb

<%= labelled_fields_for :issue, @issue do |f| %>

<div class="splitcontent">
<div class="splitcontentleft">
<% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %>
- <p style="display:none;"><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true},
+ <p style="display:none;"><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true},
                :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %></p>

<% else %>
<p><label><%= l(:field_status) %></label> <%= h(@issue.status.name) %></p>
<% end %>

<% if @issue.safe_attribute? 'priority_id' %>
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %></p>
<% end %>

<% if @issue.safe_attribute? 'assigned_to_id' %>
<p><%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %></p>
<% end %>

<% if @issue.safe_attribute?('category_id') && @issue.project.issue_categories.any? %>
<p><%= f.select :category_id, (@issue.project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true, :required => @issue.required_attribute?('category_id') %>
<%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'),
            new_project_issue_category_path(@issue.project),
            :remote => true,
            :method => 'get',
            :title => l(:label_issue_category_new),
            :tabindex => 200) if User.current.allowed_to?(:manage_categories, @issue.project) %></p>
<% end %>

<% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %>
<%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'),
            new_project_version_path(@issue.project),
            :remote => true,
            :method => 'get',
            :title => l(:label_version_new),
            :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %>
</p>
<% end %>
</div>

<div class="splitcontentright">
<% if @issue.safe_attribute? 'parent_issue_id' %>
- <p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10, :required => @issue.required_attribute?('parent_issue_id') %></p>
+ <p id="parent_issue" style="display:none;"><%= f.text_field :parent_issue_id, :size => 10, :required => @issue.required_attribute?('parent_issue_id') %></p>
<%= javascript_tag "observeAutocompleteField('issue_parent_issue_id', '#{escape_javascript auto_complete_issues_path}')" %>
<% end %>

<% if @issue.safe_attribute? 'start_date' %>
- <p id="start_date_area">
+ <p id="start_date_area" style="display:none;">
  <%= f.text_field(:start_date, :size => 10, :disabled => !@issue.leaf?,
                   :required => @issue.required_attribute?('start_date')) %>
  <%= calendar_for('issue_start_date') if @issue.leaf? %>
</p>
<% end %>

<% if @issue.safe_attribute? 'due_date' %>
<p id="due_date_area">
  <%= f.text_field(:due_date, :size => 10, :disabled => !@issue.leaf?,
                   :required => @issue.required_attribute?('due_date')) %>
  <%= calendar_for('issue_due_date') if @issue.leaf? %>
</p>
<% end %>

<% if @issue.safe_attribute? 'estimated_hours' %>
- <p style="display:none;"><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
+ <p style="display:none;"><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
<% end %>

<% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %>
- <p style="display:none;"><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), :required => @issue.required_attribute?('done_ratio') %></p>
+ <p style="display:none;"><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), :required => @issue.required_attribute?('done_ratio') %></p>
<% end %>
</div>
</div>

<% if @issue.safe_attribute? 'custom_field_values' %>
<%= render :partial => 'issues/form_custom_fields' %>
<% end %>

<% end %>

<% include_calendar_headers_tags %>

ファイルの更新が終わったら、Redmineを再起動。

結果

項目が非表示になりスッキリしました。
※あくまでも、非表示にしただけなので、DB上にはデフォルトのデータが格納されます。

修正後の「新しいチケット」画面
修正後の「新しいチケット」画面

というわけで、この記事が僕と同じように「手さぐりでRedmineをカスタマイズしながら使っている、プレイングマネージャー的な雑用係 兼 ディレクター 兼 プロマネ」の手助けになれば幸いです。
otsukare-tion.comはがんばる社畜を応援しています。

Amazon

Redmineによるタスクマネジメント実践技法
Redmine -もっと手軽にプロジェクト管理!
入門Redmine 第3版

コメントを残す