WordPress.org

Make WordPress Core

Ticket #19828: 19828.2.diff

File 19828.2.diff, 4.4 KB (added by swissspidy, 4 years ago)
  • src/wp-admin/includes/screen.php

    diff --git src/wp-admin/includes/screen.php src/wp-admin/includes/screen.php
    index d23cff3..fa9fcb0 100644
    final class WP_Screen { 
    719719         *
    720720         * @since 3.4.0
    721721         *
    722          * @return array Help tabs with arguments.
     722         * @return array Help tabs with arguments sorted by their priority.
    723723         */
    724724        public function get_help_tabs() {
    725                 return $this->_help_tabs;
     725                $help_tabs = $this->_help_tabs;
     726                uasort( $help_tabs, array( $this, '_sort_help_tabs' ) );
     727                return $help_tabs;
     728        }
     729
     730        /**
     731         * Compares the difference between the help tabs priorities. Used for help tabs sorting.
     732         *
     733         * @since 4.4.0
     734         *
     735         * $param  int $tab_a The priority argument for the first tab.
     736         * $param  int $tab_b The priority argument for the second tab.
     737         *
     738         * @return int The difference between the priority arguments.
     739         */
     740        protected function _sort_help_tabs( $tab_a, $tab_b ) {
     741                return $tab_a['priority'] - $tab_b['priority'];
    726742        }
    727743
    728744        /**
    final class WP_Screen { 
    745761         *
    746762         * @since 3.3.0
    747763         *
    748          * @param array $args
    749          * - string   - title    - Title for the tab.
    750          * - string   - id       - Tab ID. Must be HTML-safe.
    751          * - string   - content  - Help tab content in plain text or HTML. Optional.
    752          * - callback - callback - A callback to generate the tab content. Optional.
     764         * @param array $args {
     765         *     Array of arguments used to display the help tab.
    753766         *
     767         *     @type string $title    Title for the tab. Default false.
     768         *     @type string $id       Tab ID. Must be HTML-safe. Default false.
     769         *     @type string $content  Optional. Help tab content in plain text or HTML. Default empty string.
     770         *     @type string $callback Optional. A callback to generate the tab content. Default false.
     771         *     @type int    $priority Optional. The priority of the tab, used for ordering. Default 10.
     772         * }
    754773         */
    755774        public function add_help_tab( $args ) {
    756775                $defaults = array(
    final class WP_Screen { 
    758777                        'id'       => false,
    759778                        'content'  => '',
    760779                        'callback' => false,
     780                        'priority' => 10,
    761781                );
    762782                $args = wp_parse_args( $args, $defaults );
    763783
  • tests/phpunit/tests/admin/includesScreen.php

    diff --git tests/phpunit/tests/admin/includesScreen.php tests/phpunit/tests/admin/includesScreen.php
    index b1333ce..898bb46 100644
    class Tests_Admin_includesScreen extends WP_UnitTestCase { 
    163163
    164164                $screen = get_current_screen();
    165165                $screen->add_help_tab( $tab_args );
    166                 $this->assertEquals( $screen->get_help_tab( $tab ), $tab_args );
     166                $this->assertEquals( $screen->get_help_tab( $tab ), array(
     167                        'id' => $tab,
     168                        'title' => 'Help!',
     169                        'content' => 'Some content',
     170                        'callback' => false,
     171                        'priority' => 10,
     172                ) );
    167173
    168174                $tabs = $screen->get_help_tabs();
    169175                $this->assertArrayHasKey( $tab, $tabs );
    class Tests_Admin_includesScreen extends WP_UnitTestCase { 
    176182        }
    177183
    178184        /**
     185         * @ticket 19828
     186         */
     187        function test_help_tabs_priority() {
     188                $tab_1      = rand_str();
     189                $tab_1_args = array(
     190                        'id'       => $tab_1,
     191                        'title'    => 'Help!',
     192                        'content'  => 'Some content',
     193                        'callback' => false,
     194                        'priority' => 11,
     195                );
     196
     197                $tab_2      = rand_str();
     198                $tab_2_args = array(
     199                        'id'       => $tab_2,
     200                        'title'    => 'Help!',
     201                        'content'  => 'Some content',
     202                        'callback' => false,
     203                        'priority' => 9,
     204                );
     205
     206                $screen = get_current_screen();
     207
     208                // Add help tabs.
     209
     210                $screen->add_help_tab( $tab_1_args );
     211                $this->assertEquals( $screen->get_help_tab( $tab_1 ), $tab_1_args );
     212
     213                $screen->add_help_tab( $tab_2_args );
     214                $this->assertEquals( $screen->get_help_tab( $tab_2 ), $tab_2_args );
     215
     216                $tabs = $screen->get_help_tabs();
     217                $this->assertEquals( 2, count( $tabs ) );
     218                $this->assertArrayHasKey( $tab_1, $tabs );
     219                $this->assertArrayHasKey( $tab_2, $tabs );
     220
     221                // Test priority order.
     222
     223                $this->assertEquals( $tabs, array(
     224                        $tab_2 => $tab_2_args,
     225                        $tab_1 => $tab_1_args,
     226                ) );
     227
     228                $screen->remove_help_tab( $tab_1 );
     229                $this->assertNull( $screen->get_help_tab( $tab_1 ) );
     230                $this->assertEquals( 1, count( $screen->get_help_tabs() ) );
     231
     232                $screen->remove_help_tab( $tab_2 );
     233                $this->assertNull( $screen->get_help_tab( $tab_2 ) );
     234                $this->assertEquals( 0, count( $screen->get_help_tabs() ) );
     235
     236                $screen->remove_help_tabs();
     237                $this->assertEquals( $screen->get_help_tabs(), array() );
     238        }
     239
     240        /**
    179241         * @ticket 25799
    180242         */
    181243        function test_options() {