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);