[Block: Quickmail]
http://moodle.org/mod/data/view.php?d=13&rid=92&filter=1
学生の数が多いと目的の学生を探すのがえらく大変ですね.
どうやら標準のソート方法は氏名のようですので,日本語名には不向きですね.当方のサイトはユーザ名が学籍番号なので,以下のようにすると綺麗に並びました.
blocks/quickmail/email.php
if (!$haspermission) {
error('Sorry, you do not have the correct permissions to use Quickmail.');
}// if (!$courseusers = get_users_by_capability($context, 'moodle/course:view', 'u.*', 'u.lastname, u.firstname', '', '', '', '', false)) {
if (!$courseusers = get_users_by_capability($context, 'moodle/course:view', 'u.*', 'u.username', '', '', '', '', false)) {
error('No course users found to email');
}if ($action == 'view') {
ユーザ名か,姓か,名か,ユーザIDか.並び順を選択できるようにするのも難しくは無さそうですね.作者のWen氏(でしたか?)もグループ機能に対応して下さいという要望に「時間ができたら」と言っています.期待しましょう.あるいは作ってしまうか,ですね.
Moodle2.0でメール関係はどうなるのか,Roadmapを見てみたのですが,message機能の強化が上がっているだけですね.Quickmailが組み込まれるという訳でも,eMail(http://docs.moodle.org/en/eMail)が組み込まれる訳でも無さそうですね.
このeMailプラグインですが,ちょっと時間があったのでドキュメントを読んでみました.割と高機能そうな感じです.基本的にはMoodle内でのメールシステムのようですが,設定次第では受信したMoodle内のメールを自分の携帯電話などへ転送することもできるのでしょうか.とりあえずメールが届いたことは通知されるような記述はあったのですけれども.
時間が取れたら試してみようと思いますが,既にお試し済みの方が居ましたら情報提供よろしくお願いします.
#メールリスト(一斉通知のリスト)を作れる機能があるようですが,いわゆるMLと同等かどうかが気になりますね.
Latest Blog entries
http://moodle.org/mod/data/view.php?d=13&rid=402&filter=1
ただ,オリジナルにはバグがあります.ディスカッションにも目を通して下さい.
(http://moodle.org/mod/forum/discuss.php?d=48994)
大幅に修正を行い,機能を追加したものを当方のサーバで公開しています.
(http://www.suzuka-ct.ac.jp/mech/moodle/mod/resource/view.php?id=331&subdir=/Modules and Plugins/block_updated_blogs and Plugins/block_updated_blogs
そのコースに属するメンバが更新したブログエントリを表示するブロックです.
MyNotes
http://moodle.org/mod/data/view.php?d=13&rid=726&filter=1
こちらもバグがあります.日本語が化けます.同じく以下のURLに修正版を公開しています.
http://www.suzuka-ct.ac.jp/mech/moodle/mod/resource/view.php?id=331&subdir=/Modules and Plugins/MyNotes
いわゆる”やることリスト”です.
http://moodle.org/mod/data/view.php?d=13&rid=2259
JavaScriptを駆使しているので携帯電話などでは苦しいかも知れませんが.
コース内に配置したブロックを介して,同じコースの学生同士がチャットを行うことが可能です.画面全体をリフレッシュしないでもブロック内が自動的にリフレッシュします.
発想は良いのですが,現状ではソースコードが酷い状態です.
まず最初に起動したときはワーニングが大量に発生します.ブロックをコースに設置したら速やかに「設定」を行って下さい.これで初期値が書き込まれてワーニングが1/3くらいに減ります.つぎは何でも良いですから,シャウトして下さい.とりあえず誰かが一言シャウトしないとワーニングが出続けます.
ところが日本語でシャウトしても表示されない.データベースを見てみてもデータが書き込まれていない.原因は分かりませんが,対策は分かりました.adddata.phpの頭のところに一行追加すると,とりあえず日本語でもシャウトが可能になります.
<?php
require_once('../../config.php');
global $CFG, $COURSE;
?>
<link href="<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/styles.css" rel="stylesheet" type="text/css" />
<script src='<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/script/xajaxex.js'></script>
<script src='<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/script/ajaxfunction.js'></script>
<?php
$data=$_GET['data'];
$data=mb_convert_encoding($data, 'utf-8', 'auto');
$block_id=$_GET['block_id'];
$result=str_split($data, $_GET['noofcharbreak']);
$val='';
赤い行を追加するだけです.何の文字コードか知りませんが,script/ajaxfunction.jsのfunction add_value()からadddata.phpに渡されるデータがUTF-8以外の文字コードに変換されています.もしかしたら,これは日本版IEのイタズラかも知れません.
adddata.phpの冒頭を以下のように改良すれば日本語対応OKですね.
<?php
require_once('../../config.php');
global $CFG, $COURSE;
?>
<link href="<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/styles.css" rel="stylesheet" type="text/css" />
<script src='<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/script/xajaxex.js'></script>
<script src='<?php echo $CFG->wwwroot; ?>/blocks/shoutbox/script/ajaxfunction.js'></script>
<?php
$data=$_GET['data'];
// ここから追加
$data=mb_convert_encoding($data, 'utf-8', 'auto');
function mb_str_split($str, $length = 1) {
if ($length <1) return FALSE;
$result = array();
for ($i = 0; $i <mb_strlen($str); $i += $length) {
$result[] = mb_substr($str, $i, $length);
}
return $result;
}
// ここまで追加
$block_id=$_GET['block_id'];
// ここから修正
// $result=str_split($data, $_GET['noofcharbreak']);
$result=mb_str_split($data, $_GET['noofcharbreak']);
// ここまで修正
$val='';
http://moodle.org/mod/data/view.php?d=13&rid=1021&filter=1
意外と良い感じです.Picasaを用いてWebページを作成し,それをHTMLページとしてコースにアップロードするよりも手が掛かりません.サムネイル表示からクリックで拡大表示可能ですが,Picasaで出力するHTML形式と異なり,元データのサイズが巨大でも画面からハミ出したりしません(テンプレートを手で修正すれば改善できますが).
最初,どうやってファイルをアップロードするのか,が分かりませんでしたが,コースファイルフォルダにフォルダを適当に作成してそれを選択するだけです.コメントも付けられます(ただし,各写真ごとではなくギャラリ単位です).
うん,かなり実用性が高いですね.言語パックの翻訳をお願いしたいのですが.> 吉田さん
#いまのところ日本語環境に固有の問題は発生していません.Windows環境では日本語ファイル名やフォルダは使えないと思いますが,必要があればfs_moodle用にfs化して公開します.
修正対象プログラム: mod/lightboxgallery/edit/tag/tag.class.php
修正箇所: 43行目
[ 修正前 ]
foreach ($tagrecords as $tagrecord) {
[ 修正後 ]
foreach ($tagrecords as $tagrecord) {
修正箇所: 60行目
[ 修正前 ]
$tag = htmlentities($tag);
[ 修正後 ]
$tag = htmlspecialchars($tag);
修正箇所: 75行目
[ 修正前 ]
$deleteform .= '<label><input type="checkbox" name="deletetags[]" value="' . $tagid . '" />' . htmlentities($tagname) . '</label><br />';
[ 修正後 ]
$deleteform .= '<label><input type="checkbox" name="deletetags[]" value="' . $tagid . '" />' . htmlspecialchars($tagname) . '</label><br />';
言語パックの修正,ありがとうございます.
お陰で細かなところまで調整しようという気力が出てきました.
タグの方に関してはまだチェックを行っていません.なお,試しにコメントを入れてみたのですが,画面拡大時にのみ表示されるのですね.せっかく,一つ一つの写真にコメントを入れられるのですから,このデータをサムネイル表示でも利用したいですね.ツールチップ表示か,あるいは写真の下に追加表示させることはそれほど難しくないと思いますので,時間ができたらトライしてみようと思います(勿論,先に完成した方がいましたら情報公開お願いします).
サムネイル画像の下に表示するファイル名に加えて,画像サイズなどの詳細データを表示するかどうか,というプルダウンメニューがあります.ここをチェック可能なプルダウンメニューに変更し,ファイル名,詳細情報,コメント,の表示をそれぞれOn/Offできると便利ですね.でも,そういう改造をすると,オリジナルのデータベースと格納するデータの値が変わってしまうので宜しくないですね.オリジナルの方で対応して貰うのがベター.
サムネイル一覧画面でファイル名の代わりにキャプション(説明)を表示するのは意外と簡単でした.
mod/lightboxgallery/view.phpの100行目あたりにあるforeach($images as $image)で一枚ずつサムネイルを表示するルーチン内で,
$imagelocal = $dataroot.'/'.$image;
// $imagelabel = lightboxgallery_resize_label($image);
if ($edittypes) {
$imageextra = '<form action="'.$CFG->wwwroot.'/mod/lightboxgallery/imageedit.php" method="get">'.
'<fieldset class="invisiblefieldset">'.
'<input type="hidden" name="id" value="'.$gallery->id.'" />'.
'<input type="hidden" name="image" value="'.$image.'" />'.
'<input type="hidden" name="page" value="'.$page.'" />'.
'<select name="tab" class="lightbox-edit-select" onchange="submit();">'.
'<option>' . get_string('choose') . '...</option>';
foreach ($edittypes as $editoption => $editdisplay) {
$imageextra .= '<option value="'.$editoption.'">'.$editdisplay.'</option>';
}
$imageextra .= '</select></fieldset></form>';
} else if ($gallery->extinfo) {
$iobj = lightboxgallery_image_info($imagelocal);
$imageextra = sprintf('<br />%s<br />%s, %dx%d', $iobj->modified, $iobj->filesize, $iobj->imagesize[0], $iobj->imagesize[1]);
}
$imagetitle = (isset($captions[$image]) ? $captions[$image] : $image);
$imagelabel = lightboxgallery_resize_label($imagetitle);
echo('<div class="thumb">
上の方にある元々の$imagelabelをコメントアウトする必要は特にありません.心配ならば残しておいても良いでしょう.最後から2行目の赤く追加した行を追加すればOK.ただ,lightboxgallery_resize_label()でキャプションの長さを適当な長さに省略するのですが,(珍しいことに)マルチバイト対応しています.その結果,マルチバイト文字列を途中でブツ切りにすることはないのですが,全角も半角も同じ1文字と数えるため,全角文字で説明を書くと少長くなってしまい,表のレイアウトが崩れます.気にしなければ気にならない範囲ですが.
少々乱暴ですが,マルチバイト文字ならば半角の倍の横場はである(とは限らないのですが.ラテン文字など)という仮定に基づいて文字列の長さを調整するようにlightboxgallery_resize_text()を改良してみました.
mod/lightboxgallery/lib.phpです.
function lightboxgallery_resize_text($text, $length) {
$textlib = textlib_get_instance();
// return ($textlib->strlen($text) > $length ? $textlib->substr($text, 0, $length) . '...' : $text);
$len = $textlib->strlen($text);
for ($pt = 0, $cnt = 0, $ret = ''; $cnt < $length; $pt++) {
$c = $textlib->substr($text, $pt, 1);
$ret .= $c;
if (strlen(bin2hex($c)) > 2) $cnt += 2; else $cnt++;
if ($pt + 1 >= $len) return $ret;
}
return $ret.'...';
}
割とキッチリと揃いました.レイアウトが大きく崩れることは無いですね.ファイル名のみのサムネイルと幅はほぼ同じです.
やっと時間ができましたので,タグの件,確かめてみました.
修正前は確かに文字化けしていた日本語のタグですが,修正を行うことで正しく表示されることを確認しました.完璧です!
でもタグによる検索がうまく機能しないようですね.これが日本語のせいかどうかは,また明日,試してみようと思います.
原因は直ぐに分かりました.
mod/lightboxgallery/search.phpの90行目のif文の一つ目の条件ですね.
$textlib = textlib_get_instance();
if (($textlib->strlen($search) > 2) && ($images = get_records_sql($sql))) {
$imagesdisplay = array();
今回は”準備”というタグを持つ写真を検索しました.赤い部分の戻り値を表示したところ,2でした.つまり条件を満たさない. > 2 を >= 2 に変更したら,正しく該当する写真のみを抽出できました(凄い!)ので,文字コードの問題ではありませんね.
ちなみに $search は検索するタグの名前です.今回は"準備”が格納されていることを確認済みです.検索用のSQLが LIKE による検索です.ですので検索タグがあまり短い(たとえば,'a')ではあまりにも多くの写真が該当してしまうから設けた(お節介な?)条件であると思われます.
この検索ですが,人気タグとして表示された中からの選択以外に,フリーキーワードでの検索も可能です.人気タグから選べば完全一致でいいはずですね.うーん,タグ一覧を表示して,その中からしか選ばせないというのも便利な気もするのですが.フリーキーワードにしても,文字数の制限を検索時に設けるのはあまり適切とは思えないですね.
#それとも私の見落としている,何か深遠な理由があるのでしょうか?
#でも,LightboxGalleryは便利ですね,これは.今のところ,とても満足しています.
次のように修正されてはいかがでしょうか。
修正対象プログラム: mod/lightboxgallery/search.php
修正箇所: 90行目
[ 修正前 ]
$textlib = textlib_get_instance();
if (($textlib->strlen($search) > 2) && ($images = get_records_sql($sql))) {
[ 修正後 ]
$textlib = textlib_get_instance();
if (($textlib->strlen(bin2hex($search)) / 2 > 2) && ($images = get_records_sql($sql))) {
参考資料:
[CPA-LABテクニカル - 日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP]
http://www.cpa-lab.com/tech/0144
Windows環境での日本語フォルダ名,ファイル名への対応(fs化)が,ほぼ終わりました.
日本語タグ問題(Linux,MacOS含む)とfs化をしたものを近日中に公開します.あと,検索キーワードの長さの制限も外してしまいましょうか.ああ,それと,説明をサムネイル表示時にファイル名の代わりに表示する(ポップアップ時の挙動と同じ)にする改良も行いたいですね.もう少し掛かります.
なお,その過程で気付いたのですが,反転操作の際に上下,左右(Vertical,Horizontal)の指示の文字列がget_string()を使っていませんね.読めますけれども.言語パックに追加してしまいます? > 吉田さん
#ちなみに,直訳すると垂直/水平ですが,日常的には上下/左右の方が馴染み深い気がします.どうでしょう?
白井先生および吉田さんのご尽力に感謝いたします。説明文をファイル名に代えて表示できるパッチも利用させていただいております。(ファイル名か説明文か選択式にするにはインタフェイスが必要なんですよね?)
ところで、このモジュールのRSSフィードがうまく吐かれずエラーになってしまうのですが、みなさんのところでは問題ないでしょうか。
サーバ全体およびモジュール、およびリソース全てでRSSフィードを有効にし、ページにはちゃんとアイコンが表示されていますが、それをクリックするとエラーになります。(IE8で確認)
フォーラムやデータベースモジュールでのRSSフィードは問題なく利用できています。
(以下スレッド分けた方がよろしいでしょうか...)
とりえず現状,当方のサイトでRSSエラーが発生する理由は,moodledata/rss/lightboxgallery/1.xmlというファイル(それ以前にlightboxgalleryというフォルダ)が存在しないせいです.まだadmin/cron.phpにより作成されていないようです.明日まで待って作成されないならば問題ですね.
kagoya先生のところでもこのフォルダは存在しませんか?
あー,エラー出ていますね.
admin/cron.phpを手動で動かすと分かります.
Fatal error: Call to undefined function lightboxgallery_directory_images()
とのことです.ちょっと外出しますので,戻ったら見てみましょう.確かに,rsslibphp(lightboxgallery)の頭で使われていますね.lib.phpに無いのかな.あれ?ありますね.typoでも無いようですし.むむ?
原因がハッキリするまでは,RSSを無効にしておかないと,admin/cron.phpが最後まで動かない可能性があります.
mod/lightboxgallery/rsslib.phpの冒頭,
<?php
// require_once('lib.php');
require_once($CFG->dirroot.'/mod/lightboxgallery/lib.php');
lib.phpの読み込みを相対パスから絶対パスに変更することでエラーが出ることなくadmin/cron.phpは最後まで動きました.lightboxgalleryのrsslib.phpもlib.phpも同じフォルダに存在するので,相対パスで構わないかと思ったのですが,そういう訳では無いのでしょうか.
なお,admin/cron.phpが成功した後は,RSSエラーは発生しないで,きちんと”ファイル名”のリストがズラリと表示されました.お試し下さい.
ポイントは,require()されたPHPファイルから別のPHPファイルを相対パスでrequire()する際に,どこから探索されるか,ですね(参考).詳しくは参考のページをご覧下さい.こういうメカニズムだとは知りませんでした.気を付けないと危険ですね.Moodleのソースではrequire_once()で読み込むファイルは$CFG->dirrootか$CFG->libdirを基準とする絶対パスで記述されています.納得しました.
admin/cron.phpから呼ばれるmod/lightboxgallery/rsslib.phpの冒頭で用いられるrequire_once('lib.php');はmod/lightboxgallery/lib.phpではなく,search/lib.phpを読み込んでいます.
何故か.パスが指定されなかった場合,require_once()はphp.iniかini_set()で指定されたinclude_pathからファイル(この場合はlib.php)を探します.試しにvar_dump(ini_get('include_pat'));で調べると,
string(202) "C:\xampplite\htdocs\mech\moodle\search;C:\xampplite\htdocs\mech\moodle\search;C:\xampplite\htdocs\mech\moodle\search;C:\xampplite\htdocs\mech\moodle/lib/pear;.;C:\xampplite\php\pear;\xampplite\php\pear\"
となっていました.searchが三連続...随分と念入りなものですね.
調べてみると,searchフォルダ内のadd.php, delete.php, indexer.php, indexersplash.php, update.php, tests/index.php, tests/index.phpでini_set('include_path',$CFG->dirroot.DIRECTORY_SEPARATOR.'search'.PATH_SEPARATOR.ini_get('include_path'));やset_include_path(get_include_path().":../");のようにinclude_pathを操作しています.
include_pathを操作することが悪い訳ではありません.不用意に「ファイル名のみを指定すれば同じフォルダにあるファイルをrequire_once()してくれるだろう」と考えている点に問題があるのでしょう(私もそう考えていました).したがって本件に関しては,先に示した$CFG->dirrootを使った絶対パス指定が正しい,ということで良いでしょう.
この異常現象は環境に依存します.グローバルサーチを有効にしている場合にのみ発生します.
Using moodleにもRSSが正常に機能しないという投稿がありました(http://moodle.org/mod/forum/discuss.php?d=83599&parent=482897).しかし無視されています.多分,報告者以外の環境ではこの問題が発生しなかった(=グローバルサーチを有効にしていない)のでしょう.気の毒に.
先の投稿にも書きましたように,PHPの設定,include_pathはsearch(グローバルサーチ)中のコードによって修正されています.これを以下のようにini_restore('include_path');で元に(つまりphp.iniで指定されている状態)戻してあげると,require_once('lib.php');でも正しくmod/lightboxgallery/lib.phpが読み込まれているようです.このini_restore()されたinclude_pathの設定値をini_get('include_path');で調べてみると,当方の環境では以下のようになっていました.
".;C:\xampplite\php\pear;\xampplite\php\pear\"
一番頭のところに注目.カレントフォルダ(.)を含めていますね.search以下のファイルによって書き換えられたinclude_pathにはこのカレントフォルダを参照する設定が消されています.
グローバルサーチでinclude_pathを書き換えたり,それを元に戻していないのがいけない,という訳ではなく,依然としてrequire_once('lib.php');というコードを使っているlightboxgalleryがいけない点に変わりはありません.
fs_moodle専用のLightboxGalleryを以下のURLで公開します(すっかり忘れていました).
fs_moodle以外のMoodleへインストールしても動作しません.
http://www.suzuka-ct.ac.jp/mech/moodle/mod/resource/view.php?id=331&subdir=/Modules and Plugins/LightboxGallery and Plugins/LightboxGallery
なお,当方でLightboxGalleryに対して行った修正および拡張は以下のWikiにまとめてあります.
http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=Lightboxgallery%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
fs化以外の修正箇所の3件(3rdParty017, 018, 019)です.