Ticket #152: 152.2.patch
File 152.2.patch, 18.6 KB (added by , 6 years ago) |
---|
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-version-dropdown/inc/class-plugin.php
9 9 */ 10 10 private static $instance; 11 11 12 const META_KEY = 'wp_version'; 12 const META_KEY = 'wp_version'; 13 const PROJECT_META_KEY = 'project_version'; 13 14 14 15 /** 15 16 * Returns always the same instance of this plugin. … … 51 52 } 52 53 53 54 /** 54 * Output v alue topic version dropdown55 * Output version dropdown values for the topic. 55 56 */ 56 57 public function form_topic_version_dropdown() { 57 $ version = 0;58 $ other_version = '';59 $ versions = $this->get_wp_versions();58 $wp_version = 0; 59 $wp_other_version = ''; 60 $wp_versions = $this->get_wp_versions(); 60 61 61 62 // Post value passed 62 63 if ( bbp_is_topic_form_post_request() && isset( $_POST[ self::META_KEY ] ) ) { 63 $ version = $this->sanitize_wp_version( $_POST[ self::META_KEY ] );64 $wp_version = $this->sanitize_version( $_POST[ self::META_KEY ] ); 64 65 65 66 // No post value passed 66 67 } else if ( bbp_is_single_topic() || bbp_is_topic_edit() ) { 67 $version = $this->get_topic_version( array( 'id' => bbp_get_topic_id() ) ); 68 if ( false === $version ) { 69 $version = 0; 68 $topic_versions = $this->get_topic_version( array( 'id' => bbp_get_topic_id() ) ); 69 $wp_version = $topic_versions['wp_version']; 70 71 if ( false === $wp_version ) { 72 $wp_version = 0; 70 73 } 71 74 } 72 75 73 if ( ! empty( $ version ) && ! array_key_exists( $version, $versions ) ) {74 $ other_version = $version;75 $ version = 'other';76 if ( ! empty( $wp_version ) && ! array_key_exists( $wp_version, $wp_versions ) ) { 77 $wp_other_version = $wp_version; 78 $wp_version = 'other'; 76 79 } 77 80 ?> 78 81 <p> 79 <label for="wp-version"><?php esc_html_e( ' Version:', 'wporg-forums' ); ?></label><br />82 <label for="wp-version"><?php esc_html_e( 'WordPress Version:', 'wporg-forums' ); ?></label><br /> 80 83 <em><?php esc_html_e( 'Select the version of WordPress you are using.', 'wporg-forums' ); ?></em><br /> 81 84 82 85 <select name="<?php echo esc_attr( self::META_KEY ); ?>" id="wp-version"> 83 <?php foreach ( $ versions as $key => $label ) : ?>84 <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $ version ); ?>><?php echo esc_html( $label ); ?></option>86 <?php foreach ( $wp_versions as $key => $label ) : ?> 87 <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $wp_version ); ?>><?php echo esc_html( $label ); ?></option> 85 88 <?php endforeach; ?> 86 89 </select> 87 90 88 <label for="wp-other-version"><?php esc_html_e( 'Enter a different WordPressversion here:', 'wporg-forums' ); ?></label>89 <input type="text" name="wp_other_version" id="wp-other-version" value="<?php echo esc_attr( $ other_version ); ?>">91 <label for="wp-other-version"><?php esc_html_e( 'Enter a different version here:', 'wporg-forums' ); ?></label> 92 <input type="text" name="wp_other_version" id="wp-other-version" value="<?php echo esc_attr( $wp_other_version ); ?>"> 90 93 </p> 91 94 <?php 95 if ( ! class_exists( '\WordPressdotorg\Forums\Plugin' ) ) { 96 return; 97 } 98 99 $project = null; 100 $plugin_instance = \WordPressdotorg\Forums\Plugin::get_instance(); 101 102 if ( ! empty( $plugin_instance->plugins->plugin ) ) { 103 $project = $plugin_instance->plugins->plugin; 104 $project_type = 'plugin'; 105 $project_versions = $this->get_project_versions( $project_type, $project->post_name ); 106 107 $label = __( 'Plugin Version:', 'wporg-forums' ); 108 /* translators: %s: plugin name */ 109 $hint = _x( 'Select the version of %s you are using.', 'plugin', 'wporg-forums' ); 110 } elseif ( ! empty( $plugin_instance->themes->theme ) ) { 111 $project = $plugin_instance->themes->theme; 112 $project_type = 'theme'; 113 $project_versions = $this->get_project_versions( $project_type, $project->post_name ); 114 115 $label = __( 'Theme Version:', 'wporg-forums' ); 116 /* translators: %s: theme name */ 117 $hint = _x( 'Select the version of %s you are using.', 'theme', 'wporg-forums' ); 118 } 119 120 if ( ! $project ) { 121 return; 122 } 123 124 $project_version = 0; 125 $project_other_version = ''; 126 127 // Post value passed 128 if ( bbp_is_topic_form_post_request() && isset( $_POST[ self::PROJECT_META_KEY ] ) ) { 129 $project_version = $this->sanitize_version( $_POST[ self::PROJECT_META_KEY ] ); 130 131 // No post value passed 132 } else if ( bbp_is_single_topic() || bbp_is_topic_edit() ) { 133 $project_version = $topic_versions['project_version']; 134 135 if ( false === $project_version ) { 136 $project_version = 0; 137 } 138 } 139 140 if ( ! empty( $project_version ) && ! array_key_exists( $project_version, $project_versions ) ) { 141 $project_other_version = $project_version; 142 $project_version = 'other'; 143 } 144 ?> 145 <p> 146 <label for="project-version"><?php echo esc_html( sprintf( $label, $project->post_title ) ); ?></label><br /> 147 <em><?php echo esc_html( sprintf( $hint, $project->post_title ) ); ?></em><br /> 148 149 <select name="<?php echo esc_attr( self::PROJECT_META_KEY ); ?>" id="project-version"> 150 <?php foreach ( $project_versions as $key => $label ) : ?> 151 <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $project_version ); ?>><?php echo esc_html( $label ); ?></option> 152 <?php endforeach; ?> 153 </select> 154 155 <label for="project-other-version"><?php esc_html_e( 'Enter a different version here:', 'wporg-forums' ); ?></label> 156 <input type="text" name="project_other_version" id="project-other-version" value="<?php echo esc_attr( $project_other_version ); ?>"> 157 158 <input type="hidden" name="project_type" value="<?php echo esc_attr( $project_type ); ?>" /> 159 <input type="hidden" name="project_slug" value="<?php echo esc_attr( $project->post_name ); ?>" /> 160 </p> 161 <?php 92 162 } 93 163 164 /** 165 * Process topic form submission. 166 * 167 * @param int $topic_id Topic ID. 168 */ 94 169 public function topic_post_extras( $topic_id ) { 95 $version = false; 96 $versions = $this->get_wp_versions(); 97 if ( ( $_POST[ self::META_KEY ] ) && in_array( $_POST[ self::META_KEY ], $versions ) ) { 98 $version = $this->sanitize_wp_version( $_POST[ self::META_KEY ] ); 170 $wp_version = false; 171 $wp_versions = $this->get_wp_versions(); 172 173 if ( ( $_POST[ self::META_KEY ] ) && in_array( $_POST[ self::META_KEY ], $wp_versions ) ) { 174 $wp_version = $this->sanitize_version( $_POST[ self::META_KEY ] ); 99 175 } else if ( isset( $_POST['wp_other_version'] ) ) { 100 $ version = $this->sanitize_wp_version( $_POST['wp_other_version'] );176 $wp_version = $this->sanitize_version( $_POST['wp_other_version'] ); 101 177 } 102 178 103 if ( false !== $version ) { 179 $project_version = false; 180 181 if ( isset( $_POST['project_type'] ) && isset( $_POST['project_slug'] ) ) { 182 $project_type = sanitize_title_for_query( $_POST['project_type'] ); 183 $project_slug = sanitize_title_for_query( $_POST['project_slug'] ); 184 185 $project_versions = $this->get_project_versions( $project_type, $project_slug ); 186 187 if ( ( $_POST[ self::PROJECT_META_KEY ] ) && in_array( $_POST[ self::PROJECT_META_KEY ], $project_versions ) ) { 188 $project_version = $this->sanitize_version( $_POST[ self::PROJECT_META_KEY ] ); 189 } else if ( isset( $_POST['project_other_version'] ) ) { 190 $project_version = $this->sanitize_version( $_POST['project_other_version'] ); 191 } 192 } 193 194 if ( false !== $wp_version || false !== $project_version ) { 104 195 $this->set_topic_version( array( 105 'id' => $topic_id, 106 'version' => $version 196 'id' => $topic_id, 197 'wp_version' => $wp_version, 198 'project_version' => $project_version, 107 199 ) ); 108 200 } 109 201 } 110 202 203 /** 204 * Enqueue plugin scripts. 205 */ 111 206 public function enqueue_scripts() { 112 207 if ( 113 208 bbp_is_single_forum() || bbp_is_single_topic() || bbp_is_topic_edit() … … 118 213 } 119 214 } 120 215 216 /** 217 * Get version data for a particular topic. 218 * 219 * @param array $args Array of arguments. Accepts 'id'. 220 * @return array { 221 * Topic versions. 222 * 223 * @type string $wp_version WordPress version. 224 * @type string $project_version Plugin or theme version. 225 * } 226 */ 121 227 public static function get_topic_version( $args = array() ) { 122 228 123 229 // Parse arguments against default values … … 131 237 return; 132 238 } 133 239 134 $retval = get_post_meta( $topic->ID, self::META_KEY, true ); 240 $wp_version = get_post_meta( $topic->ID, self::META_KEY, true ); 241 $project_version = get_post_meta( $topic->ID, self::PROJECT_META_KEY, true ); 242 243 $retval = compact( 'wp_version', 'project_version' ); 244 135 245 return apply_filters( 'get_topic_version', $retval, $r, $args ); 136 246 } 137 247 248 /** 249 * Set version data for a particular topic. 250 * 251 * @param array { 252 * Array of arguments. 253 * 254 * @type int $id Topic ID. 255 * @type string $wp_version WordPress version. 256 * @type string $project_version Plugin or theme version. 257 * } 258 */ 138 259 public function set_topic_version( $args = array() ) { 139 260 140 261 // Parse arguments against default values 141 262 $r = bbp_parse_args( $args, array( 142 'id' => 0, 143 'version' => '', 263 'id' => 0, 264 'wp_version' => '', 265 'project_version' => '', 144 266 ), 'set_topic_version' ); 145 267 146 268 $topic = bbp_get_topic( $r['id'] ); … … 149 271 return; 150 272 } 151 273 152 if ( empty( $r['version'] ) ) { 153 delete_post_meta( $r['id'], self::META_KEY ); 154 } else { 155 update_post_meta( $r['id'], self::META_KEY, $r['version'] ); 274 if ( false !== $r['wp_version'] ) { 275 if ( empty( $r['wp_version'] ) ) { 276 delete_post_meta( $r['id'], self::META_KEY ); 277 } else { 278 update_post_meta( $r['id'], self::META_KEY, $r['wp_version'] ); 279 } 156 280 } 281 282 if ( false !== $r['project_version'] ) { 283 if ( empty( $r['project_version'] ) ) { 284 delete_post_meta( $r['id'], self::PROJECT_META_KEY ); 285 } else { 286 update_post_meta( $r['id'], self::PROJECT_META_KEY, $r['project_version'] ); 287 } 288 } 157 289 } 158 290 291 /** 292 * Get the list of WordPress core versions. 293 * 294 * @return array Array of WordPress versions. 295 */ 159 296 public function get_wp_versions() { 160 297 $versions = array_merge( 161 298 array( '0' => '' ), 162 299 apply_filters( 'wporg_bbp_get_wp_versions', array() ), 163 /* translators: WordPress Version */300 /* translators: WordPress version */ 164 301 array( 'other' => __( 'Other:', 'wporg-forums' ) ) 165 302 ); 166 303 return $versions; 167 304 } 168 305 169 public function sanitize_wp_version( $version ) { 306 /** 307 * Get the list of plugin or theme versions from the directory. 308 * 309 * @param string $type Project type. Accepts 'plugin' or 'theme'. 310 * @param string $slug Project slug. 311 * @return array Array of project versions, keyed by version. 312 */ 313 public function get_project_versions( $type, $slug ) { 314 // Check the cache. 315 $cache_key = $slug; 316 $cache_group = $type . '-versions'; 317 $versions = wp_cache_get( $cache_key, $cache_group ); 318 319 if ( false !== $versions ) { 320 return $versions; 321 } 322 323 $versions = array(); 324 325 if ( 'plugin' === $type && get_site( WPORG_PLUGIN_DIRECTORY_BLOGID ) ) { 326 327 switch_to_blog( WPORG_PLUGIN_DIRECTORY_BLOGID ); 328 329 $projects = get_posts( array( 330 'name' => $slug, 331 'post_type' => 'plugin', 332 'post_status' => array( 'publish', 'pending', 'disabled', 'closed', 'new', 'approved' ), 333 'posts_per_page' => 1, 334 ) ); 335 336 if ( $projects ) { 337 $project = reset( $projects ); 338 $versions = get_post_meta( $project->ID, 'tagged_versions', true ); 339 $versions = array_combine( $versions, $versions ); 340 } 341 342 restore_current_blog(); 343 344 } elseif ( 'theme' === $type && get_site( WPORG_THEME_DIRECTORY_BLOGID ) ) { 345 346 switch_to_blog( WPORG_THEME_DIRECTORY_BLOGID ); 347 348 $projects = get_posts( array( 349 'name' => $slug, 350 'post_type' => 'repopackage', 351 'post_status' => array( 'publish', 'pending', 'draft', 'future', 'trash', 'suspend' ), 352 'posts_per_page' => 1, 353 ) ); 354 355 if ( $projects ) { 356 $project = reset( $projects ); 357 $versions_meta = get_post_meta( $project->ID, '_status', true ); 358 359 if ( $versions_meta ) { 360 $versions = array_keys( $versions_meta ); 361 $versions = array_combine( $versions, $versions ); 362 } 363 } 364 365 restore_current_blog(); 366 367 } 368 369 $versions = array_merge( 370 array( '0' => '' ), 371 apply_filters( 'wporg_bbp_get_project_versions', $versions, $type, $slug ), 372 /* translators: plugin or theme version */ 373 array( 'other' => __( 'Other:', 'wporg-forums' ) ) 374 ); 375 376 wp_cache_set( $cache_key, $versions, $cache_group, DAY_IN_SECONDS ); 377 378 return $versions; 379 } 380 381 /** 382 * Sanitize version value. 383 * 384 * @param string $version Version value. 385 * @return string Sanitized value. 386 */ 387 public function sanitize_version( $version ) { 170 388 return preg_replace( '#[^0-9a-z.-]#i', '', $version ); 171 389 } 172 390 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-version-dropdown/wporg-bbp-version-dropdown.js
3 3 4 4 var Plugin = { 5 5 initialize: function () { 6 var $otherVersion = $( ' #wp-other-version' );7 var $label = $( 'label[for =wp-other-version]' );6 var $otherVersion = $( 'input[id$="-other-version"]' ); 7 var $label = $( 'label[for$="-other-version"]' ); 8 8 9 9 if ( ! $otherVersion.length ) { 10 10 return; … … 16 16 $otherVersion.hide(); 17 17 $label.hide(); 18 18 19 var $wpVersion = $( ' #wp-version' );19 var $wpVersion = $( 'select[id$="-version"]' ); 20 20 if ( ! $wpVersion.length ) { 21 21 return; 22 22 } … … 27 27 }, 28 28 29 29 updateOtherVersion: function () { 30 if ( 'other' == $( this ).val() ) { 31 Plugin.$label.show(); 32 Plugin.$otherVersion.show().focus(); 33 } else { 34 Plugin.$label.hide(); 35 Plugin.$otherVersion.hide(); 36 } 30 $( this ).each( function () { 31 var index = ( 'wp-version' === $( this ).attr( 'id' ) ) ? 0 : 1; 32 33 if ( 'other' == $( this ).val() ) { 34 Plugin.$label.eq( index ).show(); 35 Plugin.$otherVersion.eq( index ).show().focus(); 36 } else { 37 Plugin.$label.eq( index ).hide(); 38 Plugin.$otherVersion.eq( index ).hide(); 39 } 40 }); 37 41 } 38 42 }; 39 43 -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/functions.php
548 548 $voice_count = sprintf( _n( '%s participant', '%s participants', $voice_count, 'wporg-forums' ), bbp_number_format( $voice_count ) ); 549 549 $last_reply = bbp_get_topic_last_active_id( $topic_id ); 550 550 551 // WP version 552 $wp_version = ''; 551 // WP and plugin/theme versions 552 $wp_version = $project_version = $project_type = ''; 553 553 554 if ( function_exists( 'WordPressdotorg\Forums\Version_Dropdown\get_topic_version' ) ) { 554 $wp_version = WordPressdotorg\Forums\Version_Dropdown\get_topic_version( $topic_id ); 555 $topic_versions = WordPressdotorg\Forums\Version_Dropdown\get_topic_version( $topic_id ); 556 $wp_version = $topic_versions['wp_version']; 557 $project_version = $topic_versions['project_version']; 555 558 } 556 559 560 if ( class_exists( 'WordPressdotorg\Forums\Plugin' ) ) { 561 $plugin_instance = WordPressdotorg\Forums\Plugin::get_instance(); 562 563 if ( ! empty( $plugin_instance->plugins->plugin ) ) { 564 $project_type = 'plugin'; 565 } elseif ( ! empty( $plugin_instance->themes->theme ) ) { 566 $project_type = 'theme'; 567 } 568 } 569 557 570 ?> 558 571 559 572 <li class="topic-forum"><?php … … 588 601 <?php if ( ! empty( $wp_version ) ) : ?> 589 602 <li class="wp-version"><?php echo esc_html( $wp_version ); ?></li> 590 603 <?php endif; ?> 604 <?php if ( ! empty( $project_type ) && ! empty( $project_version ) ) : ?> 605 <li class="<?php echo esc_attr( $project_type ); ?>-version"><?php echo esc_html( $project_version ); ?></li> 606 <?php endif; ?> 591 607 <?php if ( function_exists( 'WordPressdotorg\Forums\Topic_Resolution\get_topic_resolution_form' ) ) : ?> 592 608 <?php if ( WordPressdotorg\Forums\Topic_Resolution\Plugin::get_instance()->is_enabled_on_forum() && ( bbp_is_single_topic() || bbp_is_topic_edit() ) ) : ?> 593 609 <li class="topic-resolved"><?php WordPressdotorg\Forums\Topic_Resolution\get_topic_resolution_form( $topic_id ); ?></li> -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/style-original.scss
228 228 content: "\f120"; 229 229 } 230 230 231 .sidebar .topic-info li.plugin-version:before { 232 content: "\f106"; 233 } 234 235 .sidebar .topic-info li.theme-version:before { 236 content: "\f100"; 237 } 238 231 239 .sidebar .topic-info li.topic-resolved:before { 232 240 content: "\f546"; 233 241 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/style-rtl.css
420 420 content: "\f120"; 421 421 } 422 422 423 .sidebar .topic-info li.plugin-version:before { 424 content: "\f106"; 425 } 426 427 .sidebar .topic-info li.theme-version:before { 428 content: "\f100"; 429 } 430 423 431 .sidebar .topic-info li.topic-resolved:before { 424 432 content: "\f546"; 425 433 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/style.css
420 420 content: "\f120"; 421 421 } 422 422 423 .sidebar .topic-info li.plugin-version:before { 424 content: "\f106"; 425 } 426 427 .sidebar .topic-info li.theme-version:before { 428 content: "\f100"; 429 } 430 423 431 .sidebar .topic-info li.topic-resolved:before { 424 432 content: "\f546"; 425 433 }