From e85807e298d38432b1550d4afa7e94249a71b3a4 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Fri, 13 Mar 2015 20:53:11 -0700 Subject: [PATCH] Fixed sequence values when deleting an element --- edit.php | 7 +------ locallib.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/edit.php b/edit.php index 44faf19..98de3b8 100644 --- a/edit.php +++ b/edit.php @@ -118,12 +118,7 @@ if ((!empty($moveup)) || (!empty($movedown))) { } } else if (!empty($deleteelement)) { // Check if we are deleting an element. if (!empty($confirm)) { // Check they have confirmed the deletion. - // Ensure element exists and delete it. - $element = $DB->get_record('customcert_elements', array('id' => $deleteelement), '*', MUST_EXIST); - // Get an instance of the element class. - if ($e = customcert_get_element_instance($element)) { - $e->delete_element(); - } + customcert_delete_element($deleteelement); } else { // Set deletion flag to true. $deleting = true; diff --git a/locallib.php b/locallib.php index 324c186..d9f0675 100644 --- a/locallib.php +++ b/locallib.php @@ -274,6 +274,34 @@ function customcert_add_page($data) { $DB->insert_record('customcert_pages', $page); } +/** + * Handles deleting an element from the customcert. + * + * @param int $elementid the customcert page + */ +function customcert_delete_element($elementid) { + global $DB; + + // Ensure element exists and delete it. + $element = $DB->get_record('customcert_elements', array('id' => $elementid), '*', MUST_EXIST); + + // Get an instance of the element class. + if ($e = customcert_get_element_instance($element)) { + $e->delete_element(); + } else { + // The plugin files are missing, so just remove the entry from the DB. + $DB->delete_records('customcert_elements', array('id' => $elementid)); + } + + // Now we want to decrease the sequence numbers of the elements + // that are greater than the element we deleted. + $sql = "UPDATE {customcert_elements} + SET sequence = sequence - 1 + WHERE pageid = :pageid + AND sequence > :sequence"; + $DB->execute($sql, array('pageid' => $element->pageid, 'sequence' => $element->sequence)); +} + /** * Handles deleting a page from the customcert. *