From 2fa13a3eaf0e3e4e0903e4c3b15fcb208f2a8074 Mon Sep 17 00:00:00 2001 From: Nathan Nguyen Date: Wed, 7 Aug 2024 13:39:46 +1000 Subject: [PATCH] MDL-82129 gradepenalty_duedate: override penalty rule at module context --- grade/penalty/duedate/lib.php | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/grade/penalty/duedate/lib.php b/grade/penalty/duedate/lib.php index 7eea53f999494..56569b820db99 100644 --- a/grade/penalty/duedate/lib.php +++ b/grade/penalty/duedate/lib.php @@ -23,6 +23,9 @@ */ /** Minimum late for value */ + +use core_grades\local\penalty\manager; + define('GRADEPENALTY_DUEDATE_OVERDUEBY_MIN', 1); /** Maximum late for value */ @@ -61,6 +64,39 @@ function gradepenalty_duedate_extend_navigation_course(navigation_node $navigati } } +/** + * Extend the module navigation with a penalty rule settings. + * + * @param navigation_node $navigation The settings navigation object + * @param cm_info $cm The course module + * @return void + */ +function gradepenalty_duedate_extend_navigation_module(navigation_node $navigation, cm_info $cm) { + // Get plugin info of this plugin. + $penaltyplugins = core_plugin_manager::instance()->get_plugins_of_type('gradepenalty'); + + // Return if the plugin is not enabled. + if (!$penaltyplugins['duedate']->is_enabled()) { + return; + } + + // Return if the module is not enabled. + if (!manager::is_penalty_enabled_for_module($cm->modname)) { + return; + } + + $context = context_module::instance($cm->id); + + if (has_capability('gradepenalty/duedate:manage', $context)) { + $url = new moodle_url('/grade/penalty/duedate/manage_penalty_rule.php', ['contextid' => $context->id]); + + $settingsnode = navigation_node::create(get_string('penaltyrule', 'gradepenalty_duedate'), + $url, navigation_node::TYPE_SETTING, + null, 'penaltyrule', new pix_icon('i/settings', '')); + $navigation->add_node($settingsnode); + } +} + /** * Load penalty rule form. *