diff --git a/packages/php/email-editor/src/Engine/class-email-api-controller.php b/packages/php/email-editor/src/Engine/class-email-api-controller.php index ee8938dca5..dcc447c4c9 100644 --- a/packages/php/email-editor/src/Engine/class-email-api-controller.php +++ b/packages/php/email-editor/src/Engine/class-email-api-controller.php @@ -8,6 +8,8 @@ declare(strict_types = 1); namespace MailPoet\EmailEditor\Engine; +use MailPoet\EmailEditor\Engine\PersonalizationTags\Personalization_Tag; +use MailPoet\EmailEditor\Engine\PersonalizationTags\Personalization_Tags_Registry; use MailPoet\EmailEditor\Validator\Builder; use WP_Post; use WP_REST_Request; @@ -17,6 +19,21 @@ use WP_REST_Response; * Class for email API controller. */ class Email_Api_Controller { + /** + * Personalization tags registry to get all personalization tags. + * + * @var Personalization_Tags_Registry + */ + private Personalization_Tags_Registry $personalization_tags_registry; + + /** + * Email_Api_Controller constructor with all dependencies. + * + * @param Personalization_Tags_Registry $personalization_tags_registry Personalization tags registry. + */ + public function __construct( Personalization_Tags_Registry $personalization_tags_registry ) { + $this->personalization_tags_registry = $personalization_tags_registry; + } /** * Returns email specific data. @@ -68,6 +85,34 @@ class Email_Api_Controller { } } + /** + * Returns all registered personalization tags. + * + * @return WP_REST_Response + */ + public function get_personalization_tags(): WP_REST_Response { + $tags = $this->personalization_tags_registry->get_all(); + return new WP_REST_Response( + array( + 'success' => true, + 'result' => array_values( + array_map( + function ( Personalization_Tag $tag ) { + return array( + 'name' => $tag->get_name(), + 'token' => $tag->get_token(), + 'category' => $tag->get_category(), + 'attributes' => $tag->get_attributes(), + ); + }, + $tags + ), + ), + ), + 200 + ); + } + /** * Returns the schema for email data. * diff --git a/packages/php/email-editor/src/Engine/class-email-editor.php b/packages/php/email-editor/src/Engine/class-email-editor.php index 707f345494..45f3c605f4 100644 --- a/packages/php/email-editor/src/Engine/class-email-editor.php +++ b/packages/php/email-editor/src/Engine/class-email-editor.php @@ -239,6 +239,17 @@ class Email_Editor { }, ) ); + register_rest_route( + 'mailpoet-email-editor/v1', + '/get_personalization_tags', + array( + 'methods' => 'GET', + 'callback' => array( $this->email_api_controller, 'get_personalization_tags' ), + 'permission_callback' => function () { + return current_user_can( 'edit_posts' ); + }, + ) + ); } /** diff --git a/packages/php/email-editor/tests/integration/_bootstrap.php b/packages/php/email-editor/tests/integration/_bootstrap.php index d9cdcc9ff1..afbafadaf2 100644 --- a/packages/php/email-editor/tests/integration/_bootstrap.php +++ b/packages/php/email-editor/tests/integration/_bootstrap.php @@ -153,12 +153,6 @@ abstract class MailPoetTest extends \Codeception\TestCase\Test { // phpcs:ignore return new Initializer(); } ); - $container->set( - Email_Api_Controller::class, - function () { - return new Email_Api_Controller(); - } - ); $container->set( BlockTypesController::class, function () { @@ -298,6 +292,14 @@ abstract class MailPoetTest extends \Codeception\TestCase\Test { // phpcs:ignore return new Personalization_Tags_Registry(); } ); + $container->set( + Email_Api_Controller::class, + function ( $container ) { + return new Email_Api_Controller( + $container->get( Personalization_Tags_Registry::class ), + ); + } + ); $container->set( Email_Editor::class, function ( $container ) {