> 延び延びになっていたMoodleの更新を大急ぎで行いました。
> 1.7.1ベースを予定していたのですが,いろいろ考えた末,
> 安定して使える1.6.4+ベースにしました。
たいへん助かります。
小規模なコミュニティサイトで、1.5.1+PostgreSQL(EUC)で使っていたのですが、このたびレンタルサーバへ引越しすることになり、バージョンアップを検討してました。
1.7.1へステップアップも考えましたが、タイミングよく、奥村先生のバージョンがアップされていたので、これからは追っかけることにします。
ソースはボチボチと参照させていただきます。
# それにしても、PostgreSQL 8.1.x から 7.4.x へのBackend-DBのダウングレードは、苦労しました。
今後とも、よろしくお願いいたします。
三重大版Moodle 1.6.5+(moodle07.tar.bz2 2007年4月22日) とPostgreSQL8.2.4でインストール中に、ブロックデータベースautoattendのアップデートでエラーが出ました。
SQL定義文のエラーのようです。
blocks/autoattend/db/postgres7.sql を修正しましたら、エラーはなくなりました。
長文ご容赦ねがいます。
-----------------------------------------------------
CREATE TABLE prefix_autoattend_sessions (
id SERIAL8 PRIMARY KEY,
courseid integer NOT NULL default '0',
creator integer NOT NULL default '0',
sessdate integer NOT NULL default '0',
takenby integer NOT NULL default '0',
timetaken integer NOT NULL default '0',
timemodified integer NOT NULL default '0',
method varchar(1) NOT NULL default 'S',
state varchar(1) NOT NULL default 'N',
starttime integer NOT NULL default '0',
latetime integer NOT NULL default '0',
endtime integer NOT NULL default '0',
denysameip integer NOT NULL default '1',
attendkey varchar(36) default '',
allowip varchar(128) default '',
description varchar(128) default ''
);
CREATE INDEX prefix_autoattend_sessions_courseid_idx ON prefix_autoattend_sessions (courseid);
CREATE INDEX prefix_autoattend_sessions_sessdate_idx ON prefix_autoattend_sessions (sessdate);
CREATE INDEX prefix_autoattend_sessions_starttime_idx ON prefix_autoattend_sessions (starttime);
CREATE TABLE prefix_autoattend_students (
id SERIAL8,
attsid integer NOT NULL default '0',
studentid integer NOT NULL default '0',
status varchar(1) NOT NULL default 'Y',
called varchar(1) NOT NULL default 'D',
alledby integer NOT NULL default '0',
calledtime integer NOT NULL default '0',
remarks varchar(50) default '',
ipaddress varchar(20) default ''
);
CREATE INDEX prefix_autoattend_students_attsid_idx ON prefix_autoattend_students (attsid);
CREATE INDEX prefix_autoattend_students_studentid_idx ON prefix_autoattend_students (studentid);
CREATE INDEX prefix_autoattend_students_status_idx ON prefix_autoattend_students (status);
CREATE TABLE prefix_autoattend_settings (
id SERIAL8 PRIMARY KEY,
courseid integer NOT NULL default '0',
status varchar(1) NOT NULL default 'Y',
grade integer NOT NULL default '0'
);
CREATE INDEX prefix_autoattend_settings_courseid_idx ON prefix_autoattend_settings (courseid);
CREATE INDEX prefix_autoattend_settings_status_idx ON prefix_autoattend_settings (status);
INSERT INTO prefix_autoattend_settings (courseid, status, grade) VALUES (0, 'P', '2');
INSERT INTO prefix_autoattend_settings (courseid, status, grade) VALUES (0, 'L', '1');
INSERT INTO prefix_autoattend_settings (courseid, status, grade) VALUES (0, 'E', '1');
INSERT INTO prefix_autoattend_settings (courseid, status, grade) VALUES (0, 'X', '0');
INSERT INTO prefix_autoattend_settings (courseid, status, grade) VALUES (0, 'Y', '0');
-----------------------------------------------------
autoattend自体のテストは行っておりませんが、とりあえずご報告まで。
はじめまして。
これまで、喜多先生@熊本大のrpmパッケージでMoodle 1.5.3+を利用していたのですが、4月から1.6ベースか1.7ベースのMoodleを利用したくて、データベースのバックアップなどをしていました。そんなときに、奥村先生から三重大学版Moodleの情報が聞けて、大変うれしいです。
さっそく、現在使っているMoodleを三重大学版にしてみました。eucで利用していたので、データベースの設定など、いろいろ大変でしたが、UTF-8化も終わってなんとか動作しているようです。
三重大学版のインストールと、そのあとの動作の際に気になることがありましたので、報告したいと思います。
- インストール中にモジュールのアップグレードがありますが、「mieattendance」と「miechoice」のところがうまくいきませんでした。INSERT文でエラーが出ていたようです。
「mod/mieattendance/db/mysql.sql」と「mod/miechoice/db/mysql.sql」の2つファイルの、最後のほうにあるINSERT文を、例えば次のようにしました。(赤字部分を追加箇所)
INSERT INTO prefix_log_display (module, action, mtable, field) VALUES ('mieattendance', 'view', 'mieattendance', 'name');
- インストールしたあと、各コースの管理メニューで、「学生」をクリックしても、ページが真っ白でした。apacheのエラーをみると、「course/student.php」でエラーがあったようでした。該当する部分に「"」や「,」を追加して修正しました。
まだすべての機能を確認してはいませんが、だいたいこれくらいではないかと思っています。ちなみに動作環境は、次のとおりです。
- OS: Vine Linux 3.2
- Web Server: Apache 2.0
- PHP: PHP 5.2.0 (apt-getでインストール)
- DB: MySQL 4.1.18 (Moodleとは別サーバ、バイナリパッケージをインストール)
あと,登録キーのヒントが出てしまうというのも,まずいと思われる先生がおられましたので,出ないようにしました(つもりです)。
「アンケート」モジュールが含まれていますが,うまく動作しないような気がします。どこが悪いのかわからないので,とりあえず「フィードバック」モジュールのほうをお使いください。
その他,「データベース」モジュールが ##削除## などの日本語タグでは動作しないということなので,##Delete## 等々に変更しましたが,私もよくわかっていません。
まだまだ日替わり状態が続きそうです。
いつもお世話になっております。村上です。
Moodleで出席管理が出来るということで色々と試しています。
その中でも「MIE出席」モジュールを試させていただいているのですが
[ 学生へメール通知 ]タブをクリックして[ Eメール通知 ]をクリックすると
参加学生に対してメールが送信されるという動きだと思いますが、
クリックすると
○○(←ユーザ名)
上記ユーザの携帯メールアドレスが設定されていません。
ユーザのプロフィール編集で設定して下さい。
と表示されます。
1.5ベースの時のマニュアルを拝見すると、携帯メールアドレスの項目が
ありますが、1.6.5+ベースのものには携帯メールアドレスの項目が見当たりません。
有効にするためにはどうしたらよろしいでしょうか?
以上、宜しくお願い致します。
奥村先生、みなさま
群馬大学の上田と申します。
その節はお世話になりました。ようやく本学でもMoodleサーバを導入し、明日の講義から利用できるところまでこぎつけました。
三重大学版Moodle、ありがたく使わせて頂いておりますが、
MIE投票、フィードバック、アンケートなどで日本語が?????に化けてしまいます。環境は以下の通りです。アドバイス頂けないでしょうか。
OS: RHEL 4
database | mysql | バージョン 4.1.16 以上が必須です。あなたは現在 4.1.20 を使用しています。 | OK |
php | バージョン 4.3.0 以上が必須です。あなたは現在 4.3.9 を使用しています。 | OK | |
php_extension | iconv | インストールおよび Enabled を推奨します。 | OK |
php_extension | mbstring | インストールおよび Enabled を推奨します。 | OK |
ぼけていました。m(_ _)m
とりあえずMIE投票などは通常の投票などで問題ないでしょうから管理ユーザでモジュールを非表示にしておいてください。
うちでは特に問題ないようなのですが,そういえばクリーンインストールしたものでテストしていなかったかもしれません。直せたら直しますが,製造元のほうも1.5以外ではノーサポートということなので,今後のこともあるので新規サイトではなるべくお使いにならないほうがいいと思います。アンケートモジュールも同様です。
ただ,フィードバックでも化けるというのは変ですね。調べてみます。
本日版では大きなところでは
resource/type/directory/resource.class.php
を直さないと全角フォルダ名をIE6でたどれないというバグ(元々Moodleにある)を直しました。
これは1.5時点で直していたのですが,1.6にした時点で抜けていました。
こんなところもオリジナルのMoodleではうまくいかないんです。まだまだこの種のバグはあるかもしれません。ファイル名・フォルダ名をそのまま出しているところは rawurlencode(urlencodeではない)するように直すべきだと思います。
奥村先生
こんにちは.佐々木です.
三重大学版Moodle,今年もありがたく使用させていただいています.以下細かいですがレポートです.(バグでなく,単に私の設定が悪いだけなののかもしれません,そのときはごめんなさい.)使用しているMoodleは4/14ダウンロードのもの.RHEL4で,Apache 2.0.52,mysql 4.1.20,php4.3.9.php-mbstring,gd,php-gdもインストール済みです.
文字化け関係
おおむね良好だが,組み込みのHTMLエディタを使用する際,ツールバーにある各種ボタン(イメージ挿入,表挿入,スマイリー挿入など)を押すと,ポップアップウィンドウ内が文字化け.エンコードがなぜか西ヨーロッパ言語になっている.
(ちなみにいまこのメッセージを書いているmoodle.orgでは,そこもUTF-8になっていて,文字化けなし.)
ソート関係
各コースの「人」→「参加者」で参加者一覧を出したとき,学生をユーザー名や姓,名,最終アクセスなどでソートできない.(教師のソートはできる)
管理ユーザーの「管理」→「ユーザー」→ユーザーアカウント編集画面のソートはOK.でも,ユーザー名(本学では学籍番号)がここにもあったほうが使いやすいかも.
アンケートモジュール
「うまく動作しないような気がする」とのことでしたが,こちらではうまく動作しています.ただし,「回答の表示」を「教師および学生」としても,学生には結果が表示されません.これは以前このモジュールを自分で追加して使用していたときにも同様だったので,もともとのモジュールの問題かもしれません.
以上です
> 組み込みのHTMLエディタを使用する際,ツールバーにある各種ボタン(イメージ挿入,表挿入,スマイリー挿入など)を押すと,ポップアップウィンドウ内が文字化け.エンコードがなぜか西ヨーロッパ言語になっている.
はてー,どうしてでしょう。うちのほうは正常に見えます。MacのFirefoxとVistaのIE7で確かめました。
もし文字化けが多いようでしたら,Apacheの設定ファイル(httpd.conf)に
AddDefaultCharset
で始まる行がないかご確認ください。あれば消してください。
ソート関係は,ユーザ名(学籍番号)を入れた際の手抜きです。^^; 直します。
アンケートモジュールは,どうもよくわかっていないので,あまり手を入れていません。フィードバックモジュールのほうが使えるようでしたらそちらのほうをお勧めします。
奥村先生
ありがとうございます.http.confのAddDefaultCharsetのせいでした.
ただ,画面右上のジャンプメニューだけは直りません.そのページのソースには
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
とありますが,該当部分だけこんな感じです.(ジャンプとか週1,週2はOKなのですが)
<form action="http://172.20.130.1/moodle/course/jumpto.php" method="get" target="_top" name="navmenu" class="popupform">
<select name="jump" onchange="self.location=document.navmenu.jump.options[document.navmenu.jump.selectedIndex].value;">
<option value="http://172.20.130.1/moodle/mod/forum/view.php?id=8">ニ�...</option>
<option value="http://172.20.130.1/moodle/mod/forum/view.php?id=21">授�...</option>
<option value="http://172.20.130.1/moodle/mod/forum/view.php?id=22">チ�...</option>
<option value="http://172.20.130.1/moodle/mod/resource/view.php?id=26" selected="selected">ジャンプ ...</option>
<optgroup label="------------ 週 1 --------------">
<option value="http://172.20.130.1/moodle/mod/resource/view.php?id=33">第�...</option>
</optgroup>
<optgroup label="------------ 週 2 --------------">
<option value="http://172.20.130.1/moodle/mod/resource/view.php?id=29">ナ�...</option>
<option value="http://172.20.130.1/moodle/mod/forum/view.php?id=23">フ�...</option>
<option value="http://172.20.130.1/moodle/mod/resource/view.php?id=28">プ�...</option>
<option value="http://172.20.130.1/moodle/mod/questionnaire/view.php?id=27">ア�...</option>
<option value="http://172.20.130.1/moodle/mod/quiz/view.php?id=34">小�...</option>
<option value="http://172.20.130.1/moodle/mod/assignment/view.php?id=25">課�...</option>
</optgroup>
</select>
お世話になります。
以前にMoodleのアップグレード時のエラーということで質問をして、その後も
いろいろと試したのですが、やはりどうにも先に進めません。
質問後試してみたことは以下の通りです。
本家1.5から本家1.6へのアップグレード。1.5は現在サイトに見あたらなかった
ので以前にダウンロードしていたものを、1.6はサイトにある1.6.4+を利用しました。
サーバはMoodleのアップグレード時のエラーとは別のWindowsサーバを用意しました。
- 1.5で各設定終了後の画面までもっていく。インストールフォルダはmoodle
- その後1.5のフォルダをリネームし、1.6に差し替えてmoodle/adminにアクセス
- アップグレードする旨のメッセージに従い進めていく。途中赤文字のメッセージのところがあったが特に問題がなく終了。
本家で大丈夫だったので、三重大版(1.5ベース)から三重大版(1.6ベース)で
上記の手順で試したところ、やはりMoodleのアップグレード時のエラーのエラーが
でて先に進めませんでした。
アップグレードに関する質問は確認したのですが、この手の質問はなくこちらで
固有の問題かと思いつつも、再度ご質問させていただきました。
もし解決方法がなければ、三重大版(1.6ベース)を新規にいれて、そこに三重大版(1.5ベース)のデータだけを移行することが可能なのかご教授いただければ
幸いです。
私のインストールガイドのMoodle 1.6の中にある「既存Moodleからの移行」という方法ではどうなるでしょうか。
その際,もし以前のものがすでにUTF-8になっているなら,EUC-JPからUTF-8への変換部分は必要ありません。
奥村先生、ご返信ありがとうございます。
該当箇所を確認後試してみました。
環境はWindows Server 2003上にApache2、PHP5、MySQL4です。
> 通常の更新と同様,ソースツリーを上書きしてすぐに管理者でアクセスする。
- moodle-m.tar.bz2をmoodleフォルダに解凍
- データベース、ユーザなどを作成
- /moodle/にアクセス、設定後2つ程度コース作成
- moodle07.tar.bz2をmoodleフォルダに差し替え
- /moodle/にアクセス、DBのアップグレードが始まるが、やはり同様のエラー
> 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
- 上記3までで作成されたDBをmysqldumpでバックアップ。もとのDBはUTF-8で作成のため変換作業はなし
- 別DBにエクスポート
- 1.6ベース版で別DBを指定してアクセス。
- DBのアップグレードが始まるが、同じようにエラー。
根本的に手順が間違っているかもしれないのですが、おかしな点などございましたらご指摘いただければ幸いです。
Windows上での作業になりますが、取り急ぎご報告させていただきます。
奥村先生
早々にご返信いただいたのに、ご連絡が遅れて申し訳ございません。
移行については、実データで最初行なっておりましたが、実データでの移行は
うまくいかず、もしや実データに問題があるのかと思い、一旦サイトを構築し
直してまっさらなデータで試してみました。まっさらといってもカテゴリを一
つ、その中にコースを二つほど作成しております。そのようなデータでも移行
ができないというのが現在のところです。
実データについては22M程度ありどのような形でお送りするのがよいのかわか
りませんでしたので、こちらにmysqldump(MySQL4.1.22)した上記テストデー
タを添付いたします。
ひとまず春は1.5ベースのものを利用し、秋よりアップグレード版を利用でき
ればよいかなと考えておりますので、まったく急ぎません。お手すきの時にで
もご確認いただけましたら幸いです。
お忙しいところ恐縮ですが、よろしくお願いいたします。
奥村先生
アップグレードの際にはお世話になりました。
文字化けの問題も解消でき、時間ができたのでアップグレード後の確認を行ないました。本日はそこで起こった問題について、またお力添えいただければと思います。
- 小テストを確認したときに、「x 名の 学生 が y 回受験しました」となっているのですが、その下には「表示するデータはありません。」と表示されて、確かになにも表示されません。
- プレビュータブに切り替えると、「Could not create new entry in question_attempts table」と表示されました。
- 問題タブに切り替えると「Error creating a default category!」や「Could not find any question categories!」と表示されました。
phpMyAdminでデータベースを確認してみると、新規にセットアップしたデータベースには存在するテーブルがアップグレードしたデータベースには存在していませんでした。試しにmod\quiz\db\mysql.sqlを参考に存在しないテーブルを作成しました。すると2や3のエラーは表示されなくなりました。
ただし、問題タブでは登録されているはずの問題が表示されません。phpMyAdminにてquiz関係のテーブル内を確認しましたがきちんと登録されていることが確認できました。また、テスト後の評点などもあるようです。
「Could not create new entry in question_attempts table」のエラーから1.5.3ではquiz、1.6.4ではquestionというように使われるテーブルが違い、そのテーブル間でのデータ移行ができていない?のでしょうか。
登録したテスト問題自体とテストを受けた結果について移行できないのはかなりの痛手なのですが、この問題を解消する方法などございましたら、ぜひご教示いただけましたら幸いです。
奥村先生
早々のご返信、ありがとうございました。
早速mysql.phpを差し替えて試してみたところ、小テストでのエラーは消え、通常通りの操作ができるようになりました。登録済みの問題やテスト結果も問題ありませんでした。phpMyAdminでquestion関連のテーブルを確認してみましたが、こちらもきちんと登録されておりました。
多分これで旧バージョンからのものをそのまま活用できるような形になったように思います。重ね重ねお礼申し上げます。
もし、本家でなく三重大版で不具合がおこると切り分けができた場合にはフィードバックさせていただきます。今後ともよろしくお願い申し上げます。
同窓会でもMoodle and/or Elggを使用するかもしれない状況になってきたので,Moodle 1.8ベースのものとElgg 0.8改良版を少しいじりはじめています。
- svn checkout http(s)://oku.edu.mie-u.ac.jp/repos/miemoodle/moodle07(Moodle 1.6ベース)
- svn checkout http(s)://oku.edu.mie-u.ac.jp/repos/miemoodle/moodle08(Moodle 1.8ベース)
- svn checkout http(s)://oku.edu.mie-u.ac.jp/repos/miemoodle/elgg-0.8m(Elgg 0.8ベース)
OpenPNEとか商用SNSという話もあるのでまだわかりませんが。
奥村先生
以前DB移行の際はお世話になりました。
また現在も三重大版を活用させていただいており、ありがとうございます。
この度別のところでMoodleを使うことになり、1.8.4+ベースの三重大版Moodle
をインストールしてみました。コースを新たに作成する際に気づいたのですが、開講日やユーザー登録の開始日や終了日の「月」の部分が化けておりまし
た。
開講日 7 2?? 2008 (図をアップできればよかったのですが)
試しに本家Moodleをインストールして言語パックを入れてみたところ、問題な
く表示されました。
これ以外の検証は行なってはいないのですが、何か確認する事項等ございまし
たらご教示いただけましたら幸いです。
[環境]
Windows Server 2003(別サーバ同OSで試しましたが同様でした)
Apache 2.2.4
PHP 5.2.1
MySQL 5.0.45
奥村先生
ご返答ありがとうございました。
ご指示に従い、moodledata/lang内の言語パックのフォルダをリネームしてみ
たところ表示されるようになりました。
こちらでは1.6.5+ベースのものを利用させていただいていておりmoodledata/lang
なるものはなかったのでまったく気づきませんでした。これはmoodledata/lang
のほうがmoodle/langよりも優先されるということになるのでしょうか。
ともあれ問題解決にいたることができました。ありがとうございました。
白井先生
Windows Serverということで日本語ファイルやフォルダ名の問題から今後先
生のfs_moodleも利用させていただくことになるかもしれません。その際には
どうぞよろしくお願いいたします。
日本語版Windowsでありながらシステム全体のロケールを変えてしまえばUnicodeでファイル名/フォルダ名を扱えるかも知れない,というところは一時的に実験したのですが,ネットワークドライブに接続できないなど,日本語版Windowsが日本語の名前を使っている部分に悪影響が出ることも判明したので,怖くなって実験を止めました.
日本語版Windowsではなく,英語版Windowsをインストールすれば,もしかしたらUnicodeでファイルシステムが取り扱われるのではないか?という期待があります,どうなのでしょう.どなたか情報をお持ちの方は教えて頂けると勉強になります.
奥村先生、白井先生
情報ありがとうございました。
1.8.4+ベースのMoodle稼働サーバは、こちら管理のものではないため勝手な設定はできません。こちら管理のものはMoodleのみの稼働サーバのため設定は変更できますが、残念ながら他の部分にも影響を与えてしまうのですね。
前回問題となった開始日等の「月」の文字化けの件で、問題が起こってしまったのでご教示いただければ幸いです。
moodledata/langを消すことでその問題は解消したのですが、代わりにカレンダーの年月部分の文字化けが起こりました。(2008蟷エ 02譛)
これは1.6.4+のほうで経験済みだったので、同じようにしてmoodle/lang/ja_utf8/langconfig.phpの$string['localewincharset']をUTF-8にすることで対応しました。すると前回の「月」の文字化け問題が発生してしまいました。
langconfig.phpをUTF-8からCP932へ戻すと、カレンダーの年月は化けますが、「月」は正しく表示されるようです。
なにか解決方法などございましたらよろしくお願いいたします。
ううむ,カレンダーの年月日(Windows固有)の問題ももきちんと本家に対応して貰わないとダメですね.時間が出来たらTrackerにお願い(?)してみます.
まず,カレンダーの年月日がオリジナルのままで文字化けするのは正しい症状です.
langconfig.phpの$string['localewincharset']は'CP932'のままで良いです.
Moodle1.8でのカレンダーの年月日の文字化け対策は,
http://moodle.org/mod/forum/discuss.php?d=68531
こちらの記事を参考にして下さい.
(最初の投稿は間違いだらけです.一番最後の投稿を参考にして下さい)
群馬大学の上田 浩です。
2008年版の公開ありがとうございます。
本学でも新年度よりMoodle1.8に移行すべく、
2007年度の三重大学版Moodleの設定やデータを全て引き継いだ形で
先生のパッチが適用されたものでテストを開始しております。
現在、コースにアップロードされたファイルを閲覧できるかどうか検証しているのですが、ディレクトリを掘って格納したファイルを閲覧できません。
ディレクトリを掘らずに直下に、つまり、/var/www/moodledata/[コースNo]
以下のファイルは閲覧できます。
年度末お忙しい所恐縮ですが、皆様のアドバイスを頂ければ幸いです。
環境は以下の通りです。OSはCentOS5です。
名称 | 情報 | レポート | 状態 |
---|---|---|---|
moodle | バージョン 1.8.4 を使用しています。 | OK | |
unicode | 必ずインストールおよび有効化してください。 | OK | |
database | mysql | バージョン 4.1.20 を使用しています。 | OK |
php | バージョン 5.1.6 を使用しています。 | OK | |
php_extension | iconv | 最適な動作のため、インストールおよび有効化してください。 | OK |
php_extension | mbstring | 最適な動作のため、インストールおよび有効化してください。 | OK |
php_extension | curl | 最適な動作のため、インストールおよび有効化してください。 | OK |
php_extension | openssl | 最適な動作のため、インストールおよび有効化してください。 | OK |
php_extension | tokenizer | 最適な動作のため、インストールおよび有効化してください。 | OK |
で動作テストしていますが,フォルダの中の「ほげ」というディレクトリの中の okumura.jpg を閲覧できるでしょうか。
なお,うちのほうは実は1.8にするかどうか悩んでいて,ロールも特に必要ないから軽いほうがいいので1.6.6+でしばらく止めておいて,そのうち1.9が出ればそちらに移行するということも考えています。
これは mod/resource/type/file/resource.class.php の309行目あたり
$relativeurl = "/file.php/{$course->id}/{$resource->reference}";
を
$relativeurl = "/file.php/{$course->id}/".rawurlencode($resource->reference); // T.Shirai
に変更したために生じたものですね。白井先生起源のバグ?
この変更を元に戻すと表示されるようになりました。ただし,URLに全角文字が含まれていると,ブラウザによっては表示できなくなるかもしれません。
白井先生,助けてください!
ところでもう1.9が出てしまいましたね。また悩むところですが,とりあえず1.9をテストしてみます。
当方の環境では,ダイレクトリンクした際のURLが
のように特におかしなこともなく引き渡されているようです.
上田先生の状況と可能な限り同じような状況を再現すべく,Firefoxを用いて画像ファイル(javadownload1.jpg, javadownload1.png)をフォルダjavaの下にアップロードし,リソースを割り当てました.
上田先生,奥村先生,相対パスを用いたことでおかしくなるのはどの段階でしょうか.rawurlencode()で'/'がエンコードされたことにより生じる問題なのだろうと思うのですが,Firefoxならば問題は発生しないと思います.(可能でしたらIEではどうか,試してみて頂けないでしょうか)
rawurlencode()を外せば閲覧できるとなると,file.php側の問題とは考えにくいですよね.どこだろうどこだろう.
問題の切り分けのために,file.phpでのアクセスを試してみて頂けないでしょうか.
http://images.ev.gunma-u.ac.jp/moodle08/file.php/12/java/javadownload1.PNG
でしょうか.これで画像は表示できます? >上田先生
http://images.ev.gunma-u.ac.jp/moodle08/file.php/12/java/javadownload1.PNG
は表示できます(Firefox, IE7 on Vistaとも)。取り急ぎ。
可能性として濃厚なのは,$relativeurl が2回,rawurlencode()されているのではないか,という点ですね.%2Fの%が更にurlencode()されていると,さすがのFirefoxも元には戻せない,ということではないでしょうか.
$resource->referenceが,ここ以前でurlencode()あるいはrawurlencode()されていないでしょうか.resource.class.phpに引き渡された時に既にエンコードされていても,それは問題ないと思いますので,resource.class.php内が可能性として高いですね.
resource.class.phpはインポートされているようですので,その上位のPHP内で既にrawurlencode()されている可能性もありますね.私は場当たり的に末端で修正を行いました.奥村先生がもっと上流のところで手を打たれているならば,2重にrawurlencode()される可能性があります.このトピックの上の方で,directoryのエンコードの話題が出ていますよね?
(上流1箇所で修正が済むならばその方が安心です.もしこの仮定が当たっているならば,教えて頂けると助かります!)
わっかりました.すみません,私のミスです.
私がrawurlencode()した,と報告している箇所ですが,実際には自作のrawurlencode(),fs_rawurlencode()という関数を使用していました!
PHPを練習しながら作った関数ですので,恐ろしくて人前に出すのを憚っていました.
やろうと試みたことは,コロン,半角スペース,スラッシュ,バックスラッシュはエンコードしないrawurlencode()です.
いまから思うに,エンコードした後に,コロン,半角スペース,スラッシュ,バックスラッシュの部分を置換で元の記号に戻せば良いような気もする,以下のような見るからに効率の悪そうな関数です.何はともあれ動いているので怖くて手を入れずにいました.
奥村先生の仰るとおり,Firefoxも / がエンコードされてしまうとお手上げなのですね.ところで対策はどうしましょう.
function fs_rawurlencode($path)
{
$path = trim($path, " ");
$ret = "";
// "\\"で分割
$path_parts = mb_split("\\\\", $path);
foreach ($path_parts as $key_sl1 => $path_slash1) {
// "/" で分割
$ret_slash2 = "";
$path_slash1 = mb_split("/", $path_slash1);
foreach ($path_slash1 as $key_sl2 => $path_slash2) {
// "." で分割
$ret_dot = "";
$path_slash2 = mb_split("\.", $path_slash2);
foreach ($path_slash2 as $key_dot => $path_dot) {
// ":" で分割
$ret_col = "";
$path_dot = mb_split(":", $path_dot);
foreach ($path_dot as $key_col => $path_col) {
// " " で分割
$ret_spc = "";
$path_col = mb_split(" ", $path_col);
foreach ($path_col as $key_spc => $path_spc) {
if ($key_spc == 0) $ret_spc = rawurlencode($path_spc);
else $ret_spc .= ' ' . rawurlencode($path_spc);
}
if ($key_col == 0) $ret_col =$ret_spc;
else $ret_col .= ':' . $ret_spc;
}
if ($key_dot == 0) $ret_dot = $ret_col;
else $ret_dot .= '.' . $ret_col;
}
if ($key_sl2 == 0) $ret_sl2 = $ret_dot;
else $ret_sl2 .= '/' . $ret_dot;
}
if ($key_sl1 == 0) $ret = $ret_sl2;
else $ret .= '\\' . $ret_sl2;
}
return $ret;
}
// $relativeurl = "/file.php/{$course->id}/{$resource->reference}";
$relativeurl = "/file.php/{$course->id}/".rawurlencode($resource->reference); // T.Shirai (okumura: this patch causes trouble when linking to file inside subdir
となっています。この312行目を消して,311行目の頭の // を外せば元に戻ります。ただし,全角ファイル名の扱いが英語版に戻ってしまいます。ちゃんと直すには,上のrawurlencodeを白井先生のものに置き換えればいいわけです。どうするか,ちょっと考えます。
少し出遅れました.
とりあえずfs_moodleをバージョン2.0に上げた際に,関数群を整理しました.その際にfs_moodleでも使い回しが効きそうな関数をjp_lib.php(添付)に分けました.これがパーフェクトというものでは決してありませんが,何か日本独自の問題に対処するためのライプラリが必要であるならば,改良を加えていきませんか?
関数の頭に付いているfs_は取って構いません.
fs_moodleでは,lib/setuplib.phpの頭のところで,require_once()して関数群を読み込んでいます.例えばここに,require_once($CFG->libdir.'/jp_lib.php'); を入れてはどうでしょう.
IE固有の問題点は,春休みの宿題として,私の方で把握している箇所をWikiに整理し直しました. (こちら)
Kawanoさん,手っ取り早くは,添付のjp_lib.phpを上に書いたようにlib/setuplib.phpから呼び出すようにrequire_once()を挿入し,奥村先生が示して頂いている箇所のrawurlencode()をfs_rawurlencode()とすれば,(多分)ファイルのダウンロードだけに関して言えばOKになると思います.
function myurlencode($x) {
return preg_replace("/([^a-zA-Z0-9_.+-=?&\/])/e", "'%'.implode('',unpack('H2','\\1'))", $x);
}
でもbin2hex()という関数を使うほうがもっと簡単でした:
function myurlencode($x) {
return preg_replace("/([^a-zA-Z0-9_.+-=?&\/])/e", "'%'.bin2hex('\\1')", $x);
}
いまから思うに,なぜ私は "\\"で分割,"/" で分割,"." で分割,":" で分割," " で分割してrawurlencode()しようと考えたのでしょう. すみません,折角の日曜日の時間を割いて考えて頂いたのに,こんなボケたことを言ってしまって...
多分,C:\program files\ほにゃらら や \\narita\mech\白井 といったようなWindowsの(内部的な)アドレス指定を考慮に入れたのだと思いますが,fs_rawurlencode()で関係しているのはURL一般に使われるアドレスですのでコロンや二重のバックスラッシュなんて考えなくて良いはずですね.path_info()関数が頭にあったのかも知れません.
このPHPの引数としてファイルの相対アドレスをマルチバイトで渡す問題に関しては,先々週辺りからMoodle1.8.4+(5+),Moodle1.9+で主に「課題」周りで対策が始まりましたね.lib/filelib.phpのget_file_url()関数です.この関数は”スラッシュを使う”のOn/Offへの対応とマルチバイトのデータに関する対応を一つの関数にまとめてくれています.いまあちこちで対策しているIEの対策がこの一つの関数に集約するかも知れません.
失礼ですが,この話題は別のディスカッショントピックスとして分けてお話しませんか?
http://moodle.org/mod/forum/discuss.php?d=94845
白井先生の書かれているように、Moodle Trackerのほうを見ると、改善が始まったようですね。
http://tracker.moodle.org/browse/MDL-13792
今日、サーバを操作できたので、改めてコードを見ると、単一ファイルの課題はスラッシュを使うかどうかの対応はできていますが、高度なファイルのアップロード課題のほうは、ぜんぜん対応がなくて、びっくりしました。
わたしも新しく提案されている、get_file_url関数に期待したいです。白石先生のおっしゃるように、この話題は、別のディスカッショントピックでしたほうがいいようですね。他のディスカッションでも報告されている情報も、関連があるような気がします。統一したほうがいいのかもしれませんね。
kawanoです。
奥村先生が公開してくださった、三重大学版の1.9+(4月17日版)を使ってみたみたので、以前報告した日本語ファイルに関する状態がどうなったか、報告します。
高度なファイルのアップロードで課題として提出したファイルですが、IE6からアクセスできるようになっていました。また、削除はやはりファイル名が文字化けしてだめです。Moodleの設定では、スラッシュは使用するようにしています。
http://moodle.org/mod/forum/discuss.php?d=94845で議論されているように、get_file_url関数のおかげですね。なんとかファイルの削除にも使えるといいのですが。
あと、話題がかわりますが、インストールした後、提出課題の一覧をみようとしたら、次のようなエラーが表示されました。
Notice: Undefined variable: fullname in /home/moodle_19x/mod/assignment/lib.php on line 1306
Fatal error: Function name must be a string in /home/moodle_19x/mod/assignment/lib.php on line 1306
該当箇所をみると、fullname関数に「$」が付いていました。もともとついてたんでしょうか、とにかく「$」を削除すれば正常に動いていましたので、報告しておきます。
kawanoです。
奥村先生にお世話になったお礼、といってはなんですが、不具合を見つけたので報告します。
3/29版の三重大Moodle 1.9+で、課題の一覧を表示させたところ、ユーザ名の部分だけ表示されていませんでした。
それで、mod/assignment/lib.phpの1302~1309行目あたりを次のようにしたところ、正しく表示されました。
$userlink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $auser->id . '&course=' . $course->id . '">' . $auser->username . '</a>';
$row = array($picture, $userlink, fullname($auser), $grade, $comment, $studentmodified, $teachermodified, $status, $finalgrade);
ひとまず、ご報告まで。
なるほど.了解しました.
三重大版では,顔写真,ユーザ名,姓名...最終評点というように,顔写真と姓名の間にユーザ名が追加されているのですね.丁度,いま,その辺りをファイルへの出力も含めて改善しようと思っていたところでした.ありがとうございます.
では後ほど,この辺りの修正箇所を参考にさせて頂きます > 奥村先生
エクスポートしたファイルの項目も,
名,姓,IDナンバー,所属組織,部署,メールアドレス,..
というのは少し驚きました...日本人の気持ちとしては,姓と名を別々に分ける感覚は無いですね.ソーティングは学籍番号(うちですとユーザ名)で行ないます.IDナンバーはユーザ登録時に誰も何も入力しません.所属組織,部署は個人的に一括でユーザ登録する際に入力していましたが...IDナンバーは何のためにあるのか分からなかったのですが,ここで出てくるとは思っていなかったです.
kawanoです。
三重大版Moodle 1.9+(3/29版)で、もう一つ不具合を見つけましたので、報告させてください。
小テスト(quiz)モジュールのところで、受験結果を表示させようとすると、ウィンドウ内が真っ白になります。デバッグ情報などを表示させてみると、次のようなメッセージが出ました。
Parse error: syntax error, unexpected ',' in /hogehoge/moodle/mod/quiz/report/overview/report.php on line 464
ということで、該当するファイルの464行目を見てみると、次のようになっています。最後が「;」になっていないためだと思いますが、家からアクセスしているので、検証できていません。
$row[] = $attempt->username, // okumura
奥村先生>
確認していただけますと、幸いです。よろしくお願いいたします。
kawanoです。
三重大学版 1.9+(3/29版)で、名前が日本語のファイルで、変なトラブルに遭遇しています。別のディスカッションを立てようかと思ったのですが、一応三重大学版Moodle上での話なので、こちらに書かせて下さい。
「課題」の「単一ファイルのアップロード」や「ファイルの高度なアップロード」で、課題としてアップロードした、名前が日本語のファイルにアクセスできないのです。ただ、この症状がでるのは、確認できている範囲で、ブラウザがIE6の場合だけで、IE7やFirefox 2.0では問題なくアクセスできます。OSはWindows XPです。
たとえば、「手帳用住所関係.doc」というファイルをアップロードしたあと、Moodle 1.9では削除ができますが、削除しようとすると、ファイル名が「手帳用住所関俁Edoc」と文字化けして、削除できなくなってしまいます。
これ以外にも、1.9+に移行する前の、三重大学版1.6+のときにアップロードしたファイルも、文字化けしているらしく、表示も削除もできません。
ブラウザの問題かと思い、IE7やFirefoxでアップロードしたものを、IE6からアクセスしようとしましたが、ダメでした。IE6でアップロードしたものは、IE7でもFirefoxでもアクセスできています。
サーバは、Vine Linux 4.1で、Apache2は2.2.3を、PHPは5.2.5を使っています。php.iniでは、mbstring関係は次のように書いています。EUC版のPukiWikiを使っている関係で、こうなっています。
default_charset = EUC-JP
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.encoding_translation = Off
さらに、Moodle本体があるディレクトリに、次のような.htaccessを書いてあります。
<IfModule mod_php5.c>
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
php_value mbstring.script_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.encoding_translation On
</IfModule>
どうか、アドバイスのほど、よろしくお願いいたします。
IE6ですか……。もう見つけるのに苦労しそうです。ちょっと待ってくださいね。
http://oku.edu.mie-u.ac.jp/moodle/
や
http://oku.edu.mie-u.ac.jp/tex/
は三重大版1.9+を使っていますが,ここでも再現するでしょうか。
> 三重大学版1.6+のときにアップロードしたファイルも、文字化けしているらしく
Moodle 1.6で使っているときは問題なかったけれども1.9にしてから文字化けしたということでしょうか。
ちなみにうちは
mbstring.http_output = pass
にして他のmbstring関係は何も設定していませんでした。これは今回の問題とは関係ないでしょうけれど(全部UTF-8なら変換は起こらないでしょうから)。
奥村先生、返信ありがとうございます。
> Moodle 1.6で使っているときは問題なかったけれども1.9にしてから文字化けしたということでしょうか。
はい、そういうことになります。
http://oku.edu.mie-u.ac.jp/tex/
を使わせていただき、動作テスト用のコースにある、日本語ファイル名のテキストファイルにアクセスするのは、全部成功しました。
で、同じファイルをダウンロードさせていただいて、自分のところの課題にアップロードしたあと、アクセスしてみましたが、みごとにファイル名が文字化けして、アクセスも削除もできない状態でした。
ただ、管理メニューの「ファイル」->「moddata」とアップロードしたファイルを探して、アップロードしたファイルにアクセスするのは成功しました…ファイルを開くのも、削除するのも問題なくできています。
となると、課題(assignment)モジュールの問題なんでしょうか。うーむ。
時間ができたので、自宅からテストしてみました。2種類テストをしました。すべて、Windows XP + IE6から行っています。
- 奥村先生が作ってくださった、「課題のテスト」(単一ファイルのアップロード)で、「参加者」のロールで、「手帳用住所関係.doc」というファイルをアップロードしたところ、アクセスすることができました。
- 私のほうで「高度なファイルのアップロード」の課題として、「高度なアップロードのテスト」という課題を作成しました。「参加者」のロールで、「手帳用住所関係.doc」というファイルをアップロードしたところ、ファイルをダウンロードすることも削除することもできませんでした。
ダウンロードしようとしたときに、表示されるメッセージは、
「申し訳ございません、ファイルが見つかりませんでした」です。
削除しようとしたときに、確認画面で表示されるファイル名は、「手帳用住所関俁Edoc」でした。
ということで、状況が絞れてきました。というか、絞ってから質問すべきでした。申し訳ありません 少なくとも、Windows環境+IE6と Moodle 1.9の「高度なファイルのアップロード」の課題において発生する現象のようです。
自分のところのMoodleで、再度テストしてみたところ、上記の1.と2.の現状をあらためて確認しました。
奥村先生>
状況によっては再度テストさせていただきたいと思っています。そのため、アップロードしたファイルなどはそのままにさせていただきました。邪魔なようでしたら、削除していただいてかまいません。
ファイル名が文字化けして,アクセスも削除もできない,とのことですが,ここでいう”アクセスできない”とは,「ダウンロードはできるがファイル名が文字化けしている」ということでしょうか?
もしブラウザにIEを用いているのであれば,試しにFirefoxを使ってファイルのダウンロードと削除を行なってみて頂けないでしょうか.
すみません,もしかしたらまた,rawurlencode(fs_rawurlencode)絡みかも知れません.
画面に表示されるファイル名が化ける問題だと思い込んでいたため,他人事と考えていました.”削除できない”で,ピンッと来ました.
すみません,もう少し注意して前の書き込みを読むべきでしたね!
IE6の「インターネットオプション」-「詳細設定」-”ブラウズ”の中の,”常にUTF-8としてURLを送信する(再起動が必要)”のチェックのOn/Offの違いが影響するかと思ったのですが,これは当方の環境(fs_moodle)では問題無かったですね.
削除で影響しそうな箇所と言うと,mod/assignment/type/upload/assignment.class.php中のfunction delete_file()だと思います(790行近辺).ここでファイル名をURLより,
$file = required_param('file', PARAM_FILE);
で受け取ります.もしこの段階で”手帳用住所関係.doc”が文字化けをしているのだとすると,lib/moodlelib.phpのfunction clean_param(),$typeがPARAM_FILEの箇所,
case PARAM_FILE: // Strip all suspicious characters from filename
$param = ereg_replace(':cntrl:|[<>"`\|\':\\/]', '', $param);
$param = ereg_replace('\.\.+', '', $param);
if($param == '.') {
$param = '';
}
return $param;
ここが関わっているのかも知れません.
ちなみに,required_param()もlib/moodlelib.php中にあります.
function required_param($parname, $type=PARAM_CLEAN) {
// detect_unchecked_vars addition
global $CFG;
if (!empty($CFG->detect_unchecked_vars)) {
global $UNCHECKED_VARS;
unset ($UNCHECKED_VARS->vars[$parname]);
}if (isset($_POST[$parname])) { // POST has precedence
$param = $_POST[$parname];
} else if (isset($_GET[$parname])) {
$param = $_GET[$parname];
} else {
error('A required parameter ('.$parname.') was missing');
}return clean_param($param, $type);
}
このような関数です.このreturnする前は文字化けしていないのだとすれば,clean_param()が悪さをしているのだと思いますが...特に当方では「手帳用住所関係.doc」がIE6でも破壊された感じはしないのですよねぇ.
関係ないかも知れませんが,「サイト管理」-「サーバ」-「HTTP」の”スラッシュを使用する”のチェックをOnにした状態と,Offにした状態も比較してみては如何でしょうか.
> 関係ないかも知れませんが,「サイト管理」-「サーバ」-「HTTP」の”スラッシュを使用する”の
> チェックをOnにした状態と,Offにした状態も比較してみては如何でしょうか.
白井先生、時間があったので、先ほどの奥村先生のTeX Forumと自分のところのMoodleでのテストの後、自分のところのMoodleで、「スラッシュを使用する」のチェックのOn/Offを切り替えてテストしてみました。ブラウザは、IE6です。
- 「スラッシュを使用する」のチェックをOnにした場合、「単一のファイルのアップロード」の課題でアップロードした「手帳用住所関係.doc」をダウンロードすることができた。また、「高機能なファイルのアップロード」の課題でアップロードした「手帳用住所関係.doc」はダウンロードも削除もできなかった。
表示されるメッセージは、ダウンロードの時は、「申し訳ございません、ファイルが見つかりませんでした。」と表示される。削除の時は、ファイル名が「手帳用住所関俁Edoc」と表示され、削除に失敗する。 - 「スラッシュを使用する」のチェックをOffにした場合、「単一のファイルのアップロード」の課題でアップロードした「手帳用住所関係.doc」はダウンロードすることができなかった。また、「高機能なファイルのアップロード」の課題でアップロードした「手帳用住所関係.doc」もダウンロードも削除もできなかった。
表示されるメッセージは、ダウンロードの時は、「申し訳ございません、ファイルが見つかりませんでした。」と表示される。削除の時は、ファイル名が「手帳用住所関俁Edoc」と表示され、削除に失敗する。
ひとまず状況としては、以上のようなところです。スラッシュを使用するかしないかで、「単一ファイルのアップロード」課題でのファイルにアクセスできなくなってしまうのも、よくわからないところです。
kawanoです。
自分のところのMoodleでテストしてみて、気がついたことがあります。
現在「スラッシュを使用する」をOnにしていますので、「単一ファイルのアップロード」課題では、課題の提出画面でも提出課題の確認の一覧の画面でも、アップロードしたファイルのURLは、例えば次のようになっています。
http://hogehoge/moodle/file.php/1/moddata/assignment/100/3/手帳用住所関係.doc
ところが、「高度なファイルのアップロード」課題では、課題の提出画面でも提出課題の確認の一覧の画面でも、アップロードしたファイルのURLは、次のようにfile.phpのあとにスラッシュを使っていません。
http://hogehoge/moodle/file.php?file=/1/moddata/assignment/101/3/手帳用住所関係.doc
追加でわかったのは、とりあえずここまでです。
大阪国際大学の石川です。
質問に対する本来の回答とは少々話が外れますが、本学の moodle では50音順 (あいうえお順) の索引を用意しています。
|
|
学生の使用方法を見ていますと、殆どの学生はこの索引を利用して目的の courses を探し出しており、categories から目的の courses を探し出す学生は見かけなくなりました。
ただ、この索引は半手動で作成しているため、新しい courses が作成された場合に即座に索引に反映されるわけではない点が難点です。何とか自動化できればよいのですが、日本語の特性上、文字 code 順に並べても索引にならず読み仮名情報を必要とするため、良い策が思いつかない状態です。