| @@ -3,13 +3,10 @@ | ||
| 3 | 3 | add_filter( 'map_meta_cap', 'bogo_map_meta_cap', 10, 4 ); |
| 4 | 4 | |
| 5 | 5 | function bogo_map_meta_cap( $caps, $cap, $user_id, $args ) { |
| 6 | 6 | $meta_caps = array( |
| 7 | - 'bogo_manage_language_packs' => 'install_languages', | |
| 8 | - 'bogo_edit_terms_translation' => 'manage_categories', | |
| 9 | 7 | 'bogo_access_all_locales' => 'manage_options', |
| 10 | - 'bogo_access_locale' => 'read', | |
| 11 | - ); | |
| 8 | + 'bogo_access_locale' => 'read' ); | |
| 12 | 9 | |
| 13 | 10 | $meta_caps = apply_filters( 'bogo_map_meta_cap', $meta_caps ); |
| 14 | 11 | |
| 15 | 12 | $caps = array_diff( $caps, array_keys( $meta_caps ) ); |
| @@ -17,41 +14,22 @@ | ||
| 17 | 14 | if ( isset( $meta_caps[$cap] ) ) { |
| 18 | 15 | $caps[] = $meta_caps[$cap]; |
| 19 | 16 | } |
| 20 | 17 | |
| 21 | - static $accessible_locales = array(); | |
| 18 | + if ( 'bogo_access_locale' == $cap | |
| 19 | + && ! user_can( $user_id, 'bogo_access_all_locales' ) ) { | |
| 20 | + $accessible_locales = bogo_get_user_accessible_locales( $user_id ); | |
| 22 | 21 | |
| 23 | - if ( | |
| 24 | - 'bogo_access_all_locales' !== $cap and | |
| 25 | - ! isset( $accessible_locales[$user_id] ) | |
| 26 | - ) { | |
| 27 | - $accessible_locales[$user_id] = bogo_get_user_accessible_locales( | |
| 28 | - $user_id | |
| 29 | - ); | |
| 30 | - } | |
| 22 | + if ( ! empty( $accessible_locales ) ) { | |
| 23 | + $accessible_locales = bogo_filter_locales( $accessible_locales ); | |
| 24 | + $locale = $args[0]; | |
| 31 | 25 | |
| 32 | - if ( | |
| 33 | - 'bogo_access_locale' === $cap and | |
| 34 | - ! user_can( $user_id, 'bogo_access_all_locales' ) | |
| 35 | - ) { | |
| 36 | - $locale = $args[0]; | |
| 37 | - | |
| 38 | - if ( ! in_array( $locale, $accessible_locales[$user_id] ) ) { | |
| 39 | - $caps[] = 'do_not_allow'; | |
| 26 | + if ( ! in_array( $locale, $accessible_locales ) ) { | |
| 27 | + $caps[] = 'do_not_allow'; | |
| 28 | + } | |
| 40 | 29 | } |
| 41 | 30 | } |
| 42 | 31 | |
| 43 | - if ( | |
| 44 | - in_array( $cap, array( 'edit_post', 'delete_post' ), true ) and | |
| 45 | - $post = get_post( $args[0] ) and | |
| 46 | - $user_id !== $post->post_author and | |
| 47 | - ! user_can( $user_id, 'bogo_access_all_locales' ) | |
| 48 | - ) { | |
| 49 | - $locale = bogo_get_post_locale( $post->ID ); | |
| 50 | - | |
| 51 | - if ( ! in_array( $locale, $accessible_locales[$user_id] ) ) { | |
| 52 | - $caps[] = 'do_not_allow'; | |
| 53 | - } | |
| 54 | - } | |
| 55 | - | |
| 56 | 32 | return $caps; |
| 57 | 33 | } |
| 34 | + | |
| 35 | +?> | |