+ switch ( $cap ) {
+ case 'delete_user':
+ $caps[] = 'delete_users';
+ break;
+ case 'edit_user':
+ if ( !isset( $args[0] ) || $user_id != $args[0] ) {
+ $caps[] = 'edit_users';
+ }
+ break;
+ case 'delete_post':
+ $author_data = get_userdata( $user_id );
+ //echo "post ID: {$args[0]}<br />";
+ $post = get_post( $args[0] );
+ if ( 'page' == $post->post_type ) {
+ $args = array_merge( array( 'delete_page', $user_id ), $args );
+ return call_user_func_array( 'map_meta_cap', $args );
+ }
+
+ if ('' != $post->post_author) {
+ $post_author_data = get_userdata( $post->post_author );
+ } else {
+ //No author set yet so default to current user for cap checks
+ $post_author_data = $author_data;
+ }
+
+ // If the user is the author...
+ if ( $user_id == $post_author_data->ID ) {
+ // If the post is published...
+ if ( 'publish' == $post->post_status ) {
+ $caps[] = 'delete_published_posts';
+ } elseif ( 'trash' == $post->post_status ) {
+ if ('publish' == get_post_meta($post->ID, '_wp_trash_meta_status', true) )
+ $caps[] = 'delete_published_posts';
+ } else {
+ // If the post is draft...
+ $caps[] = 'delete_posts';
+ }
+ } else {
+ // The user is trying to edit someone else's post.
+ $caps[] = 'delete_others_posts';
+ // The post is published, extra cap required.
+ if ( 'publish' == $post->post_status )
+ $caps[] = 'delete_published_posts';
+ elseif ( 'private' == $post->post_status )
+ $caps[] = 'delete_private_posts';
+ }
+ break;
+ case 'delete_page':
+ $author_data = get_userdata( $user_id );
+ //echo "post ID: {$args[0]}<br />";
+ $page = get_page( $args[0] );
+ $page_author_data = get_userdata( $page->post_author );
+ //echo "current user id : $user_id, page author id: " . $page_author_data->ID . "<br />";
+ // If the user is the author...
+
+ if ('' != $page->post_author) {
+ $page_author_data = get_userdata( $page->post_author );
+ } else {
+ //No author set yet so default to current user for cap checks
+ $page_author_data = $author_data;
+ }
+
+ if ( $user_id == $page_author_data->ID ) {
+ // If the page is published...
+ if ( $page->post_status == 'publish' ) {
+ $caps[] = 'delete_published_pages';
+ } elseif ( 'trash' == $page->post_status ) {
+ if ('publish' == get_post_meta($page->ID, '_wp_trash_meta_status', true) )
+ $caps[] = 'delete_published_pages';
+ } else {
+ // If the page is draft...
+ $caps[] = 'delete_pages';
+ }
+ } else {
+ // The user is trying to edit someone else's page.
+ $caps[] = 'delete_others_pages';
+ // The page is published, extra cap required.
+ if ( $page->post_status == 'publish' )
+ $caps[] = 'delete_published_pages';
+ elseif ( $page->post_status == 'private' )
+ $caps[] = 'delete_private_pages';
+ }
+ break;