+ $post = get_post( $comment->comment_post_ID );
+
+ /*
+ * If the post doesn't exist, we have an orphaned comment.
+ * Fall back to the edit_posts capability, instead.
+ */
+ if ( $post ) {
+ $caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
+ } else {
+ $caps = map_meta_cap( 'edit_posts', $user_id );
+ }
+ break;
+ case 'unfiltered_upload':
+ if ( defined('ALLOW_UNFILTERED_UPLOADS') && ALLOW_UNFILTERED_UPLOADS && ( !is_multisite() || is_super_admin( $user_id ) ) )
+ $caps[] = $cap;
+ else
+ $caps[] = 'do_not_allow';
+ break;
+ case 'unfiltered_html' :
+ // Disallow unfiltered_html for all users, even admins and super admins.
+ if ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML )
+ $caps[] = 'do_not_allow';
+ elseif ( is_multisite() && ! is_super_admin( $user_id ) )
+ $caps[] = 'do_not_allow';
+ else
+ $caps[] = $cap;
+ break;
+ case 'edit_files':
+ case 'edit_plugins':
+ case 'edit_themes':
+ // Disallow the file editors.
+ if ( defined( 'DISALLOW_FILE_EDIT' ) && DISALLOW_FILE_EDIT )
+ $caps[] = 'do_not_allow';
+ elseif ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS )
+ $caps[] = 'do_not_allow';
+ elseif ( is_multisite() && ! is_super_admin( $user_id ) )
+ $caps[] = 'do_not_allow';
+ else
+ $caps[] = $cap;
+ break;
+ case 'update_plugins':
+ case 'delete_plugins':
+ case 'install_plugins':
+ case 'upload_plugins':
+ case 'update_themes':
+ case 'delete_themes':
+ case 'install_themes':
+ case 'upload_themes':
+ case 'update_core':
+ // Disallow anything that creates, deletes, or updates core, plugin, or theme files.
+ // Files in uploads are excepted.
+ if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) {
+ $caps[] = 'do_not_allow';
+ } elseif ( is_multisite() && ! is_super_admin( $user_id ) ) {
+ $caps[] = 'do_not_allow';
+ } elseif ( 'upload_themes' === $cap ) {
+ $caps[] = 'install_themes';
+ } elseif ( 'upload_plugins' === $cap ) {
+ $caps[] = 'install_plugins';
+ } else {
+ $caps[] = $cap;
+ }
+ break;
+ case 'activate_plugins':
+ $caps[] = $cap;
+ if ( is_multisite() ) {
+ // update_, install_, and delete_ are handled above with is_super_admin().
+ $menu_perms = get_site_option( 'menu_items', array() );
+ if ( empty( $menu_perms['plugins'] ) )
+ $caps[] = 'manage_network_plugins';
+ }
+ break;
+ case 'delete_user':
+ case 'delete_users':
+ // If multisite only super admins can delete users.
+ if ( is_multisite() && ! is_super_admin( $user_id ) )
+ $caps[] = 'do_not_allow';
+ else
+ $caps[] = 'delete_users'; // delete_user maps to delete_users.
+ break;
+ case 'create_users':
+ if ( !is_multisite() )
+ $caps[] = $cap;
+ elseif ( is_super_admin( $user_id ) || get_site_option( 'add_new_users' ) )
+ $caps[] = $cap;
+ else
+ $caps[] = 'do_not_allow';
+ break;
+ case 'manage_links' :
+ if ( get_option( 'link_manager_enabled' ) )
+ $caps[] = $cap;