mirrored from git://git.moodle.org/moodle.git
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'MDL-57892_filter_outline' of git://github.com/davosmith…
…/moodle
- Loading branch information
Showing
4 changed files
with
289 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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]); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |