| 1 |
<?php |
| 2 |
|
| 3 |
add_filter( 'map_meta_cap', 'bogo_map_meta_cap', 10, 4 ); |
| 4 |
|
| 5 |
function bogo_map_meta_cap( $caps, $cap, $user_id, $args ) { |
| 6 |
$meta_caps = array( |
| 7 |
'bogo_manage_language_packs' => 'update_core', |
| 8 |
'bogo_edit_terms_translation' => 'manage_options', |
| 9 |
'bogo_access_all_locales' => 'manage_options', |
| 10 |
'bogo_access_locale' => 'read' ); |
| 11 |
|
| 12 |
$meta_caps = apply_filters( 'bogo_map_meta_cap', $meta_caps ); |
| 13 |
|
| 14 |
$caps = array_diff( $caps, array_keys( $meta_caps ) ); |
| 15 |
|
| 16 |
if ( isset( $meta_caps[$cap] ) ) { |
| 17 |
$caps[] = $meta_caps[$cap]; |
| 18 |
} |
| 19 |
|
| 20 |
if ( 'bogo_access_locale' == $cap |
| 21 |
&& ! user_can( $user_id, 'bogo_access_all_locales' ) ) { |
| 22 |
$accessible_locales = bogo_get_user_accessible_locales( $user_id ); |
| 23 |
|
| 24 |
if ( ! empty( $accessible_locales ) ) { |
| 25 |
$accessible_locales = bogo_filter_locales( $accessible_locales ); |
| 26 |
$locale = $args[0]; |
| 27 |
|
| 28 |
if ( ! in_array( $locale, $accessible_locales ) ) { |
| 29 |
$caps[] = 'do_not_allow'; |
| 30 |
} |
| 31 |
} |
| 32 |
} |
| 33 |
|
| 34 |
return $caps; |
| 35 |
} |
| 36 |
|