diff --git a/lib/Subscribers/SubscriberCustomFieldRepository.php b/lib/Subscribers/SubscriberCustomFieldRepository.php index 8a98241cd1..ade50cbb3c 100644 --- a/lib/Subscribers/SubscriberCustomFieldRepository.php +++ b/lib/Subscribers/SubscriberCustomFieldRepository.php @@ -3,7 +3,9 @@ namespace MailPoet\Subscribers; use MailPoet\Doctrine\Repository; +use MailPoet\Entities\CustomFieldEntity; use MailPoet\Entities\SubscriberCustomFieldEntity; +use MailPoet\Entities\SubscriberEntity; /** * @extends Repository @@ -12,4 +14,19 @@ class SubscriberCustomFieldRepository extends Repository { protected function getEntityClassName() { return SubscriberCustomFieldEntity::class; } + + /** + * @param string|array|null $value + */ + public function createOrUpdate(SubscriberEntity $subscriber, CustomFieldEntity $customField, $value): SubscriberCustomFieldEntity { + $subscriberCustomField = $this->findOneBy(['subscriber' => $subscriber, 'customField' => $customField]); + if ($subscriberCustomField instanceof SubscriberCustomFieldEntity) { + $subscriberCustomField->setValue($value); + } else { + $subscriberCustomField = new SubscriberCustomFieldEntity($subscriber, $customField, $value); + $this->entityManager->persist($subscriberCustomField); + } + $this->entityManager->flush(); + return $subscriberCustomField; + } }