Add assets url factory method to form template
[MAILPOET-3076]
This commit is contained in:
committed by
Veljko V
parent
0f0472975d
commit
01057c7ff1
@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\Form\Templates;
|
namespace MailPoet\Form\Templates;
|
||||||
|
|
||||||
use MailPoet\Entities\FormEntity;
|
use MailPoet\Entities\FormEntity;
|
||||||
|
use MailPoet\Util\CdnAssetUrl;
|
||||||
|
|
||||||
abstract class FormTemplate {
|
abstract class FormTemplate {
|
||||||
const DEFAULT_STYLES = <<<EOL
|
const DEFAULT_STYLES = <<<EOL
|
||||||
@ -79,6 +80,16 @@ abstract class FormTemplate {
|
|||||||
}
|
}
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
|
/** @var CdnAssetUrl */
|
||||||
|
protected $cdnAssetUrl;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
protected $assetsDirectory = '';
|
||||||
|
|
||||||
|
public function __construct(CdnAssetUrl $cdnAssetUrl) {
|
||||||
|
$this->cdnAssetUrl = $cdnAssetUrl;
|
||||||
|
}
|
||||||
|
|
||||||
abstract public function getName(): string;
|
abstract public function getName(): string;
|
||||||
|
|
||||||
abstract public function getBody(): array;
|
abstract public function getBody(): array;
|
||||||
@ -103,4 +114,8 @@ EOL;
|
|||||||
$formEntity->setStyles($this->getStyles());
|
$formEntity->setStyles($this->getStyles());
|
||||||
return $formEntity;
|
return $formEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getAssetUrl(string $filename): string {
|
||||||
|
return $this->cdnAssetUrl->generateCdnUrl("form-templates/{$this->assetsDirectory}/$filename");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,11 +25,15 @@ use MailPoet\Form\Templates\Templates\Template6Popup;
|
|||||||
use MailPoet\Form\Templates\Templates\Template6SlideIn;
|
use MailPoet\Form\Templates\Templates\Template6SlideIn;
|
||||||
use MailPoet\Form\Templates\Templates\Template6Widget;
|
use MailPoet\Form\Templates\Templates\Template6Widget;
|
||||||
use MailPoet\UnexpectedValueException;
|
use MailPoet\UnexpectedValueException;
|
||||||
|
use MailPoet\Util\CdnAssetUrl;
|
||||||
|
|
||||||
class TemplateRepository {
|
class TemplateRepository {
|
||||||
const INITIAL_FORM_TEMPLATE = InitialForm::ID;
|
const INITIAL_FORM_TEMPLATE = InitialForm::ID;
|
||||||
const DEFAULT_FORM_TEMPLATE = DefaultForm::ID;
|
const DEFAULT_FORM_TEMPLATE = DefaultForm::ID;
|
||||||
|
|
||||||
|
/** @var CdnAssetUrl */
|
||||||
|
private $cdnAssetUrl;
|
||||||
|
|
||||||
private $templates = [
|
private $templates = [
|
||||||
InitialForm::ID => InitialForm::class,
|
InitialForm::ID => InitialForm::class,
|
||||||
DefaultForm::ID => DefaultForm::class,
|
DefaultForm::ID => DefaultForm::class,
|
||||||
@ -55,13 +59,17 @@ class TemplateRepository {
|
|||||||
Template10Widget::ID => Template10Widget::class,
|
Template10Widget::ID => Template10Widget::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function __construct(CdnAssetUrl $cdnAssetUrl) {
|
||||||
|
$this->cdnAssetUrl = $cdnAssetUrl;
|
||||||
|
}
|
||||||
|
|
||||||
public function getFormTemplate(string $templateId): FormTemplate {
|
public function getFormTemplate(string $templateId): FormTemplate {
|
||||||
if (!isset($this->templates[$templateId])) {
|
if (!isset($this->templates[$templateId])) {
|
||||||
throw UnexpectedValueException::create()
|
throw UnexpectedValueException::create()
|
||||||
->withErrors(["Template with id $templateId doesn't exist."]);
|
->withErrors(["Template with id $templateId doesn't exist."]);
|
||||||
}
|
}
|
||||||
/** @var FormTemplate $template */
|
/** @var FormTemplate $template */
|
||||||
$template = new $this->templates[$templateId]();
|
$template = new $this->templates[$templateId]($this->cdnAssetUrl);
|
||||||
return $template;
|
return $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Templates;
|
|||||||
|
|
||||||
use MailPoet\Form\Templates\FormTemplate;
|
use MailPoet\Form\Templates\FormTemplate;
|
||||||
use MailPoet\Form\Templates\TemplateRepository;
|
use MailPoet\Form\Templates\TemplateRepository;
|
||||||
|
use MailPoet\Util\CdnAssetUrl;
|
||||||
|
|
||||||
class TemplatesRepositoryTest extends \MailPoetUnitTest {
|
class TemplatesRepositoryTest extends \MailPoetUnitTest {
|
||||||
/** @var TemplateRepository */
|
/** @var TemplateRepository */
|
||||||
@ -11,7 +12,10 @@ class TemplatesRepositoryTest extends \MailPoetUnitTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->repository = new TemplateRepository();
|
$cdnAssetsMock = $this->createMock(CdnAssetUrl::class);
|
||||||
|
$cdnAssetsMock->method('generateCdnUrl')
|
||||||
|
->willReturn('http://example.com/image.png');
|
||||||
|
$this->repository = new TemplateRepository($cdnAssetsMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanBuildFormTemplate() {
|
public function testItCanBuildFormTemplate() {
|
||||||
|
Reference in New Issue
Block a user