From a7aedd91ff8062f49f230b666cbb5071ea53421f Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Mon, 17 Mar 2025 23:29:09 +0800 Subject: [PATCH] MDL-80984 core: Coding style updates --- grade/classes/output/penalty_indicator.php | 9 +-- .../table/gradepenalty_management_table.php | 14 +--- grade/lib.php | 7 +- .../output/edit_penalty_rule_action_bar.php | 16 +---- .../classes/output/form/edit_penalty_form.php | 27 ++++---- .../output/view_penalty_rule_action_bar.php | 31 ++++----- .../penalty/duedate/classes/penalty_rule.php | 4 -- .../classes/table/penalty_rule_table.php | 8 +-- grade/penalty/duedate/lib.php | 5 +- .../duedate/tests/penalty_calculator_test.php | 18 ++--- .../tests/penalty_rule_persistent_test.php | 9 +-- grade/tests/output/penalty_indicator_test.php | 6 +- grade/tests/penalty_manager_test.php | 10 ++- lib/classes/plugininfo/gradepenalty.php | 68 ++++--------------- lib/gradelib.php | 2 - .../amd/build/override_delete_modal.min.js | 2 +- .../build/override_delete_modal.min.js.map | 2 +- .../amd/build/override_modal_manager.min.js | 2 +- .../build/override_modal_manager.min.js.map | 2 +- mod/assign/amd/src/override_delete_modal.js | 23 +++++-- mod/assign/amd/src/override_modal_manager.js | 13 ++-- mod/assign/classes/penalty/helper.php | 15 ++-- mod/assign/classes/penalty_recalculator.php | 9 +-- .../classes/task/recalculate_penalties.php | 6 +- mod/assign/overrides.php | 9 +-- mod/assign/tests/penalty_test.php | 44 ++++++------ 26 files changed, 137 insertions(+), 224 deletions(-) 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.