Made Offers a bit more robust and operation atomic

This commit is contained in:
Christian Wolf 2019-06-27 12:03:36 +02:00
parent af506435ac
commit 2da8da6b37
2 changed files with 36 additions and 15 deletions

View File

@ -1,5 +1,7 @@
<?php <?php
use Joomla\CMS\Factory;
// No direct access. // No direct access.
defined('_JEXEC') or die; defined('_JEXEC') or die;
@ -162,22 +164,35 @@ class CommonClubsModelClub extends AbstractCommonClubsModel
$offerAssocFactory = new CommonClubsModelFactoryOfferassoc(); $offerAssocFactory = new CommonClubsModelFactoryOfferassoc();
$offerFactory = new CommonClubsModelFactoryOffer(); $offerFactory = new CommonClubsModelFactoryOffer();
foreach($delIds as $id) $db = Factory::getDbo();
$db->transactionStart(true);
try
{ {
$delId = (int) $id; foreach($delIds as $id)
$delObjs = $offerAssocFactory->loadElements("clubid = {$this->getId()} AND offerid = $delId"); {
foreach($delObjs as $o) $delId = (int) $id;
$o->delete(); $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) $db->transactionCommit(true);
{
$newId = (int) $id;
$o = $offerAssocFactory->createNew();
$o->setOffer($offerFactory->loadById($newId));
$o->setClub($this);
$o->save();
}
} }
public function getUsers() public function getUsers()

View File

@ -349,8 +349,14 @@ class ClubsHelperControllerClub extends AbstractClubsHelperController
// TODO ACL needed // TODO ACL needed
$this->club->setOfferIds($ids); try
$this->club->save(); {
$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.');
}
} }
} }