<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\PostEditorBlocks;
if (!defined('ABSPATH')) exit;
use MailPoet\API\REST\API as RestApi;
use MailPoet\Newsletter\Embed\NewsletterEmbedService;
use MailPoet\Newsletter\Embed\RestApi\Endpoints\NewsletterEmbedSelectorEndpoint;
use MailPoet\WP\Functions as WPFunctions;
class NewsletterBlock {
/** @var WPFunctions */
private $wp;
/** @var NewsletterEmbedService */
private $newsletterEmbedService;
/** @var RestApi */
private $api;
public function __construct(
WPFunctions $wp,
NewsletterEmbedService $newsletterEmbedService,
RestApi $api
) {
$this->wp = $wp;
$this->newsletterEmbedService = $newsletterEmbedService;
$this->api = $api;
}
public function init() {
if ($this->wp->isAdmin() || (defined('REST_REQUEST') && REST_REQUEST)) {
$this->wp->registerBlockType('mailpoet/newsletter-render', [
'attributes' => $this->getAttributes(),
'render_callback' => [$this, 'renderNewsletter'],
]);
}
$this->wp->addAction(RestApi::REST_API_INIT_ACTION, function(): void {
$this->api->registerGetRoute('newsletter-embeds', NewsletterEmbedSelectorEndpoint::class);
});
}
public function initAdmin() {
$this->wp->registerBlockType('mailpoet/newsletter', [
'style' => 'mailpoetblock-form-block-css',
'editor_script' => 'mailpoet/subscription-form-block',
'attributes' => $this->getAttributes(),
'supports' => [
'align' => ['wide', 'full'],
],
]);
}
public function initFrontend() {
$this->wp->registerBlockType('mailpoet/newsletter', [
'attributes' => $this->getAttributes(),
'supports' => [
'align' => ['wide', 'full'],
],
'render_callback' => [$this, 'renderNewsletter'],
]);
}
public function renderNewsletter(array $blockSettings = []): string {
return $this->newsletterEmbedService->render($blockSettings);
}
private function getAttributes(): array {
return [
'newsletterId' => [
'type' => 'number',
'default' => null,
],
'height' => [
'type' => 'number',
'default' => NewsletterEmbedService::DEFAULT_HEIGHT,
],
'width' => [
'type' => 'number',
'default' => NewsletterEmbedService::DEFAULT_WIDTH,
],
'showFallbackLink' => [
'type' => 'boolean',
'default' => true,
],
'fallbackLinkAlignment' => [
'type' => 'string',
'default' => 'center',
],
'iframeAlignment' => [
'type' => 'string',
'default' => 'center',
],
'showEmailBackground' => [
'type' => 'boolean',
'default' => true,
],
'align' => [
'type' => 'string',
],
];
}
}