WordPress.org

Make WordPress Core

Ticket #17902: 17902.2.patch

File 17902.2.patch, 16.5 KB (added by kurtpayne, 2 years ago)

Fixed patch, removed EOL property changes

  • wp-admin/plugin-install.php

     
    66 * @subpackage Administration 
    77 */ 
    88// TODO route this pages via a specific iframe handler instead of the do_action below 
    9 if ( !defined( 'IFRAME_REQUEST' ) && isset( $_GET['tab'] ) && ( 'plugin-information' == $_GET['tab'] ) ) 
     9if ( !defined( 'IFRAME_REQUEST' ) && isset( $_GET['tab'] ) && ( in_array( $_GET['tab'], array( 'plugin-information', 'plugin-readme' ) ) ) ) 
    1010        define( 'IFRAME_REQUEST', true ); 
    1111 
    1212/** WordPress Administration Bootstrap */ 
     
    2828$parent_file = 'plugins.php'; 
    2929 
    3030wp_enqueue_script( 'plugin-install' ); 
    31 if ( 'plugin-information' != $tab ) 
     31if ( !in_array( $tab, array('plugin-information', 'plugin-readme') ) ) 
    3232        add_thickbox(); 
    3333 
    3434$body_id = $tab; 
  • wp-admin/css/colors-classic.dev.css

     
    583583} 
    584584 
    585585div#media-upload-header, 
    586 div#plugin-information-header { 
     586div#plugin-information-header, 
     587div#plugin-readme-header { 
    587588        background-color: #f9f9f9; 
    588589        border-bottom-color: #dfdfdf; 
    589590} 
     
    17251726        border-right: 1px solid #fff; 
    17261727} 
    17271728 
    1728 #plugin-information .fyi ul { 
     1729#plugin-information .fyi ul, 
     1730#plugin-readme .fyi ul { 
    17291731        background-color: #eaf3fa; 
    17301732} 
    17311733 
    1732 #plugin-information .fyi h2.mainheader { 
     1734#plugin-information .fyi h2.mainheader, 
     1735#plugin-readme .fyi h2.mainheader { 
    17331736        background-color: #cee1ef; 
    17341737} 
    17351738 
    17361739#plugin-information pre, 
    1737 #plugin-information code { 
     1740#plugin-information code, 
     1741#plugin-readme pre, 
     1742#plugin-readme code { 
    17381743        background-color: #ededff; 
    17391744} 
    17401745 
    1741 #plugin-information pre { 
     1746#plugin-information pre, 
     1747#plugin-readme pre { 
    17421748        border: 1px solid #ccc; 
    17431749} 
    17441750 
  • wp-admin/css/colors-fresh.dev.css

     
    591591} 
    592592 
    593593div#media-upload-header, 
    594 div#plugin-information-header { 
     594div#plugin-information-header, 
     595div#plugin-readme-header { 
    595596        background-color: #f9f9f9; 
    596597        border-bottom-color: #dfdfdf; 
    597598} 
     
    13601361        border-right: 1px solid #f9f9f9; 
    13611362} 
    13621363 
    1363 #plugin-information .fyi ul { 
     1364#plugin-information .fyi ul, 
     1365#plugin-readme .fyi ul { 
    13641366        background-color: #eaf3fa; 
    13651367} 
    13661368 
    1367 #plugin-information .fyi h2.mainheader { 
     1369#plugin-information .fyi h2.mainheader, 
     1370#plugin-readme .fyi h2.mainheader { 
    13681371        background-color: #cee1ef; 
    13691372} 
    13701373 
    13711374#plugin-information pre, 
    1372 #plugin-information code { 
     1375#plugin-information code, 
     1376#plugin-readme pre, 
     1377#plugin-readme code { 
    13731378        background-color: #ededff; 
    13741379} 
    13751380 
    1376 #plugin-information pre { 
     1381#plugin-information pre, 
     1382#plugin-readme pre { 
    13771383        border: 1px solid #ccc; 
    13781384} 
    13791385 
  • wp-admin/css/wp-admin-rtl.dev.css

     
    21592159        left: 0; 
    21602160} 
    21612161 
    2162 #plugin-information ul#sidemenu { 
     2162#plugin-information ul#sidemenu, 
     2163#plugin-readme ul#sidemenu { 
    21632164        left: auto; 
    21642165        right: 0; 
    21652166} 
    21662167 
    2167 #plugin-information h2 { 
     2168#plugin-information h2, 
     2169#plugin-readme h2 { 
    21682170        margin-right: 0; 
    21692171        margin-left: 200px; 
    21702172} 
    21712173 
    2172 #plugin-information .fyi { 
     2174#plugin-information .fyi, 
     2175#plugin-readme .fyi { 
    21732176        margin-left: 5px; 
    21742177        margin-right: 20px; 
    21752178} 
    21762179 
    2177 #plugin-information .fyi h2 { 
     2180#plugin-information .fyi h2, 
     2181#plugin-readme .fyi h2 { 
    21782182        margin-left: 0; 
    21792183} 
    21802184 
    2181 #plugin-information .fyi ul { 
     2185#plugin-information .fyi ul, 
     2186#plugin-readme .fyi ul { 
    21822187        padding: 10px 7px 10px 5px; 
    21832188} 
    21842189 
     
    21892194 
    21902195#plugin-information #section-screenshots ol, 
    21912196#plugin-information .updated, 
    2192 #plugin-information pre { 
     2197#plugin-information pre, 
     2198#plugin-readme .updated, 
     2199#plugin-readme pre { 
    21932200        margin-right: 0; 
    21942201        margin-left: 215px; 
    21952202} 
    21962203 
    21972204#plugin-information .updated, 
    2198 #plugin-information .error { 
     2205#plugin-information .error, 
     2206#plugin-readme .updated, 
     2207#plugin-readme .error { 
    21992208        clear: none; 
    22002209        direction: rtl; 
    22012210} 
  • wp-admin/css/wp-admin.dev.css

     
    68526852} 
    68536853 
    68546854/* Header on thickbox */ 
    6855 #plugin-information-header { 
     6855#plugin-information-header, 
     6856#plugin-readme-header { 
    68566857        margin: 0; 
    68576858        padding: 0 5px; 
    68586859        font-weight: bold; 
     
    68616862        border-bottom-style: solid; 
    68626863        height: 2.5em; 
    68636864} 
    6864 #plugin-information ul#sidemenu { 
     6865#plugin-information ul#sidemenu, 
     6866#plugin-readme ul#sidemenu { 
    68656867        font-weight: normal; 
    68666868        margin: 0 5px; 
    68676869        position: absolute; 
     
    68896891        line-height: 2em; 
    68906892} 
    68916893 
    6892 #plugin-information h2 { 
     6894#plugin-information h2, 
     6895#plugin-readme h2 { 
    68936896        clear: none !important; 
    68946897        margin-right: 200px; 
    68956898} 
    68966899 
    6897 #plugin-information .fyi { 
     6900#plugin-information .fyi, 
     6901#plugin-readme .fyi { 
    68986902        margin: 0 10px 50px; 
    68996903        width: 210px; 
    69006904} 
    69016905 
    6902 #plugin-information .fyi h2 { 
     6906#plugin-information .fyi h2, 
     6907#plugin-readme .fyi h2 { 
    69036908        font-size: 0.9em; 
    69046909        margin-bottom: 0; 
    69056910        margin-right: 0; 
    69066911} 
    69076912 
    6908 #plugin-information .fyi h2.mainheader { 
     6913#plugin-information .fyi h2.mainheader, 
     6914#plugin-readme .fyi h2.mainheader { 
    69096915        padding: 5px; 
    69106916        -webkit-border-top-left-radius: 3px; 
    69116917        border-top-left-radius: 3px; 
    69126918} 
    69136919 
     6920#plugin-readme .fyi ul, 
    69146921#plugin-information .fyi ul { 
    69156922        padding: 10px 5px 10px 7px; 
    69166923        margin: 0; 
     
    69196926        border-bottom-left-radius: 3px; 
    69206927} 
    69216928 
    6922 #plugin-information .fyi li { 
     6929#plugin-information .fyi li, 
     6930#plugin-readme .fyi li { 
    69236931        margin-right: 0; 
    69246932} 
    69256933 
    6926 #plugin-information #section-holder { 
     6934#plugin-information #section-holder, 
     6935#plugin-readme #section-holder { 
    69276936        padding: 10px; 
    69286937} 
    69296938 
    69306939#plugin-information .section ul, 
    6931 #plugin-information .section ol { 
     6940#plugin-information .section ol, 
     6941#plugin-readme .section ul, 
     6942#plugin-readme .section ol { 
    69326943        margin-left: 16px; 
    69336944        list-style-type: square; 
    69346945        list-style-image: none; 
     
    69546965 
    69556966#plugin-information #section-screenshots ol, 
    69566967#plugin-information .updated, 
    6957 #plugin-information pre { 
     6968#plugin-information pre, 
     6969#plugin-readme .updated, 
     6970#plugin-readme pre { 
    69586971        margin-right: 215px; 
    69596972} 
    69606973 
    6961 #plugin-information pre { 
     6974#plugin-information pre, 
     6975#plugin-readme pre { 
    69626976        padding: 7px; 
    69636977        overflow: auto; 
    69646978} 
  • wp-admin/includes/class-wp-plugin-install-list-table.php

     
    3434                $tabs['popular']  = _x( 'Popular','Plugin Installer' ); 
    3535                $tabs['new']      = _x( 'Newest','Plugin Installer' ); 
    3636 
    37                 $nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item. 
     37                $nonmenu_tabs = array( 'plugin-information', 'plugin-readme' ); //Valid actions to perform which do not have a Menu item. 
    3838 
    3939                $tabs = apply_filters( 'install_plugins_tabs', $tabs ); 
    4040                $nonmenu_tabs = apply_filters( 'install_plugins_nonmenu_tabs', $nonmenu_tabs ); 
  • wp-admin/includes/class-wp-plugins-list-table.php

     
    427427                                                        $author = '<a href="' . $plugin_data['AuthorURI'] . '" title="' . esc_attr__( 'Visit author homepage' ) . '">' . $plugin_data['Author'] . '</a>'; 
    428428                                                $plugin_meta[] = sprintf( __( 'By %s' ), $author ); 
    429429                                        } 
     430                                        $slug = basename( $plugin_file, '.php' ); 
     431                                        $plugin_meta[] = '<a href="' . self_admin_url( 'plugin-install.php?tab=plugin-readme&amp;readme=true&amp;plugin=' . $slug . 
     432                                                                '&amp;TB_iframe=true&amp;width=600&amp;height=550' ) . '" class="thickbox" title="' . 
     433                                                                esc_attr( sprintf( __( 'More information about %s' ), "{$plugin_data['Name']} {$plugin_data['Version']}" ) ) . '">' . __( 'Details' ) . '</a>'; 
    430434                                        if ( ! empty( $plugin_data['PluginURI'] ) ) 
    431435                                                $plugin_meta[] = '<a href="' . $plugin_data['PluginURI'] . '" title="' . esc_attr__( 'Visit plugin site' ) . '">' . __( 'Visit plugin site' ) . '</a>'; 
    432436 
  • wp-admin/includes/plugin-install.php

     
    384384        exit; 
    385385} 
    386386add_action('install_plugins_pre_plugin-information', 'install_plugin_information'); 
     387 
     388/** 
     389 * Get information from a plugin locally 
     390 * @param string $slug 
     391 * @since 3.4.0 
     392 */ 
     393function local_plugin_api( $slug ) { 
     394 
     395        // Try to find the plugin file from the slug 
     396        $plugin_data = array(); 
     397        if ( file_exists( ABSPATH . PLUGINDIR . "/$slug.php" ) ) { 
     398                $plugin_data = get_plugin_data( ABSPATH . PLUGINDIR . "/$slug.php" ); 
     399        } elseif ( file_exists( ABSPATH . PLUGINDIR . "/$slug/$slug.php" ) ) { 
     400                $plugin_data = get_plugin_data( ABSPATH . PLUGINDIR . "/$slug/$slug.php" ); 
     401        } 
     402         
     403        // Try to load data from readme.txt 
     404        $readme_data = false; 
     405        if ( file_exists( ABSPATH . PLUGINDIR . "/$slug/readme.txt" ) ) { 
     406 
     407                // Get markddown library, turn off plugin functionality 
     408                if ( !defined( 'MARKDOWN_WP_POSTS' ) ) 
     409                        define( 'MARKDOWN_WP_POSTS', false ); 
     410                if ( !defined( 'MARKDOWN_WP_COMMENTS' ) ) 
     411                        define( 'MARKDOWN_WP_COMMENTS', false ); 
     412                if ( !class_exists( 'Markdown_Parser' ) ) 
     413                        include_once( ABSPATH . 'wp-admin/includes/markdown.php' ); 
     414                 
     415                include_once( ABSPATH . 'wp-admin/includes/class-wp-plugin-readme-parser.php' ); 
     416                $readme_parser = new wp_plugin_readme_parser(); 
     417                $readme_data = $readme_parser->parse_readme_file( ABSPATH . PLUGINDIR . "/$slug/readme.txt" ); 
     418        } 
     419         
     420        // If there's no readme (e.g. hello.php) create a fake structure 
     421        if ( empty( $readme_data ) ) { 
     422                $readme_data = array( 
     423                        'contributors'      => '', 
     424                        'requires_at_least' => '', 
     425                        'tested_up_to'      => '', 
     426                        'tags'              => array(), 
     427                        'sections'          => array( 
     428                                'description'   => !empty( $plugin_data['Description'] ) ? $plugin_data['Description'] : '' 
     429                        ) 
     430                ); 
     431        } 
     432 
     433        // Convert to an API-style response 
     434        $api = array( 
     435                'name'           => !empty( $plugin_data['Name'] ) ? $plugin_data['Name'] : $slug, 
     436                'slug'           => $slug, 
     437                'version'        => !empty( $plugin_data['Version'] ) ? $plugin_data['Version'] : '', 
     438                'author'         => !empty( $plugin_data['AuthorName'] ) ? $plugin_data['AuthorName'] : '', 
     439                'author_profile' => null, 
     440                'contributors'   => $readme_data['contributors'], 
     441                'requires'       => $readme_data['requires_at_least'], 
     442                'tested'         => $readme_data['tested_up_to'], 
     443                'compatibility'  => null, 
     444                'rating'         => null, 
     445                'num_ratings'    => null, 
     446                'downloaded'     => null, 
     447                'last_updated'   => null, 
     448                'added'          => null, 
     449                'homepage'       => !empty( $plugin_data['PluginURI'] ) ? $plugin_data['PluginURI'] : '', 
     450                'sections'       => $readme_data['sections'], 
     451                'download_link'  => null, 
     452                'tags'           => $readme_data['tags'] 
     453        ); 
     454 
     455        // Done 
     456        return (object) $api; 
     457} 
     458 
     459/** 
     460 * Display local plugin information in dialog box form. 
     461 * Pull from the readme.txt file and the plugin header 
     462 * @since 3.4.0 
     463 */ 
     464function plugin_readme_information() { 
     465        global $tab; 
     466 
     467        $api = local_plugin_api( stripslashes( $_REQUEST['plugin'] ) ); 
     468 
     469        if ( is_wp_error($api) ) 
     470                wp_die($api); 
     471 
     472        $plugins_allowedtags = array( 
     473                'a'    => array( 
     474                        'href'   => array(), 
     475                        'title'  => array(), 
     476                        'target' => array() 
     477                ), 
     478                'abbr' => array( 
     479                        'title' => array() 
     480                ), 
     481                'acronym' => array( 
     482                        'title' => array() 
     483                ), 
     484                'code'   => array(), 
     485                'pre'    => array(), 
     486                'em'     => array(), 
     487                'strong' => array(), 
     488                'div'    => array(), 
     489                'p'      => array(), 
     490                'ul'     => array(), 
     491                'ol'     => array(), 
     492                'li'     => array(), 
     493                'h1'     => array(), 
     494                'h2'     => array(), 
     495                'h3'     => array(), 
     496                'h4'     => array(), 
     497                'h5'     => array(), 
     498                'h6'     => array(), 
     499                'img'    => array( 
     500                        'src'   => array(), 
     501                        'class' => array(), 
     502                        'alt'   => array() 
     503                ) 
     504        ); 
     505 
     506        $plugins_section_titles = array( 
     507                'description'  => _x('Description',  'Plugin installer section title'), 
     508                'installation' => _x('Installation', 'Plugin installer section title'), 
     509                'faq'          => _x('FAQ',          'Plugin installer section title'), 
     510                'changelog'    => _x('Changelog',    'Plugin installer section title'), 
     511                'other_notes'  => _x('Other Notes',  'Plugin installer section title') 
     512        ); 
     513 
     514        // No screenshots at this time 
     515        if ( !empty( $api->sections['screenshots'] ) ) 
     516                unset( $api->sections['screenshots'] ); 
     517         
     518        // Sanitize HTML 
     519        foreach ( (array)$api->sections as $section_name => $content ) 
     520                $api->sections[$section_name] = wp_kses( $content, $plugins_allowedtags ); 
     521        foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) { 
     522                if ( isset( $api->$key ) ) 
     523                        $api->$key = wp_kses( $api->$key, $plugins_allowedtags ); 
     524        } 
     525 
     526        // Default to the Description tab, Do not translate, API returns English. 
     527        $section = isset( $_REQUEST['section'] ) ? stripslashes( $_REQUEST['section'] ) : 'description'; 
     528        if ( empty($section) || ! isset($api->sections[ $section ]) ) 
     529                $section = array_shift( $section_titles = array_keys((array)$api->sections) ); 
     530 
     531        iframe_header( __( 'Plugin Details' ) ); 
     532        ?> 
     533        <div id="<?php echo $tab; ?>-header"> 
     534                <ul id="sidemenu"> 
     535                        <?php foreach ( (array) $api->sections as $section_name => $content ) : ?> 
     536                                <?php                            
     537                                        if ( isset( $plugins_section_titles[ $section_name ] ) ) 
     538                                                $title = $plugins_section_titles[ $section_name ]; 
     539                                        else 
     540                                                $title = ucwords( str_replace( '_', ' ', $section_name ) ); 
     541 
     542                                        $class = ( $section_name == $section ) ? ' class="current"' : ''; 
     543                                        $href = add_query_arg( array('tab' => $tab, 'section' => $section_name) ); 
     544                                        $href = esc_url($href); 
     545                                        $san_section = esc_attr( $section_name ); 
     546                                ?> 
     547                                <li><a name="<?php echo $san_section; ?>" href="<?php echo $href; ?>" <?php echo $class; ?>><?php echo $title; ?></a></li> 
     548                        <?php endforeach ; ?> 
     549                </ul> 
     550        </div> 
     551        <div class="alignright fyi"> 
     552                <h2 class="mainheader"><?php /* translators: For Your Information */ _e('FYI') ?></h2> 
     553                <ul> 
     554                        <?php if ( !empty( $api->version ) ) : ?> 
     555                                <li><strong><?php _e('Version:') ?></strong> <?php echo $api->version ?></li> 
     556                        <?php endif; ?> 
     557                        <?php if ( !empty( $api->author ) ) : ?> 
     558                                <li><strong><?php _e('Author:') ?></strong> <?php echo $api->author ?></li> 
     559                        <?php endif; ?> 
     560                        <?php if ( !empty( $api->requires ) ) : ?> 
     561                                <li><strong><?php _e('Requires WordPress Version:') ?></strong> <?php printf(__('%s or higher'), $api->requires) ?></li> 
     562                        <?php endif; ?> 
     563                        <?php if ( !empty( $api->tested ) ) : ?> 
     564                                <li><strong><?php _e('Compatible up to:') ?></strong> <?php echo $api->tested ?></li> 
     565                        <?php endif; ?>          
     566                        <?php if ( !empty( $api->homepage ) ) : ?> 
     567                                <li><a target="_blank" href="<?php echo $api->homepage ?>"><?php _e('Plugin Homepage &#187;') ?></a></li> 
     568                        <?php endif; ?> 
     569                </ul> 
     570        </div> 
     571        <div id="section-holder" class="wrap"> 
     572        <?php 
     573                if ( !empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) 
     574                        echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This plugin has <strong>not been tested</strong> with your current version of WordPress.') . '</p></div>'; 
     575 
     576                elseif ( !empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) 
     577                        echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.') . '</p></div>'; 
     578 
     579                foreach ( (array) $api->sections as $section_name => $content ) { 
     580                        if ( isset( $plugins_section_titles[ $section_name ] ) ) 
     581                                $title = $plugins_section_titles[ $section_name ]; 
     582                        else 
     583                                $title = ucwords( str_replace( '_', ' ', $section_name ) ); 
     584 
     585                        $content = links_add_target($content, '_blank'); 
     586                        $san_section = esc_attr( $section_name ); 
     587                        $display = ( $section_name == $section ) ? 'block' : 'none'; 
     588                        ?> 
     589                        <div id="section-<?php echo $san_section; ?>" class="section" style="display: <?php echo $display; ?>;"> 
     590                                <h2 class="long-header"><?php echo $title; ?></h2> 
     591                                <?php echo $content; ?> 
     592                        </div> 
     593                        <?php 
     594                } 
     595        echo "</div>\n"; 
     596        iframe_footer(); 
     597        exit; 
     598} 
     599add_action('install_plugins_pre_plugin-readme', 'plugin_readme_information');