* Moodle [#h51db5d0] ** Moodleとは [#pa8963dd] [[CompEdu:e-Learning]] の Moodle の項に移動。 以下はMoodle 1.5の時代の情報。 今は [[Moodle 1.6]] または [[Moodle 1.9]] 以降をお薦めする。 ** インストール [#z3040e9c] [2006-05-19] 三重大学版Moodleが [[ここ:http://portal.mie-u.ac.jp/src/]] でダウンロードできるようになった。 三重大学版Moodleが [[ここ:http://oku.edu.mie-u.ac.jp/miemoodle/]] でダウンロードできるようになった。 EUC-JPからUTF-8への変換については [[Moodle/UTF-8]] に書いた。 もうすぐMoode 1.6が出る。 これはUTF-8がデフォルト。 ただしMySQL 4.1.16以降を要する。 以下は若干古いもの。 ----- 熊本大の喜多先生のrpmが http://t-kita.net/rpm/moodle/ にある。 これを使えば以下のようなややこしいことは不要。 FreeBSDでのインストールについては辰己先生のブログの [[Moodle on FreeBSD-5.4:http://ttmtko.air-nifty.com/a/2006/02/moodle_on_freeb.html]] 参照。 -[[現在までの三重大学版パッチ:http://oku.edu.mie-u.ac.jp/~okumura/moodle.diff.txt]] (2005-10-08版Moodle 1.5.2+と最新の日本語言語パックに対するパッチ) (上記喜多先生のパッチを含む) (admin/user.phpとauth/ldap/lib.phpへのパッチはあまりにも三重大固有なので省いた) (lang/jaもかなり三重大固有なので要注意) [[PHP]] と,[[MySQL]] または [[PostgreSQL]] が必要。 うちは [[Apache 2]] + PHP5 の環境で PostgreSQL と MySQL を両方試している。 開発者のほとんどはMySQLらしい。 PostgreSQLでも見掛け上支障なく動いているが,バックエンドでエラーがたくさん出た(今はどうかわからない)。 httpd.conf には AcceptPathInfo on を入れる。 php.ini は次のようにする。 magic_quotes_gpc = 1 (推奨??) magic_quotes_runtime = 0 (必ず) file_uploads = 1 session.auto_start = 0 session.bug_compat_warn = 0 ただし magic_quotes_gpc を on にすると [[TeXWiki:TeXをWebで]] で支障が出るので off にしておくのがよさそう。 そうでなくても magic_quotes に頼るのは良くない。 [[PostgreSQL]] を使う場合,特に tcpip_socket = true を忘れないように。 設定例: su - postgres psql -c "create user moodleuser createdb with password 'hoge';" template1 psql -c "create database moodle;" -U moodleuser template1 psql -c "alter user moodleuser nocreatedb;" template1 [[MySQL]] の場合(こちらを推奨。Moodle 1.6以降ではMySQL 4.1.16以上が必須,ただし4.1.21はバグのため使わないほうがいい(→ http://moodle.org/mod/forum/discuss.php?d=51881)。 mysql -u root -p create database moodle; grant select,insert,update,delete,create,drop,index,alter on moodle.* to moodleuser@localhost identified by 'hoge'; quit 以上で,moodleuser,hoge,moodle は自由に変えてよい。 MySQL でDBホストが別の場合は moodleuser@localhost を moodleuser@'oku.edu.mie-u.ac.jp' のようにする。 ただし /etc/hosts にFQDNでないほうが先に書いてある場合は @ 以下をそれに合わせる。 データ用ディレクトリを htdocs の外に設定,www だけが書き込めるようにする。 アップロードされたバイナリ類はここに入る。 データベースにはテキスト情報だけ入る(BLOBは使わない)。 Moodle をダウンロードして htdocs 以下に展開。 http://サーバ名/moodle/install.php をアクセスする。 質問に答えていけば設定ファイル config.php が作られる(後で手で修正も可)。 このため,moodle ディレクトリは最初は www に書き込めるようにしておく(後で直す)。 質問は「続く」でたくさんのページがあるが必ず最後まで答える。 質問中でURLが http://.../moodle のようになるが最後に / を補わないこと。 細かいところは後で直せるが,言語は japanese (ja),localeは ja_JP.eucjp,timezoneは GMT+9,fullnamedisplayは姓+名,extendedusernamecharsはYesでいいだろう。 あとは http://サーバ名/moodle/ をアクセスするだけ。 動作確認したら cron を設定する。 まず http://サーバ名/moodle/admin/cron.php をブラウザで見てうまく働くことを確認。 よければ一般ユーザでいいから crontab -e で次のように設定。 */5 * * * * wget -q -O /dev/null http://サーバ名/moodle/admin/cron.php ** 更新 [#gc37fbf3] 次のようにして更新。 cd /usr/local/apache2/htdocs mv moodle moodle-bak tar xvzf moodle-latest-XXX.tgz cp -a moodle-bak/config.php moodle/ config.php をコピーしたときのパーミッションに注意。 こうしてすぐにブラウザで http://サーバ名/admin/ にアクセスし,エラーがないことを確認しながら「続ける」をクリックしていくと設定が完了する。 ** バックアップとリストア [#h22a338d] PostgreSQL のバックアップ pg_dump moodle >moodle.out PostgreSQL のリストア psql moodle <moodle.out データ用ディレクトリは別途バックアップ・リストアする。 MySQL のバックアップ(1.6以降では文字セットのオプションは不要のはず): mysqldump --opt -u root -p --default-character-set=latin1 moodle >moodle.out MySQL のリストアはあらかじめ上のようにしてデータベース moodle を作って grant もしてから mysql moodle <moodle.out すればいいのだろう。 ** 日本語の文字化け対応 [#e665c9be] Moodle から自動で出されるメールが生 EUC-JP または生 UTF-8 の Quoted-Printable になり,学生のメーラで化ける。 [[http://moodle.org/mod/forum/discuss.php?d=11711]] に対策が。 私はとりあえず moodle/lib/moodlelib.php の if ($attachment && $attachname) { ... } の前後を次のように改変。 if ($attachment && $attachname) { 中略 } // 日本語化 $tmp = mb_convert_encoding($mail->FromName, 'ISO-2022-JP'); $mail->FromName = '=?ISO-2022-JP?B?' . base64_encode($tmp) . '?='; $tmp = mb_convert_encoding($mail->Subject, 'ISO-2022-JP'); $mail->Subject = '=?ISO-2022-JP?B?' . base64_encode($tmp) . '?='; $mail->Body = mb_convert_encoding($mail->Body, 'ISO-2022-JP'); $mail->AltBody = mb_convert_encoding($mail->AltBody, 'ISO-2022-JP'); $mail->CharSet = 'ISO-2022-JP'; $mail->Encoding = '7bit'; foreach ($mail->to as $i => $a) { $tmp = mb_convert_encoding($a[1], 'ISO-2022-JP'); $mail->to[$i][1] = '=?ISO-2022-JP?B?' . base64_encode($tmp) . '?='; } foreach ($mail->cc as $i => $a) { $tmp = mb_convert_encoding($a[1], 'ISO-2022-JP'); $mail->cc[$i][1] = '=?ISO-2022-JP?B?' . base64_encode($tmp) . '?='; } foreach ($mail->bcc as $i => $a) { $tmp = mb_convert_encoding($a[1], 'ISO-2022-JP'); $mail->bcc[$i][1] = '=?ISO-2022-JP?B?' . base64_encode($tmp) . '?='; } この下の方の $user->mailformat = 1 を 0 に変える(HTMLメールでなくテキストにするため)。 初期値をテキストメールに変更するには次のようなコマンドでいいだろうか。 mysql -u ユーザ -h ホスト -p データベース名 alter table mdl_user alter mailformat set default 0; update mdl_user set mailformat=0; ついでにメールアドレス非公開をデフォルトにするには alter table mdl_user alter maildisplay set default 0; フォーラムのメールを購読しないをデフォルトにするには alter table mdl_user alter autosubscribe set default 0; あと,moodle/lib/weblib.php や filelib.php をはじめ,すべての htmlentities(x) を htmlentities(x, ENT_COMPAT, get_string('thischarset')) に一括置換。 これには喜多先生の [[replace-htmlentities.pl:http://t-kita.net/rpm/moodle/scripts/replace-htmlentities.pl]] を使うのが便利。 moodle/mod/wiki/ の中は,以上に加え,iso-8859-1 または ISO-8859-1 となっているところも get_string('thischarset') に直す。 ** フォーラムのメールを早く配信するには [#g5daa6bd] フォーラムに投稿してからメールが送られるのは,編集できる期間(maxeditingtime)経過後の最初のcron起動時(通常は5分の整数倍の時刻)になる。 maxeditingtimeを短くしたくないけれどもメールをもっと早く出したいなら, mod/forum/lib.php の204行目あたり $endtime = $timenow - $CFG->maxeditingtime; を $endtime = $timenow; にすればいいようだ。 ** 姓名問題 [#n75f10aa] 設定で姓・名の順序を入れ替えられるが,それでもハードコードされたところで名・姓のままになる。 特にユーザ登録の画面が名・姓の順なので大勢の学生が間違って逆に入れる。 Moodleの firstname・lastname を given name・family name の意味で使っているところはなさそうなので,これはむしろ日本語の姓,名であると解釈して,lang/ja(_utf8)/*.php にある訳語で firstname を姓,lastname を名と入れ替えるのが確実かつ現実的である。 実際,繁体中文版もそうなっている。 ** 「さん」付け [#y0cb8051] あちこちにありそうだ。 例えば login/confirm.php: echo "<center><h3>".get_string("thanks").", ". fullname($user) . "</h3>\n"; これはいちいち「さん」を挿入するのはたいへんなので,lang/ja(_utf8)/moodle.php に $string['san'] = ' さん'; というのを入れて echo "<center><h3>".get_string("thanks").", ". fullname($user) . get_string("san") . "</h3>\n"; とするのがよさそうだ。 lang/ja/journal.php も3カ所に「さん」が必要。 なおこのファイルの $a->journal の中の変なところに空白が入ってしまっている? ** 24時間制 [#cb5917f4] 午前0時が〆切なのに午前12時と出るので正午と思った学生がいた。 そもそも12時間制がわかりにくい。 lang/ja(_utf8)/moodle.php の中の %%p%%I をすべて %%H に書き直したらわかりやすくなった。 これはすでに修正された。 ** TeXモジュール [#oa6f6cc9] TeX機能をオンにしておけば,$$ ... $$ のように2個のドル印で囲んでLaTeX表記(正確にはmimeTeX表記)が使える。 もしTeX表記以外で $ 印を二つ並べたいとき(あまりないだろうが)は &#36;&#36; のように実体参照すればいいだろう。 なお,日本語EUCでTeXで使うバックスラッシュ(または半角円印)をMacのSafariで入力すると化ける(ちっとも直らないSafariの有名なバグ)。 ** スケーラビリティ [#h0b62e86] 当初メモリ256MのCeleronマシンで20人が同時にアクセスしたらメモリ不足で落ちた。 php.ini で memory_limit = 16M としてある。 デフォルトの 8M で Moodle はぎりぎり足りるらしいが,PukiWiki は足りないので,メモリ食いは PukiWiki のほうかもしれない。 現在は,メモリ1.25G積んで,しかもMySQLを別マシンで動かしている。 これなら何人でも大丈夫(といってもせいぜい80人くらいしか同時ログインしていない)。 もっとも,ProLiant ML110(Celeron 2.4G)なのでそれなりに遅い。 三重大学版MoodleではXeonマシン2台+バックエンド1台。 ** Vodafone問題 [#b5880c7d] MoodleのフォーラムのメールがMessage-ID:を二つ持つためにVodafoneでエラーになる。 mod/forum/lib.php の Message-Id: を生成している行をコメントアウトする。 本家に報告済み([[Bug 3681:http://moodle.org/bugs/bug.php?op=show&bugid=3681]]。 ** wwwroot問題 [#c86d0ace] config.php の $CFG->wwwroot を http:// で始めると,https でアクセスした際に,リンクをたどるうちに http に戻ってしまう。 そこで,これを /moodle のように省略した書き方にしたくなる。 ところがこうするとあちこちで不具合が生じる。 これを避ける簡単な方法は config.php を次のように直すことだ: if (isset($_SERVER['HTTPS'])) { $CFG->wwwroot = 'https://ホスト名/moodle'; } else { $CFG->wwwroot = 'http://ホスト名/moodle'; } さらに,内部で http を https に置換しているところが多数あるが,http: を https: に置換するようにしないと悲惨なことになる。lib/weblib.php の if (isset($_SERVER['HTTPS'])) { 以下の7行も何か変だぞ。次のように変更した。 if (isset($_SERVER['HTTPS'])) { $protocol = 'https://'; } else if (strncmp($CFG->wwwroot, 'https', 5) == 0) { $protocol = 'https://'; } else { $protocol = 'http://'; } このあたりも本家に報告済み([[Bug 5374:http://moodle.org/bugs/bug.php?op=show&bugid=5374]])。 そもそも相対リンク(少なくとも protocol://domain 部分を省略したリンク)にすれば楽なのだが。 ** 日本語ファイル名問題 [#q15d3d82] 日本語のファイル名が化けるのは lib/moodlelib.php の中の clean_filename() が問題。 この中身を $string = strtr($string, "/\\", "__"); くらいにすればよい。 ただ,UTF-8以外の環境ではこれだけではIEでダウンロードできないようだ。 とりあえず file.php を次のようにするといいらしい。 // check that file exists if (!file_exists($pathname)) { $pathname = mb_convert_encoding($pathname, get_string('thischarset'), "UTF-8"); if (!file_exists($pathname)) not_found($course->id); } ダウンロードしたファイル名が文字化けする問題はもっとややこしい。 [[日本語ファイル名:http://oku.edu.mie-u.ac.jp/~okumura/php/filename.php]] のところで書いたように,次のようにすればいいのだろう(file.php): $filename = $args[count($args)-1]; $ua = $_SERVER['HTTP_USER_AGENT']; if (strstr($ua, "MSIE") && !strstr($ua, 'Opera')) { $filename = mb_convert_encoding($filename, "SJIS", get_string('thischarset')); } elseif (strstr($ua, "Safari")) { if (get_string('thischarset') == "UTF-8") { $filename = ""; } else { $filename = preg_replace('/[^\.a-zA-Z\d\_-]/', '_', $filename); } } else { $filename = mb_convert_encoding($filename, "UTF-8", get_string('thischarset')); } $filename = str_replace('#', '%23', $filename); lib/filelib.php のほうは @header('Content-disposition: inline; filename="'.$filename.'"'); とする。 ** 成績の並び順 [#jdab416a] course/grades.php で u.lastname を u.username にすれば番号順になる。 ついでに $course->shortname $strgrades を {$course->shortname}_grades とかにすればファイル名に日本語が入らない。 $student->idnumber も $student->username にする。 ** クッキー [#c016010b] lib/moodlelib.php の二つの setCookie() と,lib/setup.php でクッキーがセットされる。 PHPは関数の大文字・小文字を区別しないので setcookie() も setCookie() も同じことに注意。 setCookie() の最後の引数は '/' になっているが,実際のパス,例えば '/moodle/' に直せば,同一サイトの他のユーザによるクッキー盗難が防げる。 setup.php では @session_start(); の前にsession_set_cookie_params(0, '/moodle/'); を呼ぶ。 Moodle 1.5ではadmin/cron.phpやlogin/logout.phpにもsetcookie()があるぞ。 うーん,たくさんあって面倒だ。 Moodle 1.6では設定画面で設定できるようになるようだ。 ** 課題などで日本語があると長い横スクロールになる [#u7c61f7d] [[Bugs 5378:http://moodle.org/bugs/bug.php?op=show&bugid=5378]] に書いたが lib/moodlelib.php の shorten_text() が日本語をまったく考えていないバグ。 UTF-8に依存するがとりあえず if ($stopzone) { if ($char == '.' or $char == ' ' or ord($char) >= 0xE0) { $truncate = $i; // not $i+1; break 2; } } とすればよかろう。 ** その他 [#w0a7418e] http://moodle.org/mod/forum/discuss.php?d=28831 で https: な場合にIEでダウンロードできない問題についていろいろ書いてある。 file.php の $lifetime = 0; を 10 くらいにする。 grade/lib.php の /// Print header to force download のところの header("Content-Disposition: ...") の次に追加: header("Expires: 0"); header("Cache-Control: must-revalidate,post-check=0,pre-check=0"); header("Pragma: public"); その他,小さなバグがたくさんある。 例えばトップページが wood でコースが cornflower のテーマの場合にロゴが表示されない。 詳細はパッチをご覧いただきたい。 ** 参考リンク [#g0c571de] -[[Japanese Moodle:http://moodle.org/course/view.php?id=14]] -[[柏木さんのパッチ:http://www.supertak.com/down/sample.htm]] ----- -いつも御世話になります。 リンクを http://t-kita.net/rpm/moodle/ へ張り替えていただけると嬉しいです。 -- 喜多 &new{2005-09-25 (日) 13:36:53}; -rpmどうもありがとうございます。リンクを直すのを忘れていました -- 奥村 &new{2005-09-25 (日) 14:01:14}; - いつの間にかmoodle 1.6なんですねぇ.それにBBとWebCT合併もびっくり -- 渥美 &new{2006-04-02 (日) 21:05:37}; - 合併というかWebCTがBBに食われたんでしょう -- 奥村 &new{2006-04-02 (日) 21:22:37}; #comment