PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / woocommerce / email-editor / src / Engine / class-assets-manager.php
mailpoet / vendor / woocommerce / email-editor / src / Engine Last commit date
Logger 11 months ago Patterns 11 months ago PersonalizationTags 2 days ago Renderer 2 days ago Templates 4 months ago class-assets-manager.php 5 months ago class-dependency-check.php 11 months ago class-email-api-controller.php 6 months ago class-email-editor.php 2 days ago class-email-styles-schema.php 11 months ago class-personalizer.php 2 days ago class-send-preview-email.php 5 months ago class-settings-controller.php 3 months ago class-site-style-sync-controller.php 4 months ago class-theme-controller.php 3 months ago class-user-theme.php 11 months ago content-editor.css 2 weeks ago content-shared.css 11 months ago index.php 11 months ago theme.json 3 months ago
class-assets-manager.php
148 lines
1 <?php
2 declare(strict_types=1);
3 namespace Automattic\WooCommerce\EmailEditor\Engine;
4 if (!defined('ABSPATH')) exit;
5 use Automattic\WooCommerce\EmailEditor\Engine\Logger\Email_Editor_Logger;
6 class Assets_Manager {
7 private Settings_Controller $settings_controller;
8 private Theme_Controller $theme_controller;
9 private User_Theme $user_theme;
10 private string $assets_path = '';
11 private string $assets_url = '';
12 private Email_Editor_Logger $logger;
13 public function __construct(
14 Settings_Controller $settings_controller,
15 Theme_Controller $theme_controller,
16 User_Theme $user_theme,
17 Email_Editor_Logger $logger
18 ) {
19 $this->settings_controller = $settings_controller;
20 $this->theme_controller = $theme_controller;
21 $this->user_theme = $user_theme;
22 $this->logger = $logger;
23 }
24 public function set_assets_path( string $assets_path ): void {
25 $this->assets_path = $assets_path;
26 }
27 public function set_assets_url( string $assets_url ): void {
28 $this->assets_url = $assets_url;
29 }
30 public function initialize(): void {
31 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
32 }
33 public function enqueue_admin_styles(): void {
34 // Calling action that loads registered blockTypes.
35 do_action( 'enqueue_block_editor_assets' );
36 // Load CSS from Post Editor.
37 wp_enqueue_style( 'wp-edit-post' );
38 // Load CSS for the format library - used for example in popover.
39 wp_enqueue_style( 'wp-format-library' );
40 // Enqueue CSS containing --wp--preset variables.
41 wp_enqueue_global_styles_css_custom_properties();
42 // Enqueue media library scripts.
43 wp_enqueue_media();
44 }
45 public function render_email_editor_html( string $element_id = 'woocommerce-email-editor' ): void {
46 // @phpstan-ignore-next-line -- PHPStan tried to check if the file exists.
47 require_once ABSPATH . 'wp-admin/admin-header.php';
48 echo '<div id="' . esc_attr( $element_id ) . '" class="block-editor block-editor__container hide-if-no-js"></div>';
49 }
50 public function load_editor_assets( $edited_item, string $script_name ): void {
51 $post_type = $edited_item instanceof \WP_Post ? $edited_item->post_type : 'wp_template';
52 $post_id = $edited_item instanceof \WP_Post ? $edited_item->ID : $edited_item->id;
53 $email_editor_assets_path = rtrim( $this->assets_path, '/' ) . '/';
54 $email_editor_assets_url = rtrim( $this->assets_url, '/' ) . '/';
55 $assets_file = $email_editor_assets_path . 'style.asset.php';
56 if ( ! file_exists( $assets_file ) ) {
57 $this->logger->error( 'Email editor assets file does not exist.', array( 'path' => $assets_file ) );
58 } else {
59 $assets_file = require $assets_file;
60 wp_enqueue_style(
61 'wc-admin-email-editor-integration',
62 $email_editor_assets_url . 'style.css',
63 array(),
64 $assets_file['version']
65 );
66 }
67 // The get_block_categories() function expects a WP_Post or WP_Block_Editor_Context object.
68 // Therefore, we need to create an instance of WP_Block_Editor_Context when $edited_item is an instance of WP_Block_Template.
69 if ( $edited_item instanceof \WP_Block_Template ) {
70 $context = new \WP_Block_Editor_Context(
71 array(
72 'post' => $edited_item,
73 )
74 );
75 } else {
76 $context = $edited_item;
77 }
78 // The email editor needs to load block categories to avoid warning and missing category names.
79 // See: https://github.com/WordPress/WordPress/blob/753817d462955eb4e40a89034b7b7c375a1e43f3/wp-admin/edit-form-blocks.php#L116-L120.
80 wp_add_inline_script(
81 'wp-blocks',
82 sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $context ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ),
83 'after'
84 );
85 // Preload server-registered block schemas to avoid warning about missing block titles.
86 // See: https://github.com/WordPress/WordPress/blob/753817d462955eb4e40a89034b7b7c375a1e43f3/wp-admin/edit-form-blocks.php#L144C1-L148C3.
87 wp_add_inline_script(
88 'wp-blocks',
89 sprintf( 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions( %s );', wp_json_encode( get_block_editor_server_block_settings(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) )
90 );
91 $localization_data = array(
92 'current_post_type' => $post_type,
93 'current_post_id' => $post_id,
94 'current_wp_user_email' => wp_get_current_user()->user_email,
95 'editor_settings' => $this->settings_controller->get_settings(),
96 'editor_theme' => $this->theme_controller->get_base_theme()->get_raw_data(),
97 'user_theme_post_id' => $this->user_theme->get_user_theme_post()->ID,
98 'urls' => array(
99 'listings' => admin_url( 'admin.php?page=wc-settings&tab=email' ),
100 'send' => admin_url( 'admin.php?page=wc-settings&tab=email' ),
101 'back' => admin_url( 'admin.php?page=wc-settings&tab=email' ),
102 'createCoupon' => admin_url( 'post-new.php?post_type=shop_coupon' ),
103 ),
104 );
105 wp_localize_script(
106 $script_name,
107 'WooCommerceEmailEditor',
108 apply_filters( 'woocommerce_email_editor_script_localization_data', $localization_data )
109 );
110 $this->preload_rest_api_data( $post_id, $post_type );
111 }
112 private function preload_rest_api_data( $post_id, string $post_type ): void {
113 $email_post_type = $post_type;
114 $user_theme_post_id = $this->user_theme->get_user_theme_post()->ID;
115 $template_slug = get_post_meta( (int) $post_id, '_wp_page_template', true );
116 $routes = array(
117 "/wp/v2/{$email_post_type}/" . intval( $post_id ) . '?context=edit',
118 "/wp/v2/types/{$email_post_type}?context=edit",
119 '/wp/v2/global-styles/' . intval( $user_theme_post_id ) . '?context=view', // Global email styles.
120 '/wp/v2/block-patterns/patterns',
121 '/wp/v2/templates?context=view',
122 '/wp/v2/block-patterns/categories',
123 '/wp/v2/settings',
124 '/wp/v2/types?context=view',
125 '/wp/v2/taxonomies?context=view',
126 );
127 if ( is_string( $template_slug ) ) {
128 $routes[] = '/wp/v2/templates/lookup?slug=' . $template_slug;
129 } else {
130 $routes[] = "/wp/v2/{$email_post_type}?context=edit&per_page=30&status=publish,sent";
131 }
132 // Preload the data for the specified routes.
133 $preload_data = array_reduce(
134 $routes,
135 'rest_preload_api_request',
136 array()
137 );
138 // Add inline script to set up preloading middleware.
139 wp_add_inline_script(
140 'wp-blocks',
141 sprintf(
142 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
143 wp_json_encode( $preload_data, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
144 )
145 );
146 }
147 }
148