MDL-70753 report: Provide a separate page for course report

Provide page for the reports in the course administration.
The page has a drop down to navigate to different reports.
The navigation is remembered just like the grade reports in
the course.

Signed-off-by: Sujith Haridasan <sujith@moodle.com>
This commit is contained in:
Sujith Haridasan 2021-02-22 09:32:12 +05:30
parent a5f0b354e7
commit 686bd2681e
23 changed files with 594 additions and 8 deletions

View File

@ -22,6 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
@ -111,6 +113,12 @@ if (!empty($action) && $ruleid) {
echo $OUTPUT->header();
}
report_helper::save_selected_report($courseid, $manageurl);
// Print the selected dropdown.
$managerules = get_string('managerules', 'tool_monitor');
report_helper::print_report_selector($managerules);
echo $OUTPUT->heading(get_string('managerules', 'tool_monitor'));
$status = get_config('tool_monitor', 'enablemonitor');
$help = new help_icon('enablehelp', 'tool_monitor');

View File

@ -0,0 +1,28 @@
@tool @tool_monitor
Feature: In a course administration page, navigate through report page, test for course event monitor page
In order to navigate through report page
As an admin
Go to course administration -> reports -> Event monitoring rules
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode | enablecompletion |
| Course 1 | C1 | 0 | 1 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in the course event monitoring page
Given I log in as "admin"
And I navigate to "Reports > Event monitoring rules" in site administration
And I click on "Enable" "link"
And I am on "Course 1" course homepage
When I navigate to "Reports > Event monitoring rules" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Event monitoring rules"
And the field "Report" matches value "Event monitoring rules"

View File

@ -0,0 +1,88 @@
<?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/>.
/**
* Report plugins helper class
*
* @package core
* @subpackage report
* @copyright 2021 Sujith Haridasan
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core;
use moodle_url;
use url_select;
/**
* A helper class with static methods to help report plugins
*
* @package core
* @copyright 2021 Sujith Haridasan
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class report_helper {
/**
* Print the selector dropdown
*
* @param string $pluginname The report plugin where the header is modified
* @return void
*/
public static function print_report_selector(string $pluginname):void {
global $OUTPUT, $PAGE;
if ($reportnode = $PAGE->settingsnav->find('coursereports', \navigation_node::TYPE_CONTAINER)) {
if ($children = $reportnode->children) {
// Menu to select report pages to navigate.
$activeurl = '';
foreach ($children as $key => $node) {
$name = $node->text;
$url = $node->action()->out(false);
$menu[$url] = $name;
if ($name === $pluginname) {
$activeurl = $url;
}
}
}
if (!empty($menu)) {
$select = new url_select($menu, $activeurl, null, 'choosecoursereport');
$select->set_label(get_string('report'), ['class' => 'accesshide']);
$select->attributes['style'] = "margin-bottom: 1.5rem";
$select->class .= " mb-4";
echo $OUTPUT->render($select);
}
}
}
/**
* Save the last selected report in the session
*
* @param int $id The course id
* @param moodle_url $url The moodle url
* @return void
*/
public static function save_selected_report(int $id, moodle_url $url):void {
global $USER;
// Last selected report.
if (!isset($USER->course_last_report)) {
$USER->course_last_report = [];
}
$USER->course_last_report[$id] = $url;
}
}

View File

