mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-74314 grade: use repeatable form elements for grade letters.
This commit is contained in:
parent
b81fb00f25
commit
e9135d6708
@ -32,8 +32,11 @@ class edit_letter_form extends moodleform {
|
||||
|
||||
public function definition() {
|
||||
$mform =& $this->_form;
|
||||
$num = $this->_customdata['num'];
|
||||
$admin = $this->_customdata['admin'];
|
||||
|
||||
[
|
||||
'lettercount' => $lettercount,
|
||||
'admin' => $admin,
|
||||
] = $this->_customdata;
|
||||
|
||||
$mform->addElement('header', 'gradeletters', get_string('gradeletters', 'grades'));
|
||||
|
||||
@ -46,41 +49,35 @@ class edit_letter_form extends moodleform {
|
||||
$gradeletter = get_string('gradeletter', 'grades');
|
||||
$gradeboundary = get_string('gradeboundary', 'grades');
|
||||
|
||||
for ($i=1; $i<$num+1; $i++) {
|
||||
$gradelettername = 'gradeletter'.$i;
|
||||
$gradeboundaryname = 'gradeboundary'.$i;
|
||||
// The fields to create the grade letter/boundary.
|
||||
$elements = [];
|
||||
$elements[] = $mform->createElement('text', 'gradeletter', "{$gradeletter} {no}");
|
||||
$elements[] = $mform->createElement('static', '', '', '≥');
|
||||
$elements[] = $mform->createElement('float', 'gradeboundary', "{$gradeboundary} {no}");
|
||||
$elements[] = $mform->createElement('static', '', '', '%');
|
||||
|
||||
$entry = array();
|
||||
$entry[] = $mform->createElement('text', $gradelettername, $gradeletter . " $i");
|
||||
$mform->setType($gradelettername, PARAM_TEXT);
|
||||
// Element options/rules, fields should be disabled unless "Override" is checked for course grade letters.
|
||||
$options = [];
|
||||
$options['gradeletter']['type'] = PARAM_TEXT;
|
||||
|
||||
if (!$admin) {
|
||||
$mform->disabledIf($gradelettername, 'override', 'notchecked');
|
||||
}
|
||||
|
||||
$entry[] = $mform->createElement('static', '', '', '≥');
|
||||
$entry[] = $mform->createElement('float', $gradeboundaryname, $gradeboundary." $i");
|
||||
$entry[] = $mform->createElement('static', '', '', '%');
|
||||
$mform->addGroup($entry, 'gradeentry'.$i, $gradeletter." $i", array(' '), false);
|
||||
|
||||
if (!$admin) {
|
||||
$mform->disabledIf($gradeboundaryname, 'override', 'notchecked');
|
||||
}
|
||||
if (!$admin) {
|
||||
$options['gradeletter']['disabledif'] = ['override', 'notchecked'];
|
||||
$options['gradeboundary']['disabledif'] = ['override', 'notchecked'];
|
||||
}
|
||||
|
||||
if ($num > 0) {
|
||||
$mform->addHelpButton('gradeentry1', 'gradeletter', 'grades');
|
||||
// Create our repeatable elements, each one a group comprised of the fields defined previously.
|
||||
$this->repeat_elements([
|
||||
$mform->createElement('group', 'gradeentry', "{$gradeletter} {no}", $elements, [' '], false)
|
||||
], $lettercount, $options, 'gradeentrycount', 'gradeentryadd', 3);
|
||||
|
||||
// Add a help icon to first element group, if it exists.
|
||||
if ($mform->elementExists('gradeentry[0]')) {
|
||||
$mform->addHelpButton('gradeentry[0]', 'gradeletter', 'grades');
|
||||
}
|
||||
|
||||
// hidden params
|
||||
$mform->addElement('hidden', 'id');
|
||||
$mform->setType('id', PARAM_INT);
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
// buttons
|
||||
$this->add_action_buttons();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,7 +78,6 @@ $strgrades = get_string('grades');
|
||||
$pagename = get_string('letters', 'grades');
|
||||
|
||||
$letters = grade_get_letters($context);
|
||||
$num = count($letters) + 3;
|
||||
|
||||
$override = $DB->record_exists('grade_letters', array('contextid' => $context->id));
|
||||
|
||||
@ -129,18 +128,18 @@ if (!$edit) {
|
||||
$data = new stdClass();
|
||||
$data->id = $context->id;
|
||||
|
||||
$i = 1;
|
||||
$i = 0;
|
||||
foreach ($letters as $boundary=>$letter) {
|
||||
$gradelettername = 'gradeletter'.$i;
|
||||
$gradeboundaryname = 'gradeboundary'.$i;
|
||||
|
||||
$data->$gradelettername = $letter;
|
||||
$data->$gradeboundaryname = $boundary;
|
||||
$data->gradeletter[$i] = $letter;
|
||||
$data->gradeboundary[$i] = $boundary;
|
||||
$i++;
|
||||
}
|
||||
$data->override = $override;
|
||||
|
||||
$mform = new edit_letter_form($returnurl.$editparam, array('num'=>$num, 'admin'=>$admin));
|
||||
// Count number of letters, used to build the repeated elements of the form.
|
||||
$lettercount = count($letters);
|
||||
|
||||
$mform = new edit_letter_form($returnurl.$editparam, ['lettercount' => $lettercount, 'admin' => $admin]);
|
||||
$mform->set_data($data);
|
||||
|
||||
if ($mform->is_cancelled()) {
|
||||
@ -169,24 +168,19 @@ if (!$edit) {
|
||||
}
|
||||
|
||||
$letters = array();
|
||||
for ($i=1; $i < $num+1; $i++) {
|
||||
$gradelettername = 'gradeletter'.$i;
|
||||
$gradeboundaryname = 'gradeboundary'.$i;
|
||||
|
||||
if (property_exists($data, $gradeboundaryname) and $data->$gradeboundaryname != -1) {
|
||||
$letter = trim($data->$gradelettername);
|
||||
if ($letter == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$boundary = floatval($data->$gradeboundaryname);
|
||||
if ($boundary < 0 || $boundary > 100) {
|
||||
continue; // Skip if out of range.
|
||||
}
|
||||
|
||||
// The keys need to be strings so floats are not truncated.
|
||||
$letters[number_format($boundary, 5)] = $letter;
|
||||
for ($i = 0; $i < $data->gradeentrycount; $i++) {
|
||||
$letter = $data->gradeletter[$i];
|
||||
if ($letter === '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$boundary = floatval($data->gradeboundary[$i]);
|
||||
if ($boundary < 0 || $boundary > 100) {
|
||||
continue; // Skip if out of range.
|
||||
}
|
||||
|
||||
// The keys need to be strings so floats are not truncated.
|
||||
$letters[number_format($boundary, 5)] = $letter;
|
||||
}
|
||||
|
||||
$pool = array();
|
||||
|
@ -29,8 +29,8 @@ Feature: We can customise the letter boundary of a course.
|
||||
And I navigate to "More > Grade letters" in the course gradebook
|
||||
And I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| id_override | 1 |
|
||||
| id_gradeboundary10 | 57 |
|
||||
| Override site defaults | 1 |
|
||||
| Letter grade boundary 10 | 57 |
|
||||
And I press "Save changes"
|
||||
And I navigate to "View > Grader report" in the course gradebook
|
||||
And I turn editing mode on
|
||||
|
@ -30,8 +30,8 @@ Feature: We can customise the letter boundary of a course in gradebook version 2
|
||||
And I navigate to "More > Grade letters" in the course gradebook
|
||||
And I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| id_override | 1 |
|
||||
| id_gradeboundary10 | 57 |
|
||||
| Override site defaults | 1 |
|
||||
| Letter grade boundary 10 | 57 |
|
||||
And I press "Save changes"
|
||||
And I navigate to "View > Grader report" in the course gradebook
|
||||
And I turn editing mode on
|
||||
|
@ -17,19 +17,19 @@ Feature: We can view the logs for any changes to grade letters.
|
||||
And I navigate to "More > Grade letters" in the course gradebook
|
||||
And I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| id_override | 1 |
|
||||
| id_gradeboundary10 | 57 |
|
||||
| Override site defaults | 1 |
|
||||
| Letter grade boundary 10 | 57 |
|
||||
And I press "Save changes"
|
||||
And I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| id_override | 1 |
|
||||
| id_gradeboundary10 | 50 |
|
||||
| Override site defaults | 1 |
|
||||
| Letter grade boundary 10 | 50 |
|
||||
And I press "Save changes"
|
||||
And I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| id_override | 1 |
|
||||
| id_gradeletter11 | |
|
||||
| id_gradeboundary11 | |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 11 | |
|
||||
| Letter grade boundary 11 | |
|
||||
And I press "Save changes"
|
||||
When I navigate to "Reports > Live logs" in site administration
|
||||
Then I should see "Grade letter created"
|
||||
|
@ -21,35 +21,29 @@ Feature: Grade letters can be overridden
|
||||
|
||||
Scenario Outline: Grade letters can be completely overridden
|
||||
When I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | <l1> |
|
||||
| gradeboundary1 | <b1> |
|
||||
| Letter grade boundary 1| <b1> |
|
||||
| Grade letter 2 | <l2> |
|
||||
| gradeboundary2 | <b2> |
|
||||
| Letter grade boundary 2| <b2> |
|
||||
| Grade letter 3 | <l3> |
|
||||
| gradeboundary3 | <b3> |
|
||||
| Letter grade boundary 3| <b3> |
|
||||
| Grade letter 4 | <l4> |
|
||||
| gradeboundary4 | <b4> |
|
||||
| Letter grade boundary 4| <b4> |
|
||||
| Grade letter 5 | <l5> |
|
||||
| gradeboundary5 | <b5> |
|
||||
| Letter grade boundary 5| <b5> |
|
||||
| Grade letter 6 | <l6> |
|
||||
| gradeboundary6 | <b6> |
|
||||
| Letter grade boundary 6| <b6> |
|
||||
| Grade letter 7 | <l7> |
|
||||
| gradeboundary7 | <b7> |
|
||||
| Letter grade boundary 7| <b7> |
|
||||
| Grade letter 8 | <l8> |
|
||||
| gradeboundary8 | <b8> |
|
||||
| Letter grade boundary 8| <b8> |
|
||||
| Grade letter 9 | <l9> |
|
||||
| gradeboundary9 | <b9> |
|
||||
| Letter grade boundary 9| <b9> |
|
||||
| Grade letter 10 | |
|
||||
| gradeboundary10 | |
|
||||
| Letter grade boundary 10| |
|
||||
| Grade letter 11 | |
|
||||
| gradeboundary11 | |
|
||||
| Grade letter 12 | |
|
||||
| gradeboundary12 | |
|
||||
| Grade letter 13 | |
|
||||
| gradeboundary13 | |
|
||||
| Grade letter 14 | |
|
||||
| gradeboundary14 | |
|
||||
| Letter grade boundary 11| |
|
||||
And I press "Save changes"
|
||||
Then I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
@ -74,29 +68,29 @@ Feature: Grade letters can be overridden
|
||||
| component | stringid | value |
|
||||
| core_langconfig | decsep | <decsep> |
|
||||
When I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | <l1> |
|
||||
| gradeboundary1 | <b1> |
|
||||
| Letter grade boundary 1| <b1> |
|
||||
| Grade letter 2 | <l2> |
|
||||
| gradeboundary2 | <b2> |
|
||||
| Letter grade boundary 2| <b2> |
|
||||
| Grade letter 3 | <l3> |
|
||||
| gradeboundary3 | <b3> |
|
||||
| Letter grade boundary 3| <b3> |
|
||||
| Grade letter 4 | |
|
||||
| gradeboundary4 | |
|
||||
| Letter grade boundary 4| |
|
||||
| Grade letter 5 | |
|
||||
| gradeboundary5 | |
|
||||
| Letter grade boundary 5| |
|
||||
| Grade letter 6 | |
|
||||
| gradeboundary6 | |
|
||||
| Letter grade boundary 6| |
|
||||
| Grade letter 7 | |
|
||||
| gradeboundary7 | |
|
||||
| Letter grade boundary 7| |
|
||||
| Grade letter 8 | |
|
||||
| gradeboundary8 | |
|
||||
| Letter grade boundary 8| |
|
||||
| Grade letter 9 | |
|
||||
| gradeboundary9 | |
|
||||
| Letter grade boundary 9| |
|
||||
| Grade letter 10 | |
|
||||
| gradeboundary10 | |
|
||||
| Letter grade boundary 10| |
|
||||
| Grade letter 11 | |
|
||||
| gradeboundary11 | |
|
||||
| Letter grade boundary 11| |
|
||||
And I press "Save changes"
|
||||
Then I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
@ -110,37 +104,62 @@ Feature: Grade letters can be overridden
|
||||
| . | A | 88.88 | B | 50.00 | C | 0.00 | 100.00 % | 88.88 % | 88.87 % | 50.00 % | 49.99 % | 0.00 % |
|
||||
| # | A | 88#88 | B | 50#00 | C | 0#00 | 100#00 % | 88#88 % | 88#87 % | 50#00 % | 49#99 % | 0#00 % |
|
||||
|
||||
Scenario: Define additional grade letters
|
||||
Given I set the field "Override site defaults" to "1"
|
||||
When I press "Add 3 field(s) to form"
|
||||
And I set the following fields to these values:
|
||||
| Grade letter 11 | E |
|
||||
| Letter grade boundary 11 | 50 |
|
||||
| Grade letter 12 | F |
|
||||
| Letter grade boundary 12 | 40 |
|
||||
| Grade letter 13 | G |
|
||||
| Letter grade boundary 13 | 30 |
|
||||
| Grade letter 14 | U |
|
||||
| Letter grade boundary 14 | 0 |
|
||||
And I press "Save changes"
|
||||
Then I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
| Highest | Lowest | Letter |
|
||||
| 100.00 % | 93.00 % | A |
|
||||
| 92.99 % | 90.00 % | A- |
|
||||
| 89.99 % | 87.00 % | B+ |
|
||||
| 86.99 % | 83.00 % | B |
|
||||
| 82.99 % | 80.00 % | B- |
|
||||
| 79.99 % | 77.00 % | C+ |
|
||||
| 76.99 % | 73.00 % | C |
|
||||
| 72.99 % | 70.00 % | C- |
|
||||
| 69.99 % | 67.00 % | D+ |
|
||||
| 66.99 % | 60.00 % | D |
|
||||
| 59.99 % | 50.00 % | E |
|
||||
| 49.99 % | 40.00 % | F |
|
||||
| 39.99 % | 30.00 % | G |
|
||||
| 29.99 % | 0.00 % | U |
|
||||
|
||||
Scenario: I delete a grade letter
|
||||
Given I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | A |
|
||||
| gradeboundary1 | 90 |
|
||||
| Letter grade boundary 1| 90 |
|
||||
| Grade letter 2 | B |
|
||||
| gradeboundary2 | 80 |
|
||||
| Letter grade boundary 2| 80 |
|
||||
| Grade letter 3 | C |
|
||||
| gradeboundary3 | 50 |
|
||||
| Letter grade boundary 3| 50 |
|
||||
| Grade letter 4 | D |
|
||||
| gradeboundary4 | 40 |
|
||||
| Letter grade boundary 4| 40 |
|
||||
| Grade letter 5 | E |
|
||||
| gradeboundary5 | 20 |
|
||||
| Letter grade boundary 5| 20 |
|
||||
| Grade letter 6 | F |
|
||||
| gradeboundary6 | 0 |
|
||||
| Letter grade boundary 6| 0 |
|
||||
| Grade letter 7 | |
|
||||
| gradeboundary7 | |
|
||||
| Letter grade boundary 7| |
|
||||
| Grade letter 8 | |
|
||||
| gradeboundary8 | |
|
||||
| Letter grade boundary 8| |
|
||||
| Grade letter 9 | |
|
||||
| gradeboundary9 | |
|
||||
| Letter grade boundary 9| |
|
||||
| Grade letter 10 | |
|
||||
| gradeboundary10 | |
|
||||
| Letter grade boundary 10| |
|
||||
| Grade letter 11 | |
|
||||
| gradeboundary11 | |
|
||||
| Grade letter 12 | |
|
||||
| gradeboundary12 | |
|
||||
| Grade letter 13 | |
|
||||
| gradeboundary13 | |
|
||||
| Grade letter 14 | |
|
||||
| gradeboundary14 | |
|
||||
| Letter grade boundary 11| |
|
||||
And I press "Save changes"
|
||||
And I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
@ -153,19 +172,19 @@ Feature: Grade letters can be overridden
|
||||
| 19.99 % | 0.00 % | F |
|
||||
When I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | A |
|
||||
| gradeboundary1 | 90 |
|
||||
| Letter grade boundary 1| 90 |
|
||||
| Grade letter 2 | B |
|
||||
| gradeboundary2 | 80 |
|
||||
| Letter grade boundary 2| 80 |
|
||||
| Grade letter 3 | C |
|
||||
| gradeboundary3 | 50 |
|
||||
| Letter grade boundary 3| 50 |
|
||||
| Grade letter 4 | D |
|
||||
| gradeboundary4 | 40 |
|
||||
| Letter grade boundary 4| 40 |
|
||||
| Grade letter 5 | |
|
||||
| gradeboundary5 | |
|
||||
| Letter grade boundary 5| |
|
||||
| Grade letter 6 | F |
|
||||
| gradeboundary6 | 0 |
|
||||
| Letter grade boundary 6| 0 |
|
||||
And I press "Save changes"
|
||||
Then I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
@ -178,35 +197,29 @@ Feature: Grade letters can be overridden
|
||||
|
||||
Scenario: I override grade letters for a second time
|
||||
Given I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | A+ |
|
||||
| gradeboundary1 | 90 |
|
||||
| Letter grade boundary 1| 90 |
|
||||
| Grade letter 2 | A |
|
||||
| gradeboundary2 | 80 |
|
||||
| Letter grade boundary 2| 80 |
|
||||
| Grade letter 3 | B+ |
|
||||
| gradeboundary3 | 70 |
|
||||
| Letter grade boundary 3| 70 |
|
||||
| Grade letter 4 | B |
|
||||
| gradeboundary4 | 60 |
|
||||
| Letter grade boundary 4| 60 |
|
||||
| Grade letter 5 | C |
|
||||
| gradeboundary5 | 50 |
|
||||
| Letter grade boundary 5| 50 |
|
||||
| Grade letter 6 | D |
|
||||
| gradeboundary6 | 40 |
|
||||
| Letter grade boundary 6| 40 |
|
||||
| Grade letter 7 | F |
|
||||
| gradeboundary7 | 0 |
|
||||
| Letter grade boundary 7| 0 |
|
||||
| Grade letter 8 | |
|
||||
| gradeboundary8 | |
|
||||
| Letter grade boundary 8| |
|
||||
| Grade letter 9 | |
|
||||
| gradeboundary9 | |
|
||||
| Letter grade boundary 9| |
|
||||
| Grade letter 10 | |
|
||||
| gradeboundary10 | |
|
||||
| Letter grade boundary 10| |
|
||||
| Grade letter 11 | |
|
||||
| gradeboundary11 | |
|
||||
| Grade letter 12 | |
|
||||
| gradeboundary12 | |
|
||||
| Grade letter 13 | |
|
||||
| gradeboundary13 | |
|
||||
| Grade letter 14 | |
|
||||
| gradeboundary14 | |
|
||||
| Letter grade boundary 11| |
|
||||
And I press "Save changes"
|
||||
And I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
@ -220,21 +233,21 @@ Feature: Grade letters can be overridden
|
||||
| 39.99 % | 0.00 % | F |
|
||||
When I click on "Edit" "button"
|
||||
And I set the following fields to these values:
|
||||
| override | 1 |
|
||||
| Override site defaults | 1 |
|
||||
| Grade letter 1 | α |
|
||||
| gradeboundary1 | 95 |
|
||||
| Letter grade boundary 1| 95 |
|
||||
| Grade letter 2 | β |
|
||||
| gradeboundary2 | 85 |
|
||||
| Letter grade boundary 2| 85 |
|
||||
| Grade letter 3 | γ |
|
||||
| gradeboundary3 | 70 |
|
||||
| Letter grade boundary 3| 70 |
|
||||
| Grade letter 4 | δ |
|
||||
| gradeboundary4 | 55 |
|
||||
| Letter grade boundary 4| 55 |
|
||||
| Grade letter 5 | |
|
||||
| gradeboundary5 | |
|
||||
| Letter grade boundary 5| |
|
||||
| Grade letter 6 | Ω |
|
||||
| gradeboundary6 | 0 |
|
||||
| Letter grade boundary 6| 0 |
|
||||
| Grade letter 7 | π |
|
||||
| gradeboundary7 | 90 |
|
||||
| Letter grade boundary 7| 90 |
|
||||
And I press "Save changes"
|
||||
Then I should see "The default grade letters are currently overridden."
|
||||
And the following should exist in the "grade-letters-view" table:
|
||||
|
Loading…
x
Reference in New Issue
Block a user