WordPress.org

Make WordPress Core

Ticket #47375: 46199-2.patch

File 46199-2.patch, 4.6 KB (added by dmsnell, 6 months ago)

Handles non-block blocks (fallback blocks) and includes serialize_blocks() function for handling the full list of blocks returned from parse_blocks()

  • src/wp-includes/blocks.php

    diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php
    index b84e2720b3..e35cf20567 100644
    a b function render_block( $block ) { 
    281281 * @since 5.3.0
    282282 *
    283283 * @param  array  $block The block being rendered
    284  * @return string        the HTML-serialized form of the block
     284 * @return string        The HTML-serialized form of the block
    285285 */
    286286function serialize_block( $block ) {
     287        // non-block content has no block name
     288        if ( null === $block['blockName'] ) {
     289                return $block['innerHTML'];
     290        }
     291
    287292        $unwanted  = array( '--', '<', '>', '&', '\"' );
    288293        $wanted    = array( '\u002d\u002d', '\u003c', '\u003e', '\u0026', '\u0022' );
    289294
    function serialize_block( $block ) { 
    316321        return $output;
    317322}
    318323
     324/**
     325 * Renders an HTML-serialized form of a list of block objects
     326 *
     327 * @since 5.3.0
     328 *
     329 * @param  array  $blocks The list of parsed block objects
     330 * @return string         The HTML-serialized form of the list of blocks
     331 */
     332function serialize_blocks( $blocks ) {
     333        return implode( "\n\n", array_map( 'serialize_block', $blocks ) );
     334}
     335
    319336/**
    320337 * Parses blocks out of a content string.
    321338 *
  • src/wp-includes/blocks/calendar.php

    diff --git a/src/wp-includes/blocks/calendar.php b/src/wp-includes/blocks/calendar.php
    index 8e26626f5f..9177997692 100644
    a b  
    1313 * @return string Returns the block content.
    1414 */
    1515function render_block_core_calendar( $attributes ) {
    16         global $monthnum, $year;
    17 
     16        global $monthnum, $year, $post;
    1817        $previous_monthnum = $monthnum;
    1918        $previous_year     = $year;
    2019
    21         if ( isset( $attributes['month'] ) && isset( $attributes['year'] ) ) {
    22                 $permalink_structure = get_option( 'permalink_structure' );
    23                 if (
    24                         strpos( $permalink_structure, '%monthnum%' ) !== false &&
    25                         strpos( $permalink_structure, '%year%' ) !== false
    26                 ) {
    27                         // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
    28                         $monthnum = $attributes['month'];
    29                         // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
    30                         $year = $attributes['year'];
    31                 }
     20        if ( isset( $attributes['month'] ) ) {
     21                // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
     22                $monthnum = $attributes['month'];
     23        }
     24
     25        if ( isset( $attributes['year'] ) ) {
     26                // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
     27                $year = $attributes['year'];
    3228        }
    3329
    3430        $custom_class_name = empty( $attributes['className'] ) ? '' : ' ' . $attributes['className'];
  • src/wp-includes/blocks/latest-comments.php

    diff --git a/src/wp-includes/blocks/latest-comments.php b/src/wp-includes/blocks/latest-comments.php
    index ae14d31b6f..26a8f4d636 100644
    a b register_block_type( 
    154154        'core/latest-comments',
    155155        array(
    156156                'attributes'      => array(
    157                         'align'          => array(
    158                                 'type' => 'string',
    159                                 'enum' => array( 'left', 'center', 'right', 'wide', 'full' ),
    160                         ),
    161157                        'className'      => array(
    162158                                'type' => 'string',
    163159                        ),
    register_block_type( 
    179175                                'type'    => 'boolean',
    180176                                'default' => true,
    181177                        ),
     178                        'align'          => array(
     179                                'type' => 'string',
     180                                'enum' => array( 'center', 'left', 'right', 'wide', 'full', '' ),
     181                        ),
    182182                ),
    183183                'render_callback' => 'render_block_core_latest_comments',
    184184        )
  • tests/phpunit/tests/blocks/serialize.php

    diff --git a/tests/phpunit/tests/blocks/serialize.php b/tests/phpunit/tests/blocks/serialize.php
    index d4074f4aa3..e52310a4c9 100644
    a b  
    1515 * @group blocks
    1616 */
    1717class WP_Test_Block_Serialize extends WP_UnitTestCase {
     18        function test_serializes_freeform_block() {
     19                $this->assertEquals(
     20                        '<strong>Success!</strong>',
     21                        serialize_block( array(
     22                                'blockName'    => null,
     23                                'attrs'        => array(),
     24                                'innerBlocks'  => array(),
     25                                'innerHTML'    => '<strong>Success!</strong>',
     26                                'innerContent' => array( '<strong>Success!</strong>' )
     27                        ) )
     28                );
     29        }
     30
    1831        function test_seriliazes_void_block_without_attributes() {
    1932                $this->assertEquals(
    2033                        '<!-- wp:test/void /-->',
    class WP_Test_Block_Serialize extends WP_UnitTestCase { 
    174187                );
    175188        }
    176189
     190        function test_adds_pretty_whitespace_betwen_blocks() {
     191                $this->assertEquals(
     192                        "<!-- wp:first /-->\n\n<!-- wp:second /-->",
     193                        serialize_blocks( array(
     194                                self::make_block( array( 'blockName' => 'first' ) ),
     195                                self::make_block( array( 'blockName' => 'second' ) ),
     196                        ) )
     197                );
     198        }
     199
    177200        static function make_block( $props ) {
    178201                return array_merge( array(
    179202                        'blockName'    => 'test/void',