Create tags when do not exist
[MAILPOET-4557]
This commit is contained in:
@ -20,6 +20,7 @@ use MailPoet\Form\PreviewPage;
|
|||||||
use MailPoet\Form\Templates\TemplateRepository;
|
use MailPoet\Form\Templates\TemplateRepository;
|
||||||
use MailPoet\Listing;
|
use MailPoet\Listing;
|
||||||
use MailPoet\Settings\UserFlagsController;
|
use MailPoet\Settings\UserFlagsController;
|
||||||
|
use MailPoet\Tags\TagRepository;
|
||||||
use MailPoet\UnexpectedValueException;
|
use MailPoet\UnexpectedValueException;
|
||||||
use MailPoet\WP\Emoji;
|
use MailPoet\WP\Emoji;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@ -56,6 +57,9 @@ class Forms extends APIEndpoint {
|
|||||||
/** @var ApiDataSanitizer */
|
/** @var ApiDataSanitizer */
|
||||||
private $dataSanitizer;
|
private $dataSanitizer;
|
||||||
|
|
||||||
|
/** @var TagRepository */
|
||||||
|
private $tagRepository;
|
||||||
|
|
||||||
/** @var FormSaveController */
|
/** @var FormSaveController */
|
||||||
private $formSaveController;
|
private $formSaveController;
|
||||||
|
|
||||||
@ -69,6 +73,7 @@ class Forms extends APIEndpoint {
|
|||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
Emoji $emoji,
|
Emoji $emoji,
|
||||||
ApiDataSanitizer $dataSanitizer,
|
ApiDataSanitizer $dataSanitizer,
|
||||||
|
TagRepository $tagRepository,
|
||||||
FormSaveController $formSaveController
|
FormSaveController $formSaveController
|
||||||
) {
|
) {
|
||||||
$this->listingHandler = $listingHandler;
|
$this->listingHandler = $listingHandler;
|
||||||
@ -80,6 +85,7 @@ class Forms extends APIEndpoint {
|
|||||||
$this->formsResponseBuilder = $formsResponseBuilder;
|
$this->formsResponseBuilder = $formsResponseBuilder;
|
||||||
$this->emoji = $emoji;
|
$this->emoji = $emoji;
|
||||||
$this->dataSanitizer = $dataSanitizer;
|
$this->dataSanitizer = $dataSanitizer;
|
||||||
|
$this->tagRepository = $tagRepository;
|
||||||
$this->formSaveController = $formSaveController;
|
$this->formSaveController = $formSaveController;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,6 +207,11 @@ class Forms extends APIEndpoint {
|
|||||||
$settings['segments_selected_by'] = 'admin';
|
$settings['segments_selected_by'] = 'admin';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check tags and create them if they don't exist
|
||||||
|
if (isset($settings['tags'])) {
|
||||||
|
$this->createTagsIfDoNotExist($settings['tags']);
|
||||||
|
}
|
||||||
|
|
||||||
// Check Custom HTML block permissions
|
// Check Custom HTML block permissions
|
||||||
$customHtmlBlocks = $formEntity->getBlocksByTypes([FormEntity::HTML_BLOCK_TYPE]);
|
$customHtmlBlocks = $formEntity->getBlocksByTypes([FormEntity::HTML_BLOCK_TYPE]);
|
||||||
if (count($customHtmlBlocks) && !$this->wp->currentUserCan('administrator')) {
|
if (count($customHtmlBlocks) && !$this->wp->currentUserCan('administrator')) {
|
||||||
@ -338,4 +349,10 @@ class Forms extends APIEndpoint {
|
|||||||
$form = $formTemplate->toFormEntity();
|
$form = $formTemplate->toFormEntity();
|
||||||
return $form->toArray();
|
return $form->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createTagsIfDoNotExist(array $tagNames): void {
|
||||||
|
foreach ($tagNames as $tagName) {
|
||||||
|
$this->tagRepository->createOrUpdate(['name' => $tagName]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,12 @@ use MailPoet\API\JSON\v1\Forms;
|
|||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Entities\FormEntity;
|
use MailPoet\Entities\FormEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
|
use MailPoet\Entities\TagEntity;
|
||||||
use MailPoet\Form\FormsRepository;
|
use MailPoet\Form\FormsRepository;
|
||||||
use MailPoet\Form\PreviewPage;
|
use MailPoet\Form\PreviewPage;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
|
use MailPoet\Tags\TagRepository;
|
||||||
|
use MailPoet\Test\DataFactories\Tag;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class FormsTest extends \MailPoetTest {
|
class FormsTest extends \MailPoetTest {
|
||||||
@ -26,10 +29,14 @@ class FormsTest extends \MailPoetTest {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var TagRepository */
|
||||||
|
private $tagRepository;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->endpoint = ContainerWrapper::getInstance()->get(Forms::class);
|
$this->endpoint = ContainerWrapper::getInstance()->get(Forms::class);
|
||||||
$this->formsRepository = ContainerWrapper::getInstance()->get(FormsRepository::class);
|
$this->formsRepository = ContainerWrapper::getInstance()->get(FormsRepository::class);
|
||||||
|
$this->tagRepository = ContainerWrapper::getInstance()->get(TagRepository::class);
|
||||||
$this->wp = WPFunctions::get();
|
$this->wp = WPFunctions::get();
|
||||||
$this->form1 = $this->createForm('Form 1');
|
$this->form1 = $this->createForm('Form 1');
|
||||||
$this->form2 = $this->createForm('Form 2');
|
$this->form2 = $this->createForm('Form 2');
|
||||||
@ -179,6 +186,28 @@ class FormsTest extends \MailPoetTest {
|
|||||||
expect($response->data['settings']['segments'])->equals([2, 4]);
|
expect($response->data['settings']['segments'])->equals([2, 4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItCreatesTagsDuringSavingFormEditor(): void {
|
||||||
|
$tag = (new Tag())
|
||||||
|
->withName('Tag 1')
|
||||||
|
->create();
|
||||||
|
$tagName = 'Tag 2';
|
||||||
|
$response = $this->endpoint->saveEditor([
|
||||||
|
'settings' => [
|
||||||
|
'tags' => [
|
||||||
|
$tag->getName(),
|
||||||
|
$tagName,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
|
$tag1 = $this->tagRepository->findOneBy(['name' => $tag->getName()]);
|
||||||
|
$this->assertEquals($tag1, $tag);
|
||||||
|
$tag2 = $this->tagRepository->findOneBy(['name' => $tagName]);
|
||||||
|
$this->assertInstanceOf(TagEntity::class, $tag2);
|
||||||
|
$this->assertEquals($tag2->getName(), $tagName);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItCanRestoreAForm() {
|
public function testItCanRestoreAForm() {
|
||||||
$this->form1->setDeletedAt(new \DateTime());
|
$this->form1->setDeletedAt(new \DateTime());
|
||||||
$this->formsRepository->flush();
|
$this->formsRepository->flush();
|
||||||
|
Reference in New Issue
Block a user