WordPress.org

Making WordPress.org

Ticket #3028: 3028.diff

File 3028.diff, 15.2 KB (added by diddledan, 11 months ago)

Attempt at moving the translations section from the developers tab to the details tab of a plugin listing

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

    diff --git wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php
    index 3e02837a0..773110eaa 100644
    class Plugin_Directory { 
    509509                add_rewrite_rule( '^([^/]+)/advanced/?$', 'index.php?name=$matches[1]&plugin_advanced=1', 'top' );
    510510
    511511                // Handle the old plugin tabs URLs.
    512                 add_rewrite_rule( '^([^/]+)/(installation|faq|screenshots|changelog|stats|developers|other_notes)/?$', 'index.php?redirect_plugin=$matches[1]&redirect_plugin_tab=$matches[2]', 'top' );
     512                add_rewrite_rule( '^([^/]+)/(installation|faq|screenshots|changelog|stats|developers|other_notes|translations)/?$', 'index.php?redirect_plugin=$matches[1]&redirect_plugin_tab=$matches[2]', 'top' );
    513513
    514514                // Handle content for broken clients that send #'s to the server
    515515                add_rewrite_rule( '^([^/]+)/\#(.*)/?$', 'index.php?name=$matches[1]', 'top' );
    class Plugin_Directory { 
    543543         */
    544544        public function register_shortcodes() {
    545545                add_shortcode( 'wporg-plugins-developers', array( __NAMESPACE__ . '\Shortcodes\Developers', 'display' ) );
     546                add_shortcode( 'wporg-plugins-translations', array( __NAMESPACE__ . '\Shortcodes\Translations', 'display' ) );
    546547                add_shortcode( 'wporg-plugin-upload', array( __NAMESPACE__ . '\Shortcodes\Upload', 'display' ) );
    547548                add_shortcode( 'wporg-plugins-screenshots', array( __NAMESPACE__ . '\Shortcodes\Screenshots', 'display' ) );
    548549                add_shortcode( 'wporg-plugins-reviews', array( __NAMESPACE__ . '\Shortcodes\Reviews', 'display' ) );
    class Plugin_Directory { 
    559560                        'vimeo',
    560561                        'videopress',
    561562                        'wporg-plugins-developers',
     563                        'wporg-plugins-translations',
    562564                        'wporg-plugin-upload',
    563565                        'wporg-plugins-screenshots',
    564566                        'wporg-plugins-reviews',
    class Plugin_Directory { 
    12941296        public function split_post_content_into_pages( $content ) {
    12951297                $_pages        = preg_split( '#<!--section=(.+?)-->#', $content, - 1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
    12961298                $content_pages = array(
    1297                         'screenshots' => '[wporg-plugins-screenshots]',
    1298                         'developers'  => '[wporg-plugins-developers]',
    1299                         'reviews'     => '[wporg-plugins-reviews]',
     1299                        'screenshots'  => '[wporg-plugins-screenshots]',
     1300                        'developers'   => '[wporg-plugins-developers]',
     1301                        'translations' => '[wporg-plugins-translations]',
     1302                        'reviews'      => '[wporg-plugins-reviews]',
    13001303                );
    13011304
    13021305                for ( $i = 0; $i < count( $_pages ); $i += 2 ) {
  • 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 fd2b209a9..4bfc7064e 100644
    class Template { 
    272272                        'support',
    273273                        'reviews',
    274274                        'developers',
     275                        'translations',
    275276                );
    276277                if ( ! get_post_meta( $plugin->ID, 'screenshots', true ) && ! get_post_meta( $plugin->ID, 'assets_screenshots', true ) ) {
    277278                        unset( $default_sections[ array_search( 'screenshots', $default_sections ) ] );
    class Template { 
    337338                                        $url   = trailingslashit( $permalink ) . '/' . $section_slug . '/';
    338339                                        break;
    339340
     341                                case 'translations':
     342                                        $title = _x( 'Translations', 'plugin tab title', 'wporg-plugins' );
     343                                        $url   = trailingslashit( $permalink ) . $section_slug . '/';
     344                                        break;
     345
    340346                                default:
    341347                                        continue;
    342348                        }
  • wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-developers.php

    diff --git wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-developers.php wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-developers.php
    index d9249d12f..47900c087 100644
     
    11<?php
    22namespace WordPressdotorg\Plugin_Directory\Shortcodes;
    33
    4 use WordPressdotorg\Plugin_Directory\Plugin_I18n;
    54use WordPressdotorg\Plugin_Directory\Tools;
    65
    76/**
    class Developers { 
    3938                $output .= '</div>';
    4039
    4140                $output .= '<div class="plugin-development">';
    42 
    43                 $locales = Plugin_I18n::instance()->get_translations( $slug );
    44                 if ( ! empty( $locales ) ) {
    45                         $output .= '<p>';
    46 
    47                         $wp_locales    = wp_list_pluck( $locales, 'wp_locale' );
    48                         $locales_count = get_sites( [
    49                                 'network_id' => WPORG_GLOBAL_NETWORK_ID,
    50                                 'public'     => 1,
    51                                 'path'       => '/',
    52                                 'locale__in' => $wp_locales,
    53                                 'number'     => '',
    54                                 'count'      => true,
    55                         ] );
    56 
    57                         if ( $locales_count ) {
    58                                 $output .= sprintf(
    59                                         /* translators: 1: plugin name, 2: number of locales */
    60                                         _n(
    61                                                 '&#8220;%1$s&#8221; has been translated into %2$d locale.',
    62                                                 '&#8220;%1$s&#8221; has been translated into %2$d locales.',
    63                                                 $locales_count,
    64                                                 'wporg-plugins'
    65                                         ),
    66                                         $title,
    67                                         number_format_i18n( $locales_count )
    68                                 ) . ' ';
    69 
    70                                 $output .= sprintf(
    71                                         /* translators: URL to translator view */
    72                                         __( 'Thank you to <a href="%s">the translators</a> for their contributions.', 'wporg-plugins' ),
    73                                         esc_url( "https://translate.wordpress.org/projects/wp-plugins/{$slug}/contributors" )
    74                                 );
    75                                 $output .= '</p>';
    76                         }
    77                 }
    78 
    79                 $output .= '<p>' . sprintf(
    80                         '<a href="%1$s">%2$s</a>',
    81                         esc_url( 'https://translate.wordpress.org/projects/wp-plugins/' . $slug ),
    82                         sprintf(
    83                                 /* translators: %s: plugin name */
    84                                 __( 'Translate &#8220;%s&#8221; into your language.', 'wporg-plugins' ),
    85                                 $title
    86                         )
    87                 ) . '</p>';
    88 
    8941                $output .= '<h3>' . __( 'Interested in development?', 'wporg-plugins' ) . '</h3>';
    9042
    9143                if ( is_user_logged_in() ) {
  • new file wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-translations.php

    diff --git wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-translations.php wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-translations.php
    new file mode 100644
    index 000000000..ecf77145b
    - +  
     1<?php
     2namespace WordPressdotorg\Plugin_Directory\Shortcodes;
     3
     4use WordPressdotorg\Plugin_Directory\Plugin_I18n;
     5use WordPressdotorg\Plugin_Directory\Tools;
     6
     7/**
     8 * The [wporg-plugins-translations] shortcode handler to display translation information.
     9 *
     10 * @package WordPressdotorg\Plugin_Directory\Shortcodes
     11 */
     12class Translations {
     13
     14        /**
     15         * @return string
     16         */
     17        static function display() {
     18                $post   = get_post();
     19                $slug   = $post->post_name;
     20                $title  = get_the_title( $post );
     21                $output = '<div>';
     22
     23                $locales = Plugin_I18n::instance()->get_translations( $slug );
     24                if ( ! empty( $locales ) ) {
     25                        $output .= '<p>';
     26
     27            $wp_locales    = wp_list_pluck( $locales, 'wp_locale' );
     28            $locales_count = get_sites( [
     29                    'network_id' => WPORG_GLOBAL_NETWORK_ID,
     30                    'public'     => 1,
     31                    'path'       => '/',
     32                    'locale__in' => $wp_locales,
     33                    'number'     => '',
     34                    'count'      => true,
     35                        ] );
     36
     37                        if ( $locales_count ) {
     38                                $output .= sprintf(
     39                        /* translators: 1: plugin name, 2: number of locales */
     40                        _n(
     41                                '&#8220;%1$s&#8221; has been translated into %2$d locale.',
     42                                '&#8220;%1$s&#8221; has been translated into %2$d locales.',
     43                                $locales_count,
     44                                'wporg-plugins'
     45                        ),
     46                        $title,
     47                        number_format_i18n( $locales_count )
     48                                ) . ' ';
     49
     50                $output .= sprintf(
     51                        /* translators: URL to translator view */
     52                        __( 'Thank you to <a href="%s">the translators</a> for their contributions.', 'wporg-plugins' ),
     53                            esc_url( "https://translate.wordpress.org/projects/wp-plugins/{$slug}/contributors" )
     54                    );
     55                    $output .= '</p>';
     56            }
     57                }
     58
     59                $output .= '<p>' . sprintf(
     60                                '<a href="%1$s">%2$s</a>',
     61                                esc_url( 'https://translate.wordpress.org/projects/wp-plugins/' . $slug ),
     62                                sprintf(
     63                                                /* translators: %s: plugin name */
     64                                                __( 'Translate &#8220;%s&#8221; into your language.', 'wporg-plugins' ),
     65                                                $title
     66                                )
     67                ) . '</p>';
     68
     69                $output .= '</div>';
     70
     71                return $output;
     72        }
     73}
  • wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/plugin.jsx
    index 7a92f7534..b675baf14 100644
    import RatingsWidget from 'components/widget-area/widgets/ratings/index'; 
    2424import Screenshots from './sections/screenshots';
    2525import Section from './sections';
    2626import SupportWidget from 'components/widget-area/widgets/support/index';
     27import Translations from './sections/translations';
    2728
    2829export const Plugin = ( { plugin, translate } ) => {
    2930        if ( ! plugin ) {
    export const Plugin = ( { plugin, translate } ) => { 
    6768                                        numRatings={ plugin.ratings.length } />
    6869                                <Section slug="changelog" title="Changelog" content={ plugin.sections.changelog } />
    6970                                <Developers />
     71                                <Translations />
    7072                        </div>
    7173                        <div className="entry-meta">
    7274                                <MetaWidget />
  • new file wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/translations/index.jsx

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/translations/index.jsx wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/translations/index.jsx
    new file mode 100644
    index 000000000..481f66d99
    - +  
     1/**
     2 * External dependencies.
     3 */
     4import React, { Component, PropTypes } from 'react';
     5import { identity } from 'lodash';
     6import { localize } from 'i18n-calypso';
     7
     8export class Translations extends Component {
     9    static propTypes = {
     10        content: PropTypes.string,
     11        translate: PropTypes.func,
     12    };
     13
     14    static defaultProps = {
     15                content: null,
     16        translate: identity,
     17    };
     18
     19    render() {
     20        const { content, translate } = this.props;
     21
     22        if ( content ) {
     23            return (
     24                <div id="translations" className="section plugin-translations">
     25                    <h2 id="translations-header">{ translate( 'Translations' ) }</h2>
     26                    <div dangerouslySetInnerHTML={ { __html: content } } />
     27                </div>
     28            );
     29        }
     30
     31        return null;
     32    }
     33}
     34
     35export default localize( Translations );
  • wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/style.scss

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/translations/style.scss wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/sections/translations/style.scss
    new file mode 100644
    index 000000000..e69de29bb
    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/style.scss wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/components/plugin/style.scss
    index 8acb52fc6..566a6d27b 100644
     
    149149        span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #faq,
    150150        span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-developers,
    151151        span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-developers ~ button,
     152        span#reviews:not(:target) ~ span#installation:not(:target) ~ span#developers:not(:target) ~ .entry-content #tab-translations,
    152153        span#reviews:target ~ .entry-content #tab-reviews,
    153154        span#installation:target ~ .entry-content #tab-installation,
    154155        span#developers:target ~ .entry-content #tab-changelog,
  • wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/components/_components.scss

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/components/_components.scss wordpress.org/public_html/wp-content/themes/pub/wporg-plugins/client/styles/components/_components.scss
    index b222e188f..1396cd5d4 100644
     
    3636@import "../../components/plugin/sections/screenshots/style";
    3737@import "../../components/plugin/sections/stats/style";
    3838@import "../../components/plugin/sections/style";
     39@import "../../components/plugin/sections/translations/style";
    3940@import "../../components/plugin/style";
    4041@import "../../components/search-form/style";
    4142@import "../../components/search/style";
  • 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 3431c8ba8..1d61c3b2a 100644
    $plugin_title = $is_closed ? $post->post_name : get_the_title(); 
    5656                <span id="reviews"></span>
    5757                <span id="installation"></span>
    5858                <span id="developers"></span>
     59                <span id="translations"></span>
    5960                <ul class="tabs clear">
    6061                        <li id="tablink-description"><a href="#description"><?php esc_html_e( 'Details', 'wporg-plugins' ); ?></a></li>
    6162                        <li id="tablink-reviews"><a href="#reviews"><?php esc_html_e( 'Reviews', 'wporg-plugins' ); ?></a></li>
    $plugin_title = $is_closed ? $post->post_name : get_the_title(); 
    7879                else :
    7980                        $plugin_sections = Template::get_plugin_sections();
    8081
    81                         foreach ( array( 'description', 'screenshots', 'installation', 'faq', 'reviews', 'developers', 'changelog' ) as $section_slug ) :
     82                        foreach ( array( 'description', 'screenshots', 'installation', 'faq', 'reviews', 'developers', 'translations', 'changelog' ) as $section_slug ) :
    8283                                $section_content = '';
    8384
    8485                                if ( 'description' === $section_slug && $is_closed ) {
    8586                                        // Don't show the description for closed plugins, show a notice instead.
    8687                                        $section_content = get_closed_plugin_notice();
    8788
    88                                 } elseif ( ! in_array( $section_slug, [ 'screenshots', 'installation', 'faq', 'changelog' ], true ) || ! $is_closed ) {
     89                                } elseif ( ! in_array( $section_slug, [ 'screenshots', 'installation', 'faq', 'translations', 'changelog' ], true ) || ! $is_closed ) {
    8990                                        if ( isset( $content[ $section_slug ] ) ) {
    9091                                                $section_content = trim( apply_filters( 'the_content', $content[ $section_slug ], $section_slug ) );
    9192                                        }