WordPress.org

Make WordPress Core

Ticket #42285: 42285.0.diff

File 42285.0.diff, 4.6 KB (added by westonruter, 22 months ago)

https://github.com/xwp/wordpress-develop/pull/292

  • src/wp-admin/js/widgets/media-gallery-widget.js

    diff --git src/wp-admin/js/widgets/media-gallery-widget.js src/wp-admin/js/widgets/media-gallery-widget.js
    index 7d0d191c20..ebba81cf86 100644
     
    201201                        });
    202202
    203203                        mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() );
    204                         selection.gallery = new Backbone.Model( _.pick( mediaFrameProps, 'columns', 'link', 'size', '_orderbyRandom' ) );
     204                        selection.gallery = new Backbone.Model( mediaFrameProps );
    205205                        if ( mediaFrameProps.size ) {
    206206                                control.displaySettings.set( 'size', mediaFrameProps.size );
    207207                        }
  • src/wp-includes/widgets/class-wp-widget-media-gallery.php

    diff --git src/wp-includes/widgets/class-wp-widget-media-gallery.php src/wp-includes/widgets/class-wp-widget-media-gallery.php
    index 3ac9cc910c..13ee9c2d6e 100644
    class WP_Widget_Media_Gallery extends WP_Widget_Media { 
    4646         * @return array Schema for properties.
    4747         */
    4848        public function get_instance_schema() {
    49                 return array(
     49                $schema = array(
    5050                        'title' => array(
    5151                                'type' => 'string',
    5252                                'default' => '',
    class WP_Widget_Media_Gallery extends WP_Widget_Media { 
    8787                                'should_preview_update' => false,
    8888                        ),
    8989                );
     90
     91                /** This filter is documented in wp-includes/widgets/class-wp-widget-media.php */
     92                $schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this );
     93
     94                return $schema;
    9095        }
    9196
    9297        /**
    class WP_Widget_Media_Gallery extends WP_Widget_Media { 
    100105        public function render_media( $instance ) {
    101106                $instance = array_merge( wp_list_pluck( $this->get_instance_schema(), 'default' ), $instance );
    102107
    103                 $shortcode_atts = array(
    104                         'ids'     => $instance['ids'],
    105                         'columns' => $instance['columns'],
    106                         'link'    => $instance['link_type'],
    107                         'size'    => $instance['size'],
     108                $shortcode_atts = array_merge(
     109                        $instance,
     110                        array(
     111                                'link' => $instance['link_type'],
     112                        )
    108113                );
    109114
    110115                // @codeCoverageIgnoreStart
  • src/wp-includes/widgets/class-wp-widget-media.php

    diff --git src/wp-includes/widgets/class-wp-widget-media.php src/wp-includes/widgets/class-wp-widget-media.php
    index 4d190da360..ec412d25f7 100644
    abstract class WP_Widget_Media extends WP_Widget { 
    127127         * @return array Schema for properties.
    128128         */
    129129        public function get_instance_schema() {
    130                 return array(
     130                $schema = array(
    131131                        'attachment_id' => array(
    132132                                'type' => 'integer',
    133133                                'default' => 0,
    abstract class WP_Widget_Media extends WP_Widget { 
    149149                                'should_preview_update' => false,
    150150                        ),
    151151                );
     152
     153                /**
     154                 * Filters the media widget instance schema to add additional properties.
     155                 *
     156                 * @since 4.9.0
     157                 *
     158                 * @param array           $schema Instance schema.
     159                 * @param WP_Widget_Media $this   Widget object.
     160                 */
     161                $schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this );
     162
     163                return $schema;
    152164        }
    153165
    154166        /**
  • tests/phpunit/tests/widgets/media-widget.php

    diff --git tests/phpunit/tests/widgets/media-widget.php tests/phpunit/tests/widgets/media-widget.php
    index 6620101a2f..f30d56e6f3 100644
    class Test_WP_Widget_Media extends WP_UnitTestCase { 
    164164                $this->assertEquals( $result, 'foo ibar NO' );
    165165        }
    166166
     167        /**
     168         * Instance schema args.
     169         *
     170         * @var array
     171         */
     172        protected $filter_instance_schema_args;
     173
     174        /**
     175         * Filter instance schema.
     176         *
     177         * @param array           $schema Schema.
     178         * @param WP_Widget_Media $widget Widget.
     179         *
     180         * @return array
     181         */
     182        public function filter_instance_schema( $schema, $widget ) {
     183                $this->filter_instance_schema_args = compact( 'schema', 'widget' );
     184                $schema['injected'] = array(
     185                        'type' => 'boolean',
     186                );
     187                return $schema;
     188        }
     189
    167190        /**
    168191         * Test get_instance_schema method.
    169192         *
    class Test_WP_Widget_Media extends WP_UnitTestCase { 
    178201                        'title',
    179202                        'url',
    180203                ), array_keys( $schema ) );
     204
     205                // Check filter usage.
     206                $this->filter_instance_schema_args = null;
     207                add_filter( 'widget_mocked_instance_schema', array( $this, 'filter_instance_schema' ), 10, 2 );
     208                $schema = $widget->get_instance_schema();
     209                $this->assertInternalType( 'array', $this->filter_instance_schema_args );
     210                $this->assertSame( $widget, $this->filter_instance_schema_args['widget'] );
     211                $this->assertEqualSets( array( 'attachment_id', 'title', 'url' ), array_keys( $this->filter_instance_schema_args['schema'] ) );
     212                $this->assertArrayHasKey( 'injected', $schema );
    181213        }
    182214
    183215        /**