mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-04-07 06:05:42 +00:00
Role/Capability: Introduce capabilities dedicated to installing and updating language files.
The new meta capabilities are called `install_languages` and `update_languages`. Prior to this change, there were no proper capability checks applied. Instead only the filesystem and related constants were checked, and for actual permissions a rather vague fallback was used where a user needed to have at least one of the other updating capabilities. In addition to being generally more verbose, the new capabilities make it possible for example to allow a user to update languages, but nothing else. By default they fall back to the original way of how they were handled. Props johnbillion, flixos90. Fixes #39677. git-svn-id: https://develop.svn.wordpress.org/trunk@41268 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -392,6 +392,20 @@ function map_meta_cap( $cap, $user_id ) {
|
||||
$caps[] = $cap;
|
||||
}
|
||||
break;
|
||||
case 'install_languages':
|
||||
case 'update_languages':
|
||||
if ( ! function_exists( 'wp_can_install_language_pack' ) ) {
|
||||
require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
|
||||
}
|
||||
|
||||
if ( ! wp_can_install_language_pack() ) {
|
||||
$caps[] = 'do_not_allow';
|
||||
} elseif ( is_multisite() && ! is_super_admin( $user_id ) ) {
|
||||
$caps[] = 'do_not_allow';
|
||||
} else {
|
||||
$caps[] = 'install_languages';
|
||||
}
|
||||
break;
|
||||
case 'activate_plugins':
|
||||
$caps[] = $cap;
|
||||
if ( is_multisite() ) {
|
||||
@@ -826,3 +840,22 @@ function revoke_super_admin( $user_id ) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the user capabilities to grant the 'install_languages' capability as necessary.
|
||||
*
|
||||
* A user must have at least one out of the 'update_core', 'install_plugins', and
|
||||
* 'install_themes' capabilities to qualify for 'install_languages'.
|
||||
*
|
||||
* @since 4.9.0
|
||||
*
|
||||
* @param array $allcaps An array of all the user's capabilities.
|
||||
* @return array Filtered array of the user's capabilities.
|
||||
*/
|
||||
function wp_maybe_grant_install_languages_cap( $allcaps ) {
|
||||
if ( ! empty( $allcaps['update_core'] ) || ! empty( $allcaps['install_plugins'] ) || ! empty( $allcaps['install_themes'] ) ) {
|
||||
$allcaps['install_languages'] = true;
|
||||
}
|
||||
|
||||
return $allcaps;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user