ユーザリストの表示(すべてのフィルタを削除して追加)

ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿
返信数: 21

 Moodle1.9から追加されたユーザリスト一覧での検索がフィルタによる絞込みになったことで,高度な絞込みが出来るようになった(条件はandのみですが)反面,「面倒くさい」と感じるようになった方は多いと思います..

 操作性のネックは一人のユーザを検索し終えた後に,「すべてのフィルタを削除」してから新しいフィルタを追加して次のユーザを検索し直さなくてはいけないこと.

 拡張要素を表示した場合への対応を忘れていたのでまだ不完全ですが,30分ほどで改善ができました.貼付した図のように,「フィルタを追加する」ボタンの横にチェックボックスを追加します.そしてチェックボックスをチェックした状態でフィルタを追加すると,まず現在存在するアクティブなフィルタを全て消去し,いま入力したフィルタを追加します.チェックしなければ今までと同じでアクティブなフィルタが追加されていきます.

#拡張要素にも対応できたら修正点を公開します.現状,かなり少ない修正で済みそうです.

添付 removeall_and_addfilter.jpg
Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

修正箇所は2箇所です.

(a) user/filters/lib.php

class user_filtering, function user_filtering()

        foreach ($fieldnames as $fieldname=>$advanced) {
            if ($field = $this->get_field($fieldname, $advanced)) {
                $this->_fields[$fieldname] = $field;
            }
        }

        // fist the new filter form
        $this->_addform = new user_add_filter_form($baseurl, array('fields'=>$this->_fields, 'extraparams'=>$extraparams));
        if ($adddata = $this->_addform->get_data(false)) {
// (Shirai131): ユーザ一覧表示におけるフィルタの追加時にアクティブなフィルタをすべて削除してから追加するチェックボックスを追加する改良 (2009/04/23)
// (Shirai131): ここから追加
            if (!empty($adddata->removealladd) && ($adddata->removealladd)) $SESSION->user_filtering = array();
// (Shirai131): ここまで追加
            foreach($this->_fields as $fname=>$field) {
                $data = $field->check_data($adddata);
                if ($data === false) {
                    continue; // nothing new
                }
                if (!array_key_exists($fname, $SESSION->user_filtering)) {
                    $SESSION->user_filtering[$fname] = array();
                }
                $SESSION->user_filtering[$fname][] = $data;
            }

(b) user/filters/user_filter_forms.php

class user_add_filter_form, function definition()

    function definition() {
        $mform       =& $this->_form;
        $fields      = $this->_customdata['fields'];
        $extraparams = $this->_customdata['extraparams'];

        $mform->addElement('header', 'newfilter', get_string('newfilter','filters'));

        foreach($fields as $ft) {
            $ft->setupForm($mform);
        }

        // in case we wasnt to track some page params
        if ($extraparams) {
            foreach ($extraparams as $key=>$value) {
                $mform->addElement('hidden', $key, $value);
            }
        }

        // Add button
// (Shirai131): ユーザ一覧表示におけるフィルタの追加時にアクティブなフィルタをすべて削除してから追加するチェックボックスを追加する改良 (2009/04/23)
// (Shirai131): ここからコメントアウト
//
      $mform->addElement('submit', 'addfilter', get_string('addfilter','filters'));
// (Shirai131): ここから追加
        $objs = array();
        $objs[] = &$mform->createElement('submit', 'addfilter', get_string('addfilter', 'filters'));
        $objs[] = &$mform->createElement('checkbox', 'removealladd', null, 'すべてのフィルタを削除して追加');
        $mform->addElement('group', 'addfiltergrp', '', $objs, ' ', false);
        $mform->setDefault('removealladd', '0');
// (Shirai131): ここまで追加

        // Don't use last advanced state
        $mform->setShowAdvanced(false);
    }
}


 

最大評点: お役立ち度: ★★★★★★★ (1)
Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

ちなみに,一番最後にある,

        $mform->setDefault('removealladd', '0');

        $mform->setDefault('removealladd', '1');

に変更すれば,デフォルトでチェックボックスがONになります.

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- hirosi maeda の投稿

これは実にすばらしい改善ですね~。

感謝感謝です!

白井さん 参考にさせていただきます!

ちなみに、当修正に30分ということですが、私だったらその10倍ぐらいかかっていたかと思います。

そこでお聞きしたいのですが、迅速にソースを修正するコツとかってなにかあるんですか?

hirosi maeda への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

 今回のような$_POSTでデータを受け渡ししているような動作の場合には,Firefoxに追加したPlug-in,Firebugが効果を発揮しました.

 あとは自由にいつでも止められる実験用のMoodle環境の有無と,ソースをいままでいどれくらい追い掛けたか,ですね.fs_moodleでは日本語Widows対応や日本語IE対応を除く汎用的なデバッグ,機能改善,機能拡張だけで131項目あります.それらオリジナルに対する修正箇所はすべてMoodle上のWikiにまとめてあります.これらの資産(経験)が役に立っています(近頃,物覚えが悪いので).

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

