Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Email notification when a quiz is submitted

From MoodleDocs

This is a old feature request ([https://tracker.moodle.org/browse/MDL-648 MDL-648]) and there are various patches floating around, but I now want to implement this properly in core, probably for Moodle 2.0, but maybe for Moodle 1.9 if we are lucky.--Tim Hunt 04:59, 21 June 2007 (CDT)

Please discuss this proposal in this forum thread.

Brief description of the requirement

When a student clicks 'Submit all and finish' on a quiz attempt, send an email confirmation to one or both of:

  • The student themselves.
  • Any designated 3rd parties - who gets emailed needs to take account of the 'Separate groups' setting, if appropriate.

It should be possible for admins to customise the text of either of these emails.

Design

Controlling who gets emailed

Users will get an email confirmation of their own quiz submission if they have the mod/quiz:emailconfirmsubmission capability on the quiz. (This means that whether confirmations are sent can be controlled for the whole site by changing the role definition, and it can be separately controlled for each quiz using role overrides.)

Similarly, users will get notified of other people submissions if they have the mod/quiz:emailnotifysubmission capability. If a user has both mod/quiz:emailconfirmsubmission and mod/quiz:emailnotifysubmission then they only get one email, the confirmsubmission one.

Interaction with groups mode

If the quiz is set to 'Separate groups', then the notifysubmission email will only be sent to those users who are in the same group as the person who submitted, or who have the moodle/site:accessallgroups capability.

Configuring the text of the emails

The emails will be stored in language strings in the quiz.php lang file. There will be strings emailconfirmsubject, emailconfirmbody, emailnotifysubject and emailnotifybody.

When these strings are loaded, a '$a' variable contining lots of useful information will be passed in which may be used in the message. The fields available will be:

$a->coursename
The name of the course
$a->courseshortname
The shortname of the course
$a->quizname
The name of the quiz
$a->quizreporturl
The URL of the results overview for this quiz (.../mod/quiz/report.php?q=quizid)
$a->quizreportlink
The URL of the results overview URL and quiz name as a HTML link
$a->quizreviewurl
The URL of the review page for this attempt (.../mod/quiz/review.php?attempt=attemptid)
$a->quizreviewlink
The attempt review URL and quiz name as a HTML link
$a->quizurl
The URL of the main page of the quiz (.../mod/quiz/view.php?q=quizid)
$a->quizlink
The URL of the quiz and the quiz name as a HTML link
$a->attemptsubmissiontime
The time the attempt was submitted, formatted using userdate().
$a->timetaken
How long the quiz attempt lasted.
$a->studentname
The name of the person who submitted the quiz.
$a->studentidnumber
The idnumber of the person who submitted the quiz.
$a->studentusername
The username of the person who submitted the quiz.
$a->username
The name of the user the email is being sent to.
$a->useridnumber
The idnumber of the person who submitted the quiz.
$a->userusername
The username of the user the email is being sent to.

When the emails are sent

It is important that if an error occurs during sending of the emails, then this does not prevent the quiz from being submitted. So we will use the Events API to fire an event when the quiz is submitted, and then write an event handler to do the email sending.

Where to implement this

Graham Miller volunteered in the forums to try to implement this, so here are some brief notes on how.

Which version?

Since this is a new feature, it really ought to go into HEAD. However, if we took out the use of the events API, it could be done in essentially the same way in the 1.8 and 1.7 branches and HEAD. That would be OK for a first implementation.

Where should the code go

In /mod/quiz/locallib.php, we need a new quiz_send_notification_emails(...) function to do the work. More on this in a moment.

This new function should then be called from /mod/quiz/attempt.php. Pass in as much as possible if the information that is already available in attemtp.php as function arguments, so we don't have to re-fetch it from the database. The call should be just before the bit

/// Check access to quiz page

    // ... [SNIP]

    if ($finishattempt) {
        redirect('review.php?attempt='.$attempt->id);
    }

The new capabilities need to be added to /mod/quiz/db/access.php as usual, with a bump of the version number in /mod/quiz/db/version.php.

To test whether to send to the student who has just submitted, use has_capability. To get a list of 3rd parties to email, user get_users_by_capability, passing $doanything = false.

To prepare the $a variable, you mostly just need to assemble the right data from the users, quiz and course. For the bits relating to attempts (that is, how to format the times), you can see the code necessary in review.php.

Then you use get_string to generate the email body and subject.

Then you use email_to_user from from lib/moodlelib.php to send the email.

Obviously you need to do deal with any errors that may arise along the way. (The main benefit of using the events api would have been easier error handling.)

Finally, write some teacher-facing documentation at an appropriate place on this wiki.

Examples of the type of email messages people might want to send

OU OpenMark system

Subject: OU online assessment confirmation - $a->quizname

Thank you for submitting your answers to: 

$a->quizname

at:

$a->submissiontime

This email confirms that we have safely received your answers.


Please do not reply to this email, which was generated automatically by the 
OpenMark online assessment system.

OU eTMA system

Subject: Ref: XXXXXX Receipt of assignment ($a->useridnumber $a->courseshortname $a->quizname)

Your assignment, number $a->quizname for course $a->courseshortname, was
received by the eTMA system at $a->submissiontime.
                 
(Your receipt code is: D8CDA7B2).    <--- not relevant to Moodle quiz.
     
		    		    		    		  

Your submission included the following files:  <--- not relevant to Moodle quiz.
Name (Size in Bytes) 

TMA05.doc(114,688 bytes)


**********************************************************************************
The University has to ensure as far as possible that the work submitted by
students is their own and does not contain any unreferenced material from other
sources.  The University statement "What constitutes plagiarism or cheating"
appears in your Assessment Handbook and you are expected to have familiarised
yourself with it. Please be aware that the University may subject your work to a
computerised check for plagiarism. 

This is an automated reply from the Open University eTMA system.  Please do not
reply to this email address as the mailbox is not monitored.  If you have any
queries please email XXX@XXXX.

See also