Making WordPress.org

Changeset 9711


Ignore:
Timestamp:
04/09/2020 06:54:12 AM (6 years ago)
Author:
dd32
Message:

Translate: Restore the Waiting Counts for Plugins/Themes as their own columns.

The column values are updated twice daily on a cron.

Fixes #3155.

Location:
sites/trunk/wordpress.org/public_html/wp-content/plugins
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/templates/stats-overview.php

    r9618 r9711  
    1717                                <?php foreach ( $projects as $slug => $project ) :
    1818                                        $name = str_replace( array( 'WordPress.org ', 'WordPress for ', 'WordPress ', 'ectory', ' - Development' ), '', $project->name );
     19                                        if ( $slug == 'wp-plugins' || $slug == 'wp-themes' ) {
     20                                                $name = "Waiting $name";
     21                                        }
    1922                                        ?>
    2023                                        <th class="col-<?php echo esc_attr( sanitize_title( $name ) ); ?>"><?php echo esc_html( $name ); ?></th>
     
    4750                                                        $percent = $translation_locale_statuses[ $locale_slug ][ $project->path ];
    4851
    49                                                         if ( 'waiting' === $project->path ) {
     52                                                        if ( 'waiting' === $project->path || 'wp-plugins' === $project->path || 'wp-themes' === $project->path ) {
     53                                                                $project_link_title = '';
     54                                                                if ( 'wp-plugins' === $project->path || 'wp-themes' === $project->path ) {
     55                                                                        $project_link_title = "Last Updated {$project->cache_last_updated}";
     56
     57                                                                        // Filter Plugins/Themes to Waiting (Most first) - Relying upon these being the last items.
     58                                                                        $projecturl = add_query_arg( 'filter', 'strings-waiting-and-fuzzy', $projecturl );
     59                                                                }
     60
    5061                                                                // Color code it on -0~500 waiting strings
    5162                                                                $percent_class = 100-min( (int) ( $percent / 50 ) * 10, 100 );
     
    5566                                                                }
    5667                                                                $percent_class = 'percent' . $percent_class;
    57                                                                 echo '<td data-column-title="' . esc_attr( $project_name ) . '" data-sort-value="'. esc_attr( $percent ) . '" class="' . $percent_class .'"><a href="' . esc_url( $projecturl ) . '">' . number_format( $percent ) . '</a></td>';
     68                                                                echo '<td data-column-title="' . esc_attr( $project_name ) . '" data-sort-value="'. esc_attr( $percent ) . '" class="' . $percent_class .'"><a href="' . esc_url( $projecturl ) . '" title="' . esc_attr( $project_link_title ) . '">' . number_format( $percent ) . '</a></td>';
    5869                                                        } else {
    5970                                                                $percent_class = 'percent' . (int) ( $percent / 10 ) * 10;
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-routes/inc/class-plugin.php

    r9616 r9711  
    4747
    4848                add_action( 'init', [ $this, 'respect_robots_txt' ], 9 );
     49
     50                add_action( 'init', [ $this, 'cron_tasks' ] );
    4951        }
    5052
     
    5860                // ?gp_route=robots.txt is here, as GlotPress ultimately is the router for the request.
    5961                add_rewrite_rule( '^robots\.txt$', 'index.php?robots=1&gp_route=robots.txt', 'top' );
     62        }
     63
     64        /**
     65         * Some pages rely upon a regular cron task to update the stats rather than live updates.
     66         */
     67        function cron_tasks() {
     68                if ( ! wp_next_scheduled ( 'wporg_gp_stats_cache_waiting_strings' ) ) {
     69                        wp_schedule_event( time(), 'twicedaily', 'wporg_gp_stats_cache_waiting_strings' );
     70                }
     71                add_action( 'wporg_gp_stats_cache_waiting_strings', [ __NAMESPACE__ . '\Routes\Stats', 'cache_waiting_strings' ] );
    6072        }
    6173
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-routes/inc/routes/class-stats.php

    r9018 r9711  
    1313 */
    1414class Stats extends GP_Route {
     15
     16        /**
     17         * Cache some expensive queries to be run on a Cron task.
     18         */
     19        public function cache_waiting_strings() {
     20                global $wpdb;
     21
     22                $cached_projects = [
     23                        GP::$project->by_path( 'wp-plugins' ),
     24                        GP::$project->by_path( 'wp-themes' ),
     25                ];
     26                $sql = "SELECT
     27                                locale, locale_slug,
     28                                SUM( stats.waiting ) + SUM( stats.fuzzy ) as waiting_strings
     29                        FROM {$wpdb->project_translation_status} stats
     30                                LEFT JOIN {$wpdb->gp_projects} p ON stats.project_id = p.id
     31                        WHERE
     32                                p.parent_project_id = %d
     33                                AND p.active = 1
     34                        GROUP BY locale, locale_slug";
     35
     36                foreach ( $cached_projects as $project ) {
     37                        $rows = $wpdb->get_results( $wpdb->prepare( $sql, $project->id ) );
     38
     39                        $cached_data = [];
     40                        foreach ( $rows as $set ) {
     41                                $locale_key = $set->locale;
     42                                if ( 'default' != $set->locale_slug ) {
     43                                        $locale_key = $set->locale . '/' . $set->locale_slug;
     44                                }
     45       
     46                                $cached_data[ $locale_key ] = (int) $set->waiting_strings;
     47                        }
     48                        $cached_data[ 'last_updated' ] = time();
     49
     50                        update_option( __CLASS__ . '_cached_waiting_' . $project->slug, $cached_data, false );
     51                }
     52
     53        }
    1554
    1655        public function get_stats_overview() {
     
    2766                        'apps/ios' => false,
    2867                        'waiting' => false,
     68                        'wp-themes' => false,
     69                        'wp-plugins' => false,
    2970                );
    3071
     
    84125
    85126                // Append the Plugins/Themes waiting strings
    86                 /*$parent_project_ids = implode(',', array(
    87                         GP::$project->by_path( 'wp-plugins' )->id,
    88                         GP::$project->by_path( 'wp-themes' )->id,
    89                 ) );
    90                 $sql = "SELECT
    91                                 locale, locale_slug,
    92                                 SUM( stats.waiting ) + SUM( stats.fuzzy ) as waiting_strings
    93                         FROM {$wpdb->project_translation_status} stats
    94                                 LEFT JOIN {$wpdb->gp_projects} p ON stats.project_id = p.id
    95                         WHERE
    96                                 p.parent_project_id IN ( $parent_project_ids )
    97                                 AND p.active = 1
    98                         GROUP BY locale, locale_slug";
    99 
    100                 $rows = $wpdb->get_results( $sql );
    101                 foreach ( $rows as $set ) {
    102                         $locale_key = $set->locale;
    103                         if ( 'default' != $set->locale_slug ) {
    104                                 $locale_key = $set->locale . '/' . $set->locale_slug;
    105                         }
    106 
    107                         $translation_locale_statuses[ $locale_key ]['waiting'] += (int) $set->waiting_strings;
    108                 }*/
     127                foreach ( [ 'wp-plugins', 'wp-themes' ] as $project_slug ) {
     128                        $cached_data = get_option( __CLASS__ . '_cached_waiting_' . $project_slug, [] );
     129                        $projects[ $project_slug ]->cache_last_updated = gmdate( 'Y-m-d H:i:s \U\T\C', $cached_data['last_updated'] );
     130                        foreach ( $cached_data as $locale => $waiting ) {
     131                                $translation_locale_statuses[ $locale ][ $project_slug ] = $waiting;
     132                        }
     133                }
    109134
    110135                // Calculate a list of [Locale] = % subtotals
Note: See TracChangeset for help on using the changeset viewer.