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 0ef309870b..ddbed8e2ef 100644 --- a/packages/php/email-editor/src/Engine/class-email-editor.php +++ b/packages/php/email-editor/src/Engine/class-email-editor.php @@ -1,5 +1,11 @@ -emailApiController = $emailApiController; - $this->templates = $templates; - $this->templatePreview = $templatePreview; - $this->patterns = $patterns; - $this->settingsController = $settingsController; + $this->email_api_controller = $email_api_controller; + $this->templates = $templates; + $this->template_preview = $template_preview; + $this->patterns = $patterns; + $this->settings_controller = $settings_controller; } + /** + * Initialize the email editor. + * + * @return void + */ public function initialize(): void { do_action( 'mailpoet_email_editor_initialized' ); - add_filter( 'mailpoet_email_editor_rendering_theme_styles', array( $this, 'extendEmailThemeStyles' ), 10, 2 ); - $this->registerBlockTemplates(); - $this->registerBlockPatterns(); - $this->registerEmailPostTypes(); - $this->registerEmailPostSendStatus(); - $isEditorPage = apply_filters( 'mailpoet_is_email_editor_page', false ); - if ( $isEditorPage ) { - $this->extendEmailPostApi(); - $this->settingsController->init(); + add_filter( 'mailpoet_email_editor_rendering_theme_styles', array( $this, 'extend_email_theme_styles' ), 10, 2 ); + $this->register_block_templates(); + $this->register_block_patterns(); + $this->register_wmail_post_types(); + $this->register_email_post_send_status(); + $is_editor_page = apply_filters( 'mailpoet_is_email_editor_page', false ); + if ( $is_editor_page ) { + $this->extend_email_post_api(); + $this->settings_controller->init(); } } - private function registerBlockTemplates(): void { - // Since we cannot currently disable blocks in the editor for specific templates, disable templates when viewing site editor. @see https://github.com/WordPress/gutenberg/issues/41062 - if ( strstr( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ), 'site-editor.php' ) === false ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + /** + * Register block templates. + * + * @return void + */ + private function register_block_templates(): void { + // Since we cannot currently disable blocks in the editor for specific templates, disable templates when viewing site editor. @see https://github.com/WordPress/gutenberg/issues/41062. + if ( strstr( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ) ), 'site-editor.php' ) === false ) { $this->templates->initialize(); - $this->templatePreview->initialize(); + $this->template_preview->initialize(); } } - private function registerBlockPatterns(): void { + /** + * Register block patterns. + * + * @return void + */ + private function register_block_patterns(): void { $this->patterns->initialize(); } /** * Register all custom post types that should be edited via the email editor * The post types are added via mailpoet_email_editor_post_types filter. + * + * @return void */ - private function registerEmailPostTypes(): void { - foreach ( $this->getPostTypes() as $postType ) { + private function register_wmail_post_types(): void { + foreach ( $this->get_post_types() as $post_type ) { register_post_type( - $postType['name'], - array_merge( $this->getDefaultEmailPostArgs(), $postType['args'] ) + $post_type['name'], + array_merge( $this->get_default_email_post_args(), $post_type['args'] ) ); } } /** + * Returns the email post types. + * + * @return array * @phpstan-return EmailPostType[] */ - private function getPostTypes(): array { - $postTypes = array(); - return apply_filters( 'mailpoet_email_editor_post_types', $postTypes ); + private function get_post_types(): array { + $post_types = array(); + return apply_filters( 'mailpoet_email_editor_post_types', $post_types ); } - private function getDefaultEmailPostArgs(): array { + /** + * Returns the default arguments for email post types. + * + * @return array + */ + private function get_default_email_post_args(): array { return array( 'public' => false, 'hierarchical' => false, 'show_ui' => true, 'show_in_menu' => false, 'show_in_nav_menus' => false, - 'supports' => array( 'editor', 'title', 'custom-fields' ), // 'custom-fields' is required for loading meta fields via API + 'supports' => array( 'editor', 'title', 'custom-fields' ), // 'custom-fields' is required for loading meta fields via API. 'has_archive' => true, - 'show_in_rest' => true, // Important to enable Gutenberg editor + 'show_in_rest' => true, // Important to enable Gutenberg editor. ); } - private function registerEmailPostSendStatus(): void { + /** + * Register the 'sent' post status for emails. + * + * @return void + */ + private function register_email_post_send_status(): void { register_post_status( 'sent', array( 'public' => false, 'exclude_from_search' => true, - 'internal' => true, // for now, we hide it, if we use the status in the listings we may flip this and following values + 'internal' => true, // for now, we hide it, if we use the status in the listings we may flip this and following values. 'show_in_admin_all_list' => false, 'show_in_admin_status_list' => false, ) ); } - public function extendEmailPostApi() { - $emailPostTypes = array_column( $this->getPostTypes(), 'name' ); + /** + * Extends the email post types with email specific data. + * + * @return void + */ + public function extend_email_post_api() { + $email_post_types = array_column( $this->get_post_types(), 'name' ); register_rest_field( - $emailPostTypes, + $email_post_types, 'email_data', array( - 'get_callback' => array( $this->emailApiController, 'get_email_data'), - 'update_callback' => array( $this->emailApiController, 'save_email_data'), - 'schema' => $this->emailApiController->get_email_data_schema(), + 'get_callback' => array( $this->email_api_controller, 'get_email_data' ), + 'update_callback' => array( $this->email_api_controller, 'save_email_data' ), + 'schema' => $this->email_api_controller->get_email_data_schema(), ) ); } - public function getEmailThemeDataSchema(): array { + /** + * Returns the schema for email theme data. + * + * @return array + */ + public function get_email_theme_data_schema(): array { return ( new Email_Styles_Schema() )->get_schema(); } - public function extendEmailThemeStyles( WP_Theme_JSON $theme, WP_Post $post ): WP_Theme_JSON { - $emailTheme = get_post_meta( $post->ID, self::MAILPOET_EMAIL_META_THEME_TYPE, true ); - if ( $emailTheme && is_array( $emailTheme ) ) { - $theme->merge( new WP_Theme_JSON( $emailTheme ) ); + /** + * Extends the email theme styles with the email specific styles. + * + * @param WP_Theme_JSON $theme Email theme styles. + * @param WP_Post $post Email post object. + * @return WP_Theme_JSON + */ + public function extend_email_theme_styles( WP_Theme_JSON $theme, WP_Post $post ): WP_Theme_JSON { + $email_theme = get_post_meta( $post->ID, self::MAILPOET_EMAIL_META_THEME_TYPE, true ); + if ( $email_theme && is_array( $email_theme ) ) { + $theme->merge( new WP_Theme_JSON( $email_theme ) ); } return $theme; }