Add assets url factory method to form template

[MAILPOET-3076]
This commit is contained in:
Rostislav Wolny
2020-09-03 10:50:12 +02:00
committed by Veljko V
parent 0f0472975d
commit 01057c7ff1
3 changed files with 29 additions and 2 deletions

View File

@ -3,6 +3,7 @@
namespace MailPoet\Form\Templates;
use MailPoet\Entities\FormEntity;
use MailPoet\Util\CdnAssetUrl;
abstract class FormTemplate {
const DEFAULT_STYLES = <<<EOL
@ -79,6 +80,16 @@ abstract class FormTemplate {
}
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 getBody(): array;
@ -103,4 +114,8 @@ EOL;
$formEntity->setStyles($this->getStyles());
return $formEntity;
}
protected function getAssetUrl(string $filename): string {
return $this->cdnAssetUrl->generateCdnUrl("form-templates/{$this->assetsDirectory}/$filename");
}
}

View File

@ -25,11 +25,15 @@ use MailPoet\Form\Templates\Templates\Template6Popup;
use MailPoet\Form\Templates\Templates\Template6SlideIn;
use MailPoet\Form\Templates\Templates\Template6Widget;
use MailPoet\UnexpectedValueException;
use MailPoet\Util\CdnAssetUrl;
class TemplateRepository {
const INITIAL_FORM_TEMPLATE = InitialForm::ID;
const DEFAULT_FORM_TEMPLATE = DefaultForm::ID;
/** @var CdnAssetUrl */
private $cdnAssetUrl;
private $templates = [
InitialForm::ID => InitialForm::class,
DefaultForm::ID => DefaultForm::class,
@ -55,13 +59,17 @@ class TemplateRepository {
Template10Widget::ID => Template10Widget::class,
];
public function __construct(CdnAssetUrl $cdnAssetUrl) {
$this->cdnAssetUrl = $cdnAssetUrl;
}
public function getFormTemplate(string $templateId): FormTemplate {
if (!isset($this->templates[$templateId])) {
throw UnexpectedValueException::create()
->withErrors(["Template with id $templateId doesn't exist."]);
}
/** @var FormTemplate $template */
$template = new $this->templates[$templateId]();
$template = new $this->templates[$templateId]($this->cdnAssetUrl);
return $template;
}