PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.0
4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Controllers / Admin / Products / ProductScriptsController.php
surecart / app / src / Controllers / Admin / Products Last commit date
ProductScriptsController.php 1 week ago ProductsController.php 6 days ago ProductsListTable.php 6 days ago
ProductScriptsController.php
228 lines
1 <?php
2
3 namespace SureCart\Controllers\Admin\Products;
4
5 use SureCart\Support\Scripts\AdminModelEditController;
6
7 /**
8 * Product Page
9 */
10 class ProductScriptsController extends AdminModelEditController {
11 /**
12 * What types of data to add the the page.
13 *
14 * @var array
15 */
16 protected $with_data = [ 'currency', 'supported_currencies', 'tax_protocol', 'checkout_page_url' ];
17
18 /**
19 * Script handle.
20 *
21 * @var string
22 */
23 protected $handle = 'surecart/scripts/admin/product';
24
25 /**
26 * Script path.
27 *
28 * @var string
29 */
30 protected $path = 'admin/products';
31
32 /**
33 * Opt into the dataviews stylesheet enqueue (handled by the parent).
34 *
35 * @var bool
36 */
37 protected $needs_dataviews_style = true;
38
39 /**
40 * Add the app url to the data.
41 */
42 public function __construct() {
43 $this->data['api_url'] = \SureCart::requests()->getBaseUrl();
44 }
45
46 public function enqueue() {
47 $available_templates = wp_get_theme()->get_page_templates( null, 'sc_product' );
48 $available_templates[''] = apply_filters( 'default_page_template_title', __( 'Theme Layout', 'surecart' ), 'rest-api' );
49 $this->data['availableTemplates'] = $available_templates;
50 $this->data['bulk_delete_nonce'] = wp_create_nonce( 'bulk_delete_nonce' );
51 parent::enqueue();
52 }
53
54 /**
55 * Enqueue needed scripts.
56 *
57 * @return void
58 */
59 public function enqueueScriptDependencies() {
60 parent::enqueueScriptDependencies();
61
62 // Editor & media.
63 wp_enqueue_style( 'wp-edit-blocks' );
64 wp_enqueue_editor();
65
66 // Format library.
67 wp_enqueue_style( 'wp-format-library' );
68 wp_enqueue_script( 'wp-format-library' );
69
70 global $editor_styles;
71 wp_add_inline_script(
72 'wp-blocks',
73 'wp.blocks && wp.blocks.unstable__bootstrapServerSideBlockDefinitions && wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');'
74 );
75
76 $block_editor_context = new \WP_Block_Editor_Context( array( 'name' => 'surecart/block-editor' ) );
77
78 $indexed_template_types = array();
79 foreach ( get_default_block_template_types() as $slug => $template_type ) {
80 $template_type['slug'] = (string) $slug;
81 $indexed_template_types[] = $template_type;
82 }
83
84 $custom_settings = array(
85 'siteUrl' => site_url(),
86 'postsPerPage' => get_option( 'posts_per_page' ),
87 'styles' => get_block_editor_theme_styles(),
88 'defaultTemplateTypes' => $indexed_template_types,
89 'defaultTemplatePartAreas' => get_allowed_block_template_part_areas(),
90 'supportsLayout' => wp_theme_has_theme_json(),
91 'supportsTemplatePartsMode' => ! wp_is_block_theme() && current_theme_supports( 'block-template-parts' ),
92 );
93
94 $custom_settings['__experimentalAdditionalBlockPatterns'] = \WP_Block_Patterns_Registry::get_instance()->get_all_registered( true );
95 $custom_settings['__experimentalAdditionalBlockPatternCategories'] = \WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true );
96
97 // Get block editor settings.
98 $editor_settings = get_block_editor_settings( $custom_settings, $block_editor_context );
99
100 // Debug registered patterns before getting them.
101 $patterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered();
102 $pattern_categories = \WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered();
103
104 // Add patterns in both locations to ensure compatibility.
105 $editor_settings['__experimentalBlockPatterns'] = $patterns;
106 $editor_settings['__experimentalBlockPatternCategories'] = $pattern_categories;
107
108 wp_add_inline_script(
109 'surecart-components',
110 sprintf( 'wp.blocks?.setCategories( %s );', wp_json_encode( $editor_settings['blockCategories'] ) ),
111 'before'
112 );
113
114 wp_localize_script(
115 'surecart-components',
116 'surecartBlockEditorSettings',
117 $editor_settings
118 );
119
120 $active_global_styles_id = \WP_Theme_JSON_Resolver::get_user_global_styles_post_id();
121 $active_theme = get_stylesheet();
122
123 $navigation_rest_route = rest_get_route_for_post_type_items(
124 'wp_navigation'
125 );
126
127 $preload_paths = array(
128 array( '/wp/v2/media', 'OPTIONS' ),
129 '/wp/v2/types?context=view',
130 '/wp/v2/types/wp_template?context=edit',
131 '/wp/v2/types/wp_template-part?context=edit',
132 '/wp/v2/templates?context=edit&per_page=-1',
133 '/wp/v2/template-parts?context=edit&per_page=-1',
134 '/wp/v2/themes?context=edit&status=active',
135 '/wp/v2/global-styles/' . $active_global_styles_id . '?context=edit',
136 '/wp/v2/global-styles/' . $active_global_styles_id,
137 '/wp/v2/global-styles/themes/' . $active_theme,
138 array( $navigation_rest_route, 'OPTIONS' ),
139 array(
140 add_query_arg(
141 array(
142 'context' => 'edit',
143 'per_page' => 100,
144 'order' => 'desc',
145 'orderby' => 'date',
146 // array indices are required to avoid query being encoded and not matching in cache .
147 'status[0]' => 'publish',
148 'status[1]' => 'draft',
149 ),
150 $navigation_rest_route
151 ),
152 'GET',
153 ),
154 );
155
156 block_editor_rest_api_preload( $preload_paths, $block_editor_context );
157
158 wp_add_inline_script(
159 'wp-edit-site',
160 sprintf(
161 'wp.domReady( function() { wp.editSite.initializeEditor( "site-editor", %s ); } );',
162 wp_json_encode( $editor_settings )
163 )
164 );
165
166 // Preload server-registered block schemas.
167 wp_add_inline_script(
168 'wp-blocks',
169 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');'
170 );
171
172 wp_add_inline_script(
173 'wp-blocks',
174 sprintf( 'wp.blocks?.setCategories( %s );', wp_json_encode( isset( $editor_settings['blockCategories'] ) ? $editor_settings['blockCategories'] : array() ) ),
175 'after'
176 );
177
178 if (
179 current_theme_supports( 'wp-block-styles' ) &&
180 ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 )
181 ) {
182 wp_enqueue_style( 'wp-block-library-theme' );
183 }
184
185 // Global styles.
186 wp_register_style( 'sc-global-presets', false ); // phpcs:ignore
187 wp_add_inline_style( 'sc-global-presets', wp_get_global_stylesheet( array( 'presets' ) ) );
188 wp_enqueue_style( 'sc-global-presets' );
189
190 /**
191 * Filters the arguments used to register a block type.
192 */
193 add_filter( 'register_block_type_args', array( $this, 'registerMetadataAttribute' ) );
194
195 /**
196 * Fires after block editor assets have been enqueued.
197 */
198 do_action( 'enqueue_block_editor_assets' );
199 }
200
201 /**
202 * Registers the metadata block attribute for all block types.
203 * This is a fallback/temporary solution until
204 * the Gutenberg core version registers the metadata attribute.
205 *
206 * @see https://github.com/WordPress/gutenberg/blob/6aaa3686ae67adc1a6a6b08096d3312859733e1b/lib/compat/wordpress-6.5/blocks.php#L27-L47
207 * To do: Remove this method once the Gutenberg core version registers the metadata attribute.
208 *
209 * @param array $args Array of arguments for registering a block type.
210 * @return array $args
211 */
212 public function registerMetadataAttribute( $args ): array {
213 // Setup attributes if needed.
214 if ( ! isset( $args['attributes'] ) || ! is_array( $args['attributes'] ) ) {
215 $args['attributes'] = array();
216 }
217
218 // Add metadata attribute if it doesn't exist.
219 if ( ! array_key_exists( 'metadata', $args['attributes'] ) ) {
220 $args['attributes']['metadata'] = array(
221 'type' => 'object',
222 );
223 }
224
225 return $args;
226 }
227 }
228