WordPress.org

Make WordPress Core

Ticket #4642: 4642.6.diff

File 4642.6.diff, 2.0 KB (added by Bobcat, 6 years ago)

Set post status based on author's capabilities; calls get_user_by_email

  • 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                                        $userdata = get_user_by_email($author); 
     76                                        if (!$userdata) { 
    7677                                                $post_author = 1; 
    77                                         else 
    78                                                 $post_author = $result->ID; 
    79                                 } else 
     78                                                $author_found = false; 
     79                                        } else { 
     80                                                $post_author = $userdata->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