OwlCyberSecurity - MANAGER
Edit File: class-user-theme.php
<?php /** * This file is part of the MailPoet Email Editor package. * * @package MailPoet\EmailEditor */ declare(strict_types = 1); namespace MailPoet\EmailEditor\Engine; use WP_Post; use WP_Theme_JSON; /** * This class is responsible for managing and accessing theme data aka email styles created by users. */ class User_Theme { private const USER_THEME_POST_NAME = 'wp-global-styles-mailpoet-email'; private const INITIAL_THEME_DATA = array( 'version' => 3, 'isGlobalStylesUserThemeJSON' => true, ); /** * Core theme loaded from the WordPress core. * * @var WP_Post | null */ private ?WP_Post $user_theme_post = null; /** * Getter for user theme. * * @throws \Exception If the user theme post cannot be created. * @return WP_Theme_JSON */ public function get_theme(): WP_Theme_JSON { $post = $this->get_user_theme_post(); $theme_data = json_decode( $post->post_content, true ); if ( ! is_array( $theme_data ) ) { $theme_data = self::INITIAL_THEME_DATA; } return new WP_Theme_JSON( $theme_data, 'custom' ); } /** * Getter for user theme post. * If the post does not exist, it will be created. * * @throws \Exception If the user theme post cannot be created. * @return WP_Post */ public function get_user_theme_post(): WP_Post { $this->ensure_theme_post(); if ( ! $this->user_theme_post instanceof WP_Post ) { throw new \Exception( 'Error creating user theme post' ); } return $this->user_theme_post; } /** * Ensures that the user theme post exists and is loaded. * * @throws \Exception If the user theme post cannot be created. */ private function ensure_theme_post(): void { if ( $this->user_theme_post ) { return; } $this->user_theme_post = get_page_by_path( self::USER_THEME_POST_NAME, OBJECT, 'wp_global_styles' ); if ( $this->user_theme_post instanceof WP_Post ) { return; } $post_data = array( 'post_title' => __( 'Custom Email Styles', 'woocommerce' ), 'post_name' => self::USER_THEME_POST_NAME, 'post_content' => (string) wp_json_encode( self::INITIAL_THEME_DATA, JSON_FORCE_OBJECT ), 'post_status' => 'publish', 'post_type' => 'wp_global_styles', ); /** * The doc is needed since PHPStan thinks that wp_insert_post can't return WP_Error. * * @var int|\WP_Error $post_id */ $post_id = wp_insert_post( $post_data ); if ( is_wp_error( $post_id ) ) { throw new \Exception( 'Error creating user theme post: ' . esc_html( $post_id->get_error_message() ) ); } $this->user_theme_post = get_post( $post_id ); } }