diff --git a/grade/classes/output/penalty_indicator.php b/grade/classes/output/penalty_indicator.php
index cc9a3889a30..70fc29da655 100644
--- a/grade/classes/output/penalty_indicator.php
+++ b/grade/classes/output/penalty_indicator.php
@@ -28,7 +28,7 @@ use grade_grade;
* @copyright 2024 Catalyst IT Australia Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class penalty_indicator implements templatable, renderable {
+class penalty_indicator implements renderable, templatable {
/**
* The class constructor.
*
@@ -65,12 +65,7 @@ class penalty_indicator implements templatable, renderable {
return 'core_grades/penalty_indicator';
}
- /**
- * Export the data for the mustache template.
- *
- * @param \renderer_base $output renderer to be used to render the penalty indicator.
- * @return array
- */
+ #[\Override]
public function export_for_template(renderer_base $output): array {
$penalty = format_float($this->grade->deductedmark, $this->decimals);
$finalgrade = $this->showfinalgrade ? format_float($this->grade->finalgrade , $this->decimals) : null;
diff --git a/grade/classes/table/gradepenalty_management_table.php b/grade/classes/table/gradepenalty_management_table.php
index f54d778492d..5b2344cb6d1 100644
--- a/grade/classes/table/gradepenalty_management_table.php
+++ b/grade/classes/table/gradepenalty_management_table.php
@@ -27,22 +27,12 @@ use core\url;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class gradepenalty_management_table extends plugin_management_table {
-
- /**
- * Return the penalty plugin type.
- *
- * @return string
- */
+ #[\Override]
protected function get_plugintype(): string {
return 'gradepenalty';
}
- /**
- * Get the URL to manage the penalty plugin.
- *
- * @param array $params
- * @return url
- */
+ #[\Override]
protected function get_action_url(array $params = []): url {
return new url('/grade/penalty/manage_penalty_plugins.php', $params);
}
diff --git a/grade/lib.php b/grade/lib.php
index 9dcadc8a1b4..6924021de7b 100644
--- a/grade/lib.php
+++ b/grade/lib.php
@@ -996,8 +996,11 @@ function print_grade_page_head(int $courseid, string $active_type, ?string $acti
if ($active_type === 'import') {
foreach (core_plugin_manager::instance()->get_plugins_of_type('gradepenalty') as $plugin) {
if ($plugin->is_enabled()) {
- $output .= $OUTPUT->notification(get_string('gradepenalties', 'gradeimport_csv'),
- \core\output\notification::NOTIFY_INFO, false);
+ $output .= $OUTPUT->notification(
+ get_string('gradepenalties', 'gradeimport_csv'),
+ \core\output\notification::NOTIFY_INFO,
+ false,
+ );
break;
}
}
diff --git a/grade/penalty/duedate/classes/output/edit_penalty_rule_action_bar.php b/grade/penalty/duedate/classes/output/edit_penalty_rule_action_bar.php
index f9d07230df0..ed58de5b74f 100644
--- a/grade/penalty/duedate/classes/output/edit_penalty_rule_action_bar.php
+++ b/grade/penalty/duedate/classes/output/edit_penalty_rule_action_bar.php
@@ -16,10 +16,7 @@
namespace gradepenalty_duedate\output;
-use core\output\notification;
use core\output\single_button;
-use core_grades\output\action_bar;
-use gradepenalty_duedate\penalty_rule;
use core\url;
/**
@@ -30,21 +27,12 @@ use core\url;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class edit_penalty_rule_action_bar extends view_penalty_rule_action_bar {
- /**
- * Returns the template for the action bar.
- *
- * @return string
- */
+ #[\Override]
public function get_template(): string {
return 'gradepenalty_duedate/edit_penalty_rule_action_bar';
}
- /**
- * Export the data for the mustache template.
- *
- * @param \renderer_base $output renderer to be used to render the action bar elements.
- * @return array
- */
+ #[\Override]
public function export_for_template(\renderer_base $output): array {
$data = [];
diff --git a/grade/penalty/duedate/classes/output/form/edit_penalty_form.php b/grade/penalty/duedate/classes/output/form/edit_penalty_form.php
index 5739d92b67c..76da89f710d 100644
--- a/grade/penalty/duedate/classes/output/form/edit_penalty_form.php
+++ b/grade/penalty/duedate/classes/output/form/edit_penalty_form.php
@@ -43,11 +43,7 @@ class edit_penalty_form extends moodleform {
/** @var int contextid context id where the penalty rules are edited */
protected int $contextid = 0;
- /**
- * Define the form.
- *
- * @return void
- */
+ #[\Override]
public function definition(): void {
global $PAGE;
$mform = $this->_form;
@@ -120,13 +116,7 @@ class edit_penalty_form extends moodleform {
$this->add_action_buttons();
}
- /**
- * Validate the form data.
- *
- * @param array $data form data
- * @param array $files form files
- * @return array of errors
- */
+ #[\Override]
public function validation($data, $files): array {
$errors = parent::validation($data, $files);
@@ -339,7 +329,16 @@ class edit_penalty_form extends moodleform {
$elements[] = $mform->createElement('static', 'name1', 'name2', $actionmenu);
// Group.
- return [$mform->createElement('group', 'rulegroup',
- get_string('penaltyrule_group', 'gradepenalty_duedate'), $elements, [''], false), $options];
+ return [
+ $mform->createElement(
+ 'group',
+ 'rulegroup',
+ get_string('penaltyrule_group', 'gradepenalty_duedate'),
+ $elements,
+ [''],
+ false
+ ),
+ $options,
+ ];
}
}
diff --git a/grade/penalty/duedate/classes/output/view_penalty_rule_action_bar.php b/grade/penalty/duedate/classes/output/view_penalty_rule_action_bar.php
index 1f862a89f00..f39390939cb 100644
--- a/grade/penalty/duedate/classes/output/view_penalty_rule_action_bar.php
+++ b/grade/penalty/duedate/classes/output/view_penalty_rule_action_bar.php
@@ -49,21 +49,12 @@ class view_penalty_rule_action_bar extends action_bar {
$this->url = $url;
}
- /**
- * Returns the template for the action bar.
- *
- * @return string
- */
+ #[\Override]
public function get_template(): string {
return 'gradepenalty_duedate/view_penalty_rule_action_bar';
}
- /**
- * Export the data for the mustache template.
- *
- * @param \renderer_base $output renderer to be used to render the action bar elements.
- * @return array
- */
+ #[\Override]
public function export_for_template(\renderer_base $output): array {
$data = [];
@@ -75,8 +66,10 @@ class view_penalty_rule_action_bar extends action_bar {
// If the context is not system context, show the reset button when rules are overridden.
if (penalty_rule::is_overridden($contextid)) {
// Show information about the overridden rules.
- $info = new notification(get_string('penaltyrule_overridden', 'gradepenalty_duedate'),
- notification::NOTIFY_INFO);
+ $info = new notification(
+ get_string('penaltyrule_overridden', 'gradepenalty_duedate'),
+ notification::NOTIFY_INFO,
+ );
$data['info'] = $info->export_for_template($output);
// Reset button.
@@ -89,13 +82,17 @@ class view_penalty_rule_action_bar extends action_bar {
} else {
if (penalty_rule::is_inherited($contextid)) {
// Show information about the inherited rules.
- $info = new notification(get_string('penaltyrule_inherited', 'gradepenalty_duedate'),
- notification::NOTIFY_INFO);
+ $info = new notification(
+ get_string('penaltyrule_inherited', 'gradepenalty_duedate'),
+ notification::NOTIFY_INFO,
+ );
$data['info'] = $info->export_for_template($output);
} else {
// No rules from parent context.
- $info = new notification(get_string('penaltyrule_not_inherited', 'gradepenalty_duedate'),
- notification::NOTIFY_INFO);
+ $info = new notification(
+ get_string('penaltyrule_not_inherited', 'gradepenalty_duedate'),
+ notification::NOTIFY_INFO,
+ );
$data['info'] = $info->export_for_template($output);
}
}
diff --git a/grade/penalty/duedate/classes/penalty_rule.php b/grade/penalty/duedate/classes/penalty_rule.php
index fa1f9681b82..e0104673338 100644
--- a/grade/penalty/duedate/classes/penalty_rule.php
+++ b/grade/penalty/duedate/classes/penalty_rule.php
@@ -16,10 +16,6 @@
namespace gradepenalty_duedate;
-defined('MOODLE_INTERNAL') || die();
-
-require_once(__DIR__ . '/../lib.php');
-
use context;
use context_system;
use core\lang_string;
diff --git a/grade/penalty/duedate/classes/table/penalty_rule_table.php b/grade/penalty/duedate/classes/table/penalty_rule_table.php
index 97e3a060842..a5d1e7d0962 100644
--- a/grade/penalty/duedate/classes/table/penalty_rule_table.php
+++ b/grade/penalty/duedate/classes/table/penalty_rule_table.php
@@ -28,7 +28,6 @@ use core_table\sql_table;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class penalty_rule_table extends sql_table {
-
/** @var context context */
protected context $context;
@@ -62,12 +61,7 @@ class penalty_rule_table extends sql_table {
$this->collapsible(false);
}
- /**
- * Query the DB.
- *
- * @param int $pagesize size of page for paginated displayed table.
- * @param bool $useinitialsbar do you want to use the initials bar.
- */
+ #[\Override]
public function query_db($pagesize, $useinitialsbar = true): void {
global $DB;
// Contexts to find the penalty rules.
diff --git a/grade/penalty/duedate/lib.php b/grade/penalty/duedate/lib.php
index ac21c2285d6..34af7528b83 100644
--- a/grade/penalty/duedate/lib.php
+++ b/grade/penalty/duedate/lib.php
@@ -22,9 +22,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-/** Minimum late for value */
-
-use core_grades\penalty_manager;
use core\url;
/**
@@ -85,7 +82,7 @@ function gradepenalty_duedate_output_fragment_penalty_rule_form(array $args): st
/**
* Define the setting page for the penalty rule.
*/
-function gradepenalty_duedate_get_settings_url(): moodle_url {
+function gradepenalty_duedate_get_settings_url(): url {
return new url('/grade/penalty/duedate/manage_penalty_rule.php', [
'contextid' => \core\context\system::instance()->id,
]);
diff --git a/grade/penalty/duedate/tests/penalty_calculator_test.php b/grade/penalty/duedate/tests/penalty_calculator_test.php
index 662a0226b88..cc6afe830e3 100644
--- a/grade/penalty/duedate/tests/penalty_calculator_test.php
+++ b/grade/penalty/duedate/tests/penalty_calculator_test.php
@@ -68,10 +68,6 @@ final class penalty_calculator_test extends penalty_testcase {
*
* @dataProvider calculate_penalty_provider
*
- * @covers \gradepenalty_duedate\penalty_calculator::find_effective_penalty_rules
- * @covers \gradepenalty_duedate\penalty_calculator::calculate_penalty
- * @covers \gradepenalty_duedate\penalty_calculator::get_penalty_from_rules
- *
* @param int $submissiondate The submission date.
* @param int $duedate The due date.
* @param int $expectedgrade The expected grade.
@@ -92,8 +88,15 @@ final class penalty_calculator_test extends penalty_testcase {
gradepenalty::enable_plugin('duedate', true);
// Add a grade.
- grade_update('mod/assign', $course->id, 'mod', 'assign', $assignment->id, 0,
- ['userid' => $user->id, 'rawgrade' => 100]);
+ grade_update(
+ 'mod/assign',
+ $course->id,
+ 'mod',
+ 'assign',
+ $assignment->id
+ 0,
+ ['userid' => $user->id, 'rawgrade' => 100],
+ );
// Get grade item.
$gradeitemparams = [
@@ -114,9 +117,6 @@ final class penalty_calculator_test extends penalty_testcase {
/**
* Rules set at different contexts.
- *
- * @covers \gradepenalty_duedate\penalty_calculator::find_effective_penalty_rules
- * @covers \gradepenalty_duedate\penalty_calculator::get_penalty_from_rules
*/
public function test_find_effective_penalty_rules(): void {
global $DB;
diff --git a/grade/penalty/duedate/tests/penalty_rule_persistent_test.php b/grade/penalty/duedate/tests/penalty_rule_persistent_test.php
index 338e055b197..beea7632c29 100644
--- a/grade/penalty/duedate/tests/penalty_rule_persistent_test.php
+++ b/grade/penalty/duedate/tests/penalty_rule_persistent_test.php
@@ -26,12 +26,11 @@ use gradepenalty_duedate\tests\penalty_testcase;
* @package gradepenalty_duedate
* @copyright 2024 Catalyst IT Australia Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @covers \gradepenalty_duedate\penalty_rule
*/
final class penalty_rule_persistent_test extends penalty_testcase {
/**
* Test get rules.
- *
- * @covers \gradepenalty_duedate\penalty_rule::get_rules
*/
public function test_get_rules(): void {
$this->resetAfterTest();
@@ -67,8 +66,6 @@ final class penalty_rule_persistent_test extends penalty_testcase {
/**
* Test reset rules.
- *
- * @covers \gradepenalty_duedate\penalty_rule::reset_rules
*/
public function test_reset_rules(): void {
$this->resetAfterTest();
@@ -83,8 +80,6 @@ final class penalty_rule_persistent_test extends penalty_testcase {
/**
* Test check if rules are overridden.
- *
- * @covers \gradepenalty_duedate\penalty_rule::is_overridden
*/
public function test_is_overridden(): void {
$this->resetAfterTest();
@@ -106,8 +101,6 @@ final class penalty_rule_persistent_test extends penalty_testcase {
/**
* Test check if rules are inherited.
- *
- * @covers \gradepenalty_duedate\penalty_rule::is_inherited
*/
public function test_is_inherited(): void {
$this->resetAfterTest();
diff --git a/grade/tests/output/penalty_indicator_test.php b/grade/tests/output/penalty_indicator_test.php
index 742a3fb7da8..d287533f474 100644
--- a/grade/tests/output/penalty_indicator_test.php
+++ b/grade/tests/output/penalty_indicator_test.php
@@ -25,10 +25,12 @@ use grade_grade;
* @package core_grades
* @copyright 2024 Catalyst IT Australia Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @covers \core_grades\output\penalty_indicator
*/
final class penalty_indicator_test extends advanced_testcase {
/**
- * Data provider for test_export_for_template
+ * Data provider for test_export_for_template.
+ *
* @return array
*/
public static function export_for_template_provider(): array {
@@ -99,8 +101,6 @@ final class penalty_indicator_test extends advanced_testcase {
*
* @dataProvider export_for_template_provider
*
- * @covers \core_grades\output\penalty_indicator
- *
* @param array $expectedexport The expected export data
* @param array $icon icon to display before the penalty
* @param float $penalty The penalty
diff --git a/grade/tests/penalty_manager_test.php b/grade/tests/penalty_manager_test.php
index e6ebe70353c..6e11988a069 100644
--- a/grade/tests/penalty_manager_test.php
+++ b/grade/tests/penalty_manager_test.php
@@ -30,8 +30,6 @@ use grade_item;
final class penalty_manager_test extends advanced_testcase {
/**
* Test is_penalty_enabled_for_module method.
- *
- * @covers \core_grades\penalty_manager::is_penalty_enabled_for_module
*/
public function test_is_penalty_enabled_for_module(): void {
$this->resetAfterTest();
@@ -68,8 +66,6 @@ final class penalty_manager_test extends advanced_testcase {
/**
* Test apply_grade_penalty_to_user method.
- *
- * @covers \core_grades\penalty_manager::apply_grade_penalty_to_user
*/
public function test_apply_grade_penalty_to_user(): void {
$this->resetAfterTest();
@@ -90,13 +86,15 @@ final class penalty_manager_test extends advanced_testcase {
$gradeitem = grade_item::fetch($gradeitemparams);
- grade_update('mod/assign',
+ grade_update(
+ 'mod/assign',
$course->id,
'mod',
'assign',
$assign->id,
0,
- ['userid' => $user->id, 'rawgrade' => 90]);
+ ['userid' => $user->id, 'rawgrade' => 90],
+ );
$submissiondate = time();
$duedate = time();
diff --git a/lib/classes/plugininfo/gradepenalty.php b/lib/classes/plugininfo/gradepenalty.php
index 058e03d16e7..f182a366625 100644
--- a/lib/classes/plugininfo/gradepenalty.php
+++ b/lib/classes/plugininfo/gradepenalty.php
@@ -14,55 +14,35 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-/**
- * Defines classes used for plugin info.
- *
- * @package core
- * @copyright 2024 Catalyst IT Australia Pty Ltd
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
+
namespace core\plugininfo;
use core\url;
/**
- * Class for admin tool plugins.
+ * Plugin information for the gradepenalty plugin type.
+ *
+ * @package core
+ * @copyright 2024 Catalyst IT Australia Pty Ltd
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class gradepenalty extends base {
-
-
- /**
- * Allow the plugin to be uninstalled.
- *
- * @return true
- */
+ #[\Override]
public function is_uninstall_allowed(): bool {
return true;
}
- /**
- * Get the URL to manage the penalty plugin.
- *
- * @return url
- */
+ #[\Override]
public static function get_manage_url(): url {
return new url('/grade/penalty/manage_penalty_plugins.php');
}
- /**
- * Support disabling the plugin.
- *
- * @return bool
- */
+ #[\Override]
public static function plugintype_supports_disabling(): bool {
return true;
}
- /**
- * Get the enabled plugins.
- *
- * @return array
- */
+ #[\Override]
public static function get_enabled_plugins(): array {
// List of enabled plugins, string delimited.
$plugins = get_config('core_grades', 'gradepenalty_enabled_plugins');
@@ -71,13 +51,7 @@ class gradepenalty extends base {
return $plugins ? array_flip(explode(',', $plugins)) : [];
}
- /**
- * Enable or disable a plugin.
- *
- * @param string $pluginname The name of the plugin.
- * @param int $enabled Whether to enable or disable the plugin.
- * @return bool
- */
+ #[\Override]
public static function enable_plugin(string $pluginname, int $enabled): bool {
// Current enabled plugins.
$enabledplugins = self::get_enabled_plugins();
@@ -98,11 +72,7 @@ class gradepenalty extends base {
return true;
}
- /**
- * Check if the plugin is enabled.
- *
- * @return bool
- */
+ #[\Override]
public function is_enabled(): bool {
return self::is_plugin_enabled($this->name);
}
@@ -120,21 +90,13 @@ class gradepenalty extends base {
return key_exists($pluginname, self::get_enabled_plugins());
}
- /**
- * Get the settings section name.
- * Required for the settings page.
- *
- * @return string
- */
+ #[\Override]
public function get_settings_section_name(): string {
return $this->component;
}
- /**
- * Setting url for the plugin.
- *
- */
- public function get_settings_url(): url {
+ #[\Override]
+ public function get_settings_url(): ?url {
$plugins = get_plugin_list_with_function('gradepenalty', 'get_settings_url');
if (isset($plugins[$this->component])) {
return component_callback($this->component, 'get_settings_url');
diff --git a/lib/gradelib.php b/lib/gradelib.php
index f6fc69f25bc..4c0aece41ed 100644
--- a/lib/gradelib.php
+++ b/lib/gradelib.php
@@ -22,8 +22,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-use core_grades\penalty_manager;
-
defined('MOODLE_INTERNAL') || die();
global $CFG;
diff --git a/mod/assign/amd/build/override_delete_modal.min.js b/mod/assign/amd/build/override_delete_modal.min.js
index 6306bd1ed16..ed853ac8079 100644
--- a/mod/assign/amd/build/override_delete_modal.min.js
+++ b/mod/assign/amd/build/override_delete_modal.min.js
@@ -1,3 +1,3 @@
-define("mod_assign/override_delete_modal",["exports","core/custom_interaction_events","core/modal"],(function(_exports,CustomEvents,_modal){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,CustomEvents=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(CustomEvents),_modal=(obj=_modal)&&obj.__esModule?obj:{default:obj};const SELECTORS_RECACULATION_CHECKBOX="#recalculatepenalties";class OverrideDeleteModal extends _modal.default{configure(modalConfig){modalConfig.large=!0,modalConfig.show=!1,modalConfig.removeOnClose=!0,super.configure(modalConfig)}constructor(root){super(root),this.recalculationCheckbox=this.getModal().find(SELECTORS_RECACULATION_CHECKBOX),this.setOverrideId(null),this.setSessionKey(null)}setOverrideId(id){this.overrideId=id}getOverrideId(){return this.overrideId}setSessionKey(key){this.sessionKey=key}getSessionKey(){return this.sessionKey}registerEventListeners(){super.registerEventListeners(this),this.registerCloseOnCancel(),this.getModal().on(CustomEvents.events.activate,this.getActionSelector("delete"),(()=>{this.deleteOverride()}))}deleteOverride(){const recalculate=this.recalculationCheckbox.prop("checked");window.location.href=M.cfg.wwwroot+"/mod/assign/overridedelete.php?id="+this.getOverrideId()+"&sesskey="+this.getSessionKey()+"&confirm=1"+(recalculate?"&recalculate=1":"")}}return _exports.default=OverrideDeleteModal,_defineProperty(OverrideDeleteModal,"TYPE","mod_assign/override_delete_modal"),_defineProperty(OverrideDeleteModal,"TEMPLATE","mod_assign/override_delete_modal"),OverrideDeleteModal.registerModalType(),_exports.default}));
+define("mod_assign/override_delete_modal",["exports","core/custom_interaction_events","core/config","core/modal"],(function(_exports,CustomEvents,_config,_modal){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,CustomEvents=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(CustomEvents),_config=_interopRequireDefault(_config),_modal=_interopRequireDefault(_modal);const SELECTORS_RECACULATION_CHECKBOX="#recalculatepenalties";class OverrideDeleteModal extends _modal.default{configure(modalConfig){modalConfig.large=!0,modalConfig.show=!0,modalConfig.removeOnClose=!0,super.configure(modalConfig),this.setOverrideId(modalConfig.overrideId),this.setSessionKey(modalConfig.sessionKey)}constructor(root){super(root),this.recalculationCheckbox=this.getModal().find(SELECTORS_RECACULATION_CHECKBOX),this.setOverrideId(null),this.setSessionKey(null)}setOverrideId(id){this.overrideId=id}getOverrideId(){return this.overrideId}setSessionKey(key){this.sessionKey=key}getSessionKey(){return this.sessionKey}registerEventListeners(){super.registerEventListeners(this),this.registerCloseOnCancel(),this.getModal().on(CustomEvents.events.activate,this.getActionSelector("delete"),(()=>{this.deleteOverride()}))}deleteOverride(){const recalculate=this.recalculationCheckbox.prop("checked"),targetUrl=new URL("".concat(_config.default.wwwroot,"/mod/assign/overridedelete.php"));targetUrl.searchParams.append("id",this.getOverrideId()),targetUrl.searchParams.append("sesskey",this.getSessionKey()),targetUrl.searchParams.append("confirm",1),recalculate&&targetUrl.searchParams.append("recalculate",1),window.location.href=targetUrl.href}}return _exports.default=OverrideDeleteModal,_defineProperty(OverrideDeleteModal,"TYPE","mod_assign/override_delete_modal"),_defineProperty(OverrideDeleteModal,"TEMPLATE","mod_assign/override_delete_modal"),_exports.default}));
//# sourceMappingURL=override_delete_modal.min.js.map
\ No newline at end of file
diff --git a/mod/assign/amd/build/override_delete_modal.min.js.map b/mod/assign/amd/build/override_delete_modal.min.js.map
index 3966c9720f3..cd602ac8f08 100644
--- a/mod/assign/amd/build/override_delete_modal.min.js.map
+++ b/mod/assign/amd/build/override_delete_modal.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"override_delete_modal.min.js","sources":["../src/override_delete_modal.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Modal for deleting an override with the option to recalculate penalties.\n *\n * @module mod_assign/override_delete_modal\n * @copyright 2025 Catalyst IT Australia Pty Ltd\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport * as CustomEvents from 'core/custom_interaction_events';\nimport Modal from 'core/modal';\n\nconst SELECTORS = {\n DELETE_BUTTONS: '.delete-override',\n RECACULATION_CHECKBOX: '#recalculatepenalties',\n};\n\n/**\n * Custom Modal\n */\nexport default class OverrideDeleteModal extends Modal {\n static TYPE = \"mod_assign/override_delete_modal\";\n static TEMPLATE = \"mod_assign/override_delete_modal\";\n\n /**\n * Configure the modal.\n *\n * @param {Object} modalConfig\n */\n configure(modalConfig) {\n // Add question modals are always large.\n modalConfig.large = true;\n\n // Always show on creation.\n modalConfig.show = false;\n modalConfig.removeOnClose = true;\n\n // Apply standard configuration.\n super.configure(modalConfig);\n }\n\n /**\n * Constructor.\n * Set required data to null.\n *\n * @param {HTMLElement} root\n */\n constructor(root) {\n super(root);\n\n // Recalculate penalties checkbox.\n this.recalculationCheckbox = this.getModal().find(SELECTORS.RECACULATION_CHECKBOX);\n\n // Data.\n this.setOverrideId(null);\n this.setSessionKey(null);\n }\n\n /**\n * Set the override id.\n *\n * @param {number} id The override id.\n */\n setOverrideId(id) {\n this.overrideId = id;\n }\n\n /**\n * Get the override id.\n *\n * @returns {*}\n */\n getOverrideId() {\n return this.overrideId;\n }\n\n /**\n * Set the session key.\n *\n * @param {string} key\n */\n setSessionKey(key) {\n this.sessionKey = key;\n }\n\n /**\n * Get the session key.\n *\n * @returns {*}\n */\n getSessionKey() {\n return this.sessionKey;\n }\n\n /**\n * Register events.\n *\n */\n registerEventListeners() {\n // Apply parent event listeners.\n super.registerEventListeners(this);\n\n // Register to close on cancel.\n this.registerCloseOnCancel();\n\n // Register the delete action.\n this.getModal().on(CustomEvents.events.activate, this.getActionSelector('delete'), () => {\n this.deleteOverride();\n });\n }\n\n /**\n * Delete a override.\n *\n */\n deleteOverride() {\n // Check if the recalculation checkbox is checked.\n const recalculate = this.recalculationCheckbox.prop('checked');\n\n // Redirect to the delete URL.\n window.location.href = M.cfg.wwwroot + '/mod/assign/overridedelete.php?id=' + this.getOverrideId() +\n '&sesskey=' + this.getSessionKey() + '&confirm=1'\n + (recalculate ? '&recalculate=1' : '');\n }\n}\n\nOverrideDeleteModal.registerModalType();\n"],"names":["SELECTORS","OverrideDeleteModal","Modal","configure","modalConfig","large","show","removeOnClose","constructor","root","recalculationCheckbox","this","getModal","find","setOverrideId","setSessionKey","id","overrideId","getOverrideId","key","sessionKey","getSessionKey","registerEventListeners","registerCloseOnCancel","on","CustomEvents","events","activate","getActionSelector","deleteOverride","recalculate","prop","window","location","href","M","cfg","wwwroot","registerModalType"],"mappings":"+3CA0BMA,gCAEqB,8BAMNC,4BAA4BC,eAS7CC,UAAUC,aAENA,YAAYC,OAAQ,EAGpBD,YAAYE,MAAO,EACnBF,YAAYG,eAAgB,QAGtBJ,UAAUC,aASpBI,YAAYC,YACFA,WAGDC,sBAAwBC,KAAKC,WAAWC,KAAKb,sCAG7Cc,cAAc,WACdC,cAAc,MAQvBD,cAAcE,SACLC,WAAaD,GAQtBE,uBACWP,KAAKM,WAQhBF,cAAcI,UACLC,WAAaD,IAQtBE,uBACWV,KAAKS,WAOhBE,+BAEUA,uBAAuBX,WAGxBY,6BAGAX,WAAWY,GAAGC,aAAaC,OAAOC,SAAUhB,KAAKiB,kBAAkB,WAAW,UAC1EC,oBAQbA,uBAEUC,YAAcnB,KAAKD,sBAAsBqB,KAAK,WAGpDC,OAAOC,SAASC,KAAOC,EAAEC,IAAIC,QAAU,qCAAuC1B,KAAKO,gBAC/E,YAAcP,KAAKU,gBAAkB,cAClCS,YAAc,iBAAmB,iEAtG3B7B,2BACH,oDADGA,+BAEC,oCAwGtBA,oBAAoBqC"}
\ No newline at end of file
+{"version":3,"file":"override_delete_modal.min.js","sources":["../src/override_delete_modal.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Modal for deleting an override with the option to recalculate penalties.\n *\n * @module `mod_assign/override_delete_modal\n * @copyright 2025 Catalyst IT Australia Pty Ltd\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport * as CustomEvents from 'core/custom_interaction_events';\nimport Config from 'core/config';\nimport Modal from 'core/modal';\n\nconst SELECTORS = {\n DELETE_BUTTONS: '.delete-override',\n RECACULATION_CHECKBOX: '#recalculatepenalties',\n};\n\n/**\n * Custom Modal\n */\nexport default class OverrideDeleteModal extends Modal {\n static TYPE = \"mod_assign/override_delete_modal\";\n static TEMPLATE = \"mod_assign/override_delete_modal\";\n\n /**\n * Configure the modal.\n *\n * @param {Object} modalConfig\n */\n configure(modalConfig) {\n // Add question modals are always large.\n modalConfig.large = true;\n\n // Always show on creation.\n modalConfig.show = true;\n modalConfig.removeOnClose = true;\n\n // Apply standard configuration.\n super.configure(modalConfig);\n\n this.setOverrideId(modalConfig.overrideId);\n this.setSessionKey(modalConfig.sessionKey);\n }\n\n /**\n * Constructor.\n * Set required data to null.\n *\n * @param {HTMLElement} root\n */\n constructor(root) {\n super(root);\n\n // Recalculate penalties checkbox.\n this.recalculationCheckbox = this.getModal().find(SELECTORS.RECACULATION_CHECKBOX);\n\n // Data.\n this.setOverrideId(null);\n this.setSessionKey(null);\n }\n\n /**\n * Set the override id.\n *\n * @param {number} id The override id.\n */\n setOverrideId(id) {\n this.overrideId = id;\n }\n\n /**\n * Get the override id.\n *\n * @returns {*}\n */\n getOverrideId() {\n return this.overrideId;\n }\n\n /**\n * Set the session key.\n *\n * @param {string} key\n */\n setSessionKey(key) {\n this.sessionKey = key;\n }\n\n /**\n * Get the session key.\n *\n * @returns {*}\n */\n getSessionKey() {\n return this.sessionKey;\n }\n\n /**\n * Register events.\n *\n */\n registerEventListeners() {\n // Apply parent event listeners.\n super.registerEventListeners(this);\n\n // Register to close on cancel.\n this.registerCloseOnCancel();\n\n // Register the delete action.\n this.getModal().on(CustomEvents.events.activate, this.getActionSelector('delete'), () => {\n this.deleteOverride();\n });\n }\n\n /**\n * Delete a override.\n *\n */\n deleteOverride() {\n // Check if the recalculation checkbox is checked.\n const recalculate = this.recalculationCheckbox.prop('checked');\n\n // Redirect to the delete URL.\n const targetUrl = new URL(`${Config.wwwroot}/mod/assign/overridedelete.php`);\n targetUrl.searchParams.append('id', this.getOverrideId());\n targetUrl.searchParams.append('sesskey', this.getSessionKey());\n targetUrl.searchParams.append('confirm', 1);\n\n if (recalculate) {\n targetUrl.searchParams.append('recalculate', 1);\n }\n\n window.location.href = targetUrl.href;\n }\n}\n"],"names":["SELECTORS","OverrideDeleteModal","Modal","configure","modalConfig","large","show","removeOnClose","setOverrideId","overrideId","setSessionKey","sessionKey","constructor","root","recalculationCheckbox","this","getModal","find","id","getOverrideId","key","getSessionKey","registerEventListeners","registerCloseOnCancel","on","CustomEvents","events","activate","getActionSelector","deleteOverride","recalculate","prop","targetUrl","URL","Config","wwwroot","searchParams","append","window","location","href"],"mappings":"u/CA2BMA,gCAEqB,8BAMNC,4BAA4BC,eAS7CC,UAAUC,aAENA,YAAYC,OAAQ,EAGpBD,YAAYE,MAAO,EACnBF,YAAYG,eAAgB,QAGtBJ,UAAUC,kBAEXI,cAAcJ,YAAYK,iBAC1BC,cAAcN,YAAYO,YASnCC,YAAYC,YACFA,WAGDC,sBAAwBC,KAAKC,WAAWC,KAAKjB,sCAG7CQ,cAAc,WACdE,cAAc,MAQvBF,cAAcU,SACLT,WAAaS,GAQtBC,uBACWJ,KAAKN,WAQhBC,cAAcU,UACLT,WAAaS,IAQtBC,uBACWN,KAAKJ,WAOhBW,+BAEUA,uBAAuBP,WAGxBQ,6BAGAP,WAAWQ,GAAGC,aAAaC,OAAOC,SAAUZ,KAAKa,kBAAkB,WAAW,UAC1EC,oBAQbA,uBAEUC,YAAcf,KAAKD,sBAAsBiB,KAAK,WAG9CC,UAAY,IAAIC,cAAOC,gBAAOC,2CACpCH,UAAUI,aAAaC,OAAO,KAAMtB,KAAKI,iBACzCa,UAAUI,aAAaC,OAAO,UAAWtB,KAAKM,iBAC9CW,UAAUI,aAAaC,OAAO,UAAW,GAErCP,aACAE,UAAUI,aAAaC,OAAO,cAAe,GAGjDC,OAAOC,SAASC,KAAOR,UAAUQ,kEAhHpBvC,2BACH,oDADGA,+BAEC"}
\ No newline at end of file
diff --git a/mod/assign/amd/build/override_modal_manager.min.js b/mod/assign/amd/build/override_modal_manager.min.js
index 5a023b354be..23657d8d2a0 100644
--- a/mod/assign/amd/build/override_modal_manager.min.js
+++ b/mod/assign/amd/build/override_modal_manager.min.js
@@ -5,6 +5,6 @@ define("mod_assign/override_modal_manager",["exports","core/str","mod_assign/ove
* @module mod_assign/override_modal_manager
* @copyright 2025 Catalyst IT Australia Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_override_delete_modal=(obj=_override_delete_modal)&&obj.__esModule?obj:{default:obj};const SELECTORS_DELETE_BUTTONS=".delete-override",SELECTORS_PARENT_CONTAINER="#assignoverrides",SELECTORS_USER_GROUP_NAME=".usergroupname";_exports.init=(mode,showRecalculationCheckBox)=>{document.querySelector(SELECTORS_PARENT_CONTAINER).addEventListener("click",(async event=>{const button=event.target.closest(SELECTORS_DELETE_BUTTONS);if(!button)return;event.preventDefault();const name=event.target.closest("tr").querySelector(SELECTORS_USER_GROUP_NAME).innerText,confirmMessage=await getConfirmMessage(mode,name),modal=await _override_delete_modal.default.create({templateContext:{confirmmessage:confirmMessage,showpenaltyrecalculation:showRecalculationCheckBox}});modal.setOverrideId(button.getAttribute("data-overrideid")),modal.setSessionKey(button.getAttribute("data-sesskey")),modal.show()}))};const getConfirmMessage=async(mode,name)=>{switch(mode){case"group":return await(0,_str.get_string)("overridedeletegroupsure","assign",name);case"user":return await(0,_str.get_string)("overridedeleteusersure","assign",name);default:return""}}}));
+ */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_override_delete_modal=(obj=_override_delete_modal)&&obj.__esModule?obj:{default:obj};const SELECTORS_DELETE_BUTTONS=".delete-override",SELECTORS_PARENT_CONTAINER="#assignoverrides",SELECTORS_USER_GROUP_NAME=".usergroupname";_exports.init=(mode,showRecalculationCheckBox)=>{document.querySelector(SELECTORS_PARENT_CONTAINER).addEventListener("click",(async event=>{const button=event.target.closest(SELECTORS_DELETE_BUTTONS);if(!button)return;event.preventDefault();const name=event.target.closest("tr").querySelector(SELECTORS_USER_GROUP_NAME).innerText,confirmMessage=await getConfirmMessage(mode,name);_override_delete_modal.default.create({templateContext:{confirmmessage:confirmMessage,showpenaltyrecalculation:showRecalculationCheckBox},overrideId:button.getAttribute("data-overrideid"),sessionKey:button.getAttribute("data-sesskey")})}))};const getConfirmMessage=(mode,name)=>{switch(mode){case"group":return(0,_str.get_string)("overridedeletegroupsure","assign",name);case"user":return(0,_str.get_string)("overridedeleteusersure","assign",name);default:return""}}}));
//# sourceMappingURL=override_modal_manager.min.js.map
\ No newline at end of file
diff --git a/mod/assign/amd/build/override_modal_manager.min.js.map b/mod/assign/amd/build/override_modal_manager.min.js.map
index 62877901a78..82e28bea962 100644
--- a/mod/assign/amd/build/override_modal_manager.min.js.map
+++ b/mod/assign/amd/build/override_modal_manager.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"override_modal_manager.min.js","sources":["../src/override_modal_manager.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Modal manager for the override delete modal.\n *\n * @module mod_assign/override_modal_manager\n * @copyright 2025 Catalyst IT Australia Pty Ltd\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {get_string as getString} from 'core/str';\nimport OverrideDeleteModal from 'mod_assign/override_delete_modal';\n\nconst SELECTORS = {\n DELETE_BUTTONS: '.delete-override',\n PARENT_CONTAINER: '#assignoverrides',\n USER_GROUP_NAME: '.usergroupname',\n};\n\n/**\n * Initialise the modal manager.\n *\n * @param {string} mode The override mode.\n * @param {boolean} showRecalculationCheckBox Whether to show the recalculation checkbox.\n */\nexport const init = (mode, showRecalculationCheckBox) => {\n document.querySelector(SELECTORS.PARENT_CONTAINER).addEventListener('click', async(event) => {\n const button = event.target.closest(SELECTORS.DELETE_BUTTONS);\n\n if (!button) {\n return;\n }\n\n event.preventDefault();\n\n // Get the name of the user or group from the first column of the row.\n const name = event.target.closest('tr').querySelector(SELECTORS.USER_GROUP_NAME).innerText;\n\n // Get the confirm message for the modal.\n const confirmMessage = await getConfirmMessage(mode, name);\n\n // Create and show the modal.\n const modal = await OverrideDeleteModal.create({\n templateContext: {\n confirmmessage: confirmMessage,\n showpenaltyrecalculation: showRecalculationCheckBox,\n },\n });\n modal.setOverrideId(button.getAttribute('data-overrideid'));\n modal.setSessionKey(button.getAttribute('data-sesskey'));\n modal.show();\n });\n};\n\n/**\n * Get the confirm message for the modal.\n *\n * @param {string} mode The override mode.\n * @param {boolean} name The name of the user or group.\n * @returns {Promise} The confirm message.\n */\nconst getConfirmMessage = async(mode, name) => {\n switch (mode) {\n case \"group\":\n return await getString('overridedeletegroupsure', 'assign', name);\n case \"user\":\n return await getString('overridedeleteusersure', 'assign', name);\n default:\n return \"\";\n }\n};\n"],"names":["SELECTORS","mode","showRecalculationCheckBox","document","querySelector","addEventListener","async","button","event","target","closest","preventDefault","name","innerText","confirmMessage","getConfirmMessage","modal","OverrideDeleteModal","create","templateContext","confirmmessage","showpenaltyrecalculation","setOverrideId","getAttribute","setSessionKey","show"],"mappings":";;;;;;;8KA0BMA,yBACc,mBADdA,2BAEgB,mBAFhBA,0BAGe,+BASD,CAACC,KAAMC,6BACvBC,SAASC,cAAcJ,4BAA4BK,iBAAiB,SAASC,MAAAA,cACnEC,OAASC,MAAMC,OAAOC,QAAQV,8BAE/BO,cAILC,MAAMG,uBAGAC,KAAOJ,MAAMC,OAAOC,QAAQ,MAAMN,cAAcJ,2BAA2Ba,UAG3EC,qBAAuBC,kBAAkBd,KAAMW,MAG/CI,YAAcC,+BAAoBC,OAAO,CAC3CC,gBAAiB,CACbC,eAAgBN,eAChBO,yBAA0BnB,6BAGlCc,MAAMM,cAAcf,OAAOgB,aAAa,oBACxCP,MAAMQ,cAAcjB,OAAOgB,aAAa,iBACxCP,MAAMS,iBAWRV,kBAAoBT,MAAML,KAAMW,eAC1BX,UACC,qBACY,mBAAU,0BAA2B,SAAUW,UAC3D,oBACY,mBAAU,yBAA0B,SAAUA,oBAEpD"}
\ No newline at end of file
+{"version":3,"file":"override_modal_manager.min.js","sources":["../src/override_modal_manager.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Modal manager for the override delete modal.\n *\n * @module mod_assign/override_modal_manager\n * @copyright 2025 Catalyst IT Australia Pty Ltd\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {get_string as getString} from 'core/str';\nimport OverrideDeleteModal from 'mod_assign/override_delete_modal';\n\nconst SELECTORS = {\n DELETE_BUTTONS: '.delete-override',\n PARENT_CONTAINER: '#assignoverrides',\n USER_GROUP_NAME: '.usergroupname',\n};\n\n/**\n * Initialise the modal manager.\n *\n * @param {string} mode The override mode.\n * @param {boolean} showRecalculationCheckBox Whether to show the recalculation checkbox.\n */\nexport const init = (mode, showRecalculationCheckBox) => {\n document.querySelector(SELECTORS.PARENT_CONTAINER).addEventListener('click', async(event) => {\n const button = event.target.closest(SELECTORS.DELETE_BUTTONS);\n\n if (!button) {\n return;\n }\n\n event.preventDefault();\n\n // Get the name of the user or group from the first column of the row.\n const name = event.target.closest('tr').querySelector(SELECTORS.USER_GROUP_NAME).innerText;\n\n // Get the confirm message for the modal.\n const confirmMessage = await getConfirmMessage(mode, name);\n\n // Create and show the modal.\n OverrideDeleteModal.create({\n templateContext: {\n confirmmessage: confirmMessage,\n showpenaltyrecalculation: showRecalculationCheckBox,\n },\n overrideId: button.getAttribute('data-overrideid'),\n sessionKey: button.getAttribute('data-sesskey'),\n });\n });\n};\n\n/**\n * Get the confirm message for the modal.\n *\n * @param {string} mode The override mode.\n * @param {boolean} name The name of the user or group.\n * @returns {Promise} The confirm message.\n */\nconst getConfirmMessage = (mode, name) => {\n switch (mode) {\n case \"group\":\n return getString('overridedeletegroupsure', 'assign', name);\n case \"user\":\n return getString('overridedeleteusersure', 'assign', name);\n default:\n return \"\";\n }\n};\n"],"names":["SELECTORS","mode","showRecalculationCheckBox","document","querySelector","addEventListener","async","button","event","target","closest","preventDefault","name","innerText","confirmMessage","getConfirmMessage","create","templateContext","confirmmessage","showpenaltyrecalculation","overrideId","getAttribute","sessionKey"],"mappings":";;;;;;;8KA0BMA,yBACc,mBADdA,2BAEgB,mBAFhBA,0BAGe,+BASD,CAACC,KAAMC,6BACvBC,SAASC,cAAcJ,4BAA4BK,iBAAiB,SAASC,MAAAA,cACnEC,OAASC,MAAMC,OAAOC,QAAQV,8BAE/BO,cAILC,MAAMG,uBAGAC,KAAOJ,MAAMC,OAAOC,QAAQ,MAAMN,cAAcJ,2BAA2Ba,UAG3EC,qBAAuBC,kBAAkBd,KAAMW,qCAGjCI,OAAO,CACvBC,gBAAiB,CACbC,eAAgBJ,eAChBK,yBAA0BjB,2BAE9BkB,WAAYb,OAAOc,aAAa,mBAChCC,WAAYf,OAAOc,aAAa,4BAYtCN,kBAAoB,CAACd,KAAMW,eACrBX,UACC,eACM,mBAAU,0BAA2B,SAAUW,UACrD,cACM,mBAAU,yBAA0B,SAAUA,oBAE9C"}
\ No newline at end of file
diff --git a/mod/assign/amd/src/override_delete_modal.js b/mod/assign/amd/src/override_delete_modal.js
index b3d55a8ee12..84846de9412 100644
--- a/mod/assign/amd/src/override_delete_modal.js
+++ b/mod/assign/amd/src/override_delete_modal.js
@@ -16,12 +16,13 @@
/**
* Modal for deleting an override with the option to recalculate penalties.
*
- * @module mod_assign/override_delete_modal
+ * @module `mod_assign/override_delete_modal
* @copyright 2025 Catalyst IT Australia Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import * as CustomEvents from 'core/custom_interaction_events';
+import Config from 'core/config';
import Modal from 'core/modal';
const SELECTORS = {
@@ -46,11 +47,14 @@ export default class OverrideDeleteModal extends Modal {
modalConfig.large = true;
// Always show on creation.
- modalConfig.show = false;
+ modalConfig.show = true;
modalConfig.removeOnClose = true;
// Apply standard configuration.
super.configure(modalConfig);
+
+ this.setOverrideId(modalConfig.overrideId);
+ this.setSessionKey(modalConfig.sessionKey);
}
/**
@@ -132,10 +136,15 @@ export default class OverrideDeleteModal extends Modal {
const recalculate = this.recalculationCheckbox.prop('checked');
// Redirect to the delete URL.
- window.location.href = M.cfg.wwwroot + '/mod/assign/overridedelete.php?id=' + this.getOverrideId() +
- '&sesskey=' + this.getSessionKey() + '&confirm=1'
- + (recalculate ? '&recalculate=1' : '');
+ const targetUrl = new URL(`${Config.wwwroot}/mod/assign/overridedelete.php`);
+ targetUrl.searchParams.append('id', this.getOverrideId());
+ targetUrl.searchParams.append('sesskey', this.getSessionKey());
+ targetUrl.searchParams.append('confirm', 1);
+
+ if (recalculate) {
+ targetUrl.searchParams.append('recalculate', 1);
+ }
+
+ window.location.href = targetUrl.href;
}
}
-
-OverrideDeleteModal.registerModalType();
diff --git a/mod/assign/amd/src/override_modal_manager.js b/mod/assign/amd/src/override_modal_manager.js
index 630ed7dcfc2..17aca20132a 100644
--- a/mod/assign/amd/src/override_modal_manager.js
+++ b/mod/assign/amd/src/override_modal_manager.js
@@ -53,15 +53,14 @@ export const init = (mode, showRecalculationCheckBox) => {
const confirmMessage = await getConfirmMessage(mode, name);
// Create and show the modal.
- const modal = await OverrideDeleteModal.create({
+ OverrideDeleteModal.create({
templateContext: {
confirmmessage: confirmMessage,
showpenaltyrecalculation: showRecalculationCheckBox,
},
+ overrideId: button.getAttribute('data-overrideid'),
+ sessionKey: button.getAttribute('data-sesskey'),
});
- modal.setOverrideId(button.getAttribute('data-overrideid'));
- modal.setSessionKey(button.getAttribute('data-sesskey'));
- modal.show();
});
};
@@ -72,12 +71,12 @@ export const init = (mode, showRecalculationCheckBox) => {
* @param {boolean} name The name of the user or group.
* @returns {Promise} The confirm message.
*/
-const getConfirmMessage = async(mode, name) => {
+const getConfirmMessage = (mode, name) => {
switch (mode) {
case "group":
- return await getString('overridedeletegroupsure', 'assign', name);
+ return getString('overridedeletegroupsure', 'assign', name);
case "user":
- return await getString('overridedeleteusersure', 'assign', name);
+ return getString('overridedeleteusersure', 'assign', name);
default:
return "";
}
diff --git a/mod/assign/classes/penalty/helper.php b/mod/assign/classes/penalty/helper.php
index 03e5da96d63..213aa2c1993 100644
--- a/mod/assign/classes/penalty/helper.php
+++ b/mod/assign/classes/penalty/helper.php
@@ -17,7 +17,7 @@
namespace mod_assign\penalty;
use assign;
-use context_module;
+use core\context\module as context_module;
use core_grades\penalty_manager;
use grade_item;
@@ -100,8 +100,9 @@ class helper {
// Check if the submission is null.
if ($submission === null) {
- debugging('Submission not found for user ' . $userid . ' in assignment ' . $assignid
- . ' attempt ' . $assigngrade->attemptnumber);
+ debugging(
+ "Submission not found for user {$userid} in assignment {$assignid} attempt {$assigngrade->attemptnumber}",
+ );
return;
}
@@ -110,8 +111,9 @@ class helper {
// Check if we have valid submission date.
if (empty($submissiondate)) {
- debugging('Invalid submission date for user ' . $userid . ' in assignment ' . $assignid
- . ' attempt ' . $assigngrade->attemptnumber);
+ debugging(
+ "Invalid submission date for user {$userid} in assignment {$assignid} attempt {$assigngrade->attemptnumber}",
+ );
return;
}
@@ -143,6 +145,7 @@ class helper {
'penalty',
$deductedpercentage,
'assignment = :assignid AND userid = :userid AND attemptnumber = :attemptnumber',
- ['assignid' => $assignid, 'userid' => $userid, 'attemptnumber' => $assigngrade->attemptnumber]);
+ ['assignid' => $assignid, 'userid' => $userid, 'attemptnumber' => $assigngrade->attemptnumber],
+ );
}
}
diff --git a/mod/assign/classes/penalty_recalculator.php b/mod/assign/classes/penalty_recalculator.php
index 8f128d67e86..d0fcf5f8bcc 100644
--- a/mod/assign/classes/penalty_recalculator.php
+++ b/mod/assign/classes/penalty_recalculator.php
@@ -27,14 +27,7 @@ use mod_assign\task\recalculate_penalties;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class penalty_recalculator extends \core_grades\penalty_recalculator {
-
- /**
- * Recalculate penalties for the assignment.
- *
- * @param context $context the context where the penalty is being recalculated.
- * @param int $usermodified the user who triggered the recalculation.
- * @return void
- */
+ #[\Override]
public static function recalculate_penalty(context $context, int $usermodified): void {
global $CFG, $DB;
diff --git a/mod/assign/classes/task/recalculate_penalties.php b/mod/assign/classes/task/recalculate_penalties.php
index 53c920a01af..8dd8861e127 100644
--- a/mod/assign/classes/task/recalculate_penalties.php
+++ b/mod/assign/classes/task/recalculate_penalties.php
@@ -16,7 +16,6 @@
namespace mod_assign\task;
-use core\exception\moodle_exception;
use core\task\adhoc_task;
/**
@@ -27,10 +26,7 @@ use core\task\adhoc_task;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class recalculate_penalties extends adhoc_task {
-
- /**
- * Execute the task.
- */
+ #[\Override]
public function execute(): void {
global $CFG, $DB;
diff --git a/mod/assign/overrides.php b/mod/assign/overrides.php
index 5b93bbefadd..10e40e4febe 100644
--- a/mod/assign/overrides.php
+++ b/mod/assign/overrides.php
@@ -233,13 +233,14 @@ foreach ($overrides as $override) {
$OUTPUT->pix_icon('t/copy', get_string('copy')) . ' ';
// Delete.
- $deletelink = html_writer::link("#",
+ $deletelink = html_writer::link(
+ "#",
$OUTPUT->pix_icon('t/delete', get_string('delete')),
[
'class' => 'delete-override',
'data-overrideid' => $override->id,
'data-sesskey' => sesskey(),
- ]
+ ],
);
$iconstr .= $deletelink;
@@ -247,7 +248,7 @@ foreach ($overrides as $override) {
$usergroupstr = html_writer::link(
$groupurl->out(true, ['group' => $override->groupid]),
format_string($override->name, true, ['context' => $context]),
- ['class' => 'usergroupname']
+ ['class' => 'usergroupname'],
);
// Move up.
@@ -273,7 +274,7 @@ foreach ($overrides as $override) {
$usergroupstr = html_writer::link(
$userurl->out(false, ['id' => $override->userid, 'course' => $course->id]),
fullname($override),
- ['class' => 'usergroupname']
+ ['class' => 'usergroupname'],
);
}
diff --git a/mod/assign/tests/penalty_test.php b/mod/assign/tests/penalty_test.php
index 7173ddc68c6..aa87fbc9604 100644
--- a/mod/assign/tests/penalty_test.php
+++ b/mod/assign/tests/penalty_test.php
@@ -134,9 +134,15 @@ final class penalty_test extends \advanced_testcase {
* @param float $expectedgrade The expected final grade.
*
*/
- public function test_apply_penalty($submissiondate, $duedate,
- $useroverrideduedate, $groupoverrideduedate, $extensionduedate,
- $expectedmessages, $expectedgrade): void {
+ public function test_apply_penalty(
+ $submissiondate,
+ $duedate,
+ $useroverrideduedate,
+ $groupoverrideduedate,
+ $extensionduedate,
+ $expectedmessages,
+ $expectedgrade,
+ ): void {
global $DB;
$this->resetAfterTest();
@@ -194,15 +200,13 @@ final class penalty_test extends \advanced_testcase {
$this->assertdebuggingcalledcount(count($expectedmessages), $expectedmessages);
// The expected final grade.
- $gradeitem = grade_item::fetch(
- [
- 'courseid' => $course->id,
- 'itemtype' => 'mod',
- 'itemmodule' => 'assign',
- 'iteminstance' => $instance->id,
- 'itemnumber' => 0,
- ]
- );
+ $gradeitem = grade_item::fetch([
+ 'courseid' => $course->id,
+ 'itemtype' => 'mod',
+ 'itemmodule' => 'assign',
+ 'iteminstance' => $instance->id,
+ 'itemnumber' => 0,
+ ]);
$this->assertEquals($expectedgrade, $gradeitem->get_final($student->id)->finalgrade);
}
@@ -245,15 +249,13 @@ final class penalty_test extends \advanced_testcase {
$this->assertdebuggingcalledcount(2);
// Check the grade.
- $gradeitem = grade_item::fetch(
- [
- 'courseid' => $course->id,
- 'itemtype' => 'mod',
- 'itemmodule' => 'assign',
- 'iteminstance' => $instance->id,
- 'itemnumber' => 0,
- ]
- );
+ $gradeitem = grade_item::fetch([
+ 'courseid' => $course->id,
+ 'itemtype' => 'mod',
+ 'itemmodule' => 'assign',
+ 'iteminstance' => $instance->id,
+ 'itemnumber' => 0,
+ ]);
$this->assertEquals(30, $gradeitem->get_final($student->id)->finalgrade);
// Change the due date.