. /** * Handles verifying the code for a certificate. * * @package mod_customcert * @copyright 2017 Mark Nelson * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('../../config.php'); $contextid = required_param('contextid', PARAM_INT); $code = optional_param('code', '', PARAM_ALPHANUM); // The code for the certificate we are verifying. $context = context::instance_by_id($contextid); $cm = get_coursemodule_from_id('customcert', $context->instanceid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST); // Need to be logged in. require_login($course, false, $cm); // Ok, now check the user has the ability to verify certificates. require_capability('mod/customcert:verifycertificate', $context); // Set up the page. $pageurl = new moodle_url('/mod/customcert/verify_certificate.php', array('contextid' => $contextid)); if ($code) { $pageurl->param('code', $code); } $PAGE->set_url($pageurl); $PAGE->set_context($context); $PAGE->set_title(get_string('verifycertificate', 'customcert')); // The form we are using to verify these codes. $form = new \mod_customcert\verify_certificate_form($pageurl); if ($form->get_data()) { $result = new stdClass(); $result->issues = array(); // Ok, now check if the code is valid. $userfields = get_all_user_name_fields(true, 'u'); $sql = "SELECT ci.id, u.id as userid, $userfields, co.id as courseid, co.fullname as coursefullname, c.name as certificatename FROM {customcert} c JOIN {customcert_issues} ci ON c.id = ci.customcertid JOIN {course} co ON c.course = co.id JOIN {user} u ON ci.userid = u.id WHERE ci.code = :code AND c.id = :customcertid AND u.deleted = 0"; // It is possible (though unlikely) that there is the same code for issued certificates. if ($issues = $DB->get_records_sql($sql, array('code' => $code, 'customcertid' => $customcert->id))) { $result->success = true; $result->issues = $issues; } else { // Can't find it, let's say it's not verified. $result->success = false; } } echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('verifycertificate', 'customcert')); echo $form->display(); if (isset($result)) { $renderer = $PAGE->get_renderer('mod_customcert'); $result = new \mod_customcert\output\verify_certificate_results($result); echo $renderer->render($result); } echo $OUTPUT->footer();