ゲストも小テストを受けられるようにできないですか?

ゲストも小テストを受けられるようにできないですか?

- Tatsuro Ueda の投稿
返信数: 15
公立中学校教師の植田です

日英のフォーラムやモジュールを探したのですが、
該当する投稿を見つけることができなかったため、
質問させていただきます。

◆質問

ゲストも小テストを受けられるように、できないでしょうか?

◆背景

1年ほど前、中学校現場でMoodleを使用しました。

具体的には、期末試験の返却の際、
期末試験と同じものをMoodle上に小テストとして作成し、
その小テストを生徒が受験するという形で利用しました。

◎ねらい

ねらいは次のとおりです。

みなさんに思い出していただきたいのですが、
中学校で定期テストを返却するときは、
『できていない生徒ほどテスト解説を聞かない』
という笑いたくなるような笑えないパラドックスな状況があります。
これを少しでも改善したいと思い、Moodleを使用しました。

◎結果

結果は良いものでした。

生徒は1問1問答えるたびに正解か不正解かわかることが
とても良いと言っていました。
さらに「不正解についてはアドバイスを付けてほしい」という
中学生にしてはとても建設的なアドバイスをしてくれました。
最初、生徒のほとんどがチャットに流れ込んで
あわてて閉鎖するなどということもありましたが・・・
(中学校ではチャットは絶対に作ってはいけません)

◎アカウント管理の必要性

ただ、以上のような利用をする場合、
はっきり言ってしまうとユーザー管理はまったく必要ありません。
そこで最初は小テスト用アカウントを作ったのですが、
1人の生徒がそのアカウントでログインすると他の生徒が使えなくなり、
実際の授業で失敗したことがあります。
そのときは、大急ぎでその場で40人分のアカウントを発行しました。

◎公立中学校という場

また、公立中学校という場所ではPCの数が少なく、
なかなか一斉授業の中で使用することができません。
サーバーはもちろんないため、自前でレンタルし運用費は自腹を切っています。
すると外部にデータを置くことになるため、
あまり生徒の個人情報を保存したくありません。
したがって現状では、授業時間外にログインせずに任意で利用する
という形を初めはとった方が、良いように思いました。

─────
長文で大変失礼しましたが、以上のような背景から、
ゲストアカウントでの小テスト受験を実現する方法を
教えていただきたいと思っております。
どうぞよろしくご教授いただけると幸いです。
評点平均:有益(Useful) (1)
Tatsuro Ueda への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Tatsuya Shirai の投稿

 ゲストでも小テストは受験できるが,同時に多数の学生がゲストアカウントでは受験できない,ということですね.私は試したことが無いのですが,学習履歴を保存するのが小テストの目玉の一つである以上は現状,仕方が無いかなぁと思います.

 小テストではなく,レッスンではダメでしょうか?(こちらもゲストでは制限があるでしょうか?)

 40個のアカウントを作成するのは悪い考えでは無いと思います.


 学校内部のサーバでも,個人情報に関しては不安があります.
 どこまで個人情報をMoodleに登録するのか,次第ではないでしょうか.顔写真や電話番号はNGですよね.電子メールアドレスも,もし不要であるならばダミーのアドレスを入力して”このメールアドレスは無効”とすれば良いでしょう.小テストの結果...同じクラス内で自由に閲覧できない限りは構わないのではないでしょうか.氏名に関してはローマ字とか,思い切ってニックネームではどうでしょう.パスワードは,Moodle専用のパスワードにしてね!と念を押す.

 比較的安心して利用できるサーバと専任の技術者を各小中学校に配置できるだけの理解と予算が確保できる世の中になると良いですね.政治・官僚だけではなく,先生や保護者や地域社会全体の理解も必要です.

 学内からのアクセスに限定するのであればサーバはWindowsでも良いでしょう.もちろんLinuxの方がパフォーマンスと安定性は良いですが.ムダに遊んでいるWindowsPCはありませんか?(埃をかぶっているTV会議システム専用とか^^) OSの入れ替えはできないにしても,関係者に了承をとってMoodleを動かすことはできるのではないでしょうか.LANで外部に繋がっていないならばセキュリティの上ではさらに好都合です.

Tatsuya Shirai への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Tatsuro Ueda の投稿
なるほど、レッスンですか・・・ちょっと試してみます。

自前サーバーの管理については、ちょっと荷が重くて避けていました。
レンタルサーバーはセキュリティパッチとかバージョンアップとか
すべて先方がやってくれるので超ラクチンですよ。
さらに私が利用したレンタルサーバーは
moodleのインストールの代行までやってくれたので、
もっとも手軽な選択肢として利用しました。

徐々に内部へ持って行くべきなのでしょうが、
サーバー管理はごめん被りたいのが偽らざる所です。
Tatsuya Shirai への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Tatsuro Ueda の投稿
なんと、レッスンにすればゲストでも良いのですね!
まさに目からウロコです。

以下は小テストをエクスポートしてレッスンにインポートしたものです。
中学2年生の理科です。
覚えてますか?(笑)

http://www.rodan-t.com/test/course/view.php?id=8

ん、「レポートにアクセスできません」?
ちょっと設定をいじってみます。
本当にありがとうございました。
Tatsuro Ueda への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Tatsuro Ueda の投稿
むむ、他のゲストの操作履歴がサーバーに残ってしまい、
初めてなのに「前回中断したところから始めますか?」と聞かれてしまうようです。
もう少し状況を調査してみます。
Tatsuro Ueda への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Yuuichi Yamaguchi の投稿
Ueda先生

その後,ゲストアカウントでの小テストは実施できたのでしょうか?私もゲストアカウントでの小テストを実施させたいのですが,設定方法がわかっておりません。

パーミッションのオーバーライド

Guest

小テストを受験する
mod/quiz:attempt
を「許可」にしたのですが,ゲストアカウントでは小テストが受験できません。


申し訳ございません、ゲストユーザは小テストの表示または解答ができません。
フルユーザアカウントでログインしますか?

上記のメッセージが出てしまうのです。

この設定方法をご存じであれば,教えていただけないでしょうか?
Yuuichi Yamaguchi への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Takahiro NAKAHARA の投稿
eラーニングサービスの中原です。

少し気になったのでソースを見てみたところ、
小テストのview.phpの137行目あたりに

// Guests can't do a quiz, so offer them a choice of logging in or going back.
if (isguestuser()) {
$loginurl = $CFG->wwwroot.'/login/index.php';
if (!empty($CFG->loginhttps)) {
$loginurl = str_replace('http:','https:', $loginurl);
}

notice_yesno('<p>' . get_string('guestsno', 'quiz') . "</p>\n\n</p>" .
get_string('liketologin') . '</p>', $loginurl, get_referer(false));
finish_page($course);
}

と記述されていました。
isguestuser()はUserのIDからguestか否かを判定しているので、
ロールのパーミッション管理だけではおそらくゲストに受験させることは難しいと思います。
ソースの修正が可能であれば、

if (isguestuser()) {

の部分を、

if (!has_capability('mod/quiz:attempt', $context)){

に修正して、「mod/quiz:attempt」を許可すれば受験できるようになります。
Takahiro NAKAHARA への返信

Re: ゲストも小テストを受けられるようにできないですか?

- 石井 隆太郎 の投稿
moodle 3.2.3 (Build: 20170508)現在について、中原様の補足をいたします。

ffftpなりを使ってftpでmoodleサーバー/mod/quiz/view.phpにアクセスするところは変わりませんが
下の方のゲストかどうかを判別するコードが

if (isguestuser()) {
// Guests can't do a quiz, so offer them a choice of logging in or going back.
echo $output->view_page_guest($course, $quiz, $cm, $context, $viewobj->infomessages);
} else if (!isguestuser() && !($canattempt || $canpreview || $viewobj->canreviewmine)) {
// If they are not enrolled in this course in a good enough role, tell them to enrol.
echo $output->view_page_notenrolled($course, $quiz, $cm, $context, $viewobj->infomessages);
} else {
echo $output->view_page($course, $quiz, $cm, $context, $viewobj);
}
現在はこのようになってます。


この場合、isguestuser()を!has_capability('mod/quiz:attempt', $context)に変更しても、ゲストユーザーは利用できないらしく詰まったので

if (!($canattempt || $canpreview || $viewobj->canreviewmine)) {
if (isguestuser()) {
// Guests can't do a quiz, so offer them a choice of logging in or going back.
echo $output->view_page_guest($course, $quiz, $cm, $context, $viewobj->infomessages);
} else {
// If they are not enrolled in this course in a good enough role, tell them to enrol.
echo $output->view_page_notenrolled($course, $quiz, $cm, $context, $viewobj->infomessages);
}
} else {
echo $output->view_page($course, $quiz, $cm, $context, $viewobj);
}
このように変更しました。

これで無事
小テスト管理->パーミッション->小テストを受験する(mod/quiz:attempt)
にゲストを追加した小テストだけがゲストアクセスできるようになりました。

石井 隆太郎 への返信

Re: ゲストも小テストを受けられるようにできないですか?

- kiyoteru kaminaga の投稿
こんにちは。

かなり前の投稿に対する質問で申し訳ありません。

アドバイスいただけると助かります。

Moodle 3.4.1 (Build: 20180115) を利用しています。
/mod/quiz/view.php の変更前のコードは同じでしたので、
石井さん提供のコードに修正し、
小テスト管理->パーミッション->小テストを受験する(mod/quiz:attempt)
でゲストを追加したのですが、
「このコースにゲストはアクセスできません。ログインしてください。」
表示になってしまいます。

他にチェックすべき設定があればご教示ください。

kiyoteru kaminaga への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

よろしければ以下2つの設定をお試しください。

[Moodleトップページにゲストログインボタンを表示する]

  1. サイト管理者としてMoodleにログインする。
  2. 「ダッシュボード > サイト管理 > プラグイン > 認証 > 認証管理」ページに移動する。
  3. 「ゲストログインボタン guestloginbutton」を「表示」にする。
  4. ページ下部の「変更を保存する」ボタンをクリックする。

[ゲストがコースを利用できるようにする]

  1. サイト管理者または編集権限のある教師としてゲストが受験可能な小テストのあるコースに入る。
  2. ページ右上のアクションメニューアイコン (歯車) をクリックする。
  3. 「さらに ...」を選択する。
  4. 「コース管理」セクションの「ユーザ」タブをクリックする。
  5. 「登録方法」リンクをクリックする。
  6. 「ゲストアクセス」欄の右側にある閉じた目のアイコンをクリックする。

添付 guest_access.png
Mitsuhiro Yoshida への返信

Re: ゲストも小テストを受けられるようにできないですか?

- kiyoteru kaminaga の投稿
いつもありがとうございます。
・修正したコードを元に戻しました。
・ご教示いただきました2つの設定を行いました。
・該当カテゴリのパーミッションで「小テストを受験する(mod/quiz:attempt)」にゲストを追加しました。
・該当小テストのパーミッションで「小テストを受験する(mod/quiz:attempt)」にゲストを追加しました。
を行ったのですが、
「確認
申し訳ございません、ゲストユーザは小テストを表示および解答できません。
フルユーザアカウントでログインしますか?」
表示になってしまい、まだ、ゲストで小テストを受験することができません。
kiyoteru kaminaga への返信

Re: ゲストも小テストを受けられるようにできないですか?

- kiyoteru kaminaga の投稿
石井さん提供のコードを再び設置してみたところ、
(3) に遷移
受験可能回数、制限時間 が表示されますが、
「問題を受験する」ボタンが表示されない状況です。

if (!($canattempt || $canpreview || $viewobj->canreviewmine)) {
if (isguestuser()) {
// Guests can't do a quiz, so offer them a choice of logging in or going back.
echo $output->view_page_guest($course, $quiz, $cm, $context, $viewobj->infomessages); <--(1)
} else {
// If they are not enrolled in this course in a good enough role, tell them to enrol.
echo $output->view_page_notenrolled($course, $quiz, $cm, $context, $viewobj->infomessages); <--(2)
}
} else {
echo $output->view_page($course, $quiz, $cm, $context, $viewobj); <--(3)
}
kiyoteru kaminaga への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

例えば下記のようなゲスト用ユーザアカウントでの運用もお考えになってはいかがでしょうか。

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

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

ユーザ名:guest2
パスワード:guest2
Mitsuhiro Yoshida への返信

Re: ゲストも小テストを受けられるようにできないですか?

- kiyoteru kaminaga の投稿

アドバイスありがとうござます。

アドバイスいただいた方法ですと、
同一 id によるログインで「前回の受験を続ける」で受験を奪ってしまうことになるので、
同一 id によるログインを制御する方法が必要になりますね。

石井さん提供のコードは、当時は目的の機能を実現されていたものと思われるので
もう少し頑張って見ようと思います。




kiyoteru kaminaga への返信

Re: ゲストも小テストを受けられるようにできないですか?

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

以下のMoodleオンラインドキュメント (Capabilities/mod/quiz:attempt - MoodleDocs) を読みます限り、ゲストによる小テスト受験を可能にするためのプログラム修正は難しいように思えます。

"Guest users can never attempt quizzes, even if you give guests the mod/quiz:attempt capability. This is because all information about a user's progress through the quiz must be stored in the database associated with the user doing the attempt, and each user can only have one attempt open at a time. Since all guest users in Moodle share a single user account, letting guests attempt quizzes would just cause a big mess where different guest users' actions would conflict with each other. Therefore, people logged in as guest are never allowed to attempt quizzes."

[Capabilities/mod/quiz:attempt - MoodleDocs]
https://docs.moodle.org/37/en/Capabilities/mod/quiz:attempt

下記プログラム修正により、ユーザ名に「guest」を含むユーザ (例 「guest001」「002guest」等) の小テスト受験結果すべてを小テストページ表示時に削除することは可能です。

Moodleバージョン:
3.7.2+ (Build: 20190913)

修正対象プログラム:
mod/quiz/view.php

修正箇所:
82行目

[ 修正前 ]
// Create view object which collects all the information the renderer will need.
$viewobj = new mod_quiz_view_object();
$viewobj->accessmanager = $accessmanager;
$viewobj->canreviewmine = $canreviewmine || $canpreview;

// Get this user's attempts.
$attempts = quiz_get_user_attempts($quiz->id, $USER->id, 'finished', true);

[ 修正後 ]
// Create view object which collects all the information the renderer will need.
$viewobj = new mod_quiz_view_object();
$viewobj->accessmanager = $accessmanager;
$viewobj->canreviewmine = $canreviewmine || $canpreview;

if (preg_match('/guest/', $USER->username)) {
    $params = [
        'quiz' => $quiz->id,
        'userid' => $USER->id,
    ];
    $DB->delete_records('quiz_attempts', $params);
    $DB->delete_records('quiz_grades', $params);
}

// Get this user's attempts.
$attempts = quiz_get_user_attempts($quiz->id, $USER->id, 'finished', true);
Mitsuhiro Yoshida への返信

Re: ゲストも小テストを受けられるようにできないですか?

- kiyoteru kaminaga の投稿
いつもありがとうございます。
提供いただきましたコードによる運用をテストさせていただきます。