. /** * The report that displays issued certificates. * * @package mod_htmlcert * @copyright 2016 Mark Nelson , 2021 Klaus-Uwe Mitterer * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace mod_htmlcert; defined('MOODLE_INTERNAL') || die; global $CFG; require_once($CFG->libdir . '/tablelib.php'); /** * Class for the report that displays issued certificates. * * @package mod_htmlcert * @copyright 2016 Mark Nelson , 2021 Klaus-Uwe Mitterer * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class report_table extends \table_sql { /** * @var int $htmlcertid The custom certificate id */ protected $htmlcertid; /** * @var \stdClass $cm The course module. */ protected $cm; /** * @var bool $groupmode are we in group mode? */ protected $groupmode; /** * Sets up the table. * * @param int $htmlcertid * @param \stdClass $cm the course module * @param bool $groupmode are we in group mode? * @param string|null $download The file type, null if we are not downloading */ public function __construct($htmlcertid, $cm, $groupmode, $download = null) { parent::__construct('mod_htmlcert_report_table'); $context = \context_module::instance($cm->id); $extrafields = \core_user\fields::for_identity($context)->get_required_fields(); $columns = []; $columns[] = 'fullname'; foreach ($extrafields as $extrafield) { $columns[] = $extrafield; } $columns[] = 'timecreated'; $columns[] = 'code'; $headers = []; $headers[] = get_string('fullname'); foreach ($extrafields as $extrafield) { $headers[] = \core_user\fields::get_display_name($extrafield); } $headers[] = get_string('receiveddate', 'htmlcert'); $headers[] = get_string('code', 'htmlcert'); // Check if we were passed a filename, which means we want to download it. if ($download) { $this->is_downloading($download, 'htmlcert-report'); } if (!$this->is_downloading()) { $columns[] = 'download'; $headers[] = get_string('file'); } if (!$this->is_downloading() && has_capability('mod/htmlcert:manage', $context)) { $columns[] = 'actions'; $headers[] = ''; } $this->define_columns($columns); $this->define_headers($headers); $this->collapsible(false); $this->sortable(true); $this->no_sorting('code'); $this->no_sorting('download'); $this->is_downloadable(true); $this->htmlcertid = $htmlcertid; $this->cm = $cm; $this->groupmode = $groupmode; } /** * Generate the fullname column. * * @param \stdClass $user * @return string */ public function col_fullname($user) { global $OUTPUT; if (!$this->is_downloading()) { return $OUTPUT->user_picture($user) . ' ' . fullname($user); } else { return fullname($user); } } /** * Generate the certificate time created column. * * @param \stdClass $user * @return string */ public function col_timecreated($user) { return userdate($user->timecreated); } /** * Generate the code column. * * @param \stdClass $user * @return string */ public function col_code($user) { return $user->code; } /** * Generate the download column. * * @param \stdClass $user * @return string */ public function col_download($user) { global $OUTPUT; $icon = new \pix_icon('download', get_string('download'), 'htmlcert'); $link = new \moodle_url('/mod/htmlcert/view.php', [ 'id' => $this->cm->id, 'downloadissue' => $user->id ] ); return $OUTPUT->action_link($link, '', null, null, $icon); } /** * Generate the actions column. * * @param \stdClass $user * @return string */ public function col_actions($user) { global $OUTPUT; $icon = new \pix_icon('i/delete', get_string('delete')); $link = new \moodle_url('/mod/htmlcert/view.php', [ 'id' => $this->cm->id, 'deleteissue' => $user->issueid, 'sesskey' => sesskey() ] ); return $OUTPUT->action_icon($link, $icon, null, ['class' => 'action-icon delete-icon']); } /** * Query the reader. * * @param int $pagesize size of page for paginated displayed table. * @param bool $useinitialsbar do you want to use the initials bar. */ public function query_db($pagesize, $useinitialsbar = true) { $total = \mod_htmlcert\certificate::get_number_of_issues($this->htmlcertid, $this->cm, $this->groupmode); $this->pagesize($pagesize, $total); $this->rawdata = \mod_htmlcert\certificate::get_issues($this->htmlcertid, $this->groupmode, $this->cm, $this->get_page_start(), $this->get_page_size(), $this->get_sql_sort()); // Set initial bars. if ($useinitialsbar) { $this->initialbars($total > $pagesize); } } /** * Download the data. */ public function download() { \core\session\manager::write_close(); $total = \mod_htmlcert\certificate::get_number_of_issues($this->htmlcertid, $this->cm, $this->groupmode); $this->out($total, false); exit; } }