function bogo_set_accessible_locales($profileuser) { $available_languages = bogo_available_languages('orderby=value'); $accessible_locales = bogo_get_user_accessible_locales($profileuser->ID); if (empty($accessible_locales)) { $accessible_locales = array_keys($available_languages); } else { $accessible_locales = bogo_filter_locales($accessible_locales); } ?> <!-- Bogo plugin --> <tr> <th scope="row"><?php echo esc_html(__('Locale', 'bogo')); ?> </th> <td> <input type="hidden" name="setting_bogo_accessible_locales" value="1" /> <span class="description"><?php echo esc_html(__('This user is allowed to access the following locales:', 'bogo')); ?> </span><br /> <fieldset class="bogo-locale-options"> <?php foreach ($available_languages as $locale => $language) { $checked = in_array($locale, $accessible_locales); $id_attr = 'bogo_accessible_locale-' . $locale; ?> <label class="bogo-locale-option<?php echo $checked ? ' checked' : ''; ?> " for="<?php echo $id_attr; ?> "> <input type="checkbox" id="<?php echo $id_attr; ?> " name="bogo_accessible_locales[]" value="<?php echo esc_attr($locale); ?> "<?php echo $checked ? ' checked="checked"' : ''; ?> /><?php echo esc_html($language); ?> </label> <?php } ?> </fieldset> </td> </tr> <?php }
function bogo_map_meta_cap($caps, $cap, $user_id, $args) { $meta_caps = array('bogo_access_all_locales' => 'manage_options', 'bogo_access_locale' => 'read'); $meta_caps = apply_filters('bogo_map_meta_cap', $meta_caps); $caps = array_diff($caps, array_keys($meta_caps)); if (isset($meta_caps[$cap])) { $caps[] = $meta_caps[$cap]; } if ('bogo_access_locale' == $cap && !user_can($user_id, 'bogo_access_all_locales')) { $accessible_locales = bogo_get_user_accessible_locales($user_id); if (!empty($accessible_locales)) { $accessible_locales = bogo_filter_locales($accessible_locales); $locale = $args[0]; if (!in_array($locale, $accessible_locales)) { $caps[] = 'do_not_allow'; } } } return $caps; }