少し時間が取れましたので,Trackerに提案しました(MDL-19277).

最大評点: お役立ち度: ★★★★★★★ (1)
Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> 少し時間が取れましたので,Trackerに提案しました(MDL-19277).

Voteさせて頂きました。笑顔
Mitsuhiro Yoshida への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

 ちなみに間違えて,Moodle1.8にアクセスしてしまい(メンテナンスのために別に残してあります),ユーザリストの一覧を表示してしまったのですが...とても素朴なインタフェースですね.ゴチャゴチャして使いにくいなぁと思っていたMoodle1.9のインタフェースに知らず知らずのうちに慣れてしまっていたようです.
 自分で言うのも何ですが,とても便利な改良です.本家で採用されると嬉しいですね.修正点も非常に少ないですし.

#あの文章ではメリットが通じない,と思われたら遠慮なくコメントして下さい > 吉田さん

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

 やはり私の英語力不足でメリットが通じませんでしたが,コメントを返したことでなんとか理解していただけたようですが...(MDL-19277) 困りました.Anthonyさんのニュアンスが微妙すぎて私の英語力と私の翻訳ソフトはお手上げになってしまいました^^; 吉田さん,ヘルプ!

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Haruhiko Okumura の投稿
私も単純な Search ボタンがあって,その次に今の Add filter ボタンがあれば,通常は Search だけすればいいので楽だと思います。彼もそういうことを言っているのではないかと思いました。
Haruhiko Okumura への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

 コメントありがとうございます^^;;;

 当初はMoodle1.9のAdd filterの操作は「鬱陶しい...」と思っていたのですが,慣れてくると絞り込んでいく検索スタイルはそれほど悪くないと思いはじめました.コメントにも書いたのですが,非常に大人数のユーザを抱えるサイトでは便利なのじゃないのかなぁと.ですので「ここから仕切りなおし」という意味合いのチェックボックスを追加した改良だけで,全く使い勝手が変わりました.Anthonyさんもちょっと試して頂けると分かると思うのですけれど.

#多分,「鬱陶しい...」(Moodle1.8の方がイイ)と思ったのは私だけでは無かったのでしょうね.

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
白井先生

白井先生のご提案では、'Add filter after removing all' チェックボックスをチェックすることで、既存のフィルタを簡単に削除できるようにされているようですが、Anthony Borrowさんの提案では、ユーザビリティの観点から、デフォルトではフィルタを保存せず検索するのみで、'Add filter' ボタンをクリックした場合のみフィルタを保存してはどうですかということだと思います。

[A function to add a new active filter to after deleting all active filters]
http://tracker.moodle.org/browse/MDL-19277

> Do you think you might be able to work on a patch to implement the behavior I suggested?

Anthony Borrowさんが「Bulk user actionsのFilterの部分を開発して頂けませんか? 」と白井先生に依頼されてますね。素晴らしいです!!

# Anthony Borrowさんの提案ですが、恐らく、この投稿の添付画像のような形になるかと思います。笑顔

添付 filter.png
Mitsuhiro Yoshida への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

> Anthony Borrowさんが「Bulk user actionsのFilterの部分を開発して頂けませんか? 」と白井先生に依頼されてますね。

やはり読み間違いでは無かったのですか...

でも,私個人はいまの「仕切り直しチェックボックス」で十分便利なのですけれども^^;

Tatsuya Shirai への返信

Re: ユーザリストの表示(すべてのフィルタを削除して追加)

- Tatsuya Shirai の投稿

 前にTrackerで「リソースの保存」「保存して表示」のボタンに関して議論があったときに,チェックボックス式を提案したのですがmartinさんはあまりお気に召さなかった.私はチェックボックスが大好きなのですが,もしかしたら欧米の方はあまり好きではないのかな?(文化の違いは確実に存在しますからね.罫線の表が好きな日本人とか).それも含めて帰路の車中で本機能について考えていたら,なるほど,単純なサーチとフィルタの追加を分けるアイデアはとても使い易そうです.それに加えて気の短い人向けの”フィルタを削除してから追加”ボタンも組み合わせると私にとっても都合が良い.

 たとえば添付した図のように.

 単発の検索を繰り返すのであれば,単にサーチは便利だと思うのですが,絞り込みを行っていく場合は,既に追加してあるActiveFilterに加えて,いま設定した単発のサーチ条件で検索を行います.そして”いま試した条件”が悪くない(パーフェクトではないが絞り込みに役立った)ならば,じゃぁ追加しよう,と考えますよね.ところがフィルタを追加していなかった場合は先ほど入力した条件は消えてしまう(それが正しい動作ですよね).もう一度,思い出してフィルタを追加するか? これは二度手間ですね.

 サーチを行った結果が画面にいまの検索条件を仮のActiveFilterとして画面に残しておいて,「これ,追加する?」と聞いてくれるととても助かる気がします.単発のサーチのつもりだった場合でも気が変わって追加したくなるかも知れません.


 これとは逆の発想で,いまの強制的にフィルタが追加されていくやり方も悪くは無い.ただ一工夫あると使い勝手が大きく変わる.要するに「選択したアクティブフィルタを削除する」機能しかないボタンがいけないだけで,「Add filter after removing all」という私の考え方とは別に,

 「Search」「Add filter」
 [ ] After removeing all filters
  [ ] After removing selected filters

