diff --git a/admin/tool/monitor/managerules.php b/admin/tool/monitor/managerules.php
index 001ad64ae4a72..1889c3e2c46a6 100644
--- a/admin/tool/monitor/managerules.php
+++ b/admin/tool/monitor/managerules.php
@@ -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 @@
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');
diff --git a/admin/tool/monitor/tests/behat/course_report_monitor.feature b/admin/tool/monitor/tests/behat/course_report_monitor.feature
new file mode 100644
index 0000000000000..ad5ee2c801823
--- /dev/null
+++ b/admin/tool/monitor/tests/behat/course_report_monitor.feature
@@ -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"
diff --git a/lib/classes/report_helper.php b/lib/classes/report_helper.php
new file mode 100644
index 0000000000000..31817f2d7b82c
--- /dev/null
+++ b/lib/classes/report_helper.php
@@ -0,0 +1,88 @@
+.
+
+/**
+ * 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;
+ }
+}
diff --git a/lib/navigationlib.php b/lib/navigationlib.php
index 503ccdde0ec81..0e20788a185a9 100644
--- a/lib/navigationlib.php
+++ b/lib/navigationlib.php
@@ -4491,8 +4491,9 @@ protected function load_course_settings($forceopen = false) {
// 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';
diff --git a/lib/tests/report_helper_test.php b/lib/tests/report_helper_test.php
new file mode 100644
index 0000000000000..4c2595ba3312c
--- /dev/null
+++ b/lib/tests/report_helper_test.php
@@ -0,0 +1,112 @@
+.
+
+/**
+ * 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 = '';
+ $competency = '';
+ $loglive = '';
+ $participation = '';
+ $this->assertStringContainsString($log, $output);
+ $this->assertStringContainsString($competency, $output);
+ $this->assertStringContainsString($loglive, $output);
+ $this->assertStringContainsString($participation, $output);
+ }
+}
diff --git a/report/competency/index.php b/report/competency/index.php
index ccf0eb829ee99..b7b02997f707f 100644
--- a/report/competency/index.php
+++ b/report/competency/index.php
@@ -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_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);
diff --git a/report/competency/tests/behat/course_report_competency.feature b/report/competency/tests/behat/course_report_competency.feature
new file mode 100644
index 0000000000000..ee19183d6fed1
--- /dev/null
+++ b/report/competency/tests/behat/course_report_competency.feature
@@ -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"
diff --git a/report/completion/index.php b/report/completion/index.php
index eaa47c2c6689e..06d30dc96f72b 100644
--- a/report/completion/index.php
+++ b/report/completion/index.php
@@ -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 @@
}
}
+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 @@
$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);
diff --git a/report/completion/tests/behat/course_report_completion.feature b/report/completion/tests/behat/course_report_completion.feature
new file mode 100644
index 0000000000000..fd8b9a6b876ea
--- /dev/null
+++ b/report/completion/tests/behat/course_report_completion.feature
@@ -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"
diff --git a/report/insights/insights.php b/report/insights/insights.php
index bcbd0e936edca..92623618a1a8c 100644
--- a/report/insights/insights.php
+++ b/report/insights/insights.php
@@ -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 @@
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);
diff --git a/report/log/index.php b/report/log/index.php
index 3c47b1ae92652..2b29888491320 100644
--- a/report/log/index.php
+++ b/report/log/index.php
@@ -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 @@
$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($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 @@
}
} 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);
}
diff --git a/report/log/tests/behat/course_report_log.feature b/report/log/tests/behat/course_report_log.feature
new file mode 100644
index 0000000000000..74edcf0a01b1c
--- /dev/null
+++ b/report/log/tests/behat/course_report_log.feature
@@ -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"
diff --git a/report/loglive/index.php b/report/loglive/index.php
index ec091fa2baaab..d69646762049f 100644
--- a/report/loglive/index.php
+++ b/report/loglive/index.php
@@ -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 @@
$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 @@
$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 @@
$event = \report_loglive\event\report_viewed::create(array('context' => $context));
$event->trigger();
-echo $output->footer();
\ No newline at end of file
+echo $output->footer();
diff --git a/report/loglive/tests/behat/course_report_loglive.feature b/report/loglive/tests/behat/course_report_loglive.feature
new file mode 100644
index 0000000000000..90f08b95f8312
--- /dev/null
+++ b/report/loglive/tests/behat/course_report_loglive.feature
@@ -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"
diff --git a/report/outline/index.php b/report/outline/index.php
index b247098de2bbf..85d9331b6695d 100644
--- a/report/outline/index.php
+++ b/report/outline/index.php
@@ -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 @@
$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 @@
$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();
diff --git a/report/outline/tests/behat/course_report_outline.feature b/report/outline/tests/behat/course_report_outline.feature
new file mode 100644
index 0000000000000..3da3cb7f8c86e
--- /dev/null
+++ b/report/outline/tests/behat/course_report_outline.feature
@@ -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"
diff --git a/report/participation/index.php b/report/participation/index.php
index 44248613d9106..e28f520ea035c 100644
--- a/report/participation/index.php
+++ b/report/participation/index.php
@@ -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 @@
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 @@
$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_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.
diff --git a/report/participation/tests/behat/course_report_participation.feature b/report/participation/tests/behat/course_report_participation.feature
new file mode 100644
index 0000000000000..ec3564e0a1aa9
--- /dev/null
+++ b/report/participation/tests/behat/course_report_participation.feature
@@ -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"
diff --git a/report/progress/index.php b/report/progress/index.php
index dc7746ce77f90..bcbf06ec4da82 100644
--- a/report/progress/index.php
+++ b/report/progress/index.php
@@ -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 @@ function csv_quote($value) {
// 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 @@ function csv_quote($value) {
$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).
diff --git a/report/progress/tests/behat/course_report_progress.feature b/report/progress/tests/behat/course_report_progress.feature
new file mode 100644
index 0000000000000..1cd5091905eed
--- /dev/null
+++ b/report/progress/tests/behat/course_report_progress.feature
@@ -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"
diff --git a/report/stats/index.php b/report/stats/index.php
index 461bdb49a7b6e..b94aa70b7e559 100644
--- a/report/stats/index.php
+++ b/report/stats/index.php
@@ -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->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 @@
$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);
diff --git a/report/upgrade.txt b/report/upgrade.txt
index 96565744b370e..341fed59e5fef 100644
--- a/report/upgrade.txt
+++ b/report/upgrade.txt
@@ -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.
diff --git a/report/view.php b/report/view.php
new file mode 100644
index 0000000000000..bdaec23e9eda7
--- /dev/null
+++ b/report/view.php
@@ -0,0 +1,46 @@
+.
+
+/**
+ * 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);