From b1a92bcd03109d271dd465c9e526d0785127e00f Mon Sep 17 00:00:00 2001 From: coderkun Date: Thu, 10 Jul 2014 12:57:55 +0200 Subject: [PATCH] adjust position when deleting Achievements --- controllers/AchievementsController.inc | 2 +- models/AchievementsModel.inc | 29 +++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/controllers/AchievementsController.inc b/controllers/AchievementsController.inc index 0002a2fa..94e7467a 100644 --- a/controllers/AchievementsController.inc +++ b/controllers/AchievementsController.inc @@ -940,7 +940,7 @@ if(!is_null($this->request->getPostParam('delete'))) { // Delete seminary - $this->Achievements->deleteAchievement($achievement['id']); + $this->Achievements->deleteAchievement($achievement); } // Redirect to entry diff --git a/models/AchievementsModel.inc b/models/AchievementsModel.inc index 9b0b7d97..9201fa95 100644 --- a/models/AchievementsModel.inc +++ b/models/AchievementsModel.inc @@ -1136,11 +1136,34 @@ /** * Delete an Achievement. * - * @param int $achievementId ID of Achievement to delete + * @param int $achievement Achievement to delete */ - public function deleteAchievement($achievementId) + public function deleteAchievement($achievement) { - $this->db->query('DELETE FROM achievements WHERE id = ?', 'i', $achievementId); + $this->db->setAutocommit(false); + try { + // Delete Achievement + $this->db->query('DELETE FROM achievements WHERE id = ?', 'i', $achievementId); + + // Adjust positions + $this->db->query( + 'UPDATE achievements '. + 'SET pos = pos - 1 '. + 'WHERE seminary_id = ? AND pos > ?', + 'ii', + $achievement['seminary_id'], + $achievement['pos'] + ); + + $this->db->commit(); + } + catch(\Exception $e) { + $this->db->rollback(); + $this->db->setAutocommit(true); + throw $e; + } + + $this->db->setAutocommit(true); } }