public function test_certificate_print_teacher_names() { global $DB; $studentroleid = $DB->get_record('role', array('shortname' => 'student'), 'id')->id; $teacherroleid = $DB->get_record('role', array('shortname' => 'editingteacher'), 'id')->id; // Have a single teacher. $teacheruser = $this->getDataGenerator()->create_user(array('email' => "*****@*****.**", 'username' => "dr_money_face")); $this->getDataGenerator()->enrol_user($teacheruser->id, $this->course->id, $teacherroleid); // Have a single student. $studentuser = $this->getDataGenerator()->create_user(array('email' => "*****@*****.**", 'username' => "joke_depletion")); $this->getDataGenerator()->enrol_user($studentuser->id, $this->course->id, $studentroleid); $certificate = $this->generator->create_instance(array('course' => $this->course->id, 'printteacher' => 1)); $this->setUser($studentuser); // For certificateissues specific test @see locallib_test.php, we will only test for existence. $coursemodule = get_coursemodule_from_instance('certificate', $certificate->id); $certificateissues = certificate_get_issue($this->course, $studentuser, $certificate, $coursemodule); $this->assertNotEmpty($coursemodule); $this->assertNotEmpty($certificateissues); $certificaterenderer = new certificate_pdf_renderer($certificate, $this->course, $coursemodule, $certificateissues); $this->assertNotEmpty($certificaterenderer); }
public function test_certificate_get_attempts() { global $DB; $certificate = $this->generator->create_instance(array('course' => $this->course->id)); $coursemodule = get_coursemodule_from_instance('certificate', $certificate->id); $studentroleid = $DB->get_record('role', array('shortname' => 'student'), 'id')->id; $teacherroleid = $DB->get_record('role', array('shortname' => 'editingteacher'), 'id')->id; // Have a single teacher. $teacheruser = $this->getDataGenerator()->create_user(array('email' => "*****@*****.**", 'username' => "dr_money_face")); $this->getDataGenerator()->enrol_user($teacheruser->id, $this->course->id, $teacherroleid); $studentuser = $this->getDataGenerator()->create_user(array('email' => "*****@*****.**", 'username' => "joke_depletion")); $this->getDataGenerator()->enrol_user($studentuser->id, $this->course->id, $studentroleid); // Prior to any issue, the certificate_get_attempts should return false. $this->setUser($studentuser); $this->assertFalse(certificate_get_attempts($certificate->id)); // Issue a certificate multiple times. $certificateissue01 = certificate_get_issue($this->course, $studentuser, $certificate, $coursemodule); $certificateissue02 = certificate_get_issue($this->course, $studentuser, $certificate, $coursemodule); // Set the current user to student since certificate_get_attempts relies on the // global variable $USER. $this->setUser($studentuser); // This is inconsistent with certificate_get_issue which is the function // used to acquire issue for a user. The same function that ensure there is // only one certificate issued per user. $attempts = certificate_get_attempts($certificate->id); $this->assertEquals(1, count($attempts)); foreach ($attempts as $attempt) { $this->assertContains($attempt->id, array($certificateissue01->id, $certificateissue02->id)); } }
$editvalue = $PAGE->user_is_editing() ? 'off' : 'on'; $strsubmit = $PAGE->user_is_editing() ? get_string('blockseditoff') : get_string('blocksediton'); $url = new moodle_url($CFG->wwwroot . '/mod/certificate/view.php', array('id' => $cm->id, 'edit' => $editvalue)); $PAGE->set_button($OUTPUT->single_button($url, $strsubmit)); } // Check if the user can view the certificate if ($certificate->requiredtime && !has_capability('mod/certificate:manage', $context)) { if (certificate_get_course_time($course->id) < $certificate->requiredtime * 60) { $a = new stdClass(); $a->requiredtime = $certificate->requiredtime; notice(get_string('requiredtimenotmet', 'certificate', $a), "{$CFG->wwwroot}/course/view.php?id={$course->id}"); die; } } // Create new certificate record, or return existing record $certrecord = certificate_get_issue($course, $USER, $certificate, $cm); make_cache_directory('tcpdf'); // Load the specific certificate type. require "{$CFG->dirroot}/mod/certificate/type/{$certificate->certificatetype}/certificate.php"; if (empty($action)) { // Not displaying PDF echo $OUTPUT->header(); /// find out current groups mode groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/certificate/view.php?id=' . $cm->id); $currentgroup = groups_get_activity_group($cm); $groupmode = groups_get_activity_groupmode($cm); if (has_capability('mod/certificate:manage', $context)) { $numusers = count(certificate_get_issues($certificate->id, 'ci.timecreated ASC', $groupmode, $cm)); $url = html_writer::tag('a', get_string('viewcertificateviews', 'certificate', $numusers), array('href' => $CFG->wwwroot . '/mod/certificate/report.php?id=' . $cm->id)); echo html_writer::tag('div', $url, array('class' => 'reportlink')); }
function certificate_email_students($USER) { global $course, $certificate, $CFG; $certrecord = certificate_get_issue($course, $USER); if ($certrecord->sent > 0) { return; } $teacher = get_teacher($course->id); $strawarded = get_string('awarded', 'certificate'); $stremailstudenttext = get_string('emailstudenttext', 'certificate'); $info->username = fullname($user); $info->certificate = format_string($certificate->name, true); $info->course = format_string($course->fullname, true); $from = fullname($teacher); $subject = $info->course . ': ' . $info->certificate; $message = get_string('emailstudenttext', 'certificate', $info) . "\n"; // Make the HTML version more XHTML happy (&) $messagehtml = text_to_html(get_string('emailstudenttext', 'certificate', $info)); $user->mailformat = 0; // Always send HTML version as well $attachment = $course->id . '/moddata/certificate/' . $certificate->id . '/' . $USER->id . '/certificate.pdf'; $attachname = "certificate.pdf"; set_field("certificate_issues", "sent", "1", "certificateid", $certificate->id, "userid", $USER->id); return email_to_user($USER, $from, $subject, $message, $messagehtml, $attachment, $attachname); }
/** * @param object $certificate * @param $course * @param $coursemodule * @param object $certificateissues */ public function __construct($certificate, $course, $coursemodule, $certificateissues = null) { // See if certificate issues exist. if (empty($certificateissues)) { global $USER; $certificateissues = certificate_get_issue($course, $USER, $certificate, $coursemodule); } parent::__construct($certificate, $course, $certificateissues, $coursemodule); }
public function test_certificate_get_participants() { // This should create certificate db entry as well as course module entry. $certificate = $this->generator->create_instance(array('course' => $this->course->id)); $coursemodule = get_coursemodule_from_instance('certificate', $certificate->id); $userarray = array(); for ($i = 0; $i < 10; $i++) { $userarray[] = $this->getDataGenerator()->create_user(); $this->assertNotEmpty(certificate_get_issue($this->course, end($userarray), $certificate, $coursemodule)); } $expecteduserids = array(); foreach ($userarray as $user) { $expecteduserids[] = $user->id; } $participantobject = certificate_get_participants($certificate->id); $realuserids = array(); foreach ($participantobject as $key => $user) { $realuserids[] = $user->id; } foreach ($expecteduserids as $uid) { $this->assertContains($uid, $realuserids); } foreach ($realuserids as $uid) { $this->assertContains($uid, $expecteduserids); } }