@ -4491,8 +4491,9 @@ class settings_navigation extends navigation_node {
// View course reports.
if ($adminoptions->reports) {
$reportnav = $coursenode->add(get_string('reports'), null, self::TYPE_CONTAINER, null, 'coursereports',
new pix_icon('i/stats', ''));
$reportnav = $coursenode->add(get_string('reports'),
new moodle_url('/report/view.php', ['courseid' => $coursecontext->instanceid]),
self::TYPE_CONTAINER, null, 'coursereports', new pix_icon('i/stats', ''));
$coursereports = core_component::get_plugin_list('coursereport');
foreach ($coursereports as $report => $dir) {
$libfile = $CFG->dirroot.'/course/report/'.$report.'/lib.php';

View File

@ -0,0 +1,112 @@
<?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/>.
/**
* Tests for report_helper.
*
* @package core
* @category test
* @copyright 2021 Sujith Haridasan
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core;
use moodle_url;
use core\report_helper;
/**
* Tests the functions for report_helper class.
*/
class report_helper_test extends \advanced_testcase {
/**
* Data provider for testing selected report for same and different courses
*
* @return array
*/
public function data_selected_report():array {
return [
['course_url_id' => [
['url' => '/test', 'id' => 1],
['url' => '/foo', 'id' => 1]]
],
['course_url_id' => [
['url' => '/test', 'id' => 1],
['url' => '/foo/bar', 'id' => 2]]
]
];
}
/**
* Testing selected report saved in $USER session.
*
* @dataProvider data_selected_report
* @param array $courseurlid The array has both course url and course id
*/
public function test_save_selected_report(array $courseurlid):void {
global $USER;
$url1 = new moodle_url($courseurlid[0]['url']);
$courseid1 = $courseurlid[0]['id'];
report_helper::save_selected_report($courseid1, $url1);
$this->assertEquals($USER->course_last_report[$courseid1], $url1);
$url2 = new moodle_url($courseurlid[1]['url']);
$courseid2 = $courseurlid[1]['id'];
report_helper::save_selected_report($courseid2, $url2);
$this->assertEquals($USER->course_last_report[$courseid2], $url2);
}
/**
* Testing the report selector dropdown shown.
*
* Verify that the dropdowns have the pages to be displayed.
*
* @return void
*/
public function test_print_report_selector():void {
global $PAGE;
$this->resetAfterTest();
$user = $this->getDataGenerator()->create_user();
$PAGE->set_url('/');
$course = $this->getDataGenerator()->create_course();
$PAGE->set_course($course);
$this->getDataGenerator()->enrol_user($user->id, $course->id, 'teacher');
$this->setUser($user);
ob_start();
report_helper::print_report_selector('Logs');
$output = $this->getActualOutput();
ob_end_clean();
$log = '<option value="/report/log/index.php?id=' . $course->id .'" selected>Logs</option>';
$competency = '<option value="/report/competency/index.php?id=' . $course->id . '" >Competency breakdown</option>';
$loglive = '<option value="/report/loglive/index.php?id=' . $course->id . '" >Live logs</option>';
$participation = '<option value="/report/participation/index.php?id=' . $course->id . '" >Course participation</option>';
$this->assertStringContainsString($log, $output);
$this->assertStringContainsString($competency, $output);
$this->assertStringContainsString($loglive, $output);
$this->assertStringContainsString($participation, $output);
}
}

View File

@ -22,6 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require_once(__DIR__ . '/../../config.php');
$id = required_param('id', PARAM_INT);
@ -71,9 +73,14 @@ $PAGE->set_title($title);
$PAGE->set_heading($coursename);
$PAGE->set_pagelayout('incourse');
report_helper::save_selected_report($id, $navurl);
$output = $PAGE->get_renderer('report_competency');
echo $output->header();
$pluginname = get_string('pluginname', 'report_competency');
report_helper::print_report_selector($pluginname);
$baseurl = new moodle_url('/report/competency/index.php');
$nav = new \report_competency\output\user_course_navigation($currentuser, $course->id, $baseurl, $currentmodule);
$top = $output->render($nav);

View File

@ -0,0 +1,26 @@
@report @report_competency
Feature: In a course administration page, navigate through report page, test for course competency page
In order to navigate through report page
As an admin
Go to course administration -> reports -> competency breackdown
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in the course competency page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports > Competency breakdown" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Competency breakdown"
And the field "Report" matches value "Competency breakdown"

View File

@ -24,6 +24,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require_once(__DIR__.'/../../config.php');
require_once("{$CFG->libdir}/completionlib.php");
@ -113,6 +115,8 @@ foreach ($completion->get_criteria() as $criterion) {
}
}
report_helper::save_selected_report($courseid, $url);
// Can logged in user mark users as complete?
// (if the logged in user has a role defined in the role criteria)
$allow_marking = false;
@ -156,6 +160,9 @@ if ($csv) {
$PAGE->set_heading($course->fullname);
echo $OUTPUT->header();
// Print the selected dropdown.
$pluginname = get_string('pluginname', 'report_completion');
report_helper::print_report_selector($pluginname);
// Handle groups (if enabled)
groups_print_course_menu($course, $CFG->wwwroot.'/report/completion/index.php?course='.$course->id);

View File

@ -0,0 +1,32 @@
@report @report_completion
Feature: In a course administration page, navigate through report page, test for course completion page
In order to navigate through report page
As an admin
Go to course administration -> reports -> course completion
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode | enablecompletion |
| Course 1 | C1 | 0 | 1 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in the course completion page
Given I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
And I navigate to "Course completion" in current page administration
And I expand all fieldsets
And I set the following fields to these values:
| id_criteria_self | 1 |
And I press "Save changes"
And I am on "Course 1" course homepage
When I navigate to "Reports > Course completion" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Course completion"
And the field "Report" matches value "Course completion"

View File

@ -22,6 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/adminlib.php');
@ -152,8 +154,16 @@ if ($model->get_analyser()::one_sample_per_analysable()) {
redirect($redirecturl);
}
}
echo $OUTPUT->header();
if ($course) {
report_helper::save_selected_report($course->id, $url);
// Print selected drop down.
$pluginname = get_string('pluginname', 'report_insights');
report_helper::print_report_selector($pluginname);
}
$renderable = new \report_insights\output\insights_list($model, $context, $othermodels, $page, $perpage);
echo $renderer->render($renderable);

View File

@ -22,6 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require('../../config.php');
require_once($CFG->dirroot.'/course/lib.php');
require_once($CFG->dirroot.'/report/log/locallib.php');
@ -103,6 +105,8 @@ $url = new moodle_url("/report/log/index.php", $params);
$PAGE->set_url('/report/log/index.php', array('id' => $id));
$PAGE->set_pagelayout('report');
report_helper::save_selected_report($id, $url);
// Get course details.
$course = null;
if ($id) {
@ -163,6 +167,9 @@ if (empty($readers)) {
if (empty($logformat)) {
echo $output->header();
// Print selector dropdown.
$pluginname = get_string('pluginname', 'report_log');
report_helper::print_report_selector($pluginname);
$userinfo = get_string('allparticipants');
$dateinfo = get_string('alldays');
@ -184,6 +191,9 @@ if (empty($readers)) {
}
} else {
echo $output->header();
// Print selector dropdown.
$pluginname = get_string('pluginname', 'report_log');
report_helper::print_report_selector($pluginname);
echo $output->heading(get_string('chooselogs') .':');
echo $output->render($reportlog);
}

View File

@ -0,0 +1,53 @@
@report @report_log
Feature: In a course administration page, navigate through report page, test for report log page
In order to navigate through report page
As an admin
Go to course administration -> reports
The reports page by default points to logs page
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
| Course 2 | C2 | 0 | 1 |
| Course 3 | C3 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
| admin | C2 | editingteacher |
| student1 | C2 | student |
| admin | C3 | editingteacher |
| student1 | C3 | student |
@javascript
Scenario: Default page accessed for Report is log page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Logs"
And the field "Report" matches value "Logs"
@javascript
Scenario: Verify the session setting is saved for different courses
Given I log in as "admin"
And I am on "Course 1" course homepage
And I navigate to "Reports" in current page administration
And "Report" "field" should exist
And the "Report" select box should contain "Logs"
And the field "Report" matches value "Logs"
# Now select the Live logs for Course 2
And I am on "Course 2" course homepage
And I navigate to "Reports > Live logs" in current page administration
# now come back to course 1 and see if the default is logs page or not
And I am on "Course 1" course homepage
And I navigate to "Reports" in current page administration
And the "Report" select box should contain "Logs"
# Now come back again to Course 2
And I am on "Course 2" course homepage
When I navigate to "Reports" in current page administration
Then the field "Report" matches value "Live logs"

View File

@ -24,6 +24,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require('../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->dirroot.'/course/lib.php');
@ -59,6 +61,8 @@ $url = new moodle_url("/report/loglive/index.php", $params);
$PAGE->set_url($url);
$PAGE->set_pagelayout('report');
report_helper::save_selected_report($id, $url);
$renderable = new report_loglive_renderable($logreader, $id, $url, 0, $page);
$refresh = $renderable->get_refresh_rate();
$logreader = $renderable->selectedlogreader;
@ -83,6 +87,10 @@ $PAGE->set_heading("$coursename: $strlivelogs ($strupdatesevery)");
$output = $PAGE->get_renderer('report_loglive');
echo $output->header();
// Print selector dropdown.
$pluginname = get_string('pluginname', 'report_loglive');
report_helper::print_report_selector($pluginname);
echo $output->reader_selector($renderable);
echo $output->toggle_liveupdate_button($renderable);
echo $output->render($renderable);
@ -91,4 +99,4 @@ echo $output->render($renderable);
$event = \report_loglive\event\report_viewed::create(array('context' => $context));
$event->trigger();
echo $output->footer();
echo $output->footer();

View File

@ -0,0 +1,26 @@
@report @report_loglive
Feature: In a course administration page, navigate through report page, test for report live log page
In order to navigate through report page
As an admin
Go to the course administration -> reports -> live logs
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in live logs page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports > Live logs" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Live logs"
And the field "Report" matches value "Live logs"

View File

@ -23,6 +23,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require('../../config.php');
require_once($CFG->dirroot.'/report/outline/locallib.php');
@ -47,6 +49,9 @@ require_login($course);
$context = context_course::instance($course->id);
require_capability('report/outline:view', $context);
$url = new moodle_url('/report/outline/index.php', ['id' => $id]);
report_helper::save_selected_report($id, $url);
// Handle form to filter access logs by date.
$filterform = new \report_outline\filter_form();
$filterform->set_data(['id' => $course->id, 'filterstartdate' => $startdate, 'filterenddate' => $enddate]);
@ -87,6 +92,10 @@ $strrelatedblogentries = get_string('relatedblogentries', 'blog');
$PAGE->set_title($course->shortname .': '. $stractivityreport);
$PAGE->set_heading($course->fullname);
echo $OUTPUT->header();
// Print selector drop down.
$pluginname = get_string('pluginname', 'report_outline');
report_helper::print_report_selector($pluginname);
echo $OUTPUT->heading(format_string($course->fullname));
list($uselegacyreader, $useinternalreader, $minloginternalreader, $logtable) = report_outline_get_common_log_variables();

View File

@ -0,0 +1,26 @@
@report @report_outline
Feature: In a course administration page, navigate through report page, test for activity report page
In order to navigate through report page
As an admin
Go to course administration -> Reports -> Activity report
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in course activiy report page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports > Activity report" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Activity report"
And the field "Report" matches value "Activity report"

View File

@ -23,6 +23,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require('../../config.php');
require_once($CFG->dirroot.'/lib/tablelib.php');
require_once($CFG->dirroot.'/notes/lib.php');
@ -31,9 +33,6 @@ require_once($CFG->dirroot.'/report/participation/locallib.php');
define('DEFAULT_PAGE_SIZE', 20);
define('SHOW_ALL_PAGE_SIZE', 5000);
// Release session lock.
\core\session\manager::write_close();
$id = required_param('id', PARAM_INT); // course id.
$roleid = optional_param('roleid', 0, PARAM_INT); // which role to show
$instanceid = optional_param('instanceid', 0, PARAM_INT); // instance we're looking at.
@ -69,6 +68,8 @@ require_login($course);
$context = context_course::instance($course->id);
require_capability('report/participation:view', $context);
report_helper::save_selected_report($id, $url);
$strparticipation = get_string('participationreport');
$strviews = get_string('views');
$strposts = get_string('posts');
@ -83,6 +84,12 @@ $PAGE->set_title(format_string($course->shortname, true, array('context' => $con
$PAGE->set_heading(format_string($course->fullname, true, array('context' => $context)));
echo $OUTPUT->header();
// Print the selector dropdown.
$pluginname = get_string('pluginname', 'report_participation');
report_helper::print_report_selector($pluginname);
// Release session lock.
\core\session\manager::write_close();
// Logs will not have been recorded before the course timecreated time.
$minlog = $course->timecreated;
$onlyuselegacyreader = false; // Use only legacy log table to aggregate records.

View File

@ -0,0 +1,26 @@
@report @report_participation
Feature: In a course administration page, navigate through report page, test for course participation page
In order to navigate through report page
As an admin
Go to course administration -> Reports -> Course participation
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| admin | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in the course participation page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports > Course participation" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Course participation"
And the field "Report" matches value "Course participation"

View File

@ -23,11 +23,12 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
use \report_progress\local\helper;
require('../../config.php');
require_once($CFG->libdir . '/completionlib.php');
use \report_progress\local\helper;
// Get course
$id = required_param('course',PARAM_INT);
$course = $DB->get_record('course',array('id'=>$id));
@ -155,6 +156,8 @@ $grandtotal = $completion->get_num_tracked_users('', array(), $group);
// Get user data
$progress = array();
report_helper::save_selected_report($id, $url);
if ($total) {
$progress = $completion->get_progress_all(
implode(' AND ', $where),
@ -192,6 +195,10 @@ if ($csv && $grandtotal && count($activities)>0) { // Only show CSV if there are
$PAGE->set_title($strcompletion);
$PAGE->set_heading($course->fullname);
echo $OUTPUT->header();
// Print the selected dropdown.
$pluginname = get_string('pluginname', 'report_progress');
report_helper::print_report_selector($pluginname);
$PAGE->requires->js_call_amd('report_progress/completion_override', 'init', [fullname($USER)]);
// Handle groups (if enabled).

View File

@ -0,0 +1,32 @@
@report @report_progress
Feature: In a course administration page, navigate through report page, test for selector in activity completion
In order to view and override a student's activity completion status
As a teacher
Go to course administration -> Reports -> Activity completion
Background:
Given the following "courses" exist:
| fullname | shortname | format | enablecompletion |
| Course 1 | C1 | topics | 1 |
And the following "activities" exist:
| activity | name | intro | course | idnumber | section | completion | completionview | completionusegrade | assignsubmission_onlinetext_enabled | submissiondrafts |
| assign | my assignment | A1 desc | C1 | assign1 | 0 | 1 | 0 | | 0 | 0 |
| assign | my assignment 2 | A2 desc | C1 | assign2 | 0 | 2 | 1 | | 0 | 0 |
| assign | my assignment 3 | A3 desc | C1 | assign3 | 0 | 2 | 1 | 1 | 1 | 0 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | One | teacher1@example.com |
| student1 | Student | One | student1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
@javascript
Scenario: Selector should be available in the course acitivity completion page
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Reports > Activity completion" in current page administration
Then "Report" "field" should exist
And the "Report" select box should contain "Activity completion"
And the field "Report" matches value "Activity completion"

View File

@ -23,6 +23,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use core\report_helper;
require_once('../../config.php');
require_once($CFG->dirroot.'/report/stats/locallib.php');
require_once($CFG->libdir.'/adminlib.php');
@ -74,6 +76,9 @@ $event = \report_stats\event\report_viewed::create(array('context' => $context,
$event->trigger();
stats_check_uptodate($course->id);
$url = new moodle_url('/report/stats/index.php', ['course' => $course->id]);
report_helper::save_selected_report($courseid, $url);
if ($course->id == SITEID) {
admin_externalpage_setup('reportstats', '', null, '', array('pagelayout'=>'report'));
echo $OUTPUT->header();
@ -86,6 +91,10 @@ if ($course->id == SITEID) {
$PAGE->set_pagelayout('report');
$PAGE->set_headingmenu(report_stats_mode_menu($course, $mode, $time, "$CFG->wwwroot/report/stats/index.php"));
echo $OUTPUT->header();
// Print the selected dropdown.
$pluginname = get_string('pluginname', 'report_stats');
report_helper::print_report_selector($pluginname);
}
report_stats_report($course, $report, $mode, $user, $roleid, $time);

View File

@ -1,6 +1,14 @@
This files describes API changes in /report/* - plugins,
information provided here is intended especially for developers.
=== 3.11 ===
* The new report plugin's can have drop down, which can be included by calling static
methods save_selected_report and print_report_selector in lib/classes/report_helper.php.
The save_selected_report helps to remember the most recently accessed report plugin.
print_report_selector would help to show the dropdown, on the report page. Make sure
to call print_report_selector after the header is printed/echoed.
=== 3.6 ===
* The final deprecation of xxx_delete_course callback means that this function will no longer be called.

46
report/view.php Normal file
View File

@ -0,0 +1,46 @@
<?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/>.
/**
* Page to view the course reports
*
* @package core
* @subpackage report
* @copyright 2021 Sujith Haridasan
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../config.php');
// Course id.
$courseid = required_param('courseid', PARAM_INT);
$PAGE->set_url(new moodle_url('/report/view.php', array('courseid' => $courseid)));
// Basic access checks.
if (!$course = $DB->get_record('course', array('id' => $courseid))) {
print_error('invalidcourseid');
}
require_login($course);
// Get the last viewed Page.
if (!isset($USER->course_last_report[$courseid])) {
$lasturl = new moodle_url('/report/log/index.php', ['id' => $courseid]);
} else {
$lasturl = $USER->course_last_report[$courseid];
}
redirect($lasturl);