Changeset 6287 for sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php
- Timestamp:
- 12/19/2017 04:22:37 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php
r5924 r6287 1 1 <?php 2 2 namespace WordPressdotorg\Plugin_Directory\API\Routes; 3 3 4 use WordPressdotorg\Plugin_Directory\Plugin_Directory; 4 5 use WordPressdotorg\Plugin_Directory\Plugin_i18n; … … 22 23 'methods' => WP_REST_Server::READABLE, 23 24 'callback' => array( $this, 'plugin_info' ), 24 'args' => array(25 'args' => array( 25 26 'plugin_slug' => array( 26 27 'validate_callback' => array( $this, 'validate_plugin_slug_callback' ), 27 ) 28 ) 28 ), 29 ), 29 30 ) ); 30 31 } … … 50 51 'status' => \WP_HTTP::BAD_REQUEST, 51 52 'params' => array( 52 'plugin_slug' => 'Invalid parameter.' 53 ) 53 'plugin_slug' => 'Invalid parameter.', 54 ), 54 55 ) 55 56 ); … … 57 58 58 59 // Support returning API data in different locales, even on wordpress.org (for api.wordpress.org usage) 59 if ( ! empty( $request['locale'] ) && ! in_array( strtolower( $request['locale'] ), array( 'en_us', 'en' ) ) ) {60 if ( ! empty( $request['locale'] ) && ! in_array( strtolower( $request['locale'] ), array( 'en_us', 'en' ) ) ) { 60 61 switch_to_locale( $request['locale'] ); 61 62 } … … 63 64 $post_id = $post->ID; 64 65 65 $result = array();66 $result['name'] = get_the_title();67 $result['slug'] = $post->post_name;66 $result = array(); 67 $result['name'] = get_the_title(); 68 $result['slug'] = $post->post_name; 68 69 $result['version'] = get_post_meta( $post_id, 'version', true ) ?: '0.0'; 69 70 … … 75 76 // Profile of the original plugin submitter 76 77 $result['author_profile'] = $this->get_user_profile_link( $post->post_author ); 77 $result['contributors'] = array();78 $result['contributors'] = array(); 78 79 79 80 $contributors = get_terms( array( 80 'taxonomy' => 'plugin_contributors',81 'taxonomy' => 'plugin_contributors', 81 82 'object_ids' => array( $post->ID ), 82 'orderby' => 'term_order',83 'fields' => 'names',83 'orderby' => 'term_order', 84 'fields' => 'names', 84 85 ) ); 85 86 … … 94 95 } 95 96 } 97 96 98 foreach ( $contributors as $contributor ) { 97 99 $user = get_user_by( 'slug', $contributor ); … … 101 103 102 104 $result['contributors'][ $user->user_nicename ] = array( 103 'profile' => $this->get_user_profile_link( $user ), 104 'avatar' => get_avatar_url( $user, array( 'default' => 'monsterid', 'rating' => 'g' ) ), 105 'display_name' => $user->display_name 105 'profile' => $this->get_user_profile_link( $user ), 106 'avatar' => get_avatar_url( $user, array( 107 'default' => 'monsterid', 108 'rating' => 'g', 109 ) ), 110 'display_name' => $user->display_name, 106 111 ); 107 112 } 108 113 109 $result['requires'] = get_post_meta( $post_id, 'requires', true ) ?: false;110 $result['tested'] = get_post_meta( $post_id, 'tested', true ) ?: false;111 $result['requires_php'] = get_post_meta( $post_id, 'requires_php', true ) ?: false;114 $result['requires'] = get_post_meta( $post_id, 'requires', true ) ?: false; 115 $result['tested'] = get_post_meta( $post_id, 'tested', true ) ?: false; 116 $result['requires_php'] = get_post_meta( $post_id, 'requires_php', true ) ?: false; 112 117 $result['compatibility'] = array(); 113 $result['rating'] = ( get_post_meta( $post_id, 'rating', true ) ?: 0 ) * 20; // Stored as 0.0 ~ 5.0, API outputs as 0..100114 $result['ratings'] = array_map( 'intval', (array) get_post_meta( $post_id, 'ratings', true ) );118 $result['rating'] = ( get_post_meta( $post_id, 'rating', true ) ?: 0 ) * 20; // Stored as 0.0 ~ 5.0, API outputs as 0..100 119 $result['ratings'] = array_map( 'intval', (array) get_post_meta( $post_id, 'ratings', true ) ); 115 120 krsort( $result['ratings'] ); 116 121 117 $result['num_ratings'] = array_sum( $result['ratings'] );118 $result['support_threads'] = intval( get_post_meta( $post_id, 'support_threads', true ) );122 $result['num_ratings'] = array_sum( $result['ratings'] ); 123 $result['support_threads'] = intval( get_post_meta( $post_id, 'support_threads', true ) ); 119 124 $result['support_threads_resolved'] = intval( get_post_meta( $post_id, 'support_threads_resolved', true ) ); 120 $result['active_installs'] = intval( get_post_meta( $post_id, 'active_installs', true ) );121 $result['downloaded'] = intval( get_post_meta( $post_id, 'downloads', true ) );122 $result['last_updated'] = gmdate( 'Y-m-d g:ia \G\M\T', strtotime( $post->post_modified_gmt ) );123 $result['added'] = gmdate( 'Y-m-d', strtotime( $post->post_date_gmt ) );124 $result['homepage'] = get_post_meta( $post_id, 'header_plugin_uri', true );125 $result['sections'] = array();126 127 $_pages = preg_split( "#<!--section=(.+?)-->#", $post->post_content, - 1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );125 $result['active_installs'] = intval( get_post_meta( $post_id, 'active_installs', true ) ); 126 $result['downloaded'] = intval( get_post_meta( $post_id, 'downloads', true ) ); 127 $result['last_updated'] = gmdate( 'Y-m-d g:ia \G\M\T', strtotime( $post->post_modified_gmt ) ); 128 $result['added'] = gmdate( 'Y-m-d', strtotime( $post->post_date_gmt ) ); 129 $result['homepage'] = get_post_meta( $post_id, 'header_plugin_uri', true ); 130 $result['sections'] = array(); 131 132 $_pages = preg_split( '#<!--section=(.+?)-->#', $post->post_content, - 1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); 128 133 for ( $i = 0; $i < count( $_pages ); $i += 2 ) { 129 134 $result['sections'][ $_pages[ $i ] ] = apply_filters( 'the_content', $_pages[ $i + 1 ], $_pages[ $i ] ); 130 135 } 131 136 $result['sections']['screenshots'] = ''; // placeholder to put screenshots prior to reviews at the end. 132 $result['sections']['reviews'] = $this->get_plugin_reviews_markup( $post->post_name );133 134 if ( ! empty( $result['sections']['faq'] ) ) {137 $result['sections']['reviews'] = $this->get_plugin_reviews_markup( $post->post_name ); 138 139 if ( ! empty( $result['sections']['faq'] ) ) { 135 140 $result['sections']['faq'] = $this->get_simplified_faq_markup( $result['sections']['faq'] ); 136 141 } 137 142 138 143 $result['description'] = $result['sections']['description']; 139 144 140 145 $result['short_description'] = get_the_excerpt(); 141 $result['download_link'] = Template::download_link( $post );146 $result['download_link'] = Template::download_link( $post ); 142 147 143 148 $result['screenshots'] = array(); 144 $descriptions = get_post_meta( $post->ID, 'screenshots', true ) ?: array();145 $screen_shots = get_post_meta( $post->ID, 'assets_screenshots', true ) ?: array();149 $descriptions = get_post_meta( $post->ID, 'screenshots', true ) ?: array(); 150 $screen_shots = get_post_meta( $post->ID, 'assets_screenshots', true ) ?: array(); 146 151 147 152 /* … … 150 155 */ 151 156 foreach ( $screen_shots as $image ) { 152 $src = Template::get_asset_url( $post, $image );157 $src = Template::get_asset_url( $post, $image ); 153 158 $caption = ''; 154 if ( $descriptions && ! empty( $descriptions[ (int)$image['resolution'] ] ) ) {155 $caption = $descriptions[ (int) $image['resolution'] ];159 if ( $descriptions && ! empty( $descriptions[ (int) $image['resolution'] ] ) ) { 160 $caption = $descriptions[ (int) $image['resolution'] ]; 156 161 $caption = Plugin_I18n::instance()->translate( 'screenshot-' . $image['resolution'], $caption, [ 'post_id' => $post->ID ] ); 157 162 } … … 199 204 $result['icons'] = array(); 200 205 if ( $icons = Template::get_plugin_icon( $post ) ) { 201 if ( ! empty( $icons['icon'] ) && empty( $icons['generated'] ) ) {206 if ( ! empty( $icons['icon'] ) && empty( $icons['generated'] ) ) { 202 207 $result['icons']['1x'] = $icons['icon']; 203 } elseif ( ! empty( $icons['icon'] ) && ! empty( $icons['generated'] ) ) {208 } elseif ( ! empty( $icons['icon'] ) && ! empty( $icons['generated'] ) ) { 204 209 $result['icons']['default'] = $icons['icon']; 205 210 } 206 if ( ! empty( $icons['icon_2x'] ) ) {211 if ( ! empty( $icons['icon_2x'] ) ) { 207 212 $result['icons']['2x'] = $icons['icon_2x']; 208 213 } 209 if ( ! empty( $icons['svg'] ) ) {214 if ( ! empty( $icons['svg'] ) ) { 210 215 $result['icons']['svg'] = $icons['svg']; 211 216 } … … 213 218 214 219 // That's all folks! 215 216 220 return $result; 217 221 } … … 225 229 protected function get_user_profile_link( $user ) { 226 230 $u = false; 227 if ( $user instance Of \WP_User ) {231 if ( $user instanceof \WP_User ) { 228 232 $u = $user; 229 233 } else { … … 274 278 <div class="review-title-section"> 275 279 <h4 class="review-title"><?php echo esc_html( $review->post_title ); ?></h4> 276 <div class="star-rating"><?php 280 <div class="star-rating"> 281 <?php 277 282 /* Core has .star-rating .star colour styling, which is why we use a custom wrapper and template */ 278 283 echo Template::dashicons_stars( array( 279 'rating' => $review->post_rating,284 'rating' => $review->post_rating, 280 285 'template' => '<span class="star %1$s"></span>', 281 286 ) ); 282 ?></div> 287 ?> 288 </div> 283 289 </div> 284 290 <p class="reviewer"> 285 291 <?php 286 $review_author_markup_profile = esc_url( 'https://profiles.wordpress.org/' . $reviewer->user_nicename ); 287 $review_author_markup = '<a href="' . $review_author_markup_profile . '">'; 288 $review_author_markup .= get_avatar( $reviewer->ID, 16, 'monsterid' ) . '</a>'; 289 $review_author_markup .= '<a href="' . $review_author_markup_profile . '" class="reviewer-name">'; 290 $review_author_markup .= $reviewer->display_name; 291 if ( $reviewer->display_name != $reviewer->user_login ) { 292 $review_author_markup .= " <small>({$reviewer->user_login})</small>"; 293 } 294 $review_author_markup .= '</a>'; 295 296 printf( __( 'By %1$s on %2$s', 'wporg-plugins' ), 297 $review_author_markup, 298 '<span class="review-date">' . gmdate( 'F j, Y', strtotime( $review->post_modified ) ) . '</span>' 299 ); 292 $review_author_markup_profile = esc_url( 'https://profiles.wordpress.org/' . $reviewer->user_nicename ); 293 $review_author_markup = '<a href="' . $review_author_markup_profile . '">'; 294 $review_author_markup .= get_avatar( $reviewer->ID, 16, 'monsterid' ) . '</a>'; 295 $review_author_markup .= '<a href="' . $review_author_markup_profile . '" class="reviewer-name">'; 296 $review_author_markup .= $reviewer->display_name; 297 if ( $reviewer->display_name != $reviewer->user_login ) { 298 $review_author_markup .= " <small>({$reviewer->user_login})</small>"; 299 } 300 $review_author_markup .= '</a>'; 301 302 printf( 303 __( 'By %1$s on %2$s', 'wporg-plugins' ), 304 $review_author_markup, 305 '<span class="review-date">' . gmdate( 'F j, Y', strtotime( $review->post_modified ) ) . '</span>' 306 ); 300 307 ?> 301 308 </p> … … 306 313 <?php 307 314 return ob_get_clean(); 308 309 315 } 310 316 … … 320 326 $markup = str_replace( 321 327 array( '<dl>', '</dl>', '<dt>', '</dt>', '<dd>', '</dd>' ), 322 array( '', '','<h4>', '</h4>', '<p>', '</p>' ),328 array( '', '', '<h4>', '</h4>', '<p>', '</p>' ), 323 329 $markup 324 330 ); … … 349 355 return $markup; 350 356 } 351 352 357 } 353
Note: See TracChangeset
for help on using the changeset viewer.