Use Populator to add group and event to available options

[MAILPOET-4934]
This commit is contained in:
David Remer
2023-04-25 14:33:20 +03:00
committed by Aschepikov
parent 453506700c
commit 06a704da75
3 changed files with 49 additions and 29 deletions

View File

@ -50,6 +50,10 @@ export function EditNewsletter(): JSX.Element {
const createEmail = useCallback(async () => {
setRedirectToTemplateSelection(true);
const options = {
automationId,
automationStepId,
};
const response = await MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'newsletters',
@ -57,10 +61,7 @@ export function EditNewsletter(): JSX.Element {
data: {
type: 'automation',
subject: '',
options: {
automationId,
automationStepId,
},
options,
},
});

View File

@ -193,46 +193,49 @@ class SendEmailAction implements Action {
$email->setReplyToName($args['reply_to_name'] ?? '');
$email->setReplyToAddress($args['reply_to_address'] ?? '');
$email->setGaCampaign($args['ga_campaign'] ?? '');
if ($this->automationHasWooCommerceTrigger($automation)) {
$this->storeNewsletterOption($email, NewsletterOptionFieldEntity::NAME_GROUP, 'woocommerce');
}
if ($this->automationHasAbandonedCartTrigger($automation)) {
$this->storeNewsletterOption($email, NewsletterOptionFieldEntity::NAME_EVENT, 'woocommerce_abandoned_shopping_cart');
}
$this->storeNewsletterOption(
$email,
NewsletterOptionFieldEntity::NAME_GROUP,
$this->automationHasWooCommerceTrigger($automation) ? 'woocommerce' : null
);
$this->storeNewsletterOption(
$email,
NewsletterOptionFieldEntity::NAME_EVENT,
$this->automationHasAbandonedCartTrigger($automation) ? 'woocommerce_abandoned_shopping_cart' : null
);
$this->newslettersRepository->persist($email);
$this->newslettersRepository->flush();
}
private function storeNewsletterOption(NewsletterEntity $newsletter, string $optionName, string $optionValue): void {
private function storeNewsletterOption(NewsletterEntity $newsletter, string $optionName, string $optionValue = null): void {
$options = $newsletter->getOptions()->toArray();
foreach ($options as $option) {
foreach ($options as $key => $option) {
if ($option->getName() === $optionName) {
$option->setValue($optionValue);
if ($optionValue) {
$option->setValue($optionValue);
return;
}
$newsletter->getOptions()->remove($key);
$this->newsletterOptionsRepository->remove($option);
return;
}
}
$optionField = $this->newsletterOptionFieldsRepository->findOneBy([
if (!$optionValue) {
return;
}
$field = $this->newsletterOptionFieldsRepository->findOneBy([
'name' => $optionName,
'newsletterType' => $newsletter->getType(),
]);
if (!$optionField) {
$optionField = new NewsletterOptionFieldEntity();
$optionField->setName($optionName);
$optionField->setNewsletterType($newsletter->getType());
$this->newsletterOptionFieldsRepository->persist($optionField);
}
$option = $this->newsletterOptionsRepository->findOneBy([
'newsletter' => $newsletter,
'optionField' => $optionField,
]);
if (!$option instanceof NewsletterOptionEntity) {
$option = new NewsletterOptionEntity($newsletter, $optionField);
$newsletter->getOptions()->add($option);
$this->newsletterOptionsRepository->persist($option);
if (!$field) {
return;
}
$option = new NewsletterOptionEntity($newsletter, $field);
$option->setValue($optionValue);
$this->newsletterOptionsRepository->persist($option);
$newsletter->getOptions()->add($option);
}

View File

@ -430,10 +430,26 @@ class Populator {
'name' => 'group',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATIC,
],
[
'name' => 'group',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATION,
],
[
'name' => 'group',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATION_TRANSACTIONAL,
],
[
'name' => 'event',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATIC,
],
[
'name' => 'event',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATION,
],
[
'name' => 'event',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATION_TRANSACTIONAL,
],
[
'name' => 'sendTo',
'newsletter_type' => NewsletterEntity::TYPE_AUTOMATIC,