WordPress.org

Making WordPress.org


Ignore:
Timestamp:
09/03/2017 04:09:23 PM (2 years ago)
Author:
ocean90
Message:

Plugin Directory: Move available languages from development tab to meta section.

Fixes #3093.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/widgets/class-meta.php

    r5841 r5864  
    11<?php
    22namespace WordPressdotorg\Plugin_Directory\Widgets;
     3use WordPressdotorg\Plugin_Directory\Plugin_I18n;
    34use WordPressdotorg\Plugin_Directory\Template;
    45
     
    5152
    5253            <?php if ( $requires = (string) get_post_meta( $post->ID, 'requires', true ) ) : ?>
    53                 <li><?php 
     54                <li><?php
    5455                _e( 'Requires WordPress Version:', 'wporg-plugins' );
    5556                echo '<strong>' . esc_html( $requires ) . '</strong>';
     
    6263
    6364            <?php if ( $requires_php = (string) get_post_meta( $post->ID, 'requires_php', true ) ) : ?>
    64                 <li><?php 
     65                <li><?php
    6566                _e( 'Requires PHP Version:', 'wporg-plugins' );
    6667                echo '<strong>' . esc_html( $requires_php ) . '</strong>';
     
    6869            <?php endif; ?>
    6970
     71            <?php
     72            $available_languages = $this->available_languages();
     73            if ( $available_languages ) :
     74                $available_languages_count = count( $available_languages );
     75                ?>
     76                <li>
     77                    <?php
     78                    if ( 1 === $available_languages_count ) {
     79                        _e( 'Language:', 'wporg-plugins' );
     80                    } else {
     81                        _e( 'Languages:', 'wporg-plugins' );
     82                    }
     83
     84                    echo '<div class="languages">';
     85
     86                    if ( $available_languages_count > 1 ) :
     87                        ?>
     88                        <button type="button" class="button-link popover-trigger" aria-expanded="false" data-target="popover-languages">
     89                            <?php
     90                            printf(
     91                                /* translators: %s: Number of available languages */
     92                                _x( 'See all %s', 'languages' ),
     93                                $available_languages_count
     94                            )
     95                            ?>
     96                        </button>
     97                        <div id="popover-languages" class="popover is-top-right">
     98                            <div class="popover-arrow"></div>
     99
     100                            <button type="button" class="button-link popover-close" aria-label="<?php esc_attr_e( 'Close this popover', 'wporg-plugins' ); ?>">
     101                                <?php _e( 'Close', 'wporg-plugins' ); ?>
     102                            </button>
     103
     104                            <div class="popover-inner">
     105                                <?php echo wp_sprintf( '%l.', $available_languages ); ?>
     106                            </div>
     107                        </div>
     108                        <?php
     109                    else :
     110                        echo current( $available_languages );
     111                    endif;
     112
     113                    echo '</div>';
     114                    ?>
     115                </li>
     116                <?php
     117            endif;
     118            ?>
     119
    70120            <?php if ( $tags = get_the_term_list( $post->ID, 'plugin_tags', '<div class="tags">', '', '</div>' ) ) : ?>
    71121                <li class="clear"><?php
    72122                    $terms = get_the_terms( $post, 'plugin_tags' );
    73                     if ( 1 == count( $terms ) ) :
     123                    if ( 1 == count( $terms ) ) {
     124                        /* translators: %s: tag list */
    74125                        printf( __( 'Tag: %s', 'wporg-plugins' ), $tags );
    75                     else :
     126                    } else {
     127                        /* translators: %s: tag list */
    76128                        printf( __( 'Tags: %s', 'wporg-plugins' ), $tags );
    77                     endif;
     129                    }
    78130                ?></li>
    79131            <?php endif; ?>
     
    91143        echo $args['after_widget'];
    92144    }
     145
     146    /**
     147     * Retrieves available languages.
     148     *
     149     * @return array List of available languages.
     150     */
     151    private function available_languages() {
     152        $post    = get_post();
     153        $slug    = $post->post_name;
     154        $locales = Plugin_I18n::instance()->get_translations( $slug );
     155        $languages = [];
     156
     157        // We assume that the main language is English US, even though this
     158        // is not true for all plugins. Add it the list for localized directories.
     159        if ( 'en_US' !== get_locale() ) {
     160            $languages['English (US)'] = sprintf(
     161                '<a href="%1$s">%2$s</a>',
     162                esc_url( "https://wordpress.org/plugins/{$slug}/" ),
     163                'English (US)'
     164            );
     165        }
     166
     167        if ( ! empty( $locales ) ) {
     168            $locale_names = wp_list_pluck( $locales, 'name', 'wp_locale' );
     169            $wp_locales = wp_list_pluck( $locales,'wp_locale' );
     170
     171            $sites = get_sites( [
     172                'network_id' => WPORG_GLOBAL_NETWORK_ID,
     173                'public'     => 1,
     174                'path'       => '/',
     175                'locale__in' => $wp_locales,
     176                'number'     => '',
     177            ] );
     178
     179            if ( $sites ) {
     180                foreach ( $sites as $site ) {
     181                    $languages[ $locale_names[ $site->locale ] ] = sprintf(
     182                        '<a href="%1$s">%2$s</a>',
     183                        esc_url( "{$site->home}/plugins/{$slug}/" ),
     184                        $locale_names[ $site->locale ]
     185                    );
     186                }
     187            }
     188        }
     189
     190        ksort( $languages, SORT_NATURAL );
     191
     192        return $languages;
     193    }
    93194}
Note: See TracChangeset for help on using the changeset viewer.