usermeta WHERE meta_key = '{$wpdb->prefix}user_level'") ) { //log_mem_usage_rs( 'start flt_editable_user_ids()' ); if ( ! $post_type = cr_find_post_type() ) return $query; if ( ! $post_type_obj = get_post_type_object( $post_type ) ) return $query; $object_id = scoper_get_object_id(); // only modify the default authors list if current user can edit_others for the current post/page if ( current_user_can( $post_type_obj->cap->edit_others_posts, $object_id ) ) { global $scoper, $current_user; $users = $scoper->users_who_can($post_type_obj->cap->edit_posts, COL_ID_RS, 'post', $object_id ); if ( ! in_array($current_user->ID, $users) ) $users []= $current_user->ID; $query = "SELECT $wpdb->users.ID FROM $wpdb->users WHERE ID IN ('" . implode("','", $users) . "')"; } //log_mem_usage_rs( 'end flt_editable_user_ids()' ); } } return $query; } //horrible reverse engineering of dropdown_users execution because only available filter is on html output function flt_wp_dropdown_users($wp_output) { //log_mem_usage_rs( 'start flt_wp_dropdown_users()' ); // this is meant to filter the post author selection if ( ! is_admin() ) return $wp_output; // if (even after our blogcap tinkering) the author list is already locked due to insufficient blog-wide caps, don't mess if ( ! $pos = strpos ($wp_output, 'last_query; if ( ! $object_type = cr_find_post_type() ) return $wp_output; if( ! $post_type_obj = get_post_type_object($object_type) ) return $wp_output; $object_id = scoper_get_object_id( 'post', $object_type); // only modify the default authors list if current user has Editor role for the current post/page $have_cap = cr_user_can( $post_type_obj->cap->edit_others_posts, $object_id, 0, array( 'require_full_object_role' => true ) ); //if ( ! $have_cap ) // return $wp_output; $orderpos = strpos($last_query, 'ORDER BY'); $orderby = ( $orderpos ) ? substr($last_query, $orderpos) : ''; if ( ! strpos( $orderby, 'display_name' ) ) // sanity check in case the last_query buffer gets messed up $orderby = ''; $id_in = $id_not_in = $show_option_all = $show_option_none = ''; $pos = strpos($last_query, 'AND ID IN('); if ( $pos ) { $pos_close = strpos($last_query, ')', $pos); if ( $pos_close) $id_in = substr($last_query, $pos, $pos_close - $pos + 1); } $pos = strpos($last_query, 'AND ID NOT IN('); if ( $pos ) { $pos_close = strpos($last_query, ')', $pos); if ( $pos_close) $id_not_in = substr($last_query, $pos, $pos_close - $pos + 1); } $search = "', $pos); if ( $pos_close) $show_option_all = substr($wp_output, $pos + strlen($search), $pos_close - $pos - strlen($search)); } $search = "', $pos); if ( $pos_close) $show_option_none = substr($wp_output, $pos + strlen($search), $pos_close - $pos - strlen($search)); } $search = "\n"; if ( $show_option_all ) $output .= "\t\n"; if ( $show_option_none ) $output .= "\t\n"; foreach ( (array) $users as $user ) { $user->ID = (int) $user->ID; $_selected = $user->ID == $selected ? " selected='selected'" : ''; $display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')'; $output .= "\t\n"; } $output .= ""; // ----------- end wp_dropdown_users code copy (from WP 2.7) ------------- //log_mem_usage_rs( 'flt_wp_dropdown_users()' ); return $output; } function flt_get_editable_authors($unfiltered_results) { global $wpdb, $scoper, $post; if ( ! $post_type = cr_find_post_type() ) return $unfiltered_results; if ( ! $post_type_obj = get_post_type_object( $post_type ) ) return $unfiltered_results; $have_cap = cr_user_can( $post_type_obj->cap->edit_others_posts, $post->ID, 0, array('require_full_object_role' => true ) ); if ( $have_cap ) return $scoper->users_who_can( $post_type_obj->cap->edit_posts, COLS_ALL_RS); else { if ( $post->ID ) { if ( $current_author = $scoper->data_sources->get_from_db('owner', 'post', $post->ID) ) $force_user_id = $current_author; } else { global $current_user; $force_user_id = $current_user->ID; } if ( $force_user_id ) { $display_name = $wpdb->get_var( "SELECT display_name FROM $wpdb->users WHERE ID = '$force_user_id'" ); $users = array( (object) array( 'ID' => $force_user_id, 'display_name' => $display_name ) ); return $users; } } //log_mem_usage_rs( 'flt_get_editable_authors()' ); return $unfiltered_results; } } ?>