#111 Fixed task creating duplicate rows in issue table

This commit is contained in:
Mark Nelson 2017-05-21 10:16:45 +08:00
parent 38d023b8db
commit 4d21173247
4 changed files with 51 additions and 8 deletions

View file

@ -86,16 +86,14 @@ class email_certificate_task extends \core\task\scheduled_task {
$info->coursename = $coursename;
$info->certificatename = $certificatename;
// Get a list of issues that have not yet been emailed.
// Get a list of all the issues.
$userfields = get_all_user_name_fields(true, 'u');
$sql = "SELECT u.id, u.username, $userfields, u.email, ci.id as issueid
$sql = "SELECT u.id, u.username, $userfields, u.email, ci.id as issueid, ci.emailed
FROM {customcert_issues} ci
JOIN {user} u
ON ci.userid = u.id
WHERE ci.customcertid = :customcertid
AND emailed = :emailed";
$issuedusers = $DB->get_records_sql($sql, array('customcertid' => $customcert->id,
'emailed' => 0));
WHERE ci.customcertid = :customcertid";
$issuedusers = $DB->get_records_sql($sql, array('customcertid' => $customcert->id));
// Now, get a list of users who can access the certificate but have not yet.
$enrolledusers = get_enrolled_users(\context_course::instance($customcert->courseid), 'mod/customcert:view');
@ -137,9 +135,17 @@ class email_certificate_task extends \core\task\scheduled_task {
// Add them to the array so we email them.
$enroluser->issueid = $issueid;
$enroluser->emailed = 0;
$issuedusers[] = $enroluser;
}
// Remove all the users who have already been emailed.
foreach ($issuedusers as $key => $issueduser) {
if ($issueduser->emailed) {
unset($issuedusers[$key]);
}
}
// Now, email the people we need to.
if ($issuedusers) {
foreach ($issuedusers as $user) {