というインタフェースにして,上の検索条件を入力した後に,

  1. 選択した条件のみで検索する(「Search」+[ ] After removing all filters)
  2. 選択した条件と追加されているフィルタで検索する(「Search」のみ)
  3. 選択した条件と追加されているフィルタのうちチェックされていないフィルタで検索する(「Search」+[ ] After removing selected filters)
  4. 以上1~3だが現在の検索条件をフィルタに追加する(「Search」→「Add filter」)

という6つの動作を選択できるインタフェースも考えられる.


 直前に検索を行った検索条件を記憶しておいて「Add filter?」を独立したインタフェースにする方法(JavaScriptを使って画面書き換えを行わないように追加する)ですと,上記の1から3の動作のみで良く,もっともストレスが少ないと思う.


というところまでは考えました.Anthonyさんの考えと一致するかどうか.まずは一番単純なパターンと,最後のもっと大きく変化したパターンの二つを試作してみましょう.

添付 ActiveFilterPlanA.jpg
Tatsuya Shirai への返信

新しい検索インタフェース

- Tatsuya Shirai の投稿

 実装も含めて案が完成しました.

 「検索」と「フィルタの追加」といった機能優先ではなく,ユーザが何を行いたいのかを主眼に試行錯誤を重ねた結果,

 「検索」「絞込検索」「新規検索」

というインタフェースになりました.ちなみに「すべてのフィルタを削除する」は不要です.

 ポイントは,「検索」に使用したフィルタの条件を強制的にアクティブフィルタに追加するのではなく,「最新のフィルタ」という別の変数にバッファするように仕様を改良したことです.現在はアクティブフィルタにしたがってSQL文を作成(全てAND条件)していますが,これを「最新のフィルタ」(1件)+「アクティブフィルタ」(複数件)にしたがってSQL文を作成します.

 「検索」ではアクティブフィルタに追加されませんが,「絞込検索」では現在の「最新のフィルタ」を「アクティブフィルタ」に追加してから入力された条件で検索を行います.「新規検索」では,まず最初に全てのアクティブフィルタを削除して,それから現在入力された条件で検索を行います.
(「検索」「絞込検索」「新規検索」が終わるたびに現在のフィルタで「最新のフィルタ」を更新します)

 複数件存在するアクティブフィルタでは条件が厳しすぎるな,と思うこともあるでしょう.そこで現在の「選択したものを削除する」は残します.

 解説ドキュメントを添付しようとしましたが,最大サイズをこえました.
 こちらからダウンロードできます.代わりに最終案の画面イメージを添付します.

#色々と試行錯誤を重ねましたが,できあがってしまうと意外とあっさりとしたものになって少し寂しいですね...

添付 NewInterfaceOfBrowseUserList.jpg
Tatsuya Shirai への返信

Re: 新しい検索インタフェース

- Tatsuya Shirai の投稿

Trackerに報告するとして,用語について相談があります.

検索: Search
絞込検索: Refinement
新規検索: Newly

最新のフィルタ: Latest filter

と訳しました.Search以外は全くもって自信がありません.
なお,絞込検索と新規検索をRefinement serch,Newly searchのように長くするとレイアウトが悪くなりますのでSearchは省略しました.日本語だと短くて良いのですけれども.

#ちなみに,オリジナルですと,全く同じフィルタをいくらでもアクティブフィルタに追加できてしまうバグもありましたので,それも併せて訂正しました^^).

Tatsuya Shirai への返信

Re: 新しい検索インタフェース

- S. Yamane の投稿
実際の画面を見ずに考えました。

絞込検索: 「検索条件を追加」という命令形のニュアンスで、「Add Criteria」「Add Words」
新規検索: 「検索条件をクリア」という意味で「Clear」「Clear Searches」
最新のフィルタ:「Last Login」と同じ語感で短く「Last Search」、あるいは「保存された検索条件」という意味合いで「Saved Search」

どうかな?
S. Yamane への返信

Re: 新しい検索インタフェース

- Tatsuya Shirai の投稿

コメントありがとうございます.

画面を見ないと難しいですよね...場所が場所なだけにデモコースのようなものが用意できません....

実際の動作は,「検索」も「絞込検索」も「新規検索」も検索動作を行います.

絞込検索は「よし,ここまではよし.この条件はmustとして,さらに検索しよう」,
新規検索は「(保存された)アクティブフィルタも最新のフィルタも関係なく,新たに検索!」

という感じです.

 どうしても現在の”アクティブフィルタが勝手に追加されて増殖していく!”に対する嫌悪感が先に立ちますよね.今回の改善を試みて,本当に今までのインタフェースが不自由だったことに気付きました.ですのでそこから頭を切り離すのが大変でした.小さなことに見えるかも知れませんが,「すべてのフィルタを削除する」ボタンを取り去るのには思い切りが必要でした.無くなったらとても気持ちがスッキリ.

 文字数のことを考えないで,山根さんのご意見を反映させると,

「検索」「絞込検索」「新規検索」はそれぞれ,
「Search」「Add filter and then Search」「Clear filters and then Search」
という感じでしょうか.三つとも「検索を行う」という点では同列なので,一列に収めたいのですよね...

 いまから考えると,山根さんの仰るとおり,Latest filterよりもLast filterの方が良かったですね.短いですし.

あ,パッチを付けておきます.現時点の最新のMoodle1.9.5+との差分で,修正箇所は三箇所です.

user/filters/lib.php, user/filter/user_filter_forms.php, lang/en_utf8/filters.phpです.
日本語モードで使うには,moodledata/lang/ja_utf8/filters.phpに単語の追加が必要です.英語版の言語ファイル(filters.php)を参考にして,追加して下さい.たとえば,

$string['searchuser'] = '検索';
$string['searchadd'] = '絞込検索';
$string['searchremoveall'] = '新規検索';
$string['displaylatestfilter'] = '<center>最新のフィルタ:&nbsp;&nbsp;<b> $a </b></center>';

のように.いやしかし,<center>とか<b>はマズいですかね.CSSを追加する元気は無かったので...

Tatsuya Shirai への返信

Re: 新しい検索インタフェース

- Tatsuya Shirai の投稿

 とりあえずパッチとスクリーンショットをTrackerに投稿しました.

 「検索」「絞込検索」「新規検索」は兄弟だから同等に扱って下さいね,とお願いしました.

 さて,どうでしょうね.


 ちなみに技術的な話ですが,「最新のフィルタ」は頑張れば過去10回分とかバッファに格納することができます.検索条件の履歴ですね.一瞬,チェックボックスを付けて「選択した履歴をアクティブフィルタに追加」といった考えも頭を過ぎったのですが,これは悪い癖ですね.過去1回分のみを保存し,新しく検索を行ったら上書きされるようにしました.こういう割り切りを行った方が使い勝手は良いですね.MS-OfficeのOfficeクリップボードの機能も(便利な場面はあるのでしょうが)ほとんど使いませんし,クリップボードの領域が一杯になったので削除して良いか?と聞かれるのも邪魔でしたし.


 さて,なんとかお役目終了ですね.昨日の夕方からスタートして21時でプロトタイプ完成,本日の朝から昼で改良版,ドキュメントを書いたりコードを整理したりしていたらあまり本業ができませんでした...
 iPod touch向けの添付ファイルのダウンロードの件も実験結果を報告したあと,特に反応もありませんし(お忙しいのでしょう,かなり),これもそう直ぐには反応が無いと思いますので.

Tatsuya Shirai への返信

Re: 新しい検索インタフェース

- Tatsuya Shirai の投稿

 日曜日に,自宅でボーッと考え事をしていたらハッと気付きました.いまのコードでは不完全です.

 ”最新のフィルタ”を私は1つ,そして将来の拡張に複数,と考えていましたが違います.現状でも複数必要です.「拡張要素を表示する」で全プロファイルフィールドの条件を表示した状態で,複数の条件を設定できます!(ただし,一つのフィールド名に対する条件は一つのみという点ではアクティブフィルタとは異なります).

 いまこの問題に対する改善を行っています.ほぼ完成しましたが,もう少し細部の見直しが必要です.完成したら改めてバッチを投稿します.いま投稿済みのパッチですと,複数の条件を設定して「検索」を行っても,その内の一つしか使用されません.

Tatsuya Shirai への返信

Re: 新しい検索インタフェース

- Tatsuya Shirai の投稿

新しいバージョンが完成しました.

今度は言語ファイルに<b> も<center>もありません^^;.

$string['searchuser'] = '検索';
$string['searchadd'] = '絞込検索';
$string['searchremoveall'] = '新規検索';
$string['latestfilter'] = '最新のフィルタ';

をlang/ja_utf8/filters.phpに追加して下さい.
($string['displaylatestfilter']は廃止)