$linkname = get_string('getcertificate', 'certificate');
    $link = new moodle_url('/mod/certificate/view.php?id=' . $cm->id . '&action=get');
    $button = new single_button($link, $linkname);
    if ($certificate->delivery != 1) {
        $button->add_action(new popup_action('click', $link, 'view' . $cm->id, array('height' => 600, 'width' => 800)));
    }
    echo html_writer::tag('div', $OUTPUT->render($button), array('style' => 'text-align:center'));
    echo $OUTPUT->footer($course);
    exit;
} else {
    // Output to pdf
    // No debugging here, sorry.
    $CFG->debugdisplay = 0;
    @ini_set('display_errors', '0');
    @ini_set('log_errors', '1');
    $filename = certificate_get_certificate_filename($certificate, $cm, $course) . '.pdf';
    require "{$CFG->dirroot}/mod/certificate/certificate_pdf_renderer.php";
    $cpr = new certificate_pdf_renderer($certificate, $course, $cm);
    $pdf = $cpr->get_pdf();
    // PDF contents are now in $file_contents as a string.
    $filecontents = $pdf->Output('', 'S');
    if ($certificate->savecert == 1) {
        certificate_save_pdf($filecontents, $certrecord->id, $filename, $context->id);
    }
    if ($certificate->delivery == 0) {
        // Open in browser.
        send_file($filecontents, $filename, 0, 0, true, false, 'application/pdf');
    } elseif ($certificate->delivery == 1) {
        // Force download.
        send_file($filecontents, $filename, 0, 0, true, true, 'application/pdf');
    } elseif ($certificate->delivery == 2) {
 public function test_certificate_email_student()
 {
     global $CFG, $USER;
     $certificate = $this->generator->create_instance(array('course' => $this->course->id));
     $coursemodule = get_coursemodule_from_instance('certificate', $certificate->id);
     $certificateissues = certificate_get_issue($this->course, $USER, $certificate, $coursemodule);
     $this->setAdminUser();
     require_once "{$CFG->dirroot}/mod/certificate/certificate_pdf_renderer.php";
     $cpr = new certificate_pdf_renderer($certificate, $this->course, $coursemodule);
     $pdf = $cpr->get_pdf();
     // PDF contents are now in $file_contents as a string.
     $filecontents = $pdf->Output('', 'S');
     $filename = certificate_get_certificate_filename($certificate, $coursemodule, $this->course) . '.pdf';
     $context = context_module::instance($coursemodule->id);
     unset_config('noemailever');
     $sink = $this->redirectEmails();
     certificate_email_student($this->course, $certificate, $certificateissues, $context, $filecontents, $filename);
     $messages = $sink->get_messages();
     $this->assertEquals(1, count($messages));
     $this->assertEquals($USER->email, $messages[0]->to);
 }
 public function test_certificate_reset_userdata_nullify_old_recipients()
 {
     global $DB;
     // 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);
     $context = context_module::instance($coursemodule->id);
     $userarray = array();
     for ($i = 0; $i < 10; $i++) {
         $userarray[] = $this->getDataGenerator()->create_user();
         $certificateissue = certificate_get_issue($this->course, end($userarray), $certificate, $coursemodule);
         // Save the files along the way.
         $filename = certificate_get_certificate_filename($certificate, $coursemodule, $this->course) . '.pdf';
         $cpr = new certificate_pdf_renderer($certificate, $this->course, $coursemodule);
         $pdf = $cpr->get_pdf();
         // PDF contents are now in $file_contents as a string.
         $filecontents = $pdf->Output('', 'S');
         certificate_save_pdf($filecontents, $certificate->id, $filename, $context->id);
     }
     // Assert that only one file exist. @see certificate_save_pdf
     $fs = get_file_storage();
     $component = 'mod_certificate';
     $filearea = 'issue';
     $files = $fs->get_area_files($context->id, $component, $filearea, $certificate->id);
     $certfiles = array();
     foreach ($files as $key => $file) {
         $validfile = trim($file->get_filename()) != ".";
         if ($validfile) {
             $certfiles[] = $file;
         }
     }
     $this->assertEquals(1, sizeof($certfiles));
     $data = new stdClass();
     $data->courseid = $this->course->id;
     $data->reset_certificate = true;
     $data->timeshift = 0;
     $componentstr = get_string('modulenameplural', 'certificate');
     $statusarray = certificate_reset_userdata($data);
     $expectedstatus = array('component' => $componentstr, 'item' => get_string('removecert', 'certificate'), 'error' => false);
     // Ensure that we have the expected return status.
     $this->assertContains($expectedstatus, $statusarray);
     // Ensure that all certificate recpients are no longer a recipient.
     $this->assertEquals(0, $DB->count_records('certificate_issues', array('certificateid' => $certificate->id)));
     // Ensure that all saved pdf files are deleted.
     $files = $fs->get_area_files($context->id, $component, $filearea, $certificate->id);
     $certfiles = array();
     foreach ($files as $key => $file) {
         $validfile = trim($file->get_filename()) != ".";
         if ($validfile) {
             $certfiles[] = $file;
         }
     }
     $this->assertEquals(0, sizeof($certfiles));
 }