Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * H5P activity participants report
 *
 * @package    mod_h5pactivity
 * @since      Moodle 3.9
 * @copyright  2020 Ferran Recio <ferran@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace mod_h5pactivity\local\report;

use mod_h5pactivity\local\report;
use mod_h5pactivity\local\manager;
use mod_h5pactivity\local\attempt;
use core\dml\sql_join;
use table_sql;
use moodle_url;
use html_writer;
use stdClass;

defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once($CFG->libdir.'/tablelib.php');

/**
 * Class  H5P activity participants report.
 *
 * @package    mod_h5pactivity
 * @since      Moodle 3.9
 * @copyright  2020 Ferran Recio <ferran@moodle.com>
 */
class participants extends table_sql implements report {

    /** @var manager the H5P activity manager instance. */
    private $manager;

    /** @var array the users scored attempts. */
    private $scores;

    /** @var array the user attempts count. */
    private $count;

    /**
     * Create a new participants report.
     *
     * @param manager $manager h5pactivitymanager object
     * @param int|bool $currentgroup False if groups not used, 0 for all groups, group id (int) to filter by specific group
     */
    public function __construct(manager $manager, $currentgroup = false) {
        parent::__construct('mod_h5pactivity-participants');
        $this->manager = $manager;
        $this->scores = $manager->get_users_scaled_score();
        $this->count = $manager->count_users_attempts();

        // Setup table_sql.
        $columns = ['fullname', 'timemodified', 'score', 'attempts'];
        $headers = [
            get_string('fullname'), get_string('date'),
            get_string('score', 'mod_h5pactivity'), get_string('attempts', 'mod_h5pactivity'),
        ];
        $this->define_columns($columns);
        $this->define_headers($headers);
        $this->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
        $this->sortable(true);
        $this->no_sorting('score');
        $this->no_sorting('timemodified');
        $this->no_sorting('attempts');
        $this->pageable(true);

        $capjoin = $this->manager->get_active_users_join(true, $currentgroup);

        // Final SQL.
        $this->set_sql(
            'DISTINCT u.id, u.picture, u.firstname, u.lastname, u.firstnamephonetic, u.lastnamephonetic,
            u.middlename, u.alternatename, u.imagealt, u.email',
            "{user} u $capjoin->joins",
            $capjoin->wheres,
            $capjoin->params);
    }

    /**
     * Return the report user record.
     *
     * Participants report has no specific user.
     *
     * @return stdClass|null a user or null
     */
    public function get_user(): ?stdClass {
        return null;
    }

    /**
     * Return the report attempt object.
     *
     * Participants report has no specific attempt.
     *
     * @return attempt|null the attempt object or null
     */
    public function get_attempt(): ?attempt {
        return null;
    }

    /**
     * Print the report.
     */
    public function print(): void {
        global $PAGE, $OUTPUT;

        $this->define_baseurl($PAGE->url);

< echo $OUTPUT->heading(get_string('attempts_report', 'mod_h5pactivity')); <
$this->out($this->get_page_size(), true); } /** * Warning in case no user has the selected initials letters. * */ public function print_nothing_to_display() { global $OUTPUT; echo $this->render_reset_button(); $this->print_initials_bar(); echo $OUTPUT->notification(get_string('noparticipants', 'mod_h5pactivity'), 'warning'); } /** * Generate the fullname column. * * @param stdClass $user * @return string */ public function col_fullname($user): string { global $OUTPUT; $cm = $this->manager->get_coursemodule(); return $OUTPUT->user_picture($user, ['size' => 35, 'courseid' => $cm->course, 'includefullname' => true]); } /** * Generate score column. * * @param stdClass $user the user record * @return string */ public function col_score(stdClass $user): string { $cm = $this->manager->get_coursemodule(); if (isset($this->scores[$user->id])) { $score = $this->scores[$user->id]; $maxgrade = floatval(100); $scaled = round($maxgrade * $score->scaled).'%'; if (empty($score->attemptid)) { return $scaled; } else { $url = new moodle_url('/mod/h5pactivity/report.php', ['a' => $cm->instance, 'attemptid' => $score->attemptid]); return html_writer::link($url, $scaled); } } return ''; } /** * Generate attempts count column, if any. * * @param stdClass $user the user record * @return string */ public function col_attempts(stdClass $user): string { $cm = $this->manager->get_coursemodule(); if (isset($this->count[$user->id])) { $msg = get_string('review_user_attempts', 'mod_h5pactivity', $this->count[$user->id]); $url = new moodle_url('/mod/h5pactivity/report.php', ['a' => $cm->instance, 'userid' => $user->id]); return html_writer::link($url, $msg); } return ''; } /** * Generate attempt timemodified column, if any. * * @param stdClass $user the user record * @return string */ public function col_timemodified(stdClass $user): string { if (isset($this->scores[$user->id])) { $score = $this->scores[$user->id]; return userdate($score->timemodified); } return ''; } }