Remove using Idiorm from Newsletter::duplicate

[MAILPOET-2946]
This commit is contained in:
Jan Lysý
2020-10-21 20:49:14 +02:00
committed by Veljko V
parent 9955a2a250
commit c68728670e
4 changed files with 71 additions and 22 deletions

View File

@ -5,6 +5,7 @@ namespace MailPoet\Newsletter;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterOptionEntity;
use MailPoet\Entities\NewsletterOptionFieldEntity;
use MailPoet\Entities\NewsletterSegmentEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SegmentEntity;
@ -135,6 +136,56 @@ class NewsletterSaveController {
return $newsletter;
}
public function duplicate(NewsletterEntity $newsletter): NewsletterEntity {
$duplicate = clone $newsletter;
$duplicate->setSubject(sprintf(__('Copy of %s', 'mailpoet'), $newsletter->getSubject()));
// generate new unsubscribe token
$duplicate->setUnsubscribeToken($this->security->generateUnsubscribeTokenByEntity($duplicate));
// reset status
$duplicate->setStatus(NewsletterEntity::STATUS_DRAFT);
// reset hash
$duplicate->setHash(null);
// reset sent at date
$duplicate->setSentAt(null);
$this->newslettersRepository->persist($duplicate);
$this->newslettersRepository->flush();
// create relationships between duplicate and segments
foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) {
$segment = $newsletterSegment->getSegment();
if (!$segment) {
continue;
}
$duplicateSegment = new NewsletterSegmentEntity($duplicate, $segment);
$duplicate->getNewsletterSegments()->add($duplicateSegment);
$this->newsletterSegmentRepository->persist($duplicateSegment);
}
// duplicate options
$ignoredOptions = [
NewsletterOptionFieldEntity::NAME_IS_SCHEDULED,
NewsletterOptionFieldEntity::NAME_SCHEDULED_AT,
];
foreach ($newsletter->getOptions() as $newsletterOption) {
$optionField = $newsletterOption->getOptionField();
if (!$optionField) {
continue;
}
if (in_array($optionField->getName(), $ignoredOptions, true)) {
continue;
}
$duplicateOption = new NewsletterOptionEntity($duplicate, $optionField);
$duplicateOption->setValue($newsletterOption->getValue());
$duplicate->getOptions()->add($duplicateOption);
$this->newsletterOptionsRepository->persist($duplicateOption);
}
$this->newslettersRepository->flush();
return $duplicate;
}
private function getNewsletter(array $data): NewsletterEntity {
if (!isset($data['id'])) {
throw new UnexpectedValueException();