WordPress.org

Making WordPress.org

Ticket #3310: plugin-template-cleanup.patch

File plugin-template-cleanup.patch, 32.6 KB (added by joostdevalk, 22 months ago)

Cleanup patch

  • wordpress.org/public_html/wp-content/plugins/plugin-directory/class-template.php

    diff --git wordpress.org/public_html/wp-content/plugins/plugin-directory/class-template.php wordpress.org/public_html/wp-content/plugins/plugin-directory/class-template.php
    index 09f5ada0..684c5702 100644
     
    11<?php
     2
    23namespace WordPressdotorg\Plugin_Directory;
    34
    45// Explicitly require dependencies so this file can be sourced outside the Plugin Directory.
    require_once( __DIR__ . '/class-plugin-geopattern-svgtext.php' ); 
    1213 * @package WordPressdotorg\Plugin_Directory
    1314 */
    1415class Template {
    15 
    1616        /**
    1717         * Prints markup information in the head of a page.
    1818         *
    class Template { 
    2626                if ( is_front_page() ) :
    2727                        echo PHP_EOL;
    2828                        ?>
    29 <script type="application/ld+json">
     29            <script type="application/ld+json">
    3030        {
    3131                "@context": "http://schema.org",
    3232                "@type": "WebSite",
    class Template { 
    4040                        }
    4141                ]
    4242        }
    43 </script>
     43
     44            </script>
    4445                        <?php
    4546                endif;
    4647
    class Template { 
    6465
    6566                echo PHP_EOL;
    6667                ?>
    67 <script type="application/ld+json">
     68        <script type="application/ld+json">
    6869        [
    6970                {
    7071                        "@context": "http://schema.org",
    class Template { 
    123124                        }
    124125                }
    125126        ]
    126 </script>
     127
     128        </script>
    127129                <?php
    128130        }
    129131
    class Template { 
    156158         *
    157159         * @param bool              $full Optional. Whether to include "active installations" suffix. Default: true.
    158160         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
     161         *
    159162         * @return string "1+ million" or "1+ million active installations" depending on $full.
    160163         */
    161164        public static function active_installs( $full = true, $post = null ) {
    class Template { 
    179182         * Returns the number of downloads for a plugin.
    180183         *
    181184         * @static
    182          * @global \wpdb $wpdb WordPress database abstraction object.
     185         * @global \wpdb            $wpdb WordPress database abstraction object.
    183186         *
    184187         * @param int|\WP_Post|null $post Optional.
     188         *
    185189         * @return int
    186190         */
    187191        public static function get_downloads_count( $post = null ) {
    class Template { 
    224228         * @static
    225229         *
    226230         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
     231         *
    227232         * @return string
    228233         */
    229234        public static function get_star_rating( $post = null ) {
    class Template { 
    235240
    236241                return
    237242                        '<div class="plugin-rating">' .
    238                                 Template::dashicons_stars( $rating ) .
    239                                 '<span class="rating-count">(' .
    240                                         '<a href="https://wordpress.org/support/plugin/' . $post->post_name . '/reviews/">' .
    241                                         sprintf(
    242                                                 /* translators: 1: number of ratings */
    243                                                 __( '%1$s<span class="screen-reader-text"> total ratings</span>', 'wporg-plugins' ),
    244                                                 number_format_i18n( $num_ratings )
    245                                         ) .
    246                                 '</a>' .
    247                                 ')</span>' .
     243                        Template::dashicons_stars( $rating ) .
     244                        '<span class="rating-count">(' .
     245                        '<a href="https://wordpress.org/support/plugin/' . $post->post_name . '/reviews/">' .
     246                        sprintf(
     247                        /* translators: 1: number of ratings */
     248                                __( '%1$s<span class="screen-reader-text"> total ratings</span>', 'wporg-plugins' ),
     249                                number_format_i18n( $num_ratings )
     250                        ) .
     251                        '</a>' .
     252                        ')</span>' .
    248253                        '</div>';
    249254        }
    250255
    class Template { 
    254259         * @static
    255260         *
    256261         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
     262         *
    257263         * @return array
    258264         */
    259265        public static function get_plugin_sections( $post = null ) {
    class Template { 
    352358         *
    353359         * @param int|\WP_Post|null $post   Optional. Post ID or post object. Defaults to global $post.
    354360         * @param string            $output Optional. Output type. 'html' or 'raw'. Default: 'raw'.
     361         *
    355362         * @return mixed
    356363         */
    357364        public static function get_plugin_icon( $post = null, $output = 'raw' ) {
    class Template { 
    404411
    405412                switch ( $output ) {
    406413                        case 'html':
    407                                 $id    = "plugin-icon-{$plugin->post_name}";
    408                                 $html  = "<style type='text/css'>";
     414                                $id   = "plugin-icon-{$plugin->post_name}";
     415                                $html = "<style type='text/css'>";
    409416                                $html .= "#{$id} { background-image: url('{$icon}'); } .plugin-icon { background-size: cover; height: 128px; width: 128px; }";
    410417                                if ( ! empty( $icon_2x ) && ! $generated ) {
    411418                                        $html .= "@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) { #{$id} { background-image: url('{$icon_2x}'); } }";
    class Template { 
    429436         *
    430437         * @param int|\WP_Post|null $post   Optional. Post ID or post object. Defaults to global $post.
    431438         * @param string            $output Optional. Output type. 'html' or 'raw'. Default: 'raw'.
     439         *
    432440         * @return mixed
    433441         */
    434442        public static function get_plugin_banner( $post = null, $output = 'raw' ) {
    class Template { 
    476484
    477485                switch ( $output ) {
    478486                        case 'html':
    479                                 $id    = "plugin-banner-{$plugin->post_name}";
    480                                 $html  = "<style type='text/css'>";
     487                                $id   = "plugin-banner-{$plugin->post_name}";
     488                                $html = "<style type='text/css'>";
    481489                                $html .= "#{$id} { background-image: url('{$banner}'); }";
    482490                                if ( ! empty( $banner_2x ) ) {
    483491                                        $html .= "@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) { #{$id} { background-image: url('{$banner_2x}'); } }";
    class Template { 
    504512         * @param int|\WP_Post|null $post  Optional. Post ID or post object. Defaults to global $post.
    505513         * @param array             $asset Assets folder information.
    506514         * @param bool              $cdn   Optional. If the url should be CDN'ised. Default true.
     515         *
    507516         * @return string
    508517         */
    509518        public static function get_asset_url( $post, $asset, $cdn = true ) {
    class Template { 
    538547         *
    539548         * @static
    540549         *
    541          * @param int|\WP_Post|null $post  Optional. Post ID or post object. Defaults to global $post.
     550         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
     551         *
    542552         * @return string
    543553         */
    544554        public static function get_support_url( $post = null ) {
    class Template { 
    564574         *
    565575         * @static
    566576         *
    567          * @param int|array $args {
    568          *    If numeric arg passed, assumed to be 'rating'.
     577         * @param int|array $args     {
     578         *                            If numeric arg passed, assumed to be 'rating'.
    569579         *
    570          *    @type int    $rating   The rating to display.
    571          *    @type string $template The HTML template to use for each star.
     580         * @type int        $rating   The rating to display.
     581         * @type string    $template The HTML template to use for each star.
    572582         *                           %1$s is the class, %2$s is the rating.
    573583         * }
    574584         * @return string The Rating HTML.
    class Template { 
    586596
    587597                $output  = '<div class="wporg-ratings" aria-label="' . esc_attr( $title ) . '" data-title-template="' . esc_attr( $title_template ) . '" data-rating="' . esc_attr( $rating ) . '" style="color:#ffb900;">';
    588598                $counter = round( $rating * 2 );
    589                 for ( $i = 1; $i <= 5; $i++ ) {
     599                for ( $i = 1; $i <= 5; $i ++ ) {
    590600                        switch ( $counter ) {
    591601                                case 0:
    592602                                        $output .= sprintf( $template, 'dashicons dashicons-star-empty', $i );
    class Template { 
    594604
    595605                                case 1:
    596606                                        $output .= sprintf( $template, 'dashicons dashicons-star-half', $i );
    597                                         $counter--;
     607                                        $counter --;
    598608                                        break;
    599609
    600610                                default:
    class Template { 
    613623         *
    614624         * @param int|\WP_Post|null $post    Optional. Post ID or post object. Defaults to global $post.
    615625         * @param string            $version The version to link to. Optional. Default: latest.
     626         *
    616627         * @return string The Download URL.
    617628         */
    618629        public static function download_link( $post = null, $version = 'latest' ) {
    class Template { 
    635646         * @static
    636647         *
    637648         * @param string $string
     649         *
    638650         * @return string
    639651         */
    640652        public static function encode( $string ) {
    class Template { 
    648660         *
    649661         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
    650662         * @param mixed             $user The user to alter the favorite status for.
     663         *
    651664         * @return string URL to toggle status.
    652665         */
    653666        public static function get_favorite_link( $post = null, $user = 0 ) {
    class Template { 
    656669                $favorited = Tools::favorited_plugin( $post, $user );
    657670
    658671                return add_query_arg( array(
    659                         '_wpnonce' => wp_create_nonce( 'wp_rest' ),
    660                         ( $favorited ? 'unfavorite' : 'favorite' ) => '1'
     672                        '_wpnonce'                                 => wp_create_nonce( 'wp_rest' ),
     673                        ( $favorited ? 'unfavorite' : 'favorite' ) => '1',
    661674                ), home_url( 'wp-json/plugins/v1/plugin/' . $post->post_name . '/favorite' ) );
    662675        }
    663676
    664677        /**
     678         * Checks whether a plugin is closed or not.
     679         *
     680         * @return bool
     681         */
     682        public static function plugin_is_closed() {
     683                $status = get_post_status();
     684                if ( in_array( $status, array( 'closed', 'disabled' ) ) ) {
     685                        return true;
     686                }
     687
     688                return false;
     689        }
     690
     691        /**
     692         * Returns text to show to plugin authors on closed pages
     693         */
     694        public static function plugin_closed_author_info() {
     695                return sprintf(
     696                /* translators: 1: plugins@wordpress.org */
     697                        __( 'If you did not request this change, please contact <a href="mailto:%1$s">%1$s</a> for a status. All developers with commit access are contacted when a plugin is closed, with the reasons why, so check your spam email too.', 'wporg-plugins' ),
     698                        'plugins@wordpress.org'
     699                );
     700        }
     701
     702        /**
     703         * Returns a string about why the plugin isn't active.
     704         *
     705         * @return array {
     706         *      @type string $message The reason the plugin isn't active
     707         *      @type string $notice_type The notice type.
     708         * }
     709         */
     710        public static function plugin_not_active_reason() {
     711                $status      = get_post_status();
     712                $notice_type = 'notice-error';
     713                switch ( $status ) {
     714                        case 'draft':
     715                        case 'pending':
     716                                $message     = __( 'This plugin is requested and not visible to the public yet. Please be patient as your plugin gets reviewed.', 'wporg-plugins' );
     717                                $notice_type = 'notice-info';
     718                                break;
     719
     720                        case 'approved':
     721                                $message     = __( 'This plugin is approved and awaiting data upload but not visible to the public yet. Once you make your first commit, the plugin will become public.', 'wporg-plugins' );
     722                                $notice_type = 'notice-info';
     723                                break;
     724
     725                        case 'rejected':
     726                                $message = __( 'This plugin has been rejected and is not visible to the public.', 'wporg-plugins' );
     727                                break;
     728
     729                        case 'disabled':
     730                                if ( current_user_can( 'plugin_approve' ) ) {
     731                                        $message = __( 'This plugin is disabled (closed, but actively serving updates).', 'wporg-plugins' );
     732                                        break;
     733                                } else {
     734                                        $message = __( 'This plugin has been closed for new installs.', 'wporg-plugins' );
     735                                        break;
     736                                }
     737                        // fall through
     738                        default:
     739                        case 'closed':
     740                                $message = __( 'This plugin has been closed and is no longer available for download.', 'wporg-plugins' );
     741                                break;
     742                }
     743
     744                return compact( $message, $notice_type );
     745        }
     746
     747        /**
    665748         * Returns the reasons for closing or disabling a plugin.
    666749         *
    667750         * @return array Close/disable reason labels.
    class Template { 
    681764         * Returns the close/disable reason for a plugin.
    682765         *
    683766         * @param int|\WP_Post|null $post Optional. Post ID or post object. Defaults to global $post.
     767         *
    684768         * @return string Close/disable reason.
    685769         */
    686770        public static function get_close_reason( $post = null ) {
    class Template { 
    688772
    689773                $close_reasons = self::get_close_reasons();
    690774                $close_reason  = (string) get_post_meta( $post->ID, '_close_reason', true );
    691                
     775
    692776                if ( isset( $close_reasons[ $close_reason ] ) ) {
    693777                        $reason_label = $close_reasons[ $close_reason ];
    694778                } else {
    class Template { 
    753837                        $sites['en_US'] = (object) array(
    754838                                'locale'    => 'en_US',
    755839                                'hreflang'  => 'en',
    756                                 'subdomain' => ''
     840                                'subdomain' => '',
    757841                        );
    758842
    759                         uasort( $sites, function( $a, $b ) {
     843                        uasort( $sites, function ( $a, $b ) {
    760844                                return strcasecmp( $a->hreflang, $b->hreflang );
    761845                        } );
    762846
    763                         wp_cache_set( 'local-sites-'.get_post()->post_name, $sites, 'locale-associations', DAY_IN_SECONDS );
     847                        wp_cache_set( 'local-sites-' . get_post()->post_name, $sites, 'locale-associations', DAY_IN_SECONDS );
    764848                }
    765849
    766850                foreach ( $sites as $site ) {
    767851                        $url = sprintf(
    768852                                'https://%swordpress.org%s',
    769853                                $site->subdomain ? "{$site->subdomain}." : '',
    770                                 $_SERVER[ 'REQUEST_URI' ]
     854                                $_SERVER['REQUEST_URI']
    771855                        );
    772856
    773857                        printf(
  • wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/plugin-single.php

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/plugin-single.php wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/plugin-single.php
    index 7646230e..9d21434e 100644
     
    22/**
    33 * Template part for displaying posts.
    44 *
    5  * @link https://codex.wordpress.org/Template_Hierarchy
     5 * @link    https://codex.wordpress.org/Template_Hierarchy
    66 *
    77 * @package WordPressdotorg\Plugin_Directory\Theme
    88 */
    99
    1010namespace WordPressdotorg\Plugin_Directory\Theme;
     11
    1112use WordPressdotorg\Plugin_Directory\Plugin_Directory;
    1213use WordPressdotorg\Plugin_Directory\Template;
    1314use WordPressdotorg\Plugin_Directory\Tools;
     15
    1416global $section, $section_slug, $section_content, $section_read_more;
    1517
    1618$content = Plugin_Directory::instance()->split_post_content_into_pages( get_the_content() );
    17 $status  = get_post_status();
    18 
    19 ?><article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    20     <?php
    21     // Don't show the plugin banner for closed plugins
    22     if ( ! in_array( $status, array( 'closed', 'disabled' ) ) ) {
    23             echo Template::get_plugin_banner( get_post(), 'html' );
    24     }
    25     ?>
    26 
    27         <header class="plugin-header">
    28                 <?php if ( time() - get_post_modified_time() > 2 * YEAR_IN_SECONDS ) : ?>
    29                         <div class="plugin-notice notice notice-warning notice-alt">
    30                                 <p><?php _e( 'This plugin <strong>hasn&#146;t been updated in over 2 years</strong>. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.', 'wporg-plugins' ); ?></p>
    31                         </div>
    32                 <?php endif; ?>
    33                 <?php if ( 'publish' !== $status ) :
    34                                 $notice_type = 'notice-error';
    35                                 switch ( $status ) {
    36                                         case 'draft':
    37                                         case 'pending':
    38                                                 $message = __( 'This plugin is requested and not visible to the public yet. Please be patient as your plugin gets reviewed.', 'wporg-plugins' );
    39                                                 $notice_type = 'notice-info';
    40                                                 break;
    41 
    42                                         case 'approved':
    43                                                 $message = __( 'This plugin is approved and awaiting data upload but not visible to the public yet. Once you make your first commit, the plugin will become public.', 'wporg-plugins' );
    44                                                 $notice_type = 'notice-info';
    45                                                 break;
    46 
    47                                         case 'rejected':
    48                                                 $message = __( 'This plugin has been rejected and is not visible to the public.', 'wporg-plugins' );
    49                                                 break;
    50 
    51                                         case 'disabled':
    52                                                 if ( current_user_can( 'plugin_approve' ) ) {
    53                                                         $message = __( 'This plugin is disabled (closed, but actively serving updates).', 'wporg-plugins' );
    54                                                         break;
    55                                                 } else {
    56                                                         $message = __( 'This plugin has been closed for new installs.', 'wporg-plugins' );
    57                                                         break;
    58                                                 }
    59                                                 // fall through
    60                                         default:
    61                                         case 'closed':
    62                                                 $message        = __( 'This plugin has been closed and is no longer available for download.', 'wporg-plugins' );
    63                                                 break;
    64                                 }
    6519
    66             if ( in_array( $status, array( 'closed', 'disabled' ) ) ) {
    67                     $closed_date    = get_post_meta( get_the_ID(), 'plugin_closed_date', true );
    68                     if ( ! empty( $closed_date ) ) {
    69                             $message .= '<br/>';
    70                                         $message .= sprintf( __( 'This plugin was closed on %s.', 'wporg-plugins' ), mysql2date( get_option( 'date_format' ), $closed_date ) );
     20?>
     21<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
     22        <?php
     23        // Don't show the plugin banner for closed plugins
     24        if ( ! Template::plugin_is_closed() ) {
     25                echo Template::get_plugin_banner( get_post(), 'html' );
     26        }
     27        ?>
     28
     29    <header class="plugin-header">
     30                <?php
     31
     32                $status = get_post_status();
     33                if ( 'publish' !== $status ) :
     34            $message = Template::plugin_not_active_reason();
     35                        if ( Template::plugin_is_closed() ) {
     36                                $closed_date = get_post_meta( get_the_ID(), 'plugin_closed_date', true );
     37                                if ( ! empty( $closed_date ) ) {
     38                                        $message['message'] .= '<br/>';
     39                                        $message['message'] .= sprintf( __( 'This plugin was closed on %s.', 'wporg-plugins' ), mysql2date( get_option( 'date_format' ), $closed_date ) );
    7140                                }
    72             }
    73 
    74                 if ( ! in_array( $status, array( 'closed', 'disabled' ) ) ) {
    75                                     // the notice for closed and disabled is shown below the Description header, because we don't output the readme there
    76                         ?>
    77             <!-- .plugin-notice -->
    78                         <div class="plugin-notice notice <?php echo esc_attr( $notice_type ); ?> notice-alt">
    79                                 <p><?php echo $message; ?></p>
    80                         </div>
    81             <!-- .plugin-notice -->
    82         <?php } ?>
    83                 <?php endif; ?>
    84 
    85                 <div class="entry-thumbnail">
    86             <?php
    87             // Don't show the icon for closed plugins
    88             if ( ! in_array( $status, array( 'closed', 'disabled' ) ) ) {
    89                             echo Template::get_plugin_icon( get_post(), 'html' );
    90             }
    91             ?>
    92                 </div>
    93 
    94                 <div class="plugin-actions">
     41                        } else {
     42                                // the notice for closed and disabled is shown below the Description header, because we don't output the readme there
     43                                ?>
     44                <!-- .plugin-notice -->
     45                <div class="plugin-notice notice <?php echo esc_attr( $message['notice_type'] ); ?> notice-alt">
     46                    <p><?php echo $message['message']; ?></p>
     47                </div>
     48                <!-- .plugin-notice -->
     49                                <?php
     50                        }
     51
     52                endif;
     53
     54                // Don't show the icon (and its wrapping div) for closed plugins
     55                if ( ! Template::plugin_is_closed() ) {
     56                        printf( '<div class="entry-thumbnail">%s</div>', Template::get_plugin_icon( get_post(), 'html' ) );
     57                }
     58                ?>
     59
     60        <div class="plugin-actions">
    9561                        <?php
    9662                        if ( is_user_logged_in() ) :
    9763                                $url = Template::get_favorite_link();
    98                                 $is_favorited = Tools::favorited_plugin( $post );
     64                                $is_favorited = Tools::favorited_plugin( get_post() );
    9965                                ?>
    100                                 <div class="plugin-favorite">
    101                                         <a href="<?php echo esc_url( $url ); ?>" class="plugin-favorite-heart<?php echo $is_favorited ? ' favorited' : ''; ?>">
     66                <div class="plugin-favorite">
     67                    <a href="<?php echo esc_url( $url ); ?>"
     68                       class="plugin-favorite-heart<?php echo $is_favorited ? ' favorited' : ''; ?>">
    10269                                                <span class="screen-reader-text">
    10370                                                        <?php
    104                                                                 if ( $is_favorited ) {
    105                                                                         /* translators: %s: plugin name */
    106                                                                         printf( __( 'Unfavorite %s', 'wporg-plugins' ), get_the_title() );
    107                                                                 } else {
    108                                                                         /* translators: %s: plugin name */
    109                                                                         printf( __( 'Favorite %s', 'wporg-plugins' ), get_the_title() );
    110                                                                 }
     71                                                        if ( $is_favorited ) {
     72                                                                /* translators: %s: plugin name */
     73                                                                printf( __( 'Unfavorite %s', 'wporg-plugins' ), get_the_title() );
     74                                                        } else {
     75                                                                /* translators: %s: plugin name */
     76                                                                printf( __( 'Favorite %s', 'wporg-plugins' ), get_the_title() );
     77                                                        }
    11178                                                        ?>
    11279                                                </span>
    113                                         </a>
    114                                         <script>
    115                                                 jQuery( '.plugin-favorite-heart' )
    116                                                         .on( 'click touchstart animationend', function() {
    117                                                                 jQuery( this ).toggleClass( 'is-animating' );
     80                    </a>
     81                    <script>
     82                                                jQuery( ".plugin-favorite-heart" )
     83                                                        .on( "click touchstart animationend", function() {
     84                                                                jQuery( this ).toggleClass( "is-animating" );
    11885                                                        } )
    119                                                         .on( 'click', function() {
    120                                                                 jQuery( this ).toggleClass( 'favorited' );
     86                                                        .on( "click", function() {
     87                                                                jQuery( this ).toggleClass( "favorited" );
    12188                                                        } );
    122                                         </script>
    123                                 </div>
     89                    </script>
     90                </div>
    12491                        <?php endif; ?>
    12592
    12693                        <?php if ( 'publish' === get_post_status() || current_user_can( 'plugin_admin_view', get_post() ) ) : ?>
    127                                 <a class="plugin-download button download-button button-large" href="<?php echo esc_url( Template::download_link() ); ?>"><?php _e( 'Download', 'wporg-plugins' ); ?></a>
     94                <a class="plugin-download button download-button button-large"
     95                   href="<?php echo esc_url( Template::download_link() ); ?>"><?php _e( 'Download', 'wporg-plugins' ); ?></a>
    12896                        <?php endif; ?>
    129                 </div>
    130        
     97        </div>
     98
    13199                <?php
    132                 if ( in_array( $status, array( 'closed', 'disabled' ) ) ) {
    133                         add_filter( 'the_title', function( $title, $id ) {
     100                if ( Template::plugin_is_closed() ) {
     101                        add_filter( 'the_title', function ( $title, $id ) {
    134102                                $post = get_post( $id );
     103
    135104                                return $post->post_name;
    136105                        }, 10, 2 );
    137106                }
    138         the_title( '<h1 class="plugin-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h1>' ); ?>
     107                the_title( '<h1 class="plugin-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h1>' ); ?>
    139108
    140                 <span class="byline"><?php
    141                         $url = get_post_meta( get_the_ID(), 'header_author_uri', true );
     109        <span class="byline"><?php
     110                        $url    = get_post_meta( get_the_ID(), 'header_author_uri', true );
    142111                        $author = strip_tags( get_post_meta( get_the_ID(), 'header_author', true ) ) ?: get_the_author();
    143112
    144113                        printf(
    $status = get_post_status(); 
    149118                                ( $url ? '</a>' : '' ) .
    150119                                '</span>'
    151120                        );
    152                 ?></span>
    153         </header><!-- .entry-header -->
    154 
    155 <?php if ( ! get_query_var( 'plugin_advanced' ) ) { ?>
    156         <span id="description"></span>
    157         <span id="reviews"></span>
    158         <span id="installation"></span>
    159         <span id="developers"></span>
    160         <ul class="tabs clear">
    161                 <li id="tablink-description"><a href='#description'><?php _e( 'Details', 'wporg-plugins' ); ?></a></li>
    162                 <li id="tablink-reviews"><a href='#reviews'><?php _e( 'Reviews', 'wporg-plugins' ); ?></a></li>
    163 <?php if ( isset( $content[ 'installation' ] ) && ! in_array( $status, array( 'closed', 'disabled' ) ) ) { ?>
    164                 <li id="tablink-installation"><a href='#installation'><?php _e( 'Installation', 'wporg-plugins' ); ?></a></li>
    165 <?php } ?>
    166                 <li id="tablink-support"><a href='<?php echo Template::get_support_url(); ?>'><?php _e( 'Support', 'wporg-plugins' ); ?></a></li>
    167                 <li id="tablink-developers"><a href='#developers'><?php _e( 'Development', 'wporg-plugins' ); ?></a></li>
    168     </ul>
    169 <?php } ?>
    170         <div class="entry-content">
     121                        ?></span>
     122    </header><!-- .entry-header -->
     123
     124        <?php if ( ! get_query_var( 'plugin_advanced' ) ) { ?>
     125        <span id="description"></span>
     126        <span id="reviews"></span>
     127        <span id="installation"></span>
     128        <span id="developers"></span>
     129        <ul class="tabs clear">
     130            <li id="tablink-description"><a href='#description'><?php _e( 'Details', 'wporg-plugins' ); ?></a></li>
     131            <li id="tablink-reviews"><a href='#reviews'><?php _e( 'Reviews', 'wporg-plugins' ); ?></a></li>
     132                        <?php if ( isset( $content['installation'] ) && ! Template::plugin_is_closed() ) { ?>
     133                <li id="tablink-installation"><a
     134                            href='#installation'><?php _e( 'Installation', 'wporg-plugins' ); ?></a></li>
     135                        <?php } ?>
     136            <li id="tablink-support"><a
     137                        href='<?php echo Template::get_support_url(); ?>'><?php _e( 'Support', 'wporg-plugins' ); ?></a>
     138            </li>
     139            <li id="tablink-developers"><a href='#developers'><?php _e( 'Development', 'wporg-plugins' ); ?></a></li>
     140        </ul>
     141        <?php } ?>
     142    <div class="entry-content">
    171143                <?php
    172144                if ( get_query_var( 'plugin_advanced' ) ) :
    173145                        get_template_part( 'template-parts/section-advanced' );
    174146                else:
    175147                        $plugin_sections = Template::get_plugin_sections();
    176148
    177                         foreach ( array( 'description', 'screenshots', 'installation', 'faq', 'reviews', 'developers', 'changelog' ) as $section_slug ) :
     149                        foreach (
     150                                array(
     151                                        'description',
     152                                        'screenshots',
     153                                        'installation',
     154                                        'faq',
     155                                        'reviews',
     156                                        'developers',
     157                                        'changelog',
     158                                ) as $section_slug
     159                        ) :
    178160                                if ( ! isset( $content[ $section_slug ] ) ) {
    179161                                        continue;
    180162                                }
    181163
    182                                 if ( 'description' === $section_slug && in_array( $status, array( 'closed', 'disabled' ) ) ) {
    183                                 // Don't show the description for closed plugins
    184                                         $section_content = '<div class="plugin-notice notice notice-error notice-alt"><p>' . $message . '</p></div>';
    185                             if ( get_current_user_id() == get_post()->post_author ) {
    186                                     $section_content .= '<div class="plugin-notice notice notice-info notice-alt"><p>' .
    187                                                         sprintf(
    188                                                         /* translators: 1: plugins@wordpress.org */
    189                                                                 __( 'If you did not request this change, please contact <a href="mailto:%1$s">%1$s</a> for a status. All developers with commit access are contacted when a plugin is closed, with the reasons why, so check your spam email too.', 'wporg-plugins' ),
    190                                                                 'plugins@wordpress.org'
    191                                                         ) . '</p></div><!-- .plugin-notice -->';
    192                             }
    193                                 }
    194                                 else if ( in_array( $section_slug, array( 'screenshots', 'installation', 'faq', 'changelog' ) ) && in_array( $status, array( 'closed', 'disabled' ) ) ) {
    195                                 $section_content = '';
    196                                 }
    197                                 else {
     164                                if ( 'description' === $section_slug && Template::plugin_is_closed() ) {
     165                                        // Don't show the description for closed plugins
     166                                        $section_content = '<div class="plugin-notice notice ' . $message['notice_type'] . ' notice-alt"><p>' . $message['message'] . '</p></div>';
     167                                        if ( get_current_user_id() == get_post()->post_author ) {
     168                                                $section_content .= '<div class="plugin-notice notice notice-info notice-alt"><p>'
     169                                                                    . Template::plugin_closed_author_info()
     170                                                                    . '</p></div><!-- .plugin-notice -->';
     171                                        }
     172                                } else if ( in_array( $section_slug, array(
     173                                                'screenshots',
     174                                                'installation',
     175                                                'faq',
     176                                                'changelog',
     177                                        ) ) && Template::plugin_is_closed() ) {
     178                                        $section_content = '';
     179                                } else {
    198180                                        $section_content = trim( apply_filters( 'the_content', $content[ $section_slug ], $section_slug ) );
    199181                                }
    200182
    $status = get_post_status(); 
    217199                        endforeach;
    218200                endif; // plugin_advanced
    219201                ?>
    220         </div><!-- .entry-content -->
     202    </div><!-- .entry-content -->
    221203
    222         <div class="entry-meta">
     204    <div class="entry-meta">
    223205                <?php
    224206                get_template_part( 'template-parts/plugin-sidebar', ( get_query_var( 'plugin_advanced' ) ? 'advanced' : '' ) );
    225207                ?>
    226         </div><!-- .entry-meta -->
     208    </div><!-- .entry-meta -->
    227209</article><!-- #post-## -->
  • wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/section-advanced.php

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/section-advanced.php wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/template-parts/section-advanced.php
    index 55b0c6e4..50067c5f 100644
     
    22/**
    33 * Template part for displaying the plugin administration sections.
    44 *
    5  * @link https://codex.wordpress.org/Template_Hierarchy
     5 * @link    https://codex.wordpress.org/Template_Hierarchy
    66 *
    77 * @package WordPressdotorg\Plugin_Directory\Theme
    88 */
    99
    1010namespace WordPressdotorg\Plugin_Directory\Theme;
     11
    1112use WordPressdotorg\Plugin_Directory\Plugin_Directory;
    1213use WordPressdotorg\Plugin_Directory\Template;
     14
    1315?>
    1416
    1517<div id="admin" class="section">
    16     <?php
    17     $status  = get_post_status();
    18     if ( in_array( $status, array( 'closed', 'disabled' ) ) ) {
    19             echo '<div class="plugin-notice notice notice-error notice-alt"><p>' . __( 'This plugin has been closed and is no longer available for download.', 'wporg-plugins' ) . '</p></div>';
    20             if ( get_current_user_id() == get_post()->post_author ) {
    21                     echo '<div class="plugin-notice notice notice-info notice-alt"><p>' .
    22                                         sprintf(
    23                                         /* translators: 1: plugins@wordpress.org */
    24                                                 __( 'If you did not request this change, please contact <a href="mailto:%1$s">%1$s</a> for a status. All developers with commit access are contacted when a plugin is closed, with the reasons why, so check your spam email too.', 'wporg-plugins' ),
    25                                                 'plugins@wordpress.org'
    26                                         ) . '</p></div><!-- .plugin-notice -->';
    27             }
    28     }
    29 
    30     ?>
    31         <h2><?php _e( 'Plugin Stats', 'wporg-plugins' ); ?></h2>
    32 
    33         <h4><?php _e( 'Active versions', 'wporg-plugins' ); ?></h4>
    34         <div id="plugin-version-stats" class="chart version-stats"></div>
    35 
    36         <h4><?php _e( 'Downloads Per Day', 'wporg-plugins' ); ?></h4>
    37         <div id="plugin-download-stats" class="chart download-stats"></div>
    38 
    39         <h5><?php _e( 'Downloads history', 'wporg-plugins' ); ?></h5>
    40         <table id="plugin-download-history-stats" class="download-history-stats">
    41                 <tbody></tbody>
    42         </table>
    43 
    4418        <?php
     19        if ( Template::plugin_is_closed() ) {
     20                $message = Template::plugin_not_active_reason();
     21                echo '<div class="plugin-notice notice ' . $message['notice_type'] . ' notice-alt"><p>' . $message['message'] . '</p></div>';
     22                if ( get_current_user_id() == get_post()->post_author ) {
     23                        echo '<div class="plugin-notice notice notice-info notice-alt"><p>'
     24                             . Template::plugin_closed_author_info()
     25                             . '</p></div><!-- .plugin-notice -->';
     26                }
     27        }
    4528
    46                 $tags = (array) get_post_meta( $post->ID, 'tagged_versions', true );
    47                 // Sort the versions by version
    48                 usort( $tags, 'version_compare' );
    49                 // We'll want to add a Development Version if it exists
    50                 $tags[] = 'trunk';
     29        ?>
     30    <h2><?php _e( 'Plugin Stats', 'wporg-plugins' ); ?></h2>
    5131
    52                 // Remove the current version, this may be trunk.
    53                 $tags = array_diff( $tags, array( get_post_meta( $post->ID, 'stable_tag', true ) ) );
     32    <h4><?php _e( 'Active versions', 'wporg-plugins' ); ?></h4>
     33    <div id="plugin-version-stats" class="chart version-stats"></div>
    5434
    55                 // List Trunk, followed by the most recent non-stable release.
    56                 $tags = array_reverse( $tags );
     35    <h4><?php _e( 'Downloads Per Day', 'wporg-plugins' ); ?></h4>
     36    <div id="plugin-download-stats" class="chart download-stats"></div>
    5737
    58                 if ( $tags && 'publish' === get_post_status() ) {
    59                         echo '<h5>' . __( 'Previous Versions', 'wporg-plugins' ) . '</h5>';
     38    <h5><?php _e( 'Downloads history', 'wporg-plugins' ); ?></h5>
     39    <table id="plugin-download-history-stats" class="download-history-stats">
     40        <tbody></tbody>
     41    </table>
    6042
    61                         echo '<div class="plugin-notice notice notice-info notice-alt"><p>' . __( 'Previous versions of this plugin may not be secure or stable and are available for testing purposes only.', 'wporg-plugins' ) . '</p></div>';
     43        <?php
    6244
    63                         echo '<select class="previous-versions" onchange="getElementById(\'download-previous-link\').href=this.value;">';
    64                         foreach ( $tags as $version ) {
    65                                 $text = ( 'trunk' == $version ? __( 'Development Version', 'wporg-plugins' ) : $version );
    66                                 printf( '<option value="%s">%s</option>', esc_attr( Template::download_link( $post, $version ) ), esc_html( $text ) );
    67                         }
    68                         echo '</select> ';
     45        $tags = (array) get_post_meta( get_the_ID(), 'tagged_versions', true );
     46        // Sort the versions by version
     47        usort( $tags, 'version_compare' );
     48        // We'll want to add a Development Version if it exists
     49        $tags[] = 'trunk';
    6950
    70                         printf(
    71                                 '<a href="%s" id="download-previous-link" class="button">%s</a>',
    72                                 esc_url( Template::download_link( $post, reset( $tags ) ) ),
    73                                 __( 'Download', 'wporg-plugins' )
    74                         );
     51        // Remove the current version, this may be trunk.
     52        $tags = array_diff( $tags, array( get_post_meta( get_the_ID(), 'stable_tag', true ) ) );
     53
     54        // List Trunk, followed by the most recent non-stable release.
     55        $tags = array_reverse( $tags );
     56
     57        if ( $tags && 'publish' === get_post_status() ) {
     58                echo '<h5>' . __( 'Previous Versions', 'wporg-plugins' ) . '</h5>';
     59
     60                echo '<div class="plugin-notice notice notice-info notice-alt"><p>' . __( 'Previous versions of this plugin may not be secure or stable and are available for testing purposes only.', 'wporg-plugins' ) . '</p></div>';
     61
     62                echo '<select class="previous-versions" onchange="getElementById(\'download-previous-link\').href=this.value;">';
     63                foreach ( $tags as $version ) {
     64                        $text = ( 'trunk' == $version ? __( 'Development Version', 'wporg-plugins' ) : $version );
     65                        printf( '<option value="%s">%s</option>', esc_attr( Template::download_link( get_post(), $version ) ), esc_html( $text ) );
    7566                }
     67                echo '</select> ';
     68
     69                printf(
     70                        '<a href="%s" id="download-previous-link" class="button">%s</a>',
     71                        esc_url( Template::download_link( get_post(), reset( $tags ) ) ),
     72                        __( 'Download', 'wporg-plugins' )
     73                );
     74        }
    7675
    7776        ?>
    7877</div>