. /** * Handles viewing a htmlcert. * * @package mod_htmlcert * @copyright 2013 Mark Nelson , 2021-2022 Kumi Systems e.U. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('../../config.php'); $id = required_param('id', PARAM_INT); $downloadown = optional_param('downloadown', false, PARAM_BOOL); $downloadtable = optional_param('download', null, PARAM_ALPHA); $downloadissue = optional_param('downloadissue', 0, PARAM_INT); $deleteissue = optional_param('deleteissue', 0, PARAM_INT); $confirm = optional_param('confirm', false, PARAM_BOOL); $page = optional_param('page', 0, PARAM_INT); $perpage = optional_param('perpage', \mod_htmlcert\certificate::HTMLCERT_PER_PAGE, PARAM_INT); $cm = get_coursemodule_from_id('htmlcert', $id, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $htmlcert = $DB->get_record('htmlcert', array('id' => $cm->instance), '*', MUST_EXIST); $template = $DB->get_record('htmlcert_templates', array('id' => $htmlcert->templateid), '*', MUST_EXIST); // Ensure the user is allowed to view this page. require_login($course, false, $cm); $context = context_module::instance($cm->id); require_capability('mod/htmlcert:view', $context); $canreceive = has_capability('mod/htmlcert:receiveissue', $context); $canmanage = has_capability('mod/htmlcert:manage', $context); $canviewreport = has_capability('mod/htmlcert:viewreport', $context); // Initialise $PAGE. $pageurl = new moodle_url('/mod/htmlcert/view.php', array('id' => $cm->id)); \mod_htmlcert\page_helper::page_setup($pageurl, $context, format_string($htmlcert->name)); // Check if the user can view the certificate based on time spent in course. if ($htmlcert->requiredtime && !$canmanage) { if (\mod_htmlcert\certificate::get_course_time($course->id) < ($htmlcert->requiredtime * 60)) { $a = new stdClass; $a->requiredtime = $htmlcert->requiredtime; $url = new moodle_url('/course/view.php', ['id' => $course->id]); notice(get_string('requiredtimenotmet', 'htmlcert', $a), $url); die; } } // Check if we are deleting an issue. if ($deleteissue && $canmanage && confirm_sesskey()) { if (!$confirm) { $nourl = new moodle_url('/mod/htmlcert/view.php', ['id' => $id]); $yesurl = new moodle_url('/mod/htmlcert/view.php', [ 'id' => $id, 'deleteissue' => $deleteissue, 'confirm' => 1, 'sesskey' => sesskey() ] ); // Show a confirmation page. $PAGE->navbar->add(get_string('deleteconfirm', 'htmlcert')); $message = get_string('deleteissueconfirm', 'htmlcert'); echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($htmlcert->name)); echo $OUTPUT->confirm($message, $yesurl, $nourl); echo $OUTPUT->footer(); exit(); } // Delete the issue. $DB->delete_records('htmlcert_issues', array('id' => $deleteissue, 'htmlcertid' => $htmlcert->id)); // Redirect back to the manage templates page. redirect(new moodle_url('/mod/htmlcert/view.php', array('id' => $id))); } $event = \mod_htmlcert\event\course_module_viewed::create(array( 'objectid' => $htmlcert->id, 'context' => $context, )); $event->add_record_snapshot('course', $course); $event->add_record_snapshot('htmlcert', $htmlcert); $event->trigger(); // Check that we are not downloading a certificate PDF. if (!$downloadown && !$downloadissue) { // Get the current groups mode. if ($groupmode = groups_get_activity_groupmode($cm)) { groups_get_activity_group($cm, true); } // Generate the table to the report if there are issues to display. if ($canviewreport) { // Get the total number of issues. $reporttable = new \mod_htmlcert\report_table($htmlcert->id, $cm, $groupmode, $downloadtable); $reporttable->define_baseurl($pageurl); if ($reporttable->is_downloading()) { $reporttable->download(); exit(); } } // Generate the intro content if it exists. $intro = ''; if (!empty($htmlcert->intro)) { $intro = $OUTPUT->box(format_module_intro('htmlcert', $htmlcert, $cm->id), 'generalbox', 'intro'); } // If the current user has been issued a htmlcert generate HTML to display the details. $issuehtml = ''; $issues = $DB->get_records('htmlcert_issues', array('userid' => $USER->id, 'htmlcertid' => $htmlcert->id)); if ($issues && !$canmanage) { // Get the most recent issue (there should only be one). $issue = reset($issues); $issuestring = get_string('receiveddate', 'htmlcert') . ': ' . userdate($issue->timecreated); $issuehtml = $OUTPUT->box($issuestring); } // Create the button to download the htmlcert. $downloadbutton = ''; if ($canreceive) { $linkname = get_string('gethtmlcert', 'htmlcert'); $link = new moodle_url('/mod/htmlcert/view.php', array('id' => $cm->id, 'downloadown' => true)); $downloadbutton = new single_button($link, $linkname, 'get', true); $downloadbutton->class .= ' m-b-1'; // Seems a bit hackish, ahem. $downloadbutton->add_action(new \popup_action('click', $link)); $downloadbutton = $OUTPUT->render($downloadbutton); } // Output all the page data. echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($htmlcert->name)); echo $intro; echo $issuehtml; echo $downloadbutton; if (isset($reporttable)) { $numissues = \mod_htmlcert\certificate::get_number_of_issues($htmlcert->id, $cm, $groupmode); echo $OUTPUT->heading(get_string('listofissues', 'htmlcert', $numissues), 3); groups_print_activity_menu($cm, $pageurl); echo $reporttable->out($perpage, false); } echo $OUTPUT->footer($course); exit(); } else if ($canreceive || $canmanage) { // Output to pdf. // Set the userid value of who we are downloading the certificate for. $userid = $USER->id; if ($downloadown) { // Create new htmlcert issue record if one does not already exist. if (!$DB->record_exists('htmlcert_issues', array('userid' => $USER->id, 'htmlcertid' => $htmlcert->id))) { \mod_htmlcert\certificate::issue_certificate($htmlcert->id, $USER->id); } // Set the custom certificate as viewed. $completion = new completion_info($course); $completion->set_module_viewed($cm); } else if ($downloadissue && $canviewreport) { $userid = $downloadissue; } // Hack alert - don't initiate the download when running Behat. if (defined('BEHAT_SITE_RUNNING')) { redirect(new moodle_url('/mod/htmlcert/view.php', array('id' => $cm->id))); } \core\session\manager::write_close(); // Now we want to generate the PDF. $template = new \mod_htmlcert\template($template); $template->generate_pdf(false, $userid); exit(); }