Skip to content

Commit

Permalink
Merge branch 'MDL-69690-401' of https://github.com/ilyatregubov/moodle
Browse files Browse the repository at this point in the history
…into MOODLE_401_STABLE
  • Loading branch information
junpataleta committed Feb 2, 2023
2 parents 7e7628b + 66ad660 commit b90bccd
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 5 deletions.
15 changes: 11 additions & 4 deletions grade/classes/component_gradeitems.php
Expand Up @@ -132,13 +132,20 @@ public static function is_advancedgrading_itemname(string $component, string $it
* @return string The translated field name
*/
public static function get_field_name_for_itemnumber(string $component, int $itemnumber, string $fieldname): string {
$itemname = static::get_itemname_from_itemnumber($component, $itemnumber);

if ($itemname) {
return "{$fieldname}_{$itemname}";
}
$classname = "{$component}\grades\gradeitems";

if (class_exists($classname) && is_subclass_of($classname, 'core_grades\local\gradeitem\fieldname_mapping')) {
$fieldname = $classname::get_field_name_for_itemnumber($component, $itemnumber, $fieldname);
} else {
$itemname = static::get_itemname_from_itemnumber($component, $itemnumber);

if ($itemname) {
$fieldname .= '_' . $itemname;
}
}
return $fieldname;

}

/**
Expand Down
48 changes: 48 additions & 0 deletions grade/classes/local/gradeitem/fieldname_mapping.php
@@ -0,0 +1,48 @@
<?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/>.

/**
* Grade item, fieldname mapping.
*
* @package core_grades
* @copyright Ilya Tregubov <ilya.a.tregubov@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

declare(strict_types = 1);

namespace core_grades\local\gradeitem;

/**
* Grade item, fieldname mapping.
*
* @package core_grades
* @copyright Ilya Tregubov <ilya.a.tregubov@gmail.com>
*/
interface fieldname_mapping {

/**
* Get the suffixed field name for an activity field mapped from its itemnumber.
*
* For legacy reasons, the first itemnumber has no suffix on field names.
*
* @param string $component The component that the grade item belongs to
* @param int $itemnumber The grade itemnumber
* @param string $fieldname The name of the field to be rewritten
* @return string The translated field name
*/
public static function get_field_name_for_itemnumber(string $component, int $itemnumber, string $fieldname): string;
}
24 changes: 23 additions & 1 deletion mod/workshop/classes/grades/gradeitems.php
Expand Up @@ -26,6 +26,8 @@

namespace mod_workshop\grades;

use core_grades\component_gradeitems;
use core_grades\local\gradeitem\fieldname_mapping;
use \core_grades\local\gradeitem\itemnumber_mapping;

/**
Expand All @@ -35,7 +37,7 @@
* @copyright Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class gradeitems implements itemnumber_mapping {
class gradeitems implements itemnumber_mapping, fieldname_mapping {
/**
* Return the list of grade item mappings for the workshop.
*
Expand All @@ -47,4 +49,24 @@ public static function get_itemname_mapping_for_component(): array {
1 => 'grading',
];
}

/**
* Get the suffixed field name for an activity field mapped from its itemnumber.
*
* For legacy reasons, the first itemnumber has no suffix on field names.
*
* @param string $component The component that the grade item belongs to
* @param int $itemnumber The grade itemnumber
* @param string $fieldname The name of the field to be rewritten
* @return string The translated field name
*/
public static function get_field_name_for_itemnumber(string $component, int $itemnumber, string $fieldname): string {
$itemname = component_gradeitems::get_itemname_from_itemnumber($component, $itemnumber);

if ($itemname) {
return "{$itemname}{$fieldname}";
}

return $fieldname;
}
}
47 changes: 47 additions & 0 deletions mod/workshop/tests/behat/workshop_edit_form.feature
@@ -0,0 +1,47 @@
@mod @mod_workshop
Feature: Workshop assessment with grade to pass
In order to use workshop activity
As a teacher
I need to be able to setup workshop with require assessment grade and grade to pass

Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| student1 | Sam1 | Student1 | student1@example.com |
| teacher1 | Terry1 | Teacher1 | teacher1@example.com |
And the following "courses" exist:
| fullname | shortname | format | enablecompletion |
| Course1 | c1 | topics | 1 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | c1 | student |
| teacher1 | c1 | editingteacher |

@javascript
Scenario: Setup workshop with assessment grade and pass grade set
And I log in as "teacher1"
And I am on "Course1" course homepage with editing mode on
And I add a "Workshop" to section "0"
And I expand all fieldsets
When I set the following fields to these values:
| Workshop name | Test workshop |
| Completion tracking | Show activity as complete when conditions are met |
| Require grade | Assessment |
| completionpassgrade | 1 |
And I press "Save and display"
And I should see "This activity does not have a valid grade to pass set. It may be set in the Grade section of the activity settings."
And I set the field "Assessment grade to pass" to ""
And I press "Save and display"
And I should see "This activity does not have a valid grade to pass set. It may be set in the Grade section of the activity settings."
And I set the field "Assessment grade to pass" to "81"
And I press "Save and display"
And I should see "The grade to pass can not be greater than the maximum possible grade 20"
And I set the field "Assessment grade to pass" to "hello"
And I press "Save and display"
And I should see "You must enter a number here."
And I set the field "Assessment grade to pass" to "12,34"
And I press "Save and display"
And I should see "You must enter a number here."
And I set the field "Assessment grade to pass" to "10"
And I press "Save and display"
Then I should see "Setup phase" in the "h3#mod_workshop-userplanheading" "css_element"

0 comments on commit b90bccd

Please sign in to comment.