QA #911
未完了カスタムフィールドの形式「ユーザー」にてグループも選べるようにしたい &チケット一覧画面でもフィルタしたい。
0%
説明
ボールを持つ人が複数になるケースがあることから
custom_users_as_assigneesプラグインを使っている中で、
利用者からグループも選べるようにしたいとの強い要望があった。
グループ選択可能にしたが、
チケット一覧画面のフィルタでグループ定義が選択できず、グループの場合にリスト上に表示されない。
下記箇所の修正で対応可能
チケット編集画面
https://redmine.tokyo/issues/911#note-3
リスト表示/フィルタ選択
https://redmine.tokyo/issues/911#note-12
ファイル
field_format.rb (34.8 KB) field_format.rb | 楠川 智久, 2019/02/04 01:21 |
奈良 裕記 さんが約5年前に更新
担当者欄にはグループを選択できるのに、ユーザ形式のカスタムフィールドで選択できないのだから、
まずは実際のコードを確認
CFの入力選択部分をprincipals_options_for_selectの処理で置き換えれば良い?
(validationの対応要否は未検討)
ただ、何故処理が異なっているのかも気になります。
標準の担当者欄¶
helpers/application_helper.rb: def principals_options_for_select(collection, selected=nil)
担当者欄の呼び出し元
views/issues/_attributes.html.erb:
<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>
views/issues/bulk_edit.html.erb:
principals_options_for_select (@assignables, @issue_params[:assigned_to_id])) %>
ユーザ形式のカスタムフィールド¶
下記を参考にして、カスタムフィールド(User)の場合に、
principals_options_for_selectを呼べば対応できないかな。
if custom_value.custom_field.field_format == 'user'
参考文献(手前味噌w)
Redmineカスタムフィールド表示改善
https://www.slideshare.net/y503unavailable/redmine-61996567
Page9,17
/app/views/issues/_form_custom_fields.html.erb
(編集)表示一列化 CFID毎に処理変更(見出し、改行、、)
app/helpers/custom_fields_helper.rb
(編集)CF表示制御処理を追加 (label,preタグ有無、定型処理)
views/issues/_attributes.html.erb:
....
<% if @issue.safe_attribute? 'custom_field_values' %>
<%= render :partial => 'issues/form_custom_fields' %>
<% end %>
views/issues/_form_custom_fields.html.erb
<% custom_field_values = @issue.editable_custom_field_values %>
...
<% custom_field_values.each do |value| %>
<p><%= custom_field_tag_with_label :issue, value,
:required => @issue.required_attribute?(value.custom_field_id) %>
</p>
helpers/custom_fields_helper.rb:
def custom_field_tag_with_label(name, custom_value, options={})
def custom_field_label_tag(name, custom_value, options={})
def custom_field_name_tag(custom_field)
views/custom_fields/_form.html.erb:
<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {},
:disabled => !@custom_field.new_record? %></p>
helpers/custom_fields_helper.rb
# Return an array of custom field formats which can be used in select_tag
def custom_field_formats_for_select(custom_field)
Redmine::FieldFormat.as_select(custom_field.class.customized_class.name)
end
lib/redmine/field_format.rb: module FieldFormat
# Return an array of custom field formats which can be used in select_tag
def self.as_select(class_name=nil)
formats = all.values.select do |format|
format.class.customized_class_names.nil? || format.class.customized_class_names.include?(class_name)
end
formats.map {|format| [::I18n.t(format.label), format.name] }.sort_by(&:first)
end
class UserFormat < RecordList
add 'user'
self.form_partial = 'custom_fields/formats/user'
field_attributes :user_role
def possible_values_records(custom_field, object=nil)
...
scope = object.project.users
if custom_field.user_role.is_a?(Array)
role_ids = custom_field.user_role.map(&:to_s).reject(&:blank?).map(&:to_i)
if role_ids.any?
scope = scope.where("#{Member.table_name}.id IN (SELECT DISTINCT member_id FROM #{MemberRole.table_name} WHERE role_id IN (?))", role_ids)
end
end
scope.sorted
models/projects.rb
def principals
@principals ||= Principal.active.joins(:members).where("#{Member.table_name}.project_id = ?", id).distinct
end
def users
@users ||= User.active.joins(:members).where("#{Member.table_name}.project_id = ?", id).distinct
end
楠川 智久 さんが約5年前に更新
- ファイル field_format.rb field_format.rb を追加
- ステータス を 新規 から 回答済 に変更
調査情報、ありがとうございます!
Redmine3.4(職場が3.4なので)でやってみた結果、
以下の本体修正で出来たっぽいです。
(修正後のファイルも添付します)
--- lib/redmine/field_format.rb (revision 16854)
+++ lib/redmine/field_format.rb (working copy)
@@ -801,6 +801,10 @@
self.form_partial = 'custom_fields/formats/user'
field_attributes :user_role
+ def target_class
+ return Principal
+ end
+
def possible_values_options(custom_field, object=nil)
possible_values_records(custom_field, object).map {|u| [u.name, u.id.to_s]}
end
@@ -810,7 +814,8 @@
projects = object.map {|o| o.respond_to?(:project) ? o.project : nil}.compact.uniq
projects.map {|project| possible_values_records(custom_field, project)}.reduce(:&) || []
elsif object.respond_to?(:project) && object.project
- scope = object.project.users
+# scope = object.project.users
+ scope = object.project.principals
if custom_field.user_role.is_a?(Array)
role_ids = custom_field.user_role.map(&:to_s).reject(&:blank?).map(&:to_i)
if role_ids.any?
custom_users_as_assigneesプラグインでもグループへの対応が必要で、
https://github.com/tkusukawa/custom_users_as_assignees/commit/b42abe9c274b8cf746fca69ca421d07f9ee0e162
https://github.com/tkusukawa/custom_users_as_assignees/commit/b967576961a3d3c0fe4f33b00f4a9105eed76b0d
に修正をコミット/プッシュしました。
お気づきのことがありましたら、またお願いいたします。
奈良 裕記 さんが約5年前に更新
対応ありがとうございました。
今まで出来なかった設定が可能になる訳で、今まで出なかった不具合も出そうです。副作用が楽しみw。
自分は逆に、担当者選択のコードをユーザ選択のカスタムフィールドで呼び出せればと思っていました。
こちらだと、「自分」、ユーザとグループの区切り、も実現できますし。
プラグインと合わせるとwatcherのグループ設定と類似の動作が実現できますね。 #290 と関連
watcher多用現場には受け入れられそう。
この様な利用形態が一般化すると、次は
・ユーザ+グループ、ユーザのみ(従来通り)の選択(CF単位)
・グループの後にユーザ表示(数百人の場合)
なんて要望も出るんでしょう。
奈良 裕記 さんが約5年前に更新
本家チケット発掘
Select user-groups in custom fields of type "User"
http://www.redmine.org/issues/21026
vote-2件では埋もれるのはやむなし。
この機能はそれなりに役立つと思いますが、どうやってユーザ告知しましょうかね。。
Twitterで手法のアンケート取るとか。
高橋 直也 さんが4年以上前に更新
途中から失礼します。
いつもいろいろ参考にさせて頂いています。
https://redmine.tokyo/issues/911#note-3
上記にならって field_format.rb を私の環境(3.4.11)に適応したのですが、
チケット一覧画面(redmine/projects/<識別子>/issues)でユーザ形式のカスタムフィールドでフィルターしようとしても、
リストにグループが表示されません。ユーザのみ表示さえれます。
こちらでもグループを選べるようにするにはどうすればよろしいでしょうか。
ご教授いただければ助かります。
奈良 裕記 さんが4年以上前に更新
高橋さん
確認ですが、
・チケット編集画面上は、ユーザカスタムフィールドにてユーザ/グループが選択できる。
・チケット一覧のフィルタで、そのカスタムフィールド中のグループ定義が選択肢に表示されない。
ということですよね?
本機能(グループ定義選択)、必要でしたら、本家下記チケットに +1 お願いします。
http://www.redmine.org/issues/21026
上記チケットは +1 が現在4件ですが、
Redmine本家のvote count listにて、5件以上の場合はカテゴリ単位ではなく、上位リストに個別に含めますので。(4.1が出たら更新予定)
http://www.redmine.org/boards/1/topics/56452
高橋 直也 さんが4年以上前に更新
確認ですが、
・チケット編集画面上は、ユーザカスタムフィールドにてユーザ/グループが選択できる。
・チケット一覧のフィルタで、そのカスタムフィールド中のグループ定義が選択肢に表示されない。
ということですよね?
はい。認識あっています。
本機能(グループ定義選択)、必要でしたら、本家下記チケットに +1 お願いします。
http://www.redmine.org/issues/21026
+1させて頂きました
奈良 裕記 さんが4年以上前に更新
trunkですが、調査中
trunkに同様のパッチ当てる
で、グループ定義分の選択はOK
https://redmine.tokyo/issues/911#note-3
・チケット編集画面-グループ定義分の選択はOK
・チケット一覧で右ボタン設定-グループ定義分も選択OK
グループを選択した場合
・リストは空白になる。
・チケットの変更履歴では空白になる。
↑無効値扱いされている?
チケットフィルタ
・選択肢にはID分しか表示されない
奈良 裕記 さんが4年以上前に更新
trunkですが、フィルタ部分は下記で対応できました。
3.4でも多分同様に対処可能と思います。
副作用として、「匿名ユーザー」を選択不可になりますが、必要なら調整可能です。
lib/redmine/field_format.rb
class UserFormatのquery_filter_valuesにて、
query.author_values を query.assigned_to_values に変更するだけです。
class UserFormat < RecordList
add 'user'
self.form_partial = 'custom_fields/formats/user'
field_attributes :user_role
....
def query_filter_values(custom_field, query)
# query.author_values
query.assigned_to_values
end
end
class VersionFormat < RecordList
add 'version'
奈良 裕記 さんが4年以上前に更新
変更内容解説(原稿用w)
以下、
userCFはチケット上でユーザ/グループを割り当てるCF(フィルタ指定済)
GROUPは、選択対象のユーザグループ定義(PJに登録済)
とする。
標準のフィルタ選択肢の動作は下記の通り。
担当者欄のみ、グループ定義を選択可能である。
作成者 自分 有効 userリスト 匿名ユーザー userCF 自分 有効 userリスト 匿名ユーザー 担当者 自分 有効 userリスト GROUP
作成者欄とuserCF欄は、models/query.rbのauthor_values
担当者欄は、models/query.rbのassigned_values
が利用されている。
今回は、userCF欄のフィルタ選択肢(author_values)を、単純に担当者用の選択肢(assigned_to_values)に変更した。
assigned_to_valuesの処理で不都合がある場合は、別名で再定義し、その処理を呼び出せば良い。
models/query.rb
def author_values
author_values = []
author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
author_values += users.sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] }
author_values << [l(:label_user_anonymous), User.anonymous.id.to_s]
author_values
end
def assigned_to_values
assigned_to_values = []
assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
assigned_to_values += (Setting.issue_group_assignment? ? principals : users).sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] }
assigned_to_values
end
高橋 直也 さんが4年以上前に更新
https://redmine.tokyo/issues/911#note-12
上記について私の環境(3.4.11)でも試してみました。
期待通りグループの選択、フィルターを行うことが出来ました。
迅速な対応ありがとうございます。
解説までつけて頂きとても助かりました。