PluginProbe
Gutenberg / 22.3.0
Gutenberg v22.3.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / lib / experiments-page.php

experiments-page.php in Gutenberg 22.3.0, at lib/experiments-page.php

307 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Bootstrapping the Gutenberg experiments page.
4 *
5 * @package gutenberg
6 */
7
8 if ( ! function_exists( 'the_gutenberg_experiments' ) ) {
9 /**
10 * The main entry point for the Gutenberg experiments page.
11 *
12 * @since 6.3.0
13 */
14 function the_gutenberg_experiments() {
15 ?>
16 <div
17 id="experiments-editor"
18 class="wrap"
19 >
20 <h1><?php echo __( 'Experimental settings', 'gutenberg' ); ?></h1>
21 <?php settings_errors(); ?>
22 <form method="post" action="options.php">
23 <?php settings_fields( 'gutenberg-experiments' ); ?>
24 <?php do_settings_sections( 'gutenberg-experiments' ); ?>
25 <!-- We use a separate table for the template activation experiment because the option is managed separately. -->
26 <table class="form-table">
27 <tr>
28 <th scope="row">
29 <label for="active_templates"><?php echo __( 'Template Activation', 'gutenberg' ); ?></label>
30 <br><a href="https://github.com/WordPress/gutenberg/issues/66950" target="_blank"><?php echo __( 'Learn more', 'gutenberg' ); ?></a>
31 </th>
32 <td>
33 <label for="active_templates">
34 <input
35 type="checkbox"
36 name="active_templates"
37 id="active_templates"
38 value="1"
39 <?php checked( 1, gutenberg_is_experiment_enabled( 'active_templates' ) ); ?>
40 />
41 <?php echo __( 'Allows multiple templates of the same type to be created, of which one can be active at a time.', 'gutenberg' ); ?>
42 <p class="description"><?php echo __( 'Warning: when you deactivate this experiment, it is best to delete all created templates except for the active ones.', 'gutenberg' ); ?></p>
43 </label>
44 </td>
45 </tr>
46 </table>
47 <?php submit_button(); ?>
48 </form>
49 </div>
50 <?php
51 }
52 }
53
54 /**
55 * Set up the experiments settings.
56 *
57 * @since 6.3.0
58 */
59 function gutenberg_initialize_experiments_settings() {
60 add_settings_section(
61 'gutenberg_experiments_section',
62 // The empty string ensures the render function won't output a h2.
63 '',
64 'gutenberg_display_experiment_section',
65 'gutenberg-experiments'
66 );
67
68 add_settings_field(
69 'gutenberg-block-experiments',
70 __( 'Blocks: add experimental blocks', 'gutenberg' ),
71 'gutenberg_display_experiment_field',
72 'gutenberg-experiments',
73 'gutenberg_experiments_section',
74 array(
75 'label' => __( 'Enables experimental blocks on a rolling basis as they are developed.<p class="description">(Warning: these blocks may have significant changes during development that cause validation errors and display issues.)</p>', 'gutenberg' ),
76 'id' => 'gutenberg-block-experiments',
77 )
78 );
79
80 add_settings_field(
81 'gutenberg-form-blocks',
82 __( 'Blocks: add Form and input blocks', 'gutenberg' ),
83 'gutenberg_display_experiment_field',
84 'gutenberg-experiments',
85 'gutenberg_experiments_section',
86 array(
87 'label' => __( 'Enables new blocks to allow building forms. You are likely to experience UX issues that are being addressed.', 'gutenberg' ),
88 'id' => 'gutenberg-form-blocks',
89 )
90 );
91
92 add_settings_field(
93 'gutenberg-grid-interactivity',
94 __( 'Blocks: add Grid interactivity', 'gutenberg' ),
95 'gutenberg_display_experiment_field',
96 'gutenberg-experiments',
97 'gutenberg_experiments_section',
98 array(
99 'label' => __( 'Enables enhancements to the Grid block that let you move and resize items in the editor canvas.', 'gutenberg' ),
100 'id' => 'gutenberg-grid-interactivity',
101 )
102 );
103
104 add_settings_field(
105 'gutenberg-no-tinymce',
106 __( 'Blocks: disable TinyMCE and Classic block', 'gutenberg' ),
107 'gutenberg_display_experiment_field',
108 'gutenberg-experiments',
109 'gutenberg_experiments_section',
110 array(
111 'label' => __( 'Disables the TinyMCE and Classic block.', 'gutenberg' ),
112 'id' => 'gutenberg-no-tinymce',
113 )
114 );
115
116 add_settings_field(
117 'gutenberg-media-processing',
118 __( 'Client-side media processing', 'gutenberg' ),
119 'gutenberg_display_experiment_field',
120 'gutenberg-experiments',
121 'gutenberg_experiments_section',
122 array(
123 'label' => __( 'Enables client-side media processing to leverage the browser\'s capabilities to handle tasks like image resizing and compression.', 'gutenberg' ),
124 'id' => 'gutenberg-media-processing',
125 )
126 );
127
128 add_settings_field(
129 'gutenberg-sync-collaboration',
130 __( 'Collaboration: add real time editing', 'gutenberg' ),
131 'gutenberg_display_experiment_field',
132 'gutenberg-experiments',
133 'gutenberg_experiments_section',
134 array(
135 'label' => __( 'Enables live collaboration and offline persistence between peers.', 'gutenberg' ),
136 'id' => 'gutenberg-sync-collaboration',
137 )
138 );
139
140 add_settings_field(
141 'gutenberg-color-randomizer',
142 __( 'Color randomizer', 'gutenberg' ),
143 'gutenberg_display_experiment_field',
144 'gutenberg-experiments',
145 'gutenberg_experiments_section',
146 array(
147 'label' => __( 'Enables the Global Styles color randomizer in the Site Editor; a utility that lets you mix the current color palette pseudo-randomly.', 'gutenberg' ),
148 'id' => 'gutenberg-color-randomizer',
149 )
150 );
151
152 add_settings_field(
153 'gutenberg-new-posts-dashboard',
154 __( 'Data Views: enable for Posts', 'gutenberg' ),
155 'gutenberg_display_experiment_field',
156 'gutenberg-experiments',
157 'gutenberg_experiments_section',
158 array(
159 'label' => __( 'Enables a redesigned posts dashboard accessible through a submenu item in the Gutenberg plugin.', 'gutenberg' ),
160 'id' => 'gutenberg-new-posts-dashboard',
161 )
162 );
163
164 add_settings_field(
165 'gutenberg-quick-edit-dataviews',
166 __( 'Data Views: add Quick Edit', 'gutenberg' ),
167 'gutenberg_display_experiment_field',
168 'gutenberg-experiments',
169 'gutenberg_experiments_section',
170 array(
171 'label' => __( 'Enables access to a Quick Edit panel in the Site Editor Pages experience.', 'gutenberg' ),
172 'id' => 'gutenberg-quick-edit-dataviews',
173 )
174 );
175
176 add_settings_field(
177 'gutenberg-dataviews-media-modal',
178 __( 'Data Views: new media modal', 'gutenberg' ),
179 'gutenberg_display_experiment_field',
180 'gutenberg-experiments',
181 'gutenberg_experiments_section',
182 array(
183 'label' => __( 'Enables a new media modal experience powered by Data Views for improved media library management.', 'gutenberg' ),
184 'id' => 'gutenberg-dataviews-media-modal',
185 )
186 );
187
188 add_settings_field(
189 'gutenberg-full-page-client-side-navigation',
190 __( 'Interactivity API: Full-page client-side navigation', 'gutenberg' ),
191 'gutenberg_display_experiment_field',
192 'gutenberg-experiments',
193 'gutenberg_experiments_section',
194 array(
195 'label' => __( 'Enables full-page client-side navigation, powered by the Interactivity API.', 'gutenberg' ),
196 'id' => 'gutenberg-full-page-client-side-navigation',
197 )
198 );
199
200 add_settings_field(
201 'gutenberg-content-only-pattern-insertion',
202 __( 'contentOnly: Make patterns contentOnly by default upon insertion', 'gutenberg' ),
203 'gutenberg_display_experiment_field',
204 'gutenberg-experiments',
205 'gutenberg_experiments_section',
206 array(
207 'label' => __( 'When patterns are inserted, default to a simplified content only mode for editing pattern content.', 'gutenberg' ),
208 'id' => 'gutenberg-content-only-pattern-insertion',
209 )
210 );
211
212 add_settings_field(
213 'gutenberg-content-only-inspector-fields',
214 __( 'contentOnly: Enable editable inspector fields', 'gutenberg' ),
215 'gutenberg_display_experiment_field',
216 'gutenberg-experiments',
217 'gutenberg_experiments_section',
218 array(
219 'label' => __( 'Enables editable inspector fields (media, links, alt text, etc.) in the content-only pattern editing interface. Requires "contentOnly: Make patterns contentOnly by default upon insertion" to be enabled.', 'gutenberg' ),
220 'id' => 'gutenberg-content-only-inspector-fields',
221 'requires' => 'gutenberg-content-only-pattern-insertion',
222 )
223 );
224
225 add_settings_field(
226 'gutenberg-workflow-palette',
227 __( 'Workflow Palette', 'gutenberg' ),
228 'gutenberg_display_experiment_field',
229 'gutenberg-experiments',
230 'gutenberg_experiments_section',
231 array(
232 'label' => __( 'Enables the Workflow Palette for running workflows composed of abilities, from a unified interface.', 'gutenberg' ),
233 'id' => 'gutenberg-workflow-palette',
234 )
235 );
236
237 add_settings_field(
238 'gutenberg-customizable-navigation-overlays',
239 __( 'Customizable Navigation Overlays', 'gutenberg' ),
240 'gutenberg_display_experiment_field',
241 'gutenberg-experiments',
242 'gutenberg_experiments_section',
243 array(
244 'label' => __( 'Enables custom mobile overlay design and content control for Navigation blocks, allowing you to create flexible, professional menu experiences.', 'gutenberg' ),
245 'id' => 'gutenberg-customizable-navigation-overlays',
246 )
247 );
248
249 register_setting(
250 'gutenberg-experiments',
251 'gutenberg-experiments'
252 );
253 }
254
255 add_action( 'admin_init', 'gutenberg_initialize_experiments_settings' );
256
257 /**
258 * Display a checkbox field for a Gutenberg experiment.
259 *
260 * @since 6.3.0
261 *
262 * @param array $args ( $label, $id ).
263 */
264 function gutenberg_display_experiment_field( $args ) {
265 $options = get_option( 'gutenberg-experiments' );
266 $value = isset( $options[ $args['id'] ] ) ? 1 : 0;
267 ?>
268 <label for="<?php echo $args['id']; ?>">
269 <input type="checkbox" name="<?php echo 'gutenberg-experiments[' . $args['id'] . ']'; ?>" id="<?php echo $args['id']; ?>" value="1" <?php checked( 1, $value ); ?> />
270 <?php echo $args['label']; ?>
271 </label>
272 <?php
273 }
274
275 /**
276 * Display the experiments section.
277 *
278 * @since 6.3.0
279 */
280 function gutenberg_display_experiment_section() {
281 ?>
282 <p><?php echo __( "The block editor includes experimental features that are usable while they're in development. Select the ones you'd like to enable. These features are likely to change, so avoid using them in production.", 'gutenberg' ); ?></p>
283
284 <?php
285 }
286
287 add_action( 'admin_init', 'gutenberg_handle_template_activate_setting_submission' );
288 function gutenberg_handle_template_activate_setting_submission() {
289 if ( ! isset( $_POST['option_page'] ) || 'gutenberg-experiments' !== $_POST['option_page'] ) {
290 return;
291 }
292
293 if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'gutenberg-experiments-options' ) ) {
294 return;
295 }
296
297 if ( ! current_user_can( 'manage_options' ) ) {
298 return;
299 }
300
301 if ( isset( $_POST['active_templates'] ) && '1' === $_POST['active_templates'] ) {
302 update_option( 'active_templates', gutenberg_get_migrated_active_templates() );
303 } else {
304 delete_option( 'active_templates' );
305 }
306 }
307