From 2da8da6b37518397a76c2d6f875529008fa784cc Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Thu, 27 Jun 2019 12:03:36 +0200 Subject: [PATCH] Made Offers a bit more robust and operation atomic --- src/admin/common/models/club.php | 41 ++++++++++++++++++++--------- src/site/controllers/parts.json.php | 10 +++++-- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/admin/common/models/club.php b/src/admin/common/models/club.php index 1855e3c..67ff72b 100644 --- a/src/admin/common/models/club.php +++ b/src/admin/common/models/club.php @@ -1,5 +1,7 @@ transactionStart(true); + + try { - $delId = (int) $id; - $delObjs = $offerAssocFactory->loadElements("clubid = {$this->getId()} AND offerid = $delId"); - foreach($delObjs as $o) - $o->delete(); + foreach($delIds as $id) + { + $delId = (int) $id; + $delObjs = $offerAssocFactory->loadElements("clubid = {$this->getId()} AND offerid = $delId"); + foreach($delObjs as $o) + $o->delete(); + } + + foreach($newIds as $id) + { + $newId = (int) $id; + $o = $offerAssocFactory->createNew(); + $o->setOffer($offerFactory->loadById($newId)); + $o->setClub($this); + $o->save(); + } + } + catch (Exception $ex) + { + $db->transactionRollback(true); + throw $ex; } - foreach($newIds as $id) - { - $newId = (int) $id; - $o = $offerAssocFactory->createNew(); - $o->setOffer($offerFactory->loadById($newId)); - $o->setClub($this); - $o->save(); - } + $db->transactionCommit(true); } public function getUsers() diff --git a/src/site/controllers/parts.json.php b/src/site/controllers/parts.json.php index 1ef6993..91329f7 100644 --- a/src/site/controllers/parts.json.php +++ b/src/site/controllers/parts.json.php @@ -349,8 +349,14 @@ class ClubsHelperControllerClub extends AbstractClubsHelperController // TODO ACL needed - $this->club->setOfferIds($ids); - $this->club->save(); + try + { + $this->club->setOfferIds($ids); + } + catch(ElementNotFoundException $ex) + { + throw new InvalidUserDataException('Es gab ein Problem mit der Eingabe. Bitte Seite neu laden und Daten erneut eintragen.'); + } } }