課題の”フィードバック”を学生に通知メールで即座に送りたい

課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿
返信数: 8

 前期末です.いま半年分の課題をまとめてチェックしています^^;.

 いままであまり意識しないで「通知メールを送信する」をチェックしてクイック評定で課題をチェックしていました.先日,どんなメールが届くのかな?とダミーのアカウントをコースに追加して自分宛にも通知メールを送ってみました.勿論,採点とフィードバックを入力済みです.

3M情処応用 ->課題 ->課題1B(ニュートン法):NEWTON1.BAS


白井 達也 があなたの提出課題「 課題1B(ニュートン法):NEWTON1.BAS 」 に関するフィードバックを投稿しました。

あなたの提出課題に追加されたフィードバックを閲覧することができます。


このメール本文にはフィードバックは全く記述されていないのですね.学生は”提出課題”(青い文字列)をクリックしてMoodleにログインしないと確認できない.このメールがPCではなく携帯電話に送られて学生もかなり困っていたでしょうね.10課題以上あるので10通以上.過去の学生は一言も文句を言わなかった...
 果たして課題がOKなのかNG(再提出!)なのかは学生も知りたいはず.家庭で共有しているメールアドレスを使用しているのだと,「NGです.再提出して下さい」というメールは見たくないのかも知れませんが...
 とりあえずフィードバックを通知メールに挿入できないか、少し調べてみようと思います.既に対策済みの方などいらっしゃいましたら情報提供お願いします.あるいはMoodle本来の機能で,設定さえ変更すれば解像は不要であるなどの情報も期待しています.
#まずはmod/assignment/lib.phpのfunction process_feedback()あたりから追い掛ける予定.
Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿

 意外と簡単に発見.mod/assignment/lib.phpのfunction assingment_cron()の後半ですね.

             $posttext  = "$course->shortname -> $strassignments -> ".format_string($submission->name,true)."\n";
            $posttext .= "---------------------------------------------------------------------\n";
            $posttext .= get_string("assignmentmail", "assignment", $assignmentinfo)."\n";
            $posttext .= "---------------------------------------------------------------------\n";

一部だけ抜き出すとこんな感じ.コードを見る限り,設定によってフィードバックを本文に入れるかどうかを判断しているような感じは無い.

 「フィードバックも送信しますか?」といったチェックボックスをクイック評定などの画面に追加して,それがONならばフィードバックを読み出し,挿入するだけで良いのじゃないでしょうか.ああ! これはcronですね.そのようなインタラクティブな機能のON/OFFは(データベースのテーブルに項目を追加しない限り)無理ですね.サイト全体でのコントロールになりそうです.

 そもそもフィードバックをメール本文に挿入してはいけない/したくない,という積極的な理由は何かあるのでしょうか? ものすごく長大なフィードバックを記述する先生がいる? なるほど.では頭の100文字のみ挿入,ということで如何でしょうか?

Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿
 さらに言うと,課題に対するフィードバックの通知は迅速に学生に伝えたい.cronで悠長に1日1回(かどうかは未確認)の連絡では遅い.もし通知メールの送信が1日に1回ならばその点も改善が必要.
Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿

 これは勘違いでした.21:48に更新したフィードバックが約30分後にメールで届きました.この程度の遅延は必要ですね,コメントを修正する可能性がありますから.

    /// Notices older than 1 day will not be mailed.  This is to avoid the problem where
    /// cron has not been running for a long time, and then suddenly people are flooded
    /// with mail from the past few weeks or months

    $timenow   = time();
    $endtime   = $timenow - $CFG->maxeditingtime;
    $starttime = $endtime - 24 * 3600;   /// One day earlier

やはり30分遅れで間違い無いですね.いまから30分前(maxeditingtime)から,さらにそこから1日前までの間に更新された評価かつ未送信のもののみメールされる仕組みのようです.

Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿

 フィードバックのデータはmdl_assignment_submissionsに格納されており,コメントはsubmissioncommentのフィールドにHTML形式で保存されています.

 function assignment_cron()でメール送信する際には,function assignment_get_unmailed_submissions()でコメント未送信の評価を抽出して処理を行います.get_records_sql()で,mdl_assignment_submissionsの全フィールドを変数にコピーしていますので,$submission->submissioncommentで容易に参照できそうです.もしこれが空ではないならば,HTMLパートとテキストパート用に整形した上でemail_to_user()に渡すようにすればOKですね.

 悩ましいのはコメント全文を電子メールに添付するかどうか.もし頭の100文字とでもするのであればHTMLパート部の整形が難しい.いっそのこと,単なるテキストに変換した上でHTMLパートに埋め込む手もあります.とりあえずちょっと試してみましょう.cronの都合でデバッグが30分単位になりますが...

Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿

一応,テストが終わりましたが完璧かどうかは自信がありません.

mod/assignment/lib.phpのfunction assignment_cron()の後ろの方.

            $assignmentinfo = new object();
            $assignmentinfo->teacher = fullname($teacher);
            $assignmentinfo->assignment = format_string($submission->name,true);
            $assignmentinfo->url = "$CFG->wwwroot/mod/assignment/view.php?id=$mod->id";

// (FS_TEST): ここから追加
            $postfeedback = '';
            if (!empty($submission->submissioncomment)) {
                $postfeedback = format_text_email($submission->submissioncomment, $submission->format);
                if (mb_strlen($postfeedback) > 20) $postfeedback = mb_substr($postfeedback, 0, 20).'...';
            }
// (FS_TEST): ここまで追加
            $postsubject = "$course->shortname: $strassignments: ".format_string($submission->name,true);
            $posttext  = "$course->shortname -> $strassignments -> ".format_string($submission->name,true)."\n";
            $posttext .= "---------------------------------------------------------------------\n";
// (FS_TEST): ここから追加
            if (!empty($postfeedback)) $posttext .= $postfeedback."\n\n";
// (FS_TEST): ここまで追加
            $posttext .= get_string("assignmentmail", "assignment", $assignmentinfo)."\n";
            $posttext .= "---------------------------------------------------------------------\n";

            if ($user->mailformat == 1) {  // HTML
                $posthtml = "<p><font face=\"sans-serif\">".
                "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ->".
                "<a href=\"$CFG->wwwroot/mod/assignment/index.php?id=$course->id\">$strassignments</a> ->".
                "<a href=\"$CFG->wwwroot/mod/assignment/view.php?id=$mod->id\">".format_string($submission->name,true)."</a></font></p>";
                $posthtml .= "<hr /><font face=\"sans-serif\">";
// (FS_TEST): ここから追加
            if (!empty($postfeedback)) $posthtml .= "<p>".nl2br($postfeedback)."</p>";
// (FS_TEST): ここまで追加
                $posthtml .= "<p>".get_string("assignmentmailhtml", "assignment", $assignmentinfo)."</p>";
                $posthtml .= "</font><hr />";
            } else {
                $posthtml = "";
            }

            if (! email_to_user($user, $teacher, $postsubject, $posttext, $posthtml)) {
                echo "Error: assignment cron: Could not send out mail for id $submission->id to user $user->id ($user->email)\n";
            }
        }

青文字で書いた20という数字はフィードバックの頭から20文字をメール本文に含める,という意味です.この数字は自由に変えて下さい.
HTMLのフィードバックはタグを取り除いています.テキストパートにはそのまま,HTMLパートには\nを<br />に変換しています.

 

Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿

 調子が良ければTrackerに報告するかも知れません.

 もし試して何らかの問題が発生した場合はご連絡下さい.

 なお,次に公開予定のfs_moodleに本機能は搭載しますが,デフォルトでは無効としておきます.

Tatsuya Shirai への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Mari Yamauchi の投稿
白井先生、ありがとうございます。

全て理解しているわけではないですが、これは便利そうですね。

携帯電話に転送していると思うと、送信時間を気にしないといけなくなるのが、私としては悩ましいところですが。でも覚えておきます!
Mari Yamauchi への返信

Re: 課題の”フィードバック”を学生に通知メールで即座に送りたい

- Tatsuya Shirai の投稿
携帯電話へメールを送信する時間帯については、学生から授業中は避けて欲しい言われるのですが、彼らは様々なWebサービスやMLには参加していないのだろうか?

提出課題の通知メールに関して言うと、教師が課題の採点を終えた30分後に通知メールが送信されます。授業中は避けて下さいと言われると私たちは提出課題の採点を放課後に行わなければならないですねぇ。

方法論として考えられるのは、最初は通知メールを送信しない設定で提出課題の採点とコメントの記入を行い、あとで一括して通知メールを手作業で送る(クイック評定の画面で無く個別の評定画面で)。

そうですねぇ、ちょっと現実的ではないですね。
次の課題として、クイック評定の画面で、一斉に通知メールを送信するという機能を試しに実装してみようと思います。便利なのか不便なのか危険なのか、は使ってみないと分からないですよね。

なお、送信予約と云うのは無理ではないです。少々、プログラムの変更が必要ですが。それと、その設定変更はサイト全体に影響しますので、即座に通知メールをお構いなしに送信したい、という先生がいる場合にはどちらかが妥協しないとならないですが。技術的には可能ですよ。