WordPress.org

Make WordPress Core

Changeset 45873


Ignore:
Timestamp:
08/22/2019 12:21:49 AM (5 weeks ago)
Author:
SergeyBiryukov
Message:

Administration: Adjust [45814] to address a backward compatibility issue for plugins passing multiple CSS classes to add_settings_error().

Only add the notice- prefix for error, success, warning, info CSS classes, keep other classes as is.

Add unit tests for settings_errors().

Props afercia, SergeyBiryukov.
Fixes #44941.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/template.php

    r45814 r45873  
    18151815        }
    18161816
     1817        if ( in_array( $details['type'], array( 'error', 'success', 'warning', 'info' ) ) ) {
     1818            $details['type'] = 'notice-' . $details['type'];
     1819        }
     1820
    18171821        $css_id    = sprintf(
    18181822            'setting-error-%s',
    1819             sanitize_html_class( $details['code'] )
     1823            esc_attr( $details['code'] )
    18201824        );
    18211825        $css_class = sprintf(
    1822             'notice notice-%s settings-error is-dismissible',
    1823             sanitize_html_class( $details['type'] )
     1826            'notice %s settings-error is-dismissible',
     1827            esc_attr( $details['type'] )
    18241828        );
    18251829
  • trunk/tests/phpunit/tests/admin/includesTemplate.php

    r42343 r45873  
    109109    }
    110110
     111    /**
     112     * Test calling get_settings_errors() with variations on where it gets errors from.
     113     *
     114     * @ticket 42498
     115     * @covers ::get_settings_errors()
     116     * @global array $wp_settings_errors
     117     */
     118    public function test_get_settings_errors_sources() {
     119        global $wp_settings_errors;
     120
     121        $blogname_error        = array(
     122            'setting' => 'blogname',
     123            'code'    => 'blogname',
     124            'message' => 'Capital P dangit!',
     125            'type'    => 'error',
     126        );
     127        $blogdescription_error = array(
     128            'setting' => 'blogdescription',
     129            'code'    => 'blogdescription',
     130            'message' => 'Too short',
     131            'type'    => 'error',
     132        );
     133
     134        $wp_settings_errors = null;
     135        $this->assertSame( array(), get_settings_errors( 'blogname' ) );
     136
     137        // Test getting errors from transient.
     138        $_GET['settings-updated'] = '1';
     139        set_transient( 'settings_errors', array( $blogname_error ) );
     140        $wp_settings_errors = null;
     141        $this->assertSame( array( $blogname_error ), get_settings_errors( 'blogname' ) );
     142
     143        // Test getting errors from transient and from global.
     144        $_GET['settings-updated'] = '1';
     145        set_transient( 'settings_errors', array( $blogname_error ) );
     146        $wp_settings_errors = null;
     147        add_settings_error( $blogdescription_error['setting'], $blogdescription_error['code'], $blogdescription_error['message'], $blogdescription_error['type'] );
     148        $this->assertEqualSets( array( $blogname_error, $blogdescription_error ), get_settings_errors() );
     149
     150        $wp_settings_errors = null;
     151    }
     152
     153    /**
     154     * @ticket 44941
     155     * @covers ::settings_errors()
     156     * @global array $wp_settings_errors
     157     * @dataProvider settings_errors_css_classes_provider
     158     */
     159    public function test_settings_errors_css_classes( $type, $expected ) {
     160        global $wp_settings_errors;
     161
     162        add_settings_error( 'foo', 'bar', 'Capital P dangit!', $type );
     163
     164        ob_start();
     165        settings_errors();
     166        $output = ob_get_clean();
     167
     168        $wp_settings_errors = null;
     169
     170        $expected = sprintf( 'notice %s settings-error is-dismissible', $expected );
     171
     172        $this->assertContains( $expected, $output );
     173        $this->assertNotContains( 'notice-notice-', $output );
     174    }
     175
     176    public function settings_errors_css_classes_provider() {
     177        return array(
     178            array( 'error', 'notice-error' ),
     179            array( 'success', 'notice-success' ),
     180            array( 'warning', 'notice-warning' ),
     181            array( 'info', 'notice-info' ),
     182            array( 'updated', 'notice-success' ),
     183            array( 'notice-error', 'notice-error' ),
     184            array( 'error my-own-css-class hello world', 'error my-own-css-class hello world' ),
     185        );
     186    }
     187
    111188}
  • trunk/tests/phpunit/tests/option/sanitize-option.php

    r42636 r45873  
    159159    }
    160160
    161     /**
    162      * Test calling get_settings_errors() with variations on where it gets errors from.
    163      *
    164      * @ticket 42498
    165      * @covers ::get_settings_errors()
    166      * @global array $wp_settings_errors
    167      */
    168     public function test_get_settings_errors_sources() {
    169         global $wp_settings_errors;
    170 
    171         $blogname_error        = array(
    172             'setting' => 'blogname',
    173             'code'    => 'blogname',
    174             'message' => 'Capital P dangit!',
    175             'type'    => 'error',
    176         );
    177         $blogdescription_error = array(
    178             'setting' => 'blogdescription',
    179             'code'    => 'blogdescription',
    180             'message' => 'Too short',
    181             'type'    => 'error',
    182         );
    183 
    184         $wp_settings_errors = null;
    185         $this->assertSame( array(), get_settings_errors( 'blogname' ) );
    186 
    187         // Test getting errors from transient.
    188         $_GET['settings-updated'] = '1';
    189         set_transient( 'settings_errors', array( $blogname_error ) );
    190         $wp_settings_errors = null;
    191         $this->assertSame( array( $blogname_error ), get_settings_errors( 'blogname' ) );
    192 
    193         // Test getting errors from transient and from global.
    194         $_GET['settings-updated'] = '1';
    195         set_transient( 'settings_errors', array( $blogname_error ) );
    196         $wp_settings_errors = null;
    197         add_settings_error( $blogdescription_error['setting'], $blogdescription_error['code'], $blogdescription_error['message'], $blogdescription_error['type'] );
    198         $this->assertEqualSets( array( $blogname_error, $blogdescription_error ), get_settings_errors() );
    199 
    200         $wp_settings_errors = null;
    201     }
    202161}
Note: See TracChangeset for help on using the changeset viewer.