* Moodle 1.6 [#o654343e]

Moodle 1.5 については [[Moodle]] 参照。
[[Moodle 1.9]] が現れた今でも,シンプルな Moodle 1.6 の需要はある。セキュリティパッチが出なくなるまでは使い続けても問題ない。

三重大学版は [[三重大学版Moodleソース:https://portal.mie-u.ac.jp/src/]] で配布中(8月19日版より古いものはhttps:でない環境で使うと発現する重大なバグがありました)。
三重大学版は [[三重大学版Moodleソース:http://portal.mie-u.ac.jp/src/]] で配布中。

[[PHP]] と,[[MySQL]] または [[PostgreSQL]] が必要。
以下では Linux + Apache + MySQL + PHP の環境でインストール。
Vine Linux 3.2およびCentOS 4.3で動作確認した。

CentOS 4.3については,httpd,php,mysql,php-mysql,gd,php-gd,php-mbstring がなければ yum install で入れておく。
これが一番簡単で安全であろう。
一部にCentOS + XAMPP for Linuxでインストールするといいという説が流れているが,ちょっと怖い。
yum でインストールすれば,自動更新できるので,セキュリティ的にも安心。
CentOS 4.5については,httpd,php,mysql,php-mysql,gd,php-gd,php-mbstring がなければ yum install で入れておく。
POP3/IMAPで認証するならphp-imapも。
確認していないがCentOSはRed Hat互換なので,RHELでも同じであろう。
Vine Linuxでも問題ない。
いずれにしてもこれらのLinuxならXAMPPを使う必要はない。
標準のパッケージを使うほうがyumやapt-getで更新できるので安心。

** Apache [#ge314563]

Apache 2.x の場合,httpd.conf に必ず AcceptPathInfo on を入れる。

** MySQL [#r6d8f4a9]

MySQL 4.1.16以上が必要。ただし4.1.21はMoodle(1.6以前だけ?)に影響するバグがある([[Using Moodle: MySQL 4.1.21 Bug:http://moodle.org/mod/forum/discuss.php?d=51881]])。
[[CentOS:http://www.centos.org/]] 4.3はMySQL 4.1.20なのでちょうどいい。

MySQL 5については,strict modeでは動作しない:
[[Using Moodle: 1101: BLOB/TEXT column 'sessdata' can't have a default value:http://moodle.org/mod/forum/discuss.php?d=58552]]

次のようにしてデータベースを作っておく(データベース名 moodle,ユーザ名 moodleuser,Webサーバのホスト名 hostname,パスワード himitsu の場合)。

 mysql -u root -p
 create database moodle default character set utf8 collate utf8_unicode_ci; 
 grant select,insert,update,delete,create,drop,index,alter on moodle.* 
   to moodleuser@'hostname' identified by 'himitsu'; 
 quit 

Apache と MySQL が同居する場合は 'hostname' は localhost でよい。
そうでない場合は 'oku' あるいは 'oku.edu.mie-u.ac.jp'
のようにする(単に 'oku' とするのは /etc/hosts に oku が oku.edu.mie-u.ac.jp より先に書いてある場合)。

** PHP [#c85125c4]

php.ini は基本的にデフォルトのままでいい。
Moodle.org のサイトには次のようにすると書かれている:

 magic_quotes_gpc = 1      (推奨)
 magic_quotes_runtime = 0  (必ず)
 file_uploads = 1
 session.auto_start = 0
 session.bug_compat_warn = 0

しかしうちはデフォルトのまま magic_quotes_gpc = off で使っている。
このほうが安全。
ただ,ファイルのアップロードの最大サイズが php.ini で

 upload_max_filesize = 2M
 post_max_size = 8M

となっているが,これはもう少し大きくしたほうがいい(10Mとか100Mとか)。
ついでにデフォルトの

 memory_limit = 8M

でも動かないことはないが 16M くらいにしたほうが安心。

** Moodle [#yac0e293]

Moodle をダウンロードして /var/www/html 以下に展開(以下では /var/www/html/moodle)。
これは当然ながら所有者は apache 以外にして,管理人以外には書き込み権限を与えない。

データ用ディレクトリを /var/www/html の外に設定。
以下では /var/www/moodledata とする。
ここは apache が読み書きできるようにする。
アップロードされたファイルはここに入る。

http://サーバ名/moodle/install.php をアクセスする。

質問に答えていけば設定ファイル config.php が作られるが,moodle ディレクトリに apache が書き込めないので,表示された config.php をコピーしてエディタにペーストし,moodle ディレクトリに保存する。
その際,

 $CFG->unicodedb = true;
 $CFG->unicodecleanfilename = true;

を追加する。

質問は「続く」でたくさんのページがあるが必ず最後まで答える。
質問中でURLが http://.../moodle のようになるが最後に / を補わないこと。

途中で「「日本語(ja)」言語パックをダウンロードする」ボタンが現れるが,三重大学版の1.6では言語パックも含んでいるので,このボタンは押さず,代わりに次のように手で入れる。
途中で「「日本語(ja)」言語パックをダウンロードする」ボタンが現れるので,通常はそれを利用すればよい。三重大学版の1.6(準備中)では言語パックも含んでいるので,ここはパスでよい。

 mkdir /var/www/moodledata/lang
 mv /var/www/html/moodle/lang/ja_utf8 /var/www/moodledata/lang

詳細設定の画面は例えば次のようにする:

 lang: 日本語(ja)
 docroot: http://docs.moodle.org/ja
 country: 日本
 allowcoursethemes: Yes
 sessioncookiepath: /moodle/  ←Moodleをインストールしたパス
 sitemailcharset: ISO-2022-JP

あとは http://サーバ名/moodle/ をアクセスするだけ。

動作確認したら cron を設定する。
まず http://サーバ名/moodle/admin/cron.php をブラウザで見てうまく働くことを確認。
よければ一般ユーザでいいから crontab -e で次のように設定。

 */5 * * * * wget -q -O /dev/null http://サーバ名/moodle/admin/cron.php

** 既存Moodleからの移行 [#x7954ed8]

Moodle 1.4.xはMoodle 1.5.xに移行してから,Moodle 1.6.xに移行するのがいいらしい。

通常の更新と同様,ソースツリーを上書きしてすぐに管理者でアクセスする。
これでうまくいけばよいが,文字化けしているようなら,次のようにする。
あらかじめ /etc/my.cnf で mysqld の max_allowed_packet を十分大きくしておく(16Mとか)。

 mysqldump --opt -u root -p --default-character-set=latin1 moodle >moodle.sql
 iconv -c -f EUC-JP-MS -t UTF-8 moodle.sql >moodle1.sql
 sed 's/\blatin1\b/utf8/g' moodle1.sql >moodle2.sql
 diff moodle1.sql moodle2.sql (確認)
 mysql -u root -p --default-character-set=utf8 --max_allowed_packet=16M moodle < moodle2.sql 

moodledataの移行もあるので,[[Moodle/UTF-8]] を参照されたい。

以下では三重大版Moodleでの変更点の一部を挙げておく。

** 姓と名の順番が逆 [#o9d96314]

名姓の順で聞いてくるので学生がほとんど逆に入れてしまって困った。
これを直す一番簡単な方法は,firstname を姓,lastname を名と訳すことである。
/var/www/moodledata/lang/ja_utf8/moodle.php の中で次のような変更をする。

 $string['firstname'] = '姓';
 $string['lastname'] = '名';
 $string['fullnamedisplay'] = '$a->firstname $a->lastname';
 $string['missingfirstname'] = '姓が入力されていません。';
 $string['missinglastname'] = '名が入力されていません。';

あと,「$a->lastname さん、こんにちは」のような挨拶は $a->firstname に変える。

そもそもfirstnameは最初に表示される名前,lastnameは最後に表示される名前という意味なので,これらがgiven name,surnameに対応していなくていいではないか,という発想である。
繁体中文版Moodleもそのようになっている。
もっとも,すでにfirstnameにgiven nameを入れてしまっている,データベースをいじらないで済ませたいということであれば,ここは元通りにして,あちこちのソースをいじる必要がある。

姓名以外にも,lang/ja_utf8/moodle.phpは大学の状況に合わせていろいろ変更するといい。
例えば国,都道府県などは所属,学部などに変えることが考えられる。

ついでに,名前に「さん」付けしてくれないところがある。
これも変なので,うちでは

 $string['san'] = ' さん';

を追加して,login/confirm.phpで

 echo "<center><h3>".get_string("thanks").", ". fullname($user) . get_string("san") . "</h3>\n";

などのように「さん」付けしている。

** メールの文字コードがおかしい [#o69c154d]

Moodle 1.6からは設定で sitemailcharset: ISO-2022-JP とできるようになった。
しかし,これでもquoted printableになったりして,メーラによってはまともに読めない。
直すにはいろいろな手があるが,例えば lib/moodlelib.php で if ($mail->Send()) { の直前に

    if (strcasecmp($mail->CharSet, 'ISO-2022-JP') == 0) {
        $mail->Encoding = '7bit';
    } else {
        $mail->Encoding = '8bit';
    }

を挿入する。さらに

    $user->mailformat = 1;  // Always send HTML version as well

の 1 を 0 にする。
また,lib/db/mysql.sql の

  `mailformat` tinyint(1) unsigned NOT NULL default '1',

の 1 を 0 にすればテキストメールがデフォルトになる。
ついでに,メールアドレス非公開をデフォルトにするには,同じファイルの

  `maildisplay` tinyint(2) unsigned NOT NULL default '2',

の 2 を 0 にする。
さらについでに,フォーラム投稿をメールで送らないをデフォルトにするには

  `autosubscribe` tinyint(1) unsigned NOT NULL default '1',

の 1 を 0 にする。
こうしておかないと携帯に転送している学生が泣くことになる。

すでにインストールされているMoodleで上記 lib/db/mysql/sql の変更の効果を出すためには,次のようにして設定を変更できる。

 alter table mdl_user alter mailformat set default 0;
 update mdl_user set mailformat=0;
 alter table mdl_user alter maildisplay set default 0;
 update mdl_user set maildisplay=0;
 alter table mdl_user alter autosubscribe set default 0;
 update mdl_user set autosubscribe=0;

** 日本語ファイル名が使えない [#ya0eacba]

file.php に次のように挿入する:

    $filename = $args[count($args)-1];
    // 次の6行を挿入
    // 次の7行を挿入
    $ua = $_SERVER['HTTP_USER_AGENT'];
    if (strstr($ua, "MSIE") && !strstr($ua, 'Opera')) {
       $filename = mb_convert_encoding($filename, "SJIS-WIN", "UTF-8");
    } elseif (strstr($ua, "Safari")) {
       $filename = "";
    }
   $filename = str_replace('#', '%23', $filename);
    send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);

このあたり,もっと広範なOS・ブラウザでテストする必要あり。

あと,config.php に

 $CFG->unicodecleanfilename = true;

と書くのを忘れないこと。

** フォーラムの最近の活動を新しい順に表示できないか [#n2cbab0c]

moodle/mod/forum/lib.php の 'time ASC' を 'time DESC' に直してください。