From c80d59f269c3ad0a569781243652bcd3fdd449c0 Mon Sep 17 00:00:00 2001 From: Jonathon Fowler Date: Tue, 18 Feb 2014 16:46:51 +1000 Subject: [PATCH] MDL-44268 assign: add 'not submitted' and 'no marker' filter options --- mod/assign/gradingoptionsform.php | 1 + mod/assign/gradingtable.php | 11 +++- mod/assign/lang/en/assign.php | 2 + mod/assign/locallib.php | 6 +++ .../tests/behat/filter_by_marker.feature | 52 +++++++++++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 mod/assign/tests/behat/filter_by_marker.feature diff --git a/mod/assign/gradingoptionsform.php b/mod/assign/gradingoptionsform.php index 7087480d506..db56ca2af7b 100644 --- a/mod/assign/gradingoptionsform.php +++ b/mod/assign/gradingoptionsform.php @@ -49,6 +49,7 @@ class mod_assign_grading_options_form extends moodleform { $options = array(-1=>get_string('all'), 10=>'10', 20=>'20', 50=>'50', 100=>'100'); $mform->addElement('select', 'perpage', get_string('assignmentsperpage', 'assign'), $options, $dirtyclass); $options = array('' => get_string('filternone', 'assign'), + ASSIGN_FILTER_NOT_SUBMITTED => get_string('filternotsubmitted', 'assign'), ASSIGN_FILTER_SUBMITTED => get_string('filtersubmitted', 'assign'), ASSIGN_FILTER_REQUIRE_GRADING => get_string('filterrequiregrading', 'assign')); if ($instance['submissionsenabled']) { diff --git a/mod/assign/gradingtable.php b/mod/assign/gradingtable.php index 3b3eb20fc78..bc72062d359 100644 --- a/mod/assign/gradingtable.php +++ b/mod/assign/gradingtable.php @@ -180,6 +180,9 @@ class assign_grading_table extends table_sql implements renderable { s.status = :submitted) '; $params['submitted'] = ASSIGN_SUBMISSION_STATUS_SUBMITTED; + } else if ($filter == ASSIGN_FILTER_NOT_SUBMITTED) { + $where .= ' AND (s.timemodified IS NULL) '; + } else if ($filter == ASSIGN_FILTER_REQUIRE_GRADING) { $where .= ' AND (s.timemodified IS NOT NULL AND s.status = :submitted AND @@ -198,8 +201,12 @@ class assign_grading_table extends table_sql implements renderable { // Check to see if marker filter is set. $markerfilter = (int)get_user_preferences('assign_markerfilter', ''); if (!empty($markerfilter)) { - $where .= ' AND uf.allocatedmarker = :markerid'; - $params['markerid'] = $markerfilter; + if ($markerfilter == ASSIGN_MARKER_FILTER_NO_MARKER) { + $where .= ' AND (uf.allocatedmarker IS NULL OR uf.allocatedmarker = 0)'; + } else { + $where .= ' AND uf.allocatedmarker = :markerid'; + $params['markerid'] = $markerfilter; + } } } else { // Only show users allocated to this marker. $where .= ' AND uf.allocatedmarker = :markerid'; diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 21cc345d449..c5bde1dde9b 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -194,6 +194,7 @@ $string['feedbacksettings'] = 'Feedback settings'; $string['filesubmissions'] = 'File submissions'; $string['filter'] = 'Filter'; $string['filternone'] = 'No filter'; +$string['filternotsubmitted'] = 'Not submitted'; $string['filterrequiregrading'] = 'Requires grading'; $string['filtersubmitted'] = 'Submitted'; $string['gradedby'] = 'Graded by'; @@ -228,6 +229,7 @@ $string['manageassignfeedbackplugins'] = 'Manage assignment feedback plugins'; $string['manageassignsubmissionplugins'] = 'Manage assignment submission plugins'; $string['marker'] = 'Marker'; $string['markerfilter'] = 'Marker filter'; +$string['markerfilternomarker'] = 'No marker'; $string['markingallocation'] = 'Use marking allocation'; $string['markingallocation_help'] = 'If enabled together with marking workflow, markers can be allocated to particular students.'; $string['markingworkflow'] = 'Use marking workflow'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 1f53f2a4f87..6e8be8f0d9b 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -33,9 +33,13 @@ define('ASSIGN_SUBMISSION_STATUS_SUBMITTED', 'submitted'); // Search filters for grading page. define('ASSIGN_FILTER_SUBMITTED', 'submitted'); +define('ASSIGN_FILTER_NOT_SUBMITTED', 'notsubmitted'); define('ASSIGN_FILTER_SINGLE_USER', 'singleuser'); define('ASSIGN_FILTER_REQUIRE_GRADING', 'require_grading'); +// Marker filter for grading page. +define('ASSIGN_MARKER_FILTER_NO_MARKER', -1); + // Reopen attempt methods. define('ASSIGN_ATTEMPT_REOPEN_METHOD_NONE', 'none'); define('ASSIGN_ATTEMPT_REOPEN_METHOD_MANUAL', 'manual'); @@ -3044,6 +3048,7 @@ class assign { if ($markingallocation) { $markers = get_users_by_capability($this->context, 'mod/assign:grade'); $markingallocationoptions[''] = get_string('filternone', 'assign'); + $markingallocationoptions[ASSIGN_MARKER_FILTER_NO_MARKER] = get_string('markerfilternomarker', 'assign'); foreach ($markers as $marker) { $markingallocationoptions[$marker->id] = fullname($marker); } @@ -5248,6 +5253,7 @@ class assign { $markingallocationoptions = array(); if ($markingallocation) { $markingallocationoptions[''] = get_string('filternone', 'assign'); + $markingallocationoptions[ASSIGN_MARKER_FILTER_NO_MARKER] = get_string('markerfilternomarker', 'assign'); $markers = get_users_by_capability($this->context, 'mod/assign:grade'); foreach ($markers as $marker) { $markingallocationoptions[$marker->id] = fullname($marker); diff --git a/mod/assign/tests/behat/filter_by_marker.feature b/mod/assign/tests/behat/filter_by_marker.feature new file mode 100644 index 00000000000..0e62cd7ca83 --- /dev/null +++ b/mod/assign/tests/behat/filter_by_marker.feature @@ -0,0 +1,52 @@ +@mod @mod_assign +Feature: In an assignment, teachers can filter displayed submissions by assigned marker + In order to manage submissions more easily + As a teacher + I need to view submissions allocated to markers. + + @javascript + Scenario: Allocate markers to submissions and filter by marker + Given the following "courses" exists: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exists: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@asd.com | + | student1 | Student | 1 | student1@asd.com | + | student2 | Student | 2 | student2@asd.com | + | marker1 | Marker | 1 | marker1@asd.com | + And the following "course enrolments" exists: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + | marker1 | C1 | teacher | + And I log in as "teacher1" + And I follow "Course 1" + And I turn editing mode on + And I add a "Assignment" to section "1" and I fill the form with: + | Assignment name | Test assignment name | + | Description | Submit your online text | + | assignsubmission_onlinetext_enabled | 1 | + | assignsubmission_file_enabled | 0 | + | Use marking workflow | Yes | + | Use marking allocation | Yes | + And I follow "Test assignment name" + And I follow "View/grade all submissions" + And I click on "Grade Student 1" "link" in the "Student 1" "table_row" + And I select "Marker 1" from "allocatedmarker" + And I click on "Save changes" "button" + And I log out + When I log in as "teacher1" + And I follow "Course 1" + And I follow "Test assignment name" + And I follow "View/grade all submissions" + And I select "Marker 1" from "markerfilter" + Then I should see "Student 1" + And I should not see "Student 2" + When I select "No marker" from "markerfilter" + Then I should not see "Student 1" + And I should see "Student 2" + When I select "No filter" from "markerfilter" + Then I should see "Student 1" + And I should see "Student 2"