Ticket #39677: 39677.3.diff
File 39677.3.diff, 7.7 KB (added by , 8 years ago) |
---|
-
src/wp-admin/network/settings.php
63 63 ); 64 64 65 65 // Handle translation install. 66 if ( ! empty( $_POST['WPLANG'] ) && wp_can_install_language_pack() ) { // @todo: Skip if already installed66 if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_languages' ) ) { // @todo: Skip if already installed 67 67 $language = wp_download_language_pack( $_POST['WPLANG'] ); 68 68 if ( $language ) { 69 69 $_POST['WPLANG'] = $language; … … 342 342 'selected' => $lang, 343 343 'languages' => $languages, 344 344 'translations' => $translations, 345 'show_available_translations' => wp_can_install_language_pack(),345 'show_available_translations' => current_user_can( 'install_languages' ), 346 346 ) ); 347 347 ?> 348 348 </td> -
src/wp-admin/network/site-new.php
66 66 if ( isset( $_POST['WPLANG'] ) ) { 67 67 if ( '' === $_POST['WPLANG'] ) { 68 68 $meta['WPLANG'] = ''; // en_US 69 } elseif ( wp_can_install_language_pack() ) {69 } elseif ( current_user_can( 'install_languages' ) ) { 70 70 $language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) ); 71 71 if ( $language ) { 72 72 $meta['WPLANG'] = $language; … … 234 234 'selected' => $lang, 235 235 'languages' => $languages, 236 236 'translations' => $translations, 237 'show_available_translations' => wp_can_install_language_pack(),237 'show_available_translations' => current_user_can( 'install_languages' ), 238 238 ) ); 239 239 ?> 240 240 </td> -
src/wp-admin/options-general.php
144 144 'selected' => $locale, 145 145 'languages' => $languages, 146 146 'translations' => $translations, 147 'show_available_translations' => ( ! is_multisite() || is_super_admin() ) && wp_can_install_language_pack(),147 'show_available_translations' => current_user_can( 'install_languages' ), 148 148 ) ); 149 149 150 150 // Add note about deprecated WPLANG constant. -
src/wp-admin/options.php
182 182 } 183 183 184 184 // Handle translation install. 185 if ( ! empty( $_POST['WPLANG'] ) && ( ! is_multisite() || is_super_admin()) ) { // @todo: Skip if already installed185 if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_languages' ) ) { // @todo: Skip if already installed 186 186 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); 187 187 188 if ( wp_can_install_language_pack() ) { 189 $language = wp_download_language_pack( $_POST['WPLANG'] ); 190 if ( $language ) { 191 $_POST['WPLANG'] = $language; 192 } 188 $language = wp_download_language_pack( $_POST['WPLANG'] ); 189 if ( $language ) { 190 $_POST['WPLANG'] = $language; 193 191 } 194 192 } 195 193 } -
src/wp-admin/update-core.php
608 608 echo ' <a class="button" href="' . esc_url( self_admin_url('update-core.php?force-check=1') ) . '">' . __( 'Check Again' ) . '</a>'; 609 609 echo '</p>'; 610 610 611 if ( $core = current_user_can( 'update_core' ) )611 if ( current_user_can( 'update_core' ) ) { 612 612 core_upgrade_preamble(); 613 if ( $plugins = current_user_can( 'update_plugins' ) ) 613 } 614 if ( current_user_can( 'update_plugins' ) ) { 614 615 list_plugin_updates(); 615 if ( $themes = current_user_can( 'update_themes' ) ) 616 } 617 if ( current_user_can( 'update_themes' ) ) { 616 618 list_theme_updates(); 617 if ( $core || $plugins || $themes ) 619 } 620 if ( current_user_can( 'update_languages' ) ) { 618 621 list_translation_updates(); 619 unset( $core, $plugins, $themes ); 622 } 623 620 624 /** 621 625 * Fires after the core, plugin, and theme update tables. 622 626 * … … 729 733 730 734 } elseif ( 'do-translation-upgrade' == $action ) { 731 735 732 if ( ! current_user_can( 'update_ core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) )736 if ( ! current_user_can( 'update_languages' ) ) 733 737 wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); 734 738 735 739 check_admin_referer( 'upgrade-translations' ); -
src/wp-includes/capabilities.php
392 392 $caps[] = $cap; 393 393 } 394 394 break; 395 case 'install_languages': 396 case 'update_languages': 397 if ( ! function_exists( 'wp_can_install_language_pack' ) ) { 398 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); 399 } 400 401 if ( ! wp_can_install_language_pack() ) { 402 $caps[] = 'do_not_allow'; 403 } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) { 404 $caps[] = 'do_not_allow'; 405 } elseif ( 'update_languages' === $cap ) { 406 $caps[] = 'install_languages'; 407 } else { 408 $caps[] = $cap; 409 } 410 break; 395 411 case 'activate_plugins': 396 412 $caps[] = $cap; 397 413 if ( is_multisite() ) { … … 826 842 } 827 843 return false; 828 844 } 845 846 /** 847 * Filters the user capabilities to grant the 'install_languages' capability as necessary. 848 * 849 * A user must have at least one out of the 'update_core', 'install_plugins' and 850 * 'install_themes' capabilities to qualify for 'install_languages'. 851 * 852 * @since 4.8.0 853 * 854 * @param array $allcaps An array of all the user's capabilities. 855 * @return array Filtered array of the user's capabilities. 856 */ 857 function maybe_grant_install_languages_cap( $allcaps ) { 858 if ( ! empty( $allcaps['update_core'] ) || ! empty( $allcaps['install_plugins'] ) || ! empty( $allcaps['install_themes'] ) ) { 859 $allcaps['install_languages'] = true; 860 } 861 862 return $allcaps; 863 } -
src/wp-includes/default-filters.php
504 504 add_filter( 'oembed_response_data', 'get_oembed_response_data_rich', 10, 4 ); 505 505 add_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10, 3 ); 506 506 507 // Capabilities 508 add_filter( 'user_has_cap', 'maybe_grant_install_languages_cap', 1 ); 509 507 510 unset( $filter, $action ); -
tests/phpunit/tests/user/capabilities.php
233 233 'upload_themes' => array( 'administrator' ), 234 234 'customize' => array( 'administrator' ), 235 235 'add_users' => array( 'administrator' ), 236 'install_languages' => array( 'administrator' ), 237 'update_languages' => array( 'administrator' ), 236 238 237 239 'edit_categories' => array( 'administrator', 'editor' ), 238 240 'delete_categories' => array( 'administrator', 'editor' ), … … 261 263 'upload_themes' => array(), 262 264 'edit_css' => array(), 263 265 'upgrade_network' => array(), 266 'install_languages' => array(), 267 'update_languages' => array(), 264 268 265 269 'customize' => array( 'administrator' ), 266 270 'delete_site' => array( 'administrator' ),