Moodle

更新日 2012-12-18 (火) 10:34:05

Moodleはフリーの教育管理システム(e-ランニング)です。まずMoodleサイトからDownloadする。

Uploadファイル名の日本語の利用

Moodle1.8の場合の例です.Moodle1.9の場合,必須設定項目は同じようで 指定しないと日本語ファイル名が「_」になってしまう。

config.php

$CFG->directorypermissions = 00777; // try 02777 on a server in Safe Mode
// 以下2行を追加
$CFG->unicodedb = true; // Database is utf8
$CFG->unicodecleanfilename = true;
 
require_once

Download時の文字化けするときは以下を追加

以下の2箇所の変更は1.9.3+では不要だったが、1.8.2+は必要だった。

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);
//ここまで

  send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);

lib/filelib.php

以下の変更は1.9.3+は適用済だった。

変更前

   if ($forcedownload) {
      @header('Content-Disposition: attachment; filename='.$filename);
   } else {
      @header('Content-Disposition: inline; filename='.$filename);
   }

変更後

   if ($forcedownload) {
      @header('Content-Disposition: attachment; filename="' . $filename . '"');
   } else {
      @header('Content-Disposition: inline; filename="' . $filename . '"');
   }

Moodle1.8でPOP認証

POP認証

認証サーバにPOPサーバを指定できる

php-imapをインストールする

# apt-get install php5-imap

Moodleのユーザ=>認証
POPサーバをアクティブにして

設定

タイプ:pop3notls

を選択する

メールをエンコードせずテキストで送信

サーバ −> Eメールで文字セットを「ISO-2022-JP」にする

lib/moodlelib.php で 以下を挿入

           $mail->Body = $textlib->convert($mail->Body, 'utf-8', $mail->CharSet);         //Body
           $mail->AltBody = $textlib->convert($mail->AltBody, 'utf-8', $mail->CharSet);   //Subject
       }
   }

//-------以下を挿入 
  if (strcasecmp($mail->CharSet, 'ISO-2022-JP') == 0) {
      $mail->Encoding = '7bit';
  } else {
      $mail->Encoding = '8bit';
  }
//-------ここまで

   if ($mail->Send()) {
       set_send_count($user);
       $mail->IsSMTP();                               // use SMTP directly

   $data->link = $CFG->wwwroot .'/login/confirm.php?data='. $user->secret .'/'. urlencode($user->username);
   $message     = get_string('emailconfirmation', '', $data);
   $messagehtml = text_to_html(get_string('emailconfirmation', '', $data), false, false, true);

//---------------以下の1行を変更
//    $user->mailformat = 1;  // Always send HTML version as well
    $user->mailformat = 0;

   return email_to_user($user, $from, $subject, $message, $messagehtml);

}

テキストメールに各ユーザのDBのデータを変更
MySQLで

mysql> update mdl_user set mailformat=0;

新しいユーザのデフォルトを変更

mysql> alter table mdl_user alter mailformat set default 0;

同様にメールアドレス非公開

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

注)上2つはユーザ登録時に指定したほうがよさそう

フォーラム投稿をメールで送らない

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

Moodle1.6のインストール

moodle1.6.1以降は日本語(ja)が選べたので、直接1.6.1がインストールできた。 この時は、特にlang用パッケージを事前にDownloadすることなく、インストール中に聞かれたときDownloadするこでインストールできた。

MySQLでのmoodleDBのバックアップ/リストア

バックアップ

$ /usr/local/bin/mysqldump -u root -p --default-character-set=utf8 moodle > moodle.out
Enter password:

リストア

もし、moodleというデータベースがない時は先に作成

$ /usr/local/bin/mysqladmin -u root -p create moodle
Enter password:

$ /usr/local/bin/mysql -u root -p moodle < moodle.out
Enter password:
インストール

データベースとしてはMysqlを使用するので、事前にMysql側のSQL サーバにデータベースとしてmoodle、ユーザとしてmoodleuserを登録しておいて データベースにアクセスできるようにしておく。MySQLのインストールはここ

ユーザ登録は

