Do not email out certificates with no elements (#276)
This commit is contained in:
parent
438dfd868f
commit
c1615cbd16
2 changed files with 140 additions and 8 deletions
|
@ -69,6 +69,18 @@ class email_certificate_task extends \core\task\scheduled_task {
|
||||||
$htmlrenderer = $PAGE->get_renderer('mod_customcert', 'email', 'htmlemail');
|
$htmlrenderer = $PAGE->get_renderer('mod_customcert', 'email', 'htmlemail');
|
||||||
$textrenderer = $PAGE->get_renderer('mod_customcert', 'email', 'textemail');
|
$textrenderer = $PAGE->get_renderer('mod_customcert', 'email', 'textemail');
|
||||||
foreach ($customcerts as $customcert) {
|
foreach ($customcerts as $customcert) {
|
||||||
|
// Do not process an empty certificate.
|
||||||
|
$sql = "SELECT ce.*
|
||||||
|
FROM {customcert_elements} ce
|
||||||
|
JOIN {customcert_pages} cp
|
||||||
|
ON cp.id = ce.pageid
|
||||||
|
JOIN {customcert_templates} ct
|
||||||
|
ON ct.id = cp.templateid
|
||||||
|
WHERE ct.contextid = :contextid";
|
||||||
|
if (!$DB->record_exists_sql($sql, ['contextid' => $customcert->contextid])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the context.
|
// Get the context.
|
||||||
$context = \context::instance_by_id($customcert->contextid);
|
$context = \context::instance_by_id($customcert->contextid);
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,6 @@
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
global $CFG;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit tests for the email certificate task.
|
* Unit tests for the email certificate task.
|
||||||
*
|
*
|
||||||
|
@ -44,6 +42,32 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$this->resetAfterTest();
|
$this->resetAfterTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the email certificate task when there are no elements.
|
||||||
|
*/
|
||||||
|
public function test_email_certificates_no_elements() {
|
||||||
|
// Create a course.
|
||||||
|
$course = $this->getDataGenerator()->create_course();
|
||||||
|
|
||||||
|
// Create a user.
|
||||||
|
$user1 = $this->getDataGenerator()->create_user();
|
||||||
|
|
||||||
|
// Create a custom certificate with no elements.
|
||||||
|
$this->getDataGenerator()->create_module('customcert', ['course' => $course->id, 'emailstudents' => 1]);
|
||||||
|
|
||||||
|
// Enrol the user as a student
|
||||||
|
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
|
||||||
|
|
||||||
|
// Run the task.
|
||||||
|
$sink = $this->redirectEmails();
|
||||||
|
$task = new \mod_customcert\task\email_certificate_task();
|
||||||
|
$task->execute();
|
||||||
|
$emails = $sink->get_messages();
|
||||||
|
|
||||||
|
// Confirm that we did not send any emails because the certificate has no elements.
|
||||||
|
$this->assertCount(0, $emails);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the email certificate task for users without a capability to receive a certificate.
|
* Tests the email certificate task for users without a capability to receive a certificate.
|
||||||
*/
|
*/
|
||||||
|
@ -65,7 +89,23 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
unassign_capability('mod/customcert:receiveissue', $roleids['student']);
|
unassign_capability('mod/customcert:receiveissue', $roleids['student']);
|
||||||
|
|
||||||
// Create a custom certificate.
|
// Create a custom certificate.
|
||||||
$this->getDataGenerator()->create_module('customcert', ['course' => $course->id, 'emailstudents' => 1]);
|
$customcert = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id, 'emailstudents' => 1]);
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Run the task.
|
// Run the task.
|
||||||
$sink = $this->redirectEmails();
|
$sink = $this->redirectEmails();
|
||||||
|
@ -103,6 +143,22 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$customcert = $this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
$customcert = $this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
||||||
'emailstudents' => 1));
|
'emailstudents' => 1));
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Ok, now issue this to one user.
|
// Ok, now issue this to one user.
|
||||||
\mod_customcert\certificate::issue_certificate($customcert->id, $user1->id);
|
\mod_customcert\certificate::issue_certificate($customcert->id, $user1->id);
|
||||||
|
|
||||||
|
@ -169,9 +225,25 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$this->getDataGenerator()->enrol_user($user3->id, $course->id, $roleids['editingteacher']);
|
$this->getDataGenerator()->enrol_user($user3->id, $course->id, $roleids['editingteacher']);
|
||||||
|
|
||||||
// Create a custom certificate.
|
// Create a custom certificate.
|
||||||
$this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
$customcert = $this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
||||||
'emailteachers' => 1));
|
'emailteachers' => 1));
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Run the task.
|
// Run the task.
|
||||||
$sink = $this->redirectEmails();
|
$sink = $this->redirectEmails();
|
||||||
$task = new \mod_customcert\task\email_certificate_task();
|
$task = new \mod_customcert\task\email_certificate_task();
|
||||||
|
@ -192,7 +264,7 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
* Tests the email certificate task for others.
|
* Tests the email certificate task for others.
|
||||||
*/
|
*/
|
||||||
public function test_email_certificates_others() {
|
public function test_email_certificates_others() {
|
||||||
global $CFG;
|
global $CFG, $DB;
|
||||||
|
|
||||||
// Create a course.
|
// Create a course.
|
||||||
$course = $this->getDataGenerator()->create_course();
|
$course = $this->getDataGenerator()->create_course();
|
||||||
|
@ -206,9 +278,25 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$this->getDataGenerator()->enrol_user($user2->id, $course->id);
|
$this->getDataGenerator()->enrol_user($user2->id, $course->id);
|
||||||
|
|
||||||
// Create a custom certificate.
|
// Create a custom certificate.
|
||||||
$this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
$customcert = $this->getDataGenerator()->create_module('customcert', array('course' => $course->id,
|
||||||
'emailothers' => 'testcustomcert@example.com, doo@dah'));
|
'emailothers' => 'testcustomcert@example.com, doo@dah'));
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Run the task.
|
// Run the task.
|
||||||
$sink = $this->redirectEmails();
|
$sink = $this->redirectEmails();
|
||||||
$task = new \mod_customcert\task\email_certificate_task();
|
$task = new \mod_customcert\task\email_certificate_task();
|
||||||
|
@ -242,7 +330,23 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
|
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
|
||||||
|
|
||||||
// Create a custom certificate.
|
// Create a custom certificate.
|
||||||
$this->getDataGenerator()->create_module('customcert', array('course' => $course->id, 'emailstudents' => 1));
|
$customcert = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id, 'emailstudents' => 1]);
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Remove the permission for the user to view the certificate.
|
// Remove the permission for the user to view the certificate.
|
||||||
assign_capability('mod/customcert:view', CAP_PROHIBIT, $roleids['student'], \context_course::instance($course->id));
|
assign_capability('mod/customcert:view', CAP_PROHIBIT, $roleids['student'], \context_course::instance($course->id));
|
||||||
|
@ -280,9 +384,25 @@ class mod_customcert_task_email_certificate_task_testcase extends advanced_testc
|
||||||
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
|
$this->getDataGenerator()->enrol_user($user1->id, $course->id);
|
||||||
|
|
||||||
// Create a custom certificate.
|
// Create a custom certificate.
|
||||||
$this->getDataGenerator()->create_module('customcert', array('course' => $course->id, 'emailstudents' => 1,
|
$customcert = $this->getDataGenerator()->create_module('customcert', array('course' => $course->id, 'emailstudents' => 1,
|
||||||
'requiredtime' => '60'));
|
'requiredtime' => '60'));
|
||||||
|
|
||||||
|
// Create template object.
|
||||||
|
$template = new stdClass();
|
||||||
|
$template->id = $customcert->templateid;
|
||||||
|
$template->name = 'A template';
|
||||||
|
$template->contextid = context_course::instance($course->id)->id;
|
||||||
|
$template = new \mod_customcert\template($template);
|
||||||
|
|
||||||
|
// Add a page to this template.
|
||||||
|
$pageid = $template->add_page();
|
||||||
|
|
||||||
|
// Add an element to the page.
|
||||||
|
$element = new stdClass();
|
||||||
|
$element->pageid = $pageid;
|
||||||
|
$element->name = 'Image';
|
||||||
|
$DB->insert_record('customcert_elements', $element);
|
||||||
|
|
||||||
// Run the task.
|
// Run the task.
|
||||||
$sink = $this->redirectEmails();
|
$sink = $this->redirectEmails();
|
||||||
$task = new \mod_customcert\task\email_certificate_task();
|
$task = new \mod_customcert\task\email_certificate_task();
|
||||||
|
|
Loading…
Reference in a new issue