Make WordPress Core

Ticket #4642: 4642.4.diff

File 4642.4.diff, 3.8 KB (added by Bobcat, 17 years ago)

Set post status based on author's capabilities; includes new function get_user_by

  • wp-includes/pluggable.php

     
    107107}
    108108endif;
    109109
    110 if ( !function_exists('get_userdatabylogin') ) :
    111 function get_userdatabylogin($user_login) {
     110if ( !function_exists('get_user_by') ) :
     111function get_user_by($field, $value, $output = OBJECT, $filter = 'raw') {
    112112        global $wpdb;
    113         $user_login = sanitize_user( $user_login );
    114113
    115         if ( empty( $user_login ) )
     114        if ( 'login' == $field ) {
     115                $field = 'user_login';
     116                $value = sanitize_user( $value );
     117                if ( empty($value) )
     118                        return false;
     119        } else if ( 'email' == $field ) {
     120                $field = 'user_email';
     121                $value = sanitize_email( $value );
     122                if ( empty($value) || !is_email( $value ) )
     123                        return false;
     124        } else {
     125                $field = 'ID';
     126                $value = (int) $value;
     127        }
     128
     129        $user_ID = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->users WHERE $field = %s LIMIT 1", $value));
     130        if ( !$user_ID )
    116131                return false;
    117132
    118         $user_id = wp_cache_get($user_login, 'userlogins');
    119         $userdata = wp_cache_get($user_id, 'users');
     133        if ( $output == OBJECT ) {
     134                return $user_ID;
     135        } elseif ( $output == ARRAY_A ) {
     136                return get_object_vars($user_ID);
     137        } elseif ( $output == ARRAY_N ) {
     138                return array_values(get_object_vars($user_ID));
     139        } else {
     140                return $user_ID;
     141        }
     142}
     143endif;
    120144
    121         if ( $userdata )
    122                 return $userdata;
     145if ( !function_exists('get_userdatabylogin') ) :
     146function get_userdatabylogin($user_login) {
    123147
    124         if ( !$user_ID = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_login = %s", $user_login)) )
     148        $user_ID = get_user_by('login',$user_login);
     149        if ( !$user_ID )
    125150                return false;
    126151
    127152        $user = get_userdata($user_ID);
  • wp-mail.php

     
    2727        $content_transfer_encoding = '';
    2828        $boundary = '';
    2929        $bodysignal = 0;
     30        $post_author = 1;
     31        $author_found = false;
    3032        $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
    3133        foreach ($message as $line) :
    3234                if (strlen($line) < 3) $bodysignal = 1;
     
    7072                                $author = sanitize_email($author);
    7173                                if ( is_email($author) ) {
    7274                                        echo "Author = {$author} <p>";
    73                                         $author = $wpdb->escape($author);
    74                                         $result = $wpdb->get_row("SELECT ID FROM $wpdb->users WHERE user_email='$author' LIMIT 1");
    75                                         if (!$result)
     75                                        $user_ID = get_user_by('email',$author);
     76                                        if (!$user_ID) {
    7677                                                $post_author = 1;
    77                                         else
    78                                                 $post_author = $result->ID;
    79                                 } else
     78                                                $author_found = false;
     79                                        } else {
     80                                                $post_author = $user_ID;
     81                                                $author_found = true;
     82                                        }
     83                                } else {
    8084                                        $post_author = 1;
     85                                        $author_found = false;
     86                                }
    8187                        }
    8288
    8389                        if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37'
     
    111117                }
    112118        endforeach;
    113119
     120        // Set $post_status based on $author_found and on author's publish_posts capability
     121        if ($author_found) {
     122                $user = new WP_User($post_author);
     123                if ($user->has_cap('publish_posts'))
     124                        $post_status = 'publish';
     125                else
     126                        $post_status = 'pending';
     127        } else {
     128                // Author not found in DB, set status to pending.  Author already set to admin.
     129                $post_status = 'pending';
     130        }
     131
    114132        $subject = trim($subject);
    115133
    116134        if ($content_type == 'multipart/alternative') {
     
    144162
    145163        $post_category = $post_categories;
    146164
    147         // or maybe we should leave the choice to email drafts? propose a way
    148         $post_status = 'publish';
    149 
    150165        $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status');
    151166        $post_data = add_magic_quotes($post_data);
    152167