Skip to content

Commit

Permalink
fix(#149): Improved error handling when saving an event with required…
Browse files Browse the repository at this point in the history
… fields in a multi-site environment
  • Loading branch information
seandelaney committed Aug 1, 2022
1 parent 1511a09 commit 70bafcd
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions packages/plugin/src/Services/EventsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -209,18 +209,24 @@ public function saveEvent(Event $event, bool $validateContent = true, bool $bypa

try {
$isSaved = \Craft::$app->elements->saveElement($event, $validateContent, $isNewEvent);
$isSaved = $this->_respectNonTranslatableFields($event, $isSaved);
if ($isSaved) {
$this->reindexSearchForAllSites($event);
if (! $isSaved) {
return false;
}

if (null !== $transaction) {
$transaction->commit();
}
$isSaved = $this->_respectNonTranslatableFields($event);
if (! $isSaved) {
return false;
}

$this->trigger(self::EVENT_AFTER_SAVE, new SaveElementEvent($event, $isNewEvent));
$this->reindexSearchForAllSites($event);

return true;
}
if (null !== $transaction) {
$transaction->commit();
}

$this->trigger(self::EVENT_AFTER_SAVE, new SaveElementEvent($event, $isNewEvent));

return true;
} catch (\Exception $e) {
if (null !== $transaction) {
$transaction->rollBack();
Expand Down Expand Up @@ -504,14 +510,14 @@ private function reindexSearchForAllSites(Event $event)
* If we have an event with multi-site enabled and a non-translatable fields, we need to respect the non-translatable field values
*
* @param Event $event
* @param bool $isSaved
* @return bool
* @throws \Throwable
* @throws \craft\errors\ElementNotFoundException
* @throws \yii\base\Exception
*/
private function _respectNonTranslatableFields(Event $event, bool $isSaved) {
if ($event::isLocalized() && \Craft::$app->getIsMultiSite()) {
private function _respectNonTranslatableFields(Event $event): bool
{
if ($event->id && $event::isLocalized() && \Craft::$app->getIsMultiSite()) {
$otherSiteEvents = [];

$hasNonTranslatableFields = false;
Expand Down Expand Up @@ -562,6 +568,6 @@ private function _respectNonTranslatableFields(Event $event, bool $isSaved) {
}
}

return $isSaved;
return true;
}
}

0 comments on commit 70bafcd

Please sign in to comment.