Skip to content

Commit

Permalink
Merge branch 'MDL-70753-master' of https://github.com/sharidas/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
vmdef authored and stronk7 committed May 2, 2021
2 parents 0a986fd + 686bd26 commit bd8600e
Show file tree
Hide file tree
Showing 23 changed files with 594 additions and 8 deletions.
8 changes: 8 additions & 0 deletions admin/tool/monitor/managerules.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand Down Expand Up @@ -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');
Expand Down
28 changes: 28 additions & 0 deletions admin/tool/monitor/tests/behat/course_report_monitor.feature
Original file line number Diff line number Diff line change
@@ -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"
88 changes: 88 additions & 0 deletions lib/classes/report_helper.php
Original file line number Diff line number Diff line change
@@ -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;
}
}
5 changes: 3 additions & 2 deletions lib/navigationlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
112 changes: 112 additions & 0 deletions lib/tests/report_helper_test.php
Original file line number Diff line number Diff line change
@@ -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);
}
}
7 changes: 7 additions & 0 deletions report/competency/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
26 changes: 26 additions & 0 deletions report/competency/tests/behat/course_report_competency.feature
Original file line number Diff line number Diff line change
@@ -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"
7 changes: 7 additions & 0 deletions report/completion/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
32 changes: 32 additions & 0 deletions report/completion/tests/behat/course_report_completion.feature
Original file line number Diff line number Diff line change
@@ -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"
Loading

0 comments on commit bd8600e

Please sign in to comment.