From a9fa52295a3ba5eb6df7d6ed319a1eb773788fb2 Mon Sep 17 00:00:00 2001
From: Tim Hunt <T.J.Hunt@open.ac.uk>
Date: Wed, 26 Apr 2023 10:42:11 +0100
Subject: [PATCH] MDL-78025 question: move hiding logic into
 question_delete_question

This logic belongs in the API, so it is applied consistently.

Also this avoids calling the expensive function questions_in_use
twice per question.
---
 lib/questionlib.php                     | 5 ++++-
 question/bank/deletequestion/delete.php | 7 +------
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/lib/questionlib.php b/lib/questionlib.php
index f7a2eff980b..82175a1b9d6 100644
--- a/lib/questionlib.php
+++ b/lib/questionlib.php
@@ -28,6 +28,7 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+use core_question\local\bank\question_version_status;
 
 defined('MOODLE_INTERNAL') || die();
 
@@ -360,8 +361,10 @@ function question_delete_question($questionid): void {
         $questionstocheck[] = $question->parent;
     }
 
-    // Do not delete a question if it is used by an activity module
+    // Do not delete a question if it is used by an activity module. Just mark the version hidden.
     if (questions_in_use($questionstocheck)) {
+        $DB->set_field('question_versions', 'status',
+                question_version_status::QUESTION_STATUS_HIDDEN, ['questionid' => $questionid]);
         return;
     }
 
diff --git a/question/bank/deletequestion/delete.php b/question/bank/deletequestion/delete.php
index b41ba32bdae..dbb697aafec 100644
--- a/question/bank/deletequestion/delete.php
+++ b/question/bank/deletequestion/delete.php
@@ -83,12 +83,7 @@ if ($deleteselected && ($confirm = optional_param('confirm', '', PARAM_ALPHANUM)
             foreach ($questionlist as $questionid) {
                 $questionid = (int)$questionid;
                 question_require_capability_on($questionid, 'edit');
-                if (questions_in_use(array($questionid))) {
-                    $DB->set_field('question_versions', 'status',
-                        \core_question\local\bank\question_version_status::QUESTION_STATUS_HIDDEN, ['questionid' => $questionid]);
-                } else {
-                    question_delete_question($questionid);
-                }
+                question_delete_question($questionid);
             }
         }
         redirect($returnurl);