Changeset 8249
- Timestamp:
- 02/14/2019 06:43:05 AM (6 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-routes/inc/class-plugin.php
r6851 r8249 88 88 * - (/locale)/$locale/$dir/glossary/-export 89 89 * - (/locale)/$locale/$dir/glossary/-import 90 * - /locale/$locale/$dir/stats(?:/(plugins|themes))?s 90 91 * - /stats/? 91 92 * - /projects/wp-plugins/$project … … 143 144 GP::$router->prepend( "(/locale)/$locale/$dir/glossary/-import", array( 'GP_Route_Glossary_Entry', 'import_glossary_entries_get' ) ); 144 145 GP::$router->prepend( "(/locale)/$locale/$dir/glossary/-import", array( 'GP_Route_Glossary_Entry', 'import_glossary_entries_post' ), 'post' ); 146 GP::$router->prepend( "/locale/$locale/$dir/stats(?:/(plugins|themes))?", array( __NAMESPACE__ . '\Routes\Stats', 'get_stats_plugin_theme_overview' ) ); 145 147 GP::$router->prepend( '/stats', array( __NAMESPACE__ . '\Routes\Stats', 'get_stats_overview' ) ); 146 148 GP::$router->prepend( '/consistency', array( __NAMESPACE__ . '\Routes\Consistency', 'get_search_form' ) ); -
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-routes/inc/routes/class-stats.php
r6689 r8249 5 5 use GP; 6 6 use GP_Route; 7 use GP_Locales; 7 8 8 9 /** … … 138 139 } 139 140 141 public function get_stats_plugin_theme_overview( $locale, $locale_slug, $view = false ) { 142 global $wpdb; 143 if ( ! $locale || ! $locale_slug || ! $view ) { 144 wp_redirect( '/stats', 301 ); 145 die(); 146 } 147 148 $gp_locale = GP_Locales::by_slug( $locale ); 149 150 $items = array(); 151 if ( 'plugins' == $view ) { 152 // Fetch top 100 plugins.. 153 $items = get_transient( __METHOD__ . '_plugin_items' ); 154 if ( ! $items ) { 155 $api = wp_safe_remote_get( 'https://api.wordpress.org/plugins/info/1.2/?action=query_plugins&request[per_page]=250' ); 156 foreach ( json_decode( wp_remote_retrieve_body( $api ) )->plugins as $plugin ) { 157 $items[ $plugin->slug ] = (object) [ 158 'installs' => $plugin->active_installs, 159 ]; 160 } 161 set_transient( __METHOD__ . '_plugin_items', $items, DAY_IN_SECONDS ); 162 } 163 } elseif ( 'themes' == $view && defined( 'WPORG_THEME_DIRECTORY_BLOGID' ) ) { 164 $items = get_transient( __METHOD__ . '_theme_items' ); 165 if ( ! $items ) { 166 // The Themes API API isn't playing nice.. Easiest way.. 167 switch_to_blog( WPORG_THEME_DIRECTORY_BLOGID ); 168 $items = $wpdb->get_results( 169 "SELECT p.post_name as slug, pm.meta_value as installs 170 FROM {$wpdb->posts} p 171 LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = '_active_installs' 172 WHERE p.post_type = 'repopackage' AND p.post_status = 'publish' 173 ORDER BY pm.meta_value+0 DESC, p.post_date 174 LIMIT 250", 175 OBJECT_K 176 ); 177 restore_current_blog(); 178 foreach ( $items as $slug => $details ) { 179 unset( $items[$slug]->slug ); 180 } 181 set_transient( __METHOD__ . '_theme_items', $items, DAY_IN_SECONDS ); 182 } 183 } else { 184 wp_safe_redirect( '/stats' ); 185 die(); 186 } 187 188 $project_ids = []; 189 foreach ( $items as $slug => $details ) { 190 $items[$slug]->project = GP::$project->by_path( 'wp-' . $view . '/' . $slug ); 191 if ( ! $items[$slug]->project || ! $items[$slug]->project->active ) { 192 // Not all top-all-time plugins/themes have translation projects. 193 unset( $items[ $slug ] ); 194 continue; 195 } 196 197 if ( 198 'plugins' == $view && 199 ( 200 ! GP::$project->by_path( $items[$slug]->project->path . '/dev' ) 201 && 202 ! GP::$project->by_path( $items[$slug]->project->path . '/stable' ) 203 ) 204 ) { 205 // Not all top plugins are translation-aware, lets just skip those.. 206 unset( $items[ $slug ] ); 207 continue; 208 } 209 210 $project_ids[ $items[$slug]->project->id ] = $slug; 211 } 212 213 $sql_project_ids = implode( ', ', array_map( 'intval', array_keys( $project_ids ) ) ); 214 $stats = $wpdb->get_results( $wpdb->prepare( 215 "SELECT `project_id`, `all`, `current`, `waiting`, `untranslated` 216 FROM {$wpdb->project_translation_status} 217 WHERE project_id IN ($sql_project_ids) 218 AND locale = %s AND locale_slug = %s", 219 $locale, $locale_slug 220 ) ); 221 foreach ( $stats as $row ) { 222 $items[ $project_ids[ $row->project_id ] ]->stats = $row; 223 } 224 225 $this->tmpl( 'stats-plugin-themes-overview', compact( 'locale', 'locale_slug', 'view', 'gp_locale', 'items' ) ); 226 } 140 227 }
Note: See TracChangeset
for help on using the changeset viewer.