PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.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 All 404 releases
← All changes | lib/compat/wordpress-7.1/view-config-api.php +122 -142 23.6.2 → 24.1.0 View file →
@@ -3,14 +3,33 @@
3 3 * Entity view configuration API.
4 4 *
5 5 * Builds the default view configuration for an entity and exposes it through
6 6 * the dynamic `get_entity_view_config_{$kind}_{$name}` filter so core and third
7 - * parties can provide the configuration for a specific entity.
7 + * parties can provide the configuration for a specific entity. The dynamic
8 + * portions of the hook name are lowercased, e.g.
9 + * `get_entity_view_config_posttype_page` for the `page` post type.
8 10 *
9 11 * @package gutenberg
10 12 */
11 13
12 14 /**
15 + * Builds the name of the dynamic filter that provides the view configuration
16 + * for an entity.
17 + *
18 + * The entity kind and name are embedded in the hook name lowercased, so the
19 + * hook follows the WordPress convention of lowercase hook names regardless of
20 + * how the entity identifiers are spelled: the `postType`/`page` entity maps to
21 + * the `get_entity_view_config_posttype_page` hook.
22 + *
23 + * @param string $kind The entity kind (e.g. `postType`).
24 + * @param string $name The entity name (e.g. `page`).
25 + * @return string The filter name.
26 + */
27 +function gutenberg_get_entity_view_config_hook_name( $kind, $name ) {
28 + return strtolower( "get_entity_view_config_{$kind}_{$name}" );
29 +}
30 +
31 +/**
13 32 * Builds the default `form` configuration for post types that don't provide their own.
14 33 *
15 34 * It is a sensible default for `post`, `page`, and custom post types alike rather
16 35 * than being tailored per type. Post types that need a different shape can replace
@@ -23,9 +42,9 @@
23 42 * returns `false`.
24 43 *
25 44 * @return array The default form configuration.
26 45 */
27 -function _gutenberg_get_default_post_type_form() {
46 +function _gutenberg_get_default_posttype_form() {
28 47 return array(
29 48 'layout' => array( 'type' => 'panel' ),
30 49 'fields' => array(
31 50 array(
@@ -93,10 +112,12 @@
93 112 /**
94 113 * Returns the view configuration for the given entity.
95 114 *
96 115 * Builds the default configuration shared by all entities and then exposes it
97 - * through the dynamic `get_entity_view_config_{$kind}_{$name}` filter so that core
98 - * and third parties can provide the configuration for a specific entity.
116 + * through the dynamic `get_entity_view_config_{$kind}_{$name}` filter — with the
117 + * dynamic portions lowercased, see gutenberg_get_entity_view_config_hook_name()
118 + * — so that core and third parties can provide the configuration for a
119 + * specific entity.
99 120 *
100 121 * @param string $kind The entity kind (e.g. `postType`).
101 122 * @param string $name The entity name (e.g. `page`).
102 123 * @return array {
@@ -142,63 +163,14 @@
142 163 $config = array(
143 164 'default_view' => $default_view,
144 165 'default_layouts' => $default_layouts,
145 166 'view_list' => $view_list,
146 - 'form' => 'postType' === $kind ? _gutenberg_get_default_post_type_form() : array(),
167 + 'form' => 'postType' === $kind ? _gutenberg_get_default_posttype_form() : array(),
147 168 );
148 169
149 170 $data = new Gutenberg_View_Config_Data( $config );
150 171
151 - /**
152 - * Filters the view configuration for a given entity.
153 - *
154 - * The dynamic portions of the hook name, `$kind` and `$name`, refer to the
155 - * entity kind (e.g. `postType`) and the entity name (e.g. `page`).
156 - *
157 - * Callbacks receive a Gutenberg_View_Config_Data object and change the
158 - * configuration through its methods: the `update_*()` methods merge
159 - * partial changes into the current configuration, while `set()` replaces
160 - * a whole top-level key. Callbacks must return the object they were
161 - * given.
162 - *
163 - * @param Gutenberg_View_Config_Data $data The view configuration container
164 - * for the entity, exposing the
165 - * `default_view`, `default_layouts`,
166 - * `view_list`, and `form` keys.
167 - * @param array $entity {
168 - * The entity the configuration is built for.
169 - *
170 - * @type string $kind The entity kind.
171 - * @type string $name The entity name.
172 - * }
173 - */
174 - $filtered = apply_filters(
175 - "get_entity_view_config_{$kind}_{$name}",
176 - $data,
177 - array(
178 - 'kind' => $kind,
179 - 'name' => $name,
180 - )
181 - );
182 -
183 - // A well-behaved callback returns the object it was given. Fall back to the
184 - // unfiltered config if a callback replaced it with something else.
185 - if ( ! $filtered instanceof Gutenberg_View_Config_Data ) {
186 - _doing_it_wrong(
187 - __FUNCTION__,
188 - sprintf(
189 - /* translators: %s: the filter hook name. */
190 - esc_html__( 'A "%s" filter callback must return the Gutenberg_View_Config_Data object it was given.', 'gutenberg' ),
191 - esc_html( "get_entity_view_config_{$kind}_{$name}" )
192 - ),
193 - '7.1.0'
194 - );
195 - return $config;
196 - }
197 -
198 - // Backfill any dropped keys with their defaults, then discard any keys the
199 - // filter introduced that are not part of the documented configuration shape.
200 - return array_intersect_key( array_merge( $config, $filtered->get_config() ), $config );
172 + return $data->apply_filters( $kind, $name );
201 173 }
202 174
203 175 /**
204 176 * Provides the view configuration for the `page` post type.
@@ -205,9 +177,9 @@
205 177 *
206 178 * @param Gutenberg_View_Config_Data $data The view configuration container for the entity.
207 179 * @return Gutenberg_View_Config_Data The updated view configuration container.
208 180 */
209 -function _gutenberg_get_entity_view_config_post_type_page( $data ) {
181 +function _gutenberg_get_entity_view_config_posttype_page( $data ) {
210 182 $default_layouts = array(
211 183 'table' => array(
212 184 'layout' => array(
213 185 'styles' => array(
@@ -323,13 +295,18 @@
323 295 ),
324 296 ),
325 297 );
326 298
327 - $data->set( 'default_layouts', $default_layouts, 1 );
328 - $data->set( 'default_view', $default_view, 1 );
299 + $data->set(
300 + array(
301 + 'default_view' => $default_view,
302 + 'default_layouts' => $default_layouts,
303 + ),
304 + 1
305 + );
329 306 // Append the status views, thereby preserving the base "all items" view,
330 307 // so its post-type-specific title is kept.
331 - $data->update_view_list_items( array_column( $view_list, null, 'slug' ), 1 );
308 + $data->merge( array( 'view_list' => $view_list ), 1 );
332 309
333 310 return $data;
334 311 }
335 312
@@ -338,9 +315,9 @@
338 315 *
339 316 * @param Gutenberg_View_Config_Data $data The view configuration container for the entity.
340 317 * @return Gutenberg_View_Config_Data The updated view configuration container.
341 318 */
342 -function _gutenberg_get_entity_view_config_post_type_wp_block( $data ) {
319 +function _gutenberg_get_entity_view_config_posttype_wp_block( $data ) {
343 320 $default_layouts = array(
344 321 'table' => array(
345 322 'layout' => array(
346 323 'styles' => array(
@@ -366,11 +343,8 @@
366 343 'filters' => array(),
367 344 'layout' => $default_layouts['grid']['layout'],
368 345 );
369 346
370 - $data->set( 'default_layouts', $default_layouts, 1 );
371 - $data->set( 'default_view', $default_view, 1 );
372 -
373 347 $view_list = array(
374 348 array(
375 349 'title' => __( 'All patterns', 'gutenberg' ),
376 350 'slug' => 'all-patterns',
@@ -416,32 +390,36 @@
416 390 'slug' => $category_name,
417 391 );
418 392 }
419 393
420 - $data->set( 'view_list', $view_list, 1 );
394 + $form = array(
395 + 'layout' => array( 'type' => 'panel' ),
396 + 'fields' => array(
397 + array(
398 + 'id' => 'excerpt',
399 + 'layout' => array(
400 + 'type' => 'panel',
401 + 'labelPosition' => 'top',
402 + ),
403 + ),
404 + array(
405 + 'id' => 'post-content-info',
406 + 'layout' => array(
407 + 'type' => 'regular',
408 + 'labelPosition' => 'none',
409 + ),
410 + ),
411 + 'sync-status',
412 + 'revisions',
413 + ),
414 + );
421 415
422 416 $data->set(
423 - 'form',
424 417 array(
425 - 'layout' => array( 'type' => 'panel' ),
426 - 'fields' => array(
427 - array(
428 - 'id' => 'excerpt',
429 - 'layout' => array(
430 - 'type' => 'panel',
431 - 'labelPosition' => 'top',
432 - ),
433 - ),
434 - array(
435 - 'id' => 'post-content-info',
436 - 'layout' => array(
437 - 'type' => 'regular',
438 - 'labelPosition' => 'none',
439 - ),
440 - ),
441 - 'sync-status',
442 - 'revisions',
443 - ),
418 + 'default_view' => $default_view,
419 + 'default_layouts' => $default_layouts,
420 + 'view_list' => $view_list,
421 + 'form' => $form,
444 422 ),
445 423 1
446 424 );
447 425
@@ -453,9 +431,9 @@
453 431 *
454 432 * @param Gutenberg_View_Config_Data $data The view configuration container for the entity.
455 433 * @return Gutenberg_View_Config_Data The updated view configuration container.
456 434 */
457 -function _gutenberg_get_entity_view_config_post_type_wp_template_part( $data ) {
435 +function _gutenberg_get_entity_view_config_posttype_wp_template_part( $data ) {
458 436 $default_layouts = array(
459 437 'table' => array(
460 438 'layout' => array(
461 439 'styles' => array(
@@ -479,11 +457,8 @@
479 457 'filters' => array(),
480 458 'layout' => $default_layouts['grid']['layout'],
481 459 );
482 460
483 - $data->set( 'default_layouts', $default_layouts, 1 );
484 - $data->set( 'default_view', $default_view, 1 );
485 -
486 461 $view_list = array(
487 462 array(
488 463 'title' => __( 'All template parts', 'gutenberg' ),
489 464 'slug' => 'all-parts',
@@ -523,24 +498,28 @@
523 498 ),
524 499 );
525 500 }
526 501
527 - $data->set( 'view_list', $view_list, 1 );
502 + $form = array(
503 + 'layout' => array( 'type' => 'panel' ),
504 + 'fields' => array(
505 + array(
506 + 'id' => 'last_edited_date',
507 + 'layout' => array(
508 + 'type' => 'panel',
509 + 'labelPosition' => 'none',
510 + ),
511 + ),
512 + 'revisions',
513 + ),
514 + );
528 515
529 516 $data->set(
530 - 'form',
531 517 array(
532 - 'layout' => array( 'type' => 'panel' ),
533 - 'fields' => array(
534 - array(
535 - 'id' => 'last_edited_date',
536 - 'layout' => array(
537 - 'type' => 'panel',
538 - 'labelPosition' => 'none',
539 - ),
540 - ),
541 - 'revisions',
542 - ),
518 + 'default_view' => $default_view,
519 + 'default_layouts' => $default_layouts,
520 + 'view_list' => $view_list,
521 + 'form' => $form,
543 522 ),
544 523 1
545 524 );
546 525
@@ -552,9 +531,9 @@
552 531 *
553 532 * @param Gutenberg_View_Config_Data $data The view configuration container for the entity.
554 533 * @return Gutenberg_View_Config_Data The updated view configuration container.
555 534 */
556 -function _gutenberg_get_entity_view_config_post_type_wp_template( $data ) {
535 +function _gutenberg_get_entity_view_config_posttype_wp_template( $data ) {
557 536 $default_view = array(
558 537 'type' => 'grid',
559 538 'perPage' => 20,
560 539 'sort' => array(
@@ -574,11 +553,8 @@
574 553 'grid' => array( 'showMedia' => true ),
575 554 'list' => array( 'showMedia' => false ),
576 555 );
577 556
578 - $data->set( 'default_view', $default_view, 1 );
579 - $data->set( 'default_layouts', $default_layouts, 1 );
580 -
581 557 $view_list = array(
582 558 array(
583 559 'title' => __( 'All templates', 'gutenberg' ),
584 560 'slug' => 'all',
@@ -715,46 +691,50 @@
715 691 }
716 692 }
717 693 }
718 694
719 - $data->set( 'view_list', array_merge( $view_list, $registered_authors, $user_authors ), 1 );
720 -
721 - $data->set(
722 - 'form',
723 - array(
724 - 'layout' => array( 'type' => 'panel' ),
725 - 'fields' => array(
726 - array(
727 - 'id' => 'description',
728 - 'layout' => array(
729 - 'type' => 'panel',
730 - 'labelPosition' => 'top',
731 - ),
695 + $form = array(
696 + 'layout' => array( 'type' => 'panel' ),
697 + 'fields' => array(
698 + array(
699 + 'id' => 'description',
700 + 'layout' => array(
701 + 'type' => 'panel',
702 + 'labelPosition' => 'top',
732 703 ),
733 - array(
734 - 'id' => 'description_readonly',
735 - 'layout' => array(
736 - 'type' => 'regular',
737 - 'labelPosition' => 'none',
738 - ),
704 + ),
705 + array(
706 + 'id' => 'description_readonly',
707 + 'layout' => array(
708 + 'type' => 'regular',
709 + 'labelPosition' => 'none',
739 710 ),
740 - array(
741 - 'id' => 'last_edited_date',
742 - 'layout' => array(
743 - 'type' => 'panel',
744 - 'labelPosition' => 'none',
745 - ),
711 + ),
712 + array(
713 + 'id' => 'last_edited_date',
714 + 'layout' => array(
715 + 'type' => 'panel',
716 + 'labelPosition' => 'none',
746 717 ),
747 - 'revisions',
748 - // The following fields are only meaningful in the `home`/`index`
749 - // template summary. They edit other entities (`root/site` and the
750 - // posts page); the editor merges those records into the form data
751 - // under a namespace and controls when the fields are shown.
752 - 'posts_page_title',
753 - 'posts_per_page',
754 - 'default_comment_status',
755 718 ),
719 + 'revisions',
720 + // The following fields are only meaningful in the `home`/`index`
721 + // template summary. They edit other entities (`root/site` and the
722 + // posts page); the editor merges those records into the form data
723 + // under a namespace and controls when the fields are shown.
724 + 'posts_page_title',
725 + 'posts_per_page',
726 + 'default_comment_status',
756 727 ),
728 + );
729 +
730 + $data->set(
731 + array(
732 + 'default_view' => $default_view,
733 + 'default_layouts' => $default_layouts,
734 + 'view_list' => array_merge( $view_list, $registered_authors, $user_authors ),
735 + 'form' => $form,
736 + ),
757 737 1
758 738 );
759 739
760 740 return $data;
@@ -763,9 +743,9 @@
763 743 /**
764 744 * Registers the Gutenberg entity view configuration filters, overriding any
765 745 * defaults that WordPress core may have already registered.
766 746 *
767 - * Core registers its own `_wp_get_entity_view_config_post_type_*` callbacks on
747 + * Core registers its own `_wp_get_entity_view_config_posttype_*` callbacks on
768 748 * the shared `get_entity_view_config_{$kind}_{$name}` hooks. The Gutenberg
769 749 * plugin always ships the newest configuration, so it removes the core defaults
770 750 * and installs its own `_gutenberg_*` callbacks instead.
771 751 *
@@ -780,11 +760,11 @@
780 760 function gutenberg_register_entity_view_config_filters() {
781 761 $post_types = array( 'page', 'post', 'wp_block', 'wp_template_part', 'wp_template' );
782 762
783 763 foreach ( $post_types as $post_type ) {
784 - $hook = "get_entity_view_config_postType_{$post_type}";
785 - $wp_callback = "_wp_get_entity_view_config_post_type_{$post_type}";
786 - $gb_callback = "_gutenberg_get_entity_view_config_post_type_{$post_type}";
764 + $hook = gutenberg_get_entity_view_config_hook_name( 'postType', $post_type );
765 + $wp_callback = "_wp_get_entity_view_config_posttype_{$post_type}";
766 + $gb_callback = "_gutenberg_get_entity_view_config_posttype_{$post_type}";
787 767
788 768 // has_filter() returns the priority the callback was registered at.
789 769 $wp_priority = has_filter( $hook, $wp_callback );
790 770 if ( false !== $wp_priority ) {