From 966556074ce9896009b17c157944c694425f3cd9 Mon Sep 17 00:00:00 2001 From: Martin Gauk Date: Fri, 17 Jan 2020 12:13:41 +0000 Subject: [PATCH] MDL-51694 core_grades: use transactions when deleting --- lib/grade/grade_category.php | 8 +++++++- lib/grade/grade_grade.php | 4 ++++ lib/grade/grade_item.php | 13 ++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 20c8ef04a09..bbcf41b7db3 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -285,6 +285,9 @@ class grade_category extends grade_object { * @return bool success */ public function delete($source=null) { + global $DB; + + $transaction = $DB->start_delegated_transaction(); $grade_item = $this->load_grade_item(); if ($this->is_course_category()) { @@ -334,7 +337,10 @@ class grade_category extends grade_object { $grade_item->delete($source); // delete category itself - return parent::delete($source); + $success = parent::delete($source); + + $transaction->allow_commit(); + return $success; } /** diff --git a/lib/grade/grade_grade.php b/lib/grade/grade_grade.php index 6426657b74a..832546a0beb 100644 --- a/lib/grade/grade_grade.php +++ b/lib/grade/grade_grade.php @@ -1111,6 +1111,9 @@ class grade_grade extends grade_object { * @return bool Returns true if the deletion was successful, false otherwise. */ public function delete($source = null) { + global $DB; + + $transaction = $DB->start_delegated_transaction(); $success = parent::delete($source); // If the grade was deleted successfully trigger a grade_deleted event. @@ -1119,6 +1122,7 @@ class grade_grade extends grade_object { \core\event\grade_deleted::create_from_grade($this)->trigger(); } + $transaction->allow_commit(); return $success; } diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index f67c71c4aa5..dd4a16affe0 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -407,8 +407,13 @@ class grade_item extends grade_object { * @return bool success */ public function delete($source=null) { + global $DB; + + $transaction = $DB->start_delegated_transaction(); $this->delete_all_grades($source); - return parent::delete($source); + $success = parent::delete($source); + $transaction->allow_commit(); + return $success; } /** @@ -418,6 +423,10 @@ class grade_item extends grade_object { * @return bool */ public function delete_all_grades($source=null) { + global $DB; + + $transaction = $DB->start_delegated_transaction(); + if (!$this->is_course_item()) { $this->force_regrading(); } @@ -435,6 +444,8 @@ class grade_item extends grade_object { $fs->delete_area_files($this->get_context()->id, GRADE_FILE_COMPONENT, GRADE_HISTORY_FEEDBACK_FILEAREA); } + $transaction->allow_commit(); + return true; }