やったこと
Redmineの個人設定ページに、有効・無効を選択するリストを設置して、この内容によって、Viewcustomizeの処理を分岐する様にしました。
背景
Viewcustomizeで色々とユーザーの要望に答えて盛り込むのですが、使い方が人それぞれで、賛否両論というか、一部の人から『やめてくれ』ってクレームが出てきて、毎回凹んでいました。
ユーザー毎に有効・無効を切り換え出来たらと思い、検討しました。
下記は、ViewCustomizePluginのVer1.2.0からViewCustomize.contextが追加されて、ユーザー情報が参照出来る様になったので、取り消しました。
(余計な処理(※1)が入るので、クレームが来たものだけにしています。)
※1:個人設定ページを取得する時間が増えてしまいます。
(Ajaxの非同期通信なので、体感的には増えた感じはしないかもしれませんが…)
やり方
ユーザーのカスタムフィールドを追加
『管理』>『カスタムフィールド』>『新しいカスタムフィールド』>『真偽値』でユーザーのカスタムフィールドを追加します。
・デフォルト値:はい 又は いいえ
・表示:ドロップダウンリスト
・編集可能:☑
Viewcustomizeで分岐を追加
ViewCustomize.contextからユーザーのカスタムフィールドを参照して、
選択内容によって、処理を分岐します。(ログを置いたところ)
ViewCustomizePlugin Ver1.2.0以上の場合
$(function()
{
if (ViewCustomize.context.user.customFields[0].value == "1")
{
console.log("はい が選択されている");
}
else
{
console.log("いいえ が選択されている");
}
});
ViewCustomizePlugin Ver1.2.0未満の場合
個人設定ページを取得して、そこにあるカスタムフィールドの選択内容によって、処理を分岐します。(ログを置いたところ)
Redmine Ver3.3.3, Ver3.4.3
$(function()
{
$.get('/my/account')
.then(
/* 個人設定ページからカスタムフィールドの選択内容を取得 */
(html) => {
return $('select#user_custom_field_values_26 > option[selected="selected"]', $(html)).val();
}
)
.then(
(selected_value) => {
/* オプション有効の場合 */
if (selected_value == "1")
{
console.log("はい が選択されている");
}
else
{
console.log("いいえ が選択されている");
}
}
);
});
又は、こちら。 (Redmine Ver3.3.2)
$(function()
{
$.get('http://localhost/redmine/my/account',function(data)
{
var selected_value = $('select#user_custom_field_values_26 > option[selected="selected"]', $(data)).val();
if (selected_value == "1")
{
console.log("はい が選択されている");
}
else
{
console.log("いいえ が選択されている");
}
},"html");
});