diff --git a/question/bank/bulkmove/classes/bulk_move_action.php b/question/bank/bulkmove/classes/bulk_move_action.php index 60bbf1065d4..ec244a32674 100644 --- a/question/bank/bulkmove/classes/bulk_move_action.php +++ b/question/bank/bulkmove/classes/bulk_move_action.php @@ -30,7 +30,7 @@ class bulk_move_action extends \core_question\local\bank\bulk_action_base { return get_string('movetobulkaction', 'qbank_bulkmove'); } - public function get_bulk_action_key(): string { + public function get_key(): string { return 'move'; } diff --git a/question/bank/bulkmove/classes/plugin_feature.php b/question/bank/bulkmove/classes/plugin_feature.php index 4c9eda185f3..5b324b55dd5 100644 --- a/question/bank/bulkmove/classes/plugin_feature.php +++ b/question/bank/bulkmove/classes/plugin_feature.php @@ -28,7 +28,9 @@ use core_question\local\bank\plugin_features_base; * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class plugin_feature extends plugin_features_base { - public function get_bulk_actions(): ?bulk_action_base { - return new bulk_move_action(); + public function get_bulk_actions(): array { + return [ + new bulk_move_action(), + ]; } } diff --git a/question/bank/deletequestion/classes/bulk_delete_action.php b/question/bank/deletequestion/classes/bulk_delete_action.php index f2fc6931064..303e61e82da 100644 --- a/question/bank/deletequestion/classes/bulk_delete_action.php +++ b/question/bank/deletequestion/classes/bulk_delete_action.php @@ -30,7 +30,7 @@ class bulk_delete_action extends \core_question\local\bank\bulk_action_base { return get_string('delete'); } - public function get_bulk_action_key(): string { + public function get_key(): string { return 'deleteselected'; } diff --git a/question/bank/deletequestion/classes/plugin_feature.php b/question/bank/deletequestion/classes/plugin_feature.php index c11fae01d21..e159313af5e 100644 --- a/question/bank/deletequestion/classes/plugin_feature.php +++ b/question/bank/deletequestion/classes/plugin_feature.php @@ -43,7 +43,9 @@ class plugin_feature extends plugin_features_base { ]; } - public function get_bulk_actions(): ?bulk_action_base { - return new bulk_delete_action(); + public function get_bulk_actions(): array { + return [ + new bulk_delete_action(), + ]; } } diff --git a/question/classes/local/bank/bulk_action_base.php b/question/classes/local/bank/bulk_action_base.php index 775c5a3cd5a..e320fb784cb 100644 --- a/question/classes/local/bank/bulk_action_base.php +++ b/question/classes/local/bank/bulk_action_base.php @@ -44,7 +44,9 @@ abstract class bulk_action_base { * * @return string */ - abstract public function get_bulk_action_key(): string; + public function get_bulk_action_key(): string { + return ''; + } /** * URL of the bulk action redirect page. @@ -68,4 +70,22 @@ abstract class bulk_action_base { public function get_bulk_action_capabilities(): ?array { return null; } + + + /** + * A unique key for the bulk action, this will be used in the api to identify the action data. + * Every bulk must have a unique key to perform the action as a part of the form post in the base view. + * When questions are selected, it will post according to the key its selected from the dropdown. + * + * Note: This method is the first towards moving from get_bulk_action_key() to get_key(). + * + * @return string + */ + public function get_key(): string { + if (!empty($this->get_bulk_action_key())) { + return $this->get_bulk_action_key(); + } + throw new \coding_exception('Bulk actions must implement the get_key() or get_bulk_action_key() method. ' . + 'In Moodle 4.1, get_bulk_action_key() is being deprecated and replaced by get_key().'); + } } diff --git a/question/classes/local/bank/plugin_features_base.php b/question/classes/local/bank/plugin_features_base.php index de06126dd74..f12729b9dcb 100644 --- a/question/classes/local/bank/plugin_features_base.php +++ b/question/classes/local/bank/plugin_features_base.php @@ -59,10 +59,10 @@ class plugin_features_base { /** * This method will return the array objects for the bulk actions ui. * - * @return null|bulk_action_base + * @return bulk_action_base[] */ - public function get_bulk_actions(): ?bulk_action_base { - return null; + public function get_bulk_actions() { + return []; } } diff --git a/question/classes/local/bank/view.php b/question/classes/local/bank/view.php index 06273bba79e..a3c8edbdb67 100644 --- a/question/classes/local/bank/view.php +++ b/question/classes/local/bank/view.php @@ -197,22 +197,24 @@ class view { protected function init_bulk_actions(): void { $plugins = \core_component::get_plugin_list_with_class('qbank', 'plugin_feature', 'plugin_feature.php'); foreach ($plugins as $componentname => $plugin) { - $pluginentrypoint = new $plugin(); - $pluginentrypointobject = $pluginentrypoint->get_bulk_actions(); - // Don't need the plugins without bulk actions. - if ($pluginentrypointobject === null) { - unset($plugins[$componentname]); - continue; - } if (!\core\plugininfo\qbank::is_plugin_enabled($componentname)) { - unset($plugins[$componentname]); continue; } - $this->bulkactions[$pluginentrypointobject->get_bulk_action_key()] = [ - 'title' => $pluginentrypointobject->get_bulk_action_title(), - 'url' => $pluginentrypointobject->get_bulk_action_url(), - 'capabilities' => $pluginentrypointobject->get_bulk_action_capabilities() - ]; + + $pluginentrypoint = new $plugin(); + $bulkactions = $pluginentrypoint->get_bulk_actions(); + if (!is_array($bulkactions)) { + $bulkactions = [$bulkactions]; + } + + foreach ($bulkactions as $bulkactionobject) { + $this->bulkactions[$bulkactionobject->get_key()] = [ + 'title' => $bulkactionobject->get_bulk_action_title(), + 'url' => $bulkactionobject->get_bulk_action_url(), + 'capabilities' => $bulkactionobject->get_bulk_action_capabilities() + ]; + } + } } diff --git a/question/upgrade.txt b/question/upgrade.txt index 887c93c8e91..61090bed1e2 100644 --- a/question/upgrade.txt +++ b/question/upgrade.txt @@ -1,5 +1,10 @@ This files describes API changes for code that uses the question API. +=== 4.0.5 === + +1) Question bank plugins can now define more than one bulk action. Therefore, plugin_features_base::get_bulk_actions has been + changed to return an array, rather than a single bulk action class. Please update the plugin_features class in your plugin if necessary. + === 4.0 === Moodle 4.0 included the results of a major project to re-work the question bank.