Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge branch 'MDL-57892_filter_outline' of git://github.com/davosmith…
…/moodle
- Loading branch information
Showing
with
289 additions
and 6 deletions.
@@ -0,0 +1,74 @@ | ||
<?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/>. | ||
|
||
/** | ||
* Form to filter the outline report | ||
* | ||
* @package report_outline | ||
* @copyright 2017 Davo Smith, Synergy Learning | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
namespace report_outline; | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
global $CFG; | ||
require_once($CFG->libdir.'/formslib.php'); | ||
|
||
/** | ||
* Class filter_form form to filter the results by date | ||
* @package report_outline | ||
*/ | ||
class filter_form extends \moodleform { | ||
/** | ||
* Form definition | ||
* @throws \HTML_QuickForm_Error | ||
* @throws \coding_exception | ||
*/ | ||
protected function definition() { | ||
$mform = $this->_form; | ||
|
||
$mform->addElement('hidden', 'id'); | ||
$mform->setType('id', PARAM_INT); | ||
|
||
$mform->addElement('header', 'filterheader', get_string('filter')); | ||
$opts = ['optional' => true]; | ||
$mform->addElement('date_selector', 'filterstartdate', get_string('from'), $opts); | ||
$mform->addElement('date_selector', 'filterenddate', get_string('to'), $opts); | ||
|
||
$mform->setExpanded('filterheader', false); | ||
|
||
// Add the filter/cancel buttons (without 'closeHeaderBefore', so they collapse with the filter). | ||
$buttonarray = [ | ||
$mform->createElement('submit', 'submitbutton', get_string('filter')), | ||
$mform->createElement('cancel'), | ||
]; | ||
$mform->addGroup($buttonarray, 'buttonar', '', [' '], false); | ||
} | ||
|
||
/** | ||
* Expand the form contents if the filter is in use. | ||
* @throws \HTML_QuickForm_Error | ||
*/ | ||
public function definition_after_data() { | ||
$mform = $this->_form; | ||
$filterstartdate = $mform->getElement('filterstartdate')->getValue(); | ||
$filterenddate = $mform->getElement('filterenddate')->getValue(); | ||
if (!empty($filterstartdate['enabled']) || !empty($filterenddate['enabled'])) { | ||
$mform->setExpanded('filterheader', true); | ||
} | ||
} | ||
} |
@@ -0,0 +1,68 @@ | ||
<?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/>. | ||
|
||
/** | ||
* Custom behat functions | ||
* | ||
* @package report_outline | ||
* @copyright 2017 Davo Smith, Synergy Learning | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
require_once(__DIR__ . '/../../../../lib/behat/behat_base.php'); | ||
|
||
/** | ||
* Class behat_report_outline custom Behat steps for report_outline. | ||
*/ | ||
class behat_report_outline extends behat_base { | ||
/** | ||
* This is a horrible, horrible hack, but it is not clear how else a range of log entries can be produced to test the | ||
* filtering of the log entries. | ||
* | ||
* @Given /^the log timestamp for "(?P<username>(?:[^"]|\\")*)" and "(?P<activity_idnumber>(?:[^"]|\\")*)" is set to "(?P<date>(?:[^"]|\\")*)"$/ | ||
* @param string $username | ||
* @param string $activityidnumber | ||
* @param string $date | ||
*/ | ||
public function the_log_timestamp_for_and_is_set_to($username, $activityidnumber, $date) { | ||
global $DB; | ||
|
||
// Get the name of the log table. | ||
$lm = get_log_manager(); | ||
$readers = $lm->get_readers('\\core\\log\\sql_internal_table_reader'); | ||
$reader = reset($readers); | ||
$table = $reader->get_internal_log_table_name(); | ||
|
||
// Find the log entry. | ||
$cmrec = $DB->get_record('course_modules', ['idnumber' => $activityidnumber], '*', MUST_EXIST); | ||
$modname = $DB->get_field('modules', 'name', ['id' => $cmrec->module], MUST_EXIST); | ||
$userid = $DB->get_field('user', 'id', ['username' => $username], MUST_EXIST); | ||
|
||
$cond = [ | ||
'userid' => $userid, | ||
'component' => 'mod_'.$modname, | ||
'target' => 'course_module', | ||
'action' => 'viewed', | ||
'contextinstanceid' => $cmrec->id, | ||
]; | ||
$logentries = $DB->get_records($table, $cond, 'timecreated DESC', 'id', 0, 1); | ||
$logentry = reset($logentries); | ||
|
||
// Update the timecreated for the entry. | ||
$timestamp = strtotime($date); | ||
$DB->set_field($table, 'timecreated', $timestamp, ['id' => $logentry->id]); | ||
} | ||
} |
@@ -0,0 +1,94 @@ | ||
@report @report_outline | ||
Feature: Filter an outline report | ||
In order to ensure the outline report works as expected | ||
As a teacher | ||
I need to log in as a teacher and view the outline report with various filters in place | ||
|
||
Background: | ||
Given the following "courses" exist: | ||
| fullname | shortname | format | | ||
| Course 1 | C1 | topics | | ||
And the following "users" exist: | ||
| username | firstname | lastname | email | | ||
| teacher1 | Teacher | 1 | teacher1@example.com | | ||
| student1 | Student | 1 | student1@example.com | | ||
| student2 | Student | 2 | student2@example.com | | ||
And the following "course enrolments" exist: | ||
| user | course | role | | ||
| teacher1 | C1 | editingteacher | | ||
| student1 | C1 | student | | ||
| student2 | C1 | student | | ||
When I log in as "admin" | ||
And I am on "Course 1" course homepage with editing mode on | ||
And I add a "Forum" to section "1" and I fill the form with: | ||
| Forum name | Forum name | | ||
| Description | Forum description | | ||
| ID number| FORUM01 | | ||
And I add a "Book" to section "1" and I fill the form with: | ||
| Name | Book name | | ||
| Description | Book description | | ||
| ID number| BOOK01 | | ||
|
||
Scenario: Filter the outline report by start date | ||
Given I navigate to "Manage log stores" node in "Site administration > Plugins > Logging" | ||
And "Enable" "link" should exist in the "Legacy log" "table_row" | ||
And "Disable" "link" should exist in the "Standard log" "table_row" | ||
And I log out | ||
And I log in as "student1" | ||
And I am on "Course 1" course homepage | ||
And I follow "Forum name" | ||
And the log timestamp for "student1" and "FORUM01" is set to "12 June 2017 12:49:00" | ||
And I am on "Course 1" course homepage | ||
And I follow "Book name" | ||
And the log timestamp for "student1" and "BOOK01" is set to "10 June 2017 14:01:00" | ||
And I log out | ||
And I log in as "student2" | ||
And I am on "Course 1" course homepage | ||
And I follow "Book name" | ||
And the log timestamp for "student2" and "BOOK01" is set to "14 June 2017 11:02:00" | ||
And I log out | ||
And I log in as "admin" | ||
And I am on "Course 1" course homepage | ||
And I navigate to "Activity report" node in "Course administration > Reports" | ||
And I should see "2 views by 2 users" in the "Book name" "table_row" | ||
And I should see "1 views by 1 users" in the "Forum name" "table_row" | ||
When I set the following fields to these values: | ||
| filterstartdate[enabled] | 1 | | ||
| filterstartdate[day] | 12 | | ||
| filterstartdate[month] | June | | ||
| filterstartdate[year] | 2017 | | ||
And I press "Filter" | ||
Then I should see "1 views by 1 users" in the "Book name" "table_row" | ||
And I should see "1 views by 1 users" in the "Forum name" "table_row" | ||
|
||
Scenario: Filter the outline report by end date | ||
Given I navigate to "Manage log stores" node in "Site administration > Plugins > Logging" | ||
And "Enable" "link" should exist in the "Legacy log" "table_row" | ||
And "Disable" "link" should exist in the "Standard log" "table_row" | ||
And I log out | ||
And I log in as "student1" | ||
And I am on "Course 1" course homepage | ||
And I follow "Forum name" | ||
And the log timestamp for "student1" and "FORUM01" is set to "12 June 2017 12:49:00" | ||
And I am on "Course 1" course homepage | ||
And I follow "Book name" | ||
And the log timestamp for "student1" and "BOOK01" is set to "10 June 2017 14:01:00" | ||
And I log out | ||
And I log in as "student2" | ||
And I am on "Course 1" course homepage | ||
And I follow "Book name" | ||
And the log timestamp for "student2" and "BOOK01" is set to "14 June 2017 11:02:00" | ||
And I log out | ||
And I log in as "admin" | ||
And I am on "Course 1" course homepage | ||
And I navigate to "Activity report" node in "Course administration > Reports" | ||
And I should see "2 views by 2 users" in the "Book name" "table_row" | ||
And I should see "1 views by 1 users" in the "Forum name" "table_row" | ||
When I set the following fields to these values: | ||
| filterenddate[enabled] | 1 | | ||
| filterenddate[day] | 11 | | ||
| filterenddate[month] | June | | ||
| filterenddate[year] | 2017 | | ||
And I press "Filter" | ||
Then I should see "1 views by 1 users" in the "Book name" "table_row" | ||
And I should not see "views by" in the "Forum name" "table_row" |