本件は全般的日本語フォーラムに投稿された「ユーザ画像の表示範囲」から派生したディスカッションです.
http://moodle.org/mod/forum/discuss.php?d=139243
2010/06/03にディスカッションを分割
すみません,この件を完全に忘れていました^^;;;
いま大雑把に対策の骨子ができましたので,方針のみを報告します.修正はuser/pix.phpのみで,修正は最小限に抑えようと思います.
if (count($args) == 2) {
$userid = (integer)$args[0];
// do not serve images of deleted users
if ($user = get_record('user', 'id', $userid, 'deleted', 0, 'picture', 1)) {
// (Shirai190): ユーザ画像の表示範囲を制限可能とする機能の追加 (2010/06/01)
// (Shirai190): ここから追加
if (fs_function_enable('FS_ENABLE_PRINTUSERPICTURELEVEL')) {
if (!fs_can_display_userpicture($user)) redirect($CFG->pixpath.'/u/f1.png');
}
// (Shirai190): ここまで追加
$image = $args[1];
$pathname = make_user_directory($userid, true) . "/$image";
if (file_exists($pathname) and !is_dir($pathname)) {
send_file($pathname, $image);
}
}
}
これはfs_moodleにおける修正方法です.fs_function_enable()という関数は,引数で指定された定数が定義されているか,定義されていた場合にそれが機能を有効とする値に設定されているか(このENABLE系のスイッチの場合はtrueが設定されている場合)かを調べています.つまりできるだけオリジナルのままに使いたい場合には影響を最小限に抑えるための仕組みです.
そのif文のブロックの中のfs_can_display_userpicture()関数(現在作成中)で,ユーザの画像を表示するか,それともデフォルトの黄色い顔アイコンを表示するかを分けています.表示しないのではなく,黄色い顔アイコンを表示してしまえばプライバシーは守られます.このfs_can_display_userpicture()関数がtrueを返す場合は学生のアイコンを表示し,falseの場合はデフォルトの顔アイコンを表示するようにURLをリダイレクトします.
ユーザのアイコン画像が発見されてしまった(というのも何ですが)場合のみ,この画像を表示してしまって良いかどうかを考えることにしています.
#仕様はさらに拡張されて,こちらのWikiにまとめたようになっています.