mysql> grant select,insert,update,delete,create,drop,index,alter on moodle.* to  moodleuser@localhost IDENTIFIED BY '*****' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
$ tar zxvf moodle-latest-14.tgz
$ su
# mv moodle /usr/local/apache2/htdocs/

phpの使用メモリが16MB以上必要なので/usr/local/lib/php.iniの

memory_limit = 8M 
を
memory_limit = 32M
に変更し、
magic_quotes_runtime = 0  (必ず)
file_uploads = 1
session.auto_start = 0
session.bug_compat_warn = 0
tcpip_socket = true

を確認して

apacheを再起動

その後ブラウザで

http://(マシン名)/moodle/

でアクセスしてパラメータを設定する

Choose a languageでJapanese(jp)を選択

「PHP設定を確認しています ...」でパスを確認 GDについてはパスするにはphpコンパイル時オプション --with-gd が必要

「Moodleのインストール先を確認してください。」で

ウェブアドレス:http://(マシン名)/moodle
Moodleディレクトリ:/usr/local/apache2/htdocs/moodle
データ:/usr/local/moodledata

注)このとき/usr/local/moodledataを作成し、wwwに書き込み権限を与える またこのディレクトリ場所は直接webアクセス出来ない場所にする。

「DataBaseの設定」

タイプ:postgres7
ホストサーバ:(サーバ名orIPアドレス)
データベース:moodle
ユーザ:moodle
パスワード:(なし)  <---postgresql側でIPで制限する
テーブル接頭辞:mdl_

注)このとき事前に createdb moodle でdbを作成しておく

「設定が完了しました。」

<?php  /// Moodle Configuration File 

unset($CFG);

(略)

// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>

上記のphpスクリプトを/usr/local/apache2/htdocs/moodle/config.phpに入れる このファイルがないので作成しコピー&ペーストすればよい

apache2がapache2.0xなんかにlinkされていると以下のようなエラーが出る

Please fix your settings in config.php: 
You have: 
$CFG->dirroot = "/usr/local/apache2/htdocs/moodle"; 
but it should be: 
$CFG->dirroot = "/usr/local/apache2050/htdocs/moodle";

のでconfig.phpを指示どおり書き換える。

うまく行くと「著作権表示」が表示される

「データベースの設定」

Home ≫ データベースの設定  
 
----- (postgres7): CREATE TABLE mdl_config ( id SERIAL PRIMARY KEY, name
varchar(255) NOT NULL default '', value text NOT NULL default '', CONSTRAINT
mdl_config_name_uk UNIQUE (name)) ----- 

成功    <---成功を確認
----- (postgres7): CREATE TABLE mdl_course ( id SERIAL PRIMARY KEY, category
integer NOT NULL default '0', sortorder integer NOT NULL default '0', password
varchar(50) NOT NULL default '', fullname varchar(254) NOT NULL default '',
shortname varchar(15) NOT NULL default '', idnumber varchar(100) NOT NULL
default '', summary text NOT NULL default '', format varchar(10) NOT NULL
default 'topics', showgrades integer NOT NULL default '1', modinfo text NOT NULL default '', blockinfo 

(以下略)

データベースのアップグレードが完了しました。

全てが成功したことを確認して「続ける」

 「詳細設定] http://uso5001.abc-u.ac.jp/moodle/admin/config.php

2-3画面進み

「データベースのアップグレード」で成功を確認

「ブロックテーブルの設定」で設定確認

最後までいくと「workshop テーブルが正常に設定されました。」 が表示されるその後 「サイトセッティング」をセットする

設定

管理者は

ユーザ名:admin
パスワード:admin

http://uso5001.abc-u.ac.jp/moodle/login/index.php からloginしてまずパスワードを変更

設定変更は右画面の「管理...」をクリック メールの日本語の問題(1.6では問題なさそうなので不要) Moodle から自動で出されるメールが生 EUC-JP の Quoted-Printableになるので文字化けを起こすそこで、 奥村先生のページを参考に以下のパッチを当てる。今回使用したPHPはVer5.0.1で このときmb_convert_encoding関数はmb_convert_encoding($mail->FromName, 'ISO-2022-JP', 'EUC-JP')のようにソースのencodeを'EUC-JP'と指定する必要があった。

moodle/lib/moodlelib.php の1750行目あたりと

// Edit By JE2ISM
    $messagehtml = false;  // HTMLメールはいやよ  <---追加

    if ($messagehtml) {
        $mail->IsHTML(true);
        $mail->Encoding = "quoted-printable";           // Encoding to use
        $mail->Body    =  $messagehtml;
        $mail->AltBody =  "\n$messagetext\n";
    } else {
        $mail->IsHTML(false);
        $mail->Body =  "\n$messagetext\n";
    }

1770行あたり

   if ($attachment && $attachname) {
       if (ereg( "\\.\\." ,$attachment )) {    // Security check for ".." in  ir path
           $mail->AddAddress("$adminuser->email", fullname($adminuser) );
           $mail->AddStringAttachment("Error in attachment.  User attempted to
attach a filename with a unsafe name.", "error.txt", "8bit", "text/plain");
       } else {
           include_once("$CFG->dirroot/files/mimetypes.php");
           $mimetype = mimeinfo("type", $attachname);
           $mail->AddAttachment("$CFG->dataroot/$attachment", "$attachname", "base64", "$mimetype");
       }
   }

(以下追加)

// 日本語化 Edit By JE2ISM
   $mail->FromName =  mb_convert_encoding($mail->FromName, 'ISO-2022-JP', 'EUC-JP');
   $mail->FromName = "=?ISO-2022-JP?B?".base64_encode($mail->FromName)."?=";
   $mail->Subject  =  mb_convert_encoding($mail->Subject, 'ISO-2022-JP', 'EUC-JP');
   $mail->Subject  = "=?ISO-2022-JP?B?".base64_encode($mail->Subject)."?=";
   $mail->Body     =  mb_convert_encoding($mail->Body, 'ISO-2022-JP', 'EUC-JP');
   $mail->CharSet  =  'ISO-2022-JP';
   $mail->Encoding =  '7bit';
   $i = 0;
   while($mail->to[$i][1]) {
      $mail->to[$i][1] = mb_convert_encoding($mail->to[$i][1], 'ISO-2022-JP', 'EUC-JP');
      $mail->to[$i][1] = "=?ISO-2022-JP?B?".base64_encode($mail->to[$i][1])."?=";
      $i++;
   }
   $i = 0;
   while($mail->cc[$i][1]) {
      $mail->cc[$i][1] = mb_convert_encoding($mail->cc[$i][1], 'ISO-2022-JP', 'EUC-JP');
      $mail->cc[$i][1] = "=?ISO-2022-JP?B?".base64_encode($mail->cc[$i][1])."?=";
      $i++;
   }
   $i = 0;
   while($mail->bcc[$i][1]) {
      $mail->bcc[$i][1] = mb_convert_encoding($mail->bcc[$i][1], 'ISO-2022-JP',

'EUC-JP');

      $mail->bcc[$i][1] = "=?ISO-2022-JP?B?".base64_encode($mail->bcc[$i][1])."?=";
      $i++;
   }

//--------------------------------------------

ゲストログインボタンの削除

1.6.1では 管理> ユーザ> 認証オプションで

 認証方法の選択: 手動アカウント作成のみ

を選択、説明にメッセージを適当に書くこと(必要)

 ゲストログインボタン:非表示

でゲストログインボタンが 消えた。

以前の方法

moodle/config.phpに

$CFG->guestloginbutton=false;
を追加

ユーザプロファイルの電話番号、住所の登録画面の削除

moodle/user/edit.htmlの270行目あたりの
<?php } ?>
<!--
<tr valign=top>
    <td align=right><p><?php print_string("phone") ?> 1:</td>
    <td><input type="text" name="phone1" size="25" maxlength="20" value="<?php p
($user->phone1) ?>"> <?php p($teacheronly) ?>
    <?php if (isset($err["phone1"])) formerr($err["phone1"]); ?>
    </td>
</tr>

(略)

p($user->address) ?>"> <?php p($teacheronly) ?>
    <?php if (isset($err["address"])) formerr($err["address"]); ?>
    </td>
</tr>
-->
<tr>
    <td></td>
    <td align=right><input type="submit" value="<?php  print_string("updatemyprof
ile") ?>"></td>
</table>

の表示部をコメントアウト。 ユーザ登録画面の削除

moodle/login/signup.phpに以下を追加

10行目程度に

//ユーザ登録を開放しなようにする
    error("Sorry, you may not use this page.");

$CFG->auth変数の値がemailになっているが、どこで設定いているか不明なので、強制的に禁止した。

また、login画面で「初めての方ですか」のページの部分を表示させないようにするには、 管理->認証オプション ->認証方法の選択を「Emailベースの認証」から「手動アカウント作成のみ」に変更するし、説明のところを空白にする。説明のところに、説明文を入れると、初めての方ですかが表示されその下に説明文が表示される。どちらにせよ「新しいアカウントを作成する」のボタンは表示されない

セキュリティメモ

セキュリティメモ 2005年5月6日の内容により、admin/delete.php を削除。 Backup/Cron/更新等

Backup

Moodle > 管理 > 設定 > バックアップで 
スケジュール アクティブ:Yes
にする

保存先:/home/www/moodlebackup等をしていしておく。ここの書き込み権限は必ずwwwが必要。cron実行権限とは異なる。

実際にバックアップが実行されるのは以下のcronが実行されたとき指定時間が通過しているとbackupされる。cronがエラーしていてもbackupされたメールが届くこのあたりどうなっているか不明(Ver1.6.1)

Cron

Moodleはいくつかの処理を自動でする必要があるのでCronを以下のように設定しておく

以下のページが問題なく動作すことを確認し、

http://uso5001.abc-u.ac.jp/moodle/admin/cron.php

にアクセスよければ一般ユーザでいいから crontab -e で次のように設定。 (毎5分ごとに実行)

*/5 * * * * /usr/bin/wget -q -O /dev/null http://uso5001.abc-u.ac.jp/moodle/admin/cron.php

このとき

/usr/bin/wget http://uso5001.abc-u.ac.jp/moodle/admin/cron.php

でエラーないことの確認もしておく

更新

moodleのバージョンアップは以下のようにおこなう

# cd /usr/local/apache2/htdocs
# mv moodle moodle-bak
# tar xvzf moodle-latest-XXX.tgz
# cp -a moodle-bak/config.php moodle/

moodle/lib/weblib.php の htmlentities を htmlspecialchars に変換

設定上のポイント

  1. 小テストの時間制限の最大値は管理->設定->詳細設定の中のsessiontimeout: の時間から10分引いた値まで設定できる。(設定表示が20分の場合はsessiontimeout:が 30分に設定されている)
  2. 小テスト最大評点を「評点無し」以外に設定すると学生が試験終了後これをベースにした評点が表示される。「評点無し」では表示されない。またレポート->概要も評点は表示されなくなる。
  3. アップロードファイルの容量については2MBがデフォルトのようだが、php.iniの以下のパラメータを変更
; Maximum size of POST data that PHP will accept.
post_max_size = 8M
; Maximum allowed size for uploaded files.
;;upload_max_filesize = 2M
upload_max_filesize = 8M

httpd.conf関係の存在すればLimitRequestを削除

をしたら、Moodleの詳細設定のパーミッションの中のmaxbytesや

管理 >設定 >モジュール管理 >課題のassignment_maxbytesは変更できた

その後コース設定の最大アップロードサイズを変更すると課題でUploadの容量を変更できる。

ユーザのUpload

username, password, firstname, lastname, email,mailformat
okada, ****, okada, okada, okada@abc.com, 0

mailformat 0 ---プレーンテキスト       1 ---HTML(デフォルト)

提出課題の削除

保存ディレクトリ :moodledata/3/moddata/assignmentの下あたり

mdl_assignment_submissionsのテーブルに記録があるので削除


元ページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS