示例#1
0
/**
 * This is the main handler for all of the processing
 */
function PostEmail($poster, $mimeDecodedEmail)
{
    $config = GetConfig();
    $GLOBALS["POSTIE_IMAGE_ROTATION"] = 0;
    $attachments = array("html" => array(), "cids" => array(), "image_files" => array());
    print "<p>Message Id is :" . $mimeDecodedEmail->headers["message-id"] . "</p><br/>\n";
    print "<p>Email has following attachments:</p>";
    foreach ($mimeDecodedEmail->parts as $parts) {
        print "<p>" . $parts->ctype_primary . " " . $parts->ctype_secondary . "</p><br />\n";
    }
    FilterTextParts($mimeDecodedEmail);
    #print("<p>Email has following attachments after filtering:");
    #    foreach($mimeDecodedEmail->parts as $parts) {
    #        print("<p>".$parts->ctype_primary ." ".$parts->ctype_secondary) ."<br />\n";
    #    }
    $content = GetContent($mimeDecodedEmail, $attachments);
    $subject = GetSubject($mimeDecodedEmail, $content);
    echo "the subject is {$subject}, right after calling GetSubject\n";
    $rotation = GetRotation($mimeDecodedEmail, $content);
    if ($rotation != "0" && count($attachments["image_files"])) {
        RotateImages($rotation, $attachments["image_files"]);
    }
    SpecialMessageParsing($content, $attachments);
    $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
    $message_date = NULL;
    if (array_key_exists("date", $mimeDecodedEmail->headers) && !empty($mimeDecodedEmail->headers["date"])) {
        HandleMessageEncoding($mimeDecodedEmail->headers["content-transfer-encoding"], $mimeDecodedEmail->ctype_parameters["charset"], $mimeDecodedEmail->headers["date"]);
        $message_date = $mimeDecodedEmail->headers['date'];
    }
    list($post_date, $post_date_gmt) = DeterminePostDate($content, $message_date);
    ubb2HTML($content);
    //$content = FilterNewLines($content);
    //$content = FixEmailQuotes($content);
    $id = checkReply($subject);
    $post_categories = GetPostCategories($subject);
    echo "the subject is {$subject}, right after calling GetPostCategories\n";
    $comment_status = AllowCommentsOnPost($content);
    if ((empty($id) || is_null($id)) && $config['ADD_META'] == 'yes') {
        if ($config['WRAP_PRE'] == 'yes') {
            $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
        } else {
            $content = $postAuthorDetails['content'] . $content;
        }
        echo "id is empty\n";
    } else {
        if ($config['WRAP_PRE'] == 'yes') {
            $content = "<pre>\n" . $content . "</pre>\n";
        }
    }
    $details = array('post_author' => $poster, 'comment_author' => $postAuthorDetails['author'], 'email_author' => $postAuthorDetails['email'], 'post_date' => $post_date, 'post_date_gmt' => $post_date_gmt, 'post_content' => addslashes($content), 'post_title' => preg_replace("/'/", "\\'", $subject), 'post_modified' => $post_date, 'post_modified_gmt' => $post_date_gmt, 'ping_status' => get_option('default_ping_status'), 'post_category' => $post_categories, 'comment_status' => $comment_status, 'post_name' => sanitize_title($subject), 'ID' => $id, 'post_status' => 'publish');
    DisplayEmailPost($details);
    PostToDB($details);
}
示例#2
0
function CreatePost($poster, $mimeDecodedEmail, $post_id, &$is_reply, $config, $postmodifiers)
{
    $fulldebug = IsDebugMode();
    $fulldebugdump = false;
    extract($config);
    $attachments = array("html" => array(), "cids" => array(), "image_files" => array());
    if (array_key_exists('message-id', $mimeDecodedEmail->headers)) {
        DebugEcho("Message Id is :" . htmlentities($mimeDecodedEmail->headers["message-id"]));
        if ($fulldebugdump) {
            DebugDump($mimeDecodedEmail);
        }
    }
    filter_PreferedText($mimeDecodedEmail, $prefer_text_type);
    if ($fulldebugdump) {
        DebugDump($mimeDecodedEmail);
    }
    $content = GetContent($mimeDecodedEmail, $attachments, $post_id, $poster, $config);
    if ($fulldebug) {
        DebugEcho("the content is {$content}");
    }
    $subject = GetSubject($mimeDecodedEmail, $content, $config);
    filter_RemoveSignature($content, $config);
    if ($fulldebug) {
        DebugEcho("post sig: {$content}");
    }
    $post_excerpt = tag_Excerpt($content, $config);
    if ($fulldebug) {
        DebugEcho("post excerpt: {$content}");
    }
    $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
    if ($fulldebug) {
        DebugEcho("post author: {$content}");
    }
    $message_date = NULL;
    if (array_key_exists("date", $mimeDecodedEmail->headers) && !empty($mimeDecodedEmail->headers["date"])) {
        $cte = "";
        $cs = "";
        if (property_exists($mimeDecodedEmail, 'content-transfer-encoding') && array_key_exists('content-transfer-encoding', $mimeDecodedEmail->headers)) {
            $cte = $mimeDecodedEmail->headers["content-transfer-encoding"];
        }
        if (property_exists($mimeDecodedEmail, 'ctype_parameters') && array_key_exists('charset', $mimeDecodedEmail->ctype_parameters)) {
            $cs = $mimeDecodedEmail->ctype_parameters["charset"];
        }
        $message_date = HandleMessageEncoding($cte, $cs, $mimeDecodedEmail->headers["date"], $message_encoding, $message_dequote);
    }
    $message_date = tag_Date($content, $message_date);
    list($post_date, $post_date_gmt, $delay) = filter_Delay($content, $message_date, $time_offset);
    if ($fulldebug) {
        DebugEcho("post date: {$content}");
    }
    filter_Ubb2HTML($content);
    if ($fulldebug) {
        DebugEcho("post ubb: {$content}");
    }
    $post_categories = tag_Categories($subject, $default_post_category, $category_match);
    if ($fulldebug) {
        DebugEcho("post category: {$content}");
    }
    $post_tags = tag_Tags($content, $default_post_tags);
    if ($fulldebug) {
        DebugEcho("post tag: {$content}");
    }
    $comment_status = tag_AllowCommentsOnPost($content);
    if ($fulldebug) {
        DebugEcho("post comment: {$content}");
    }
    $post_status = tag_Status($content, $post_status);
    if ($fulldebug) {
        DebugEcho("post status: {$content}");
    }
    if ($converturls) {
        $content = filter_Videos($content, $shortcode);
        //videos first so linkify doesn't mess with them
        if ($fulldebug) {
            DebugEcho("post video: {$content}");
        }
        $content = filter_Linkify($content);
        if ($fulldebug) {
            DebugEcho("post linkify: {$content}");
        }
    }
    filter_VodafoneHandler($content, $attachments, $config);
    if ($fulldebug) {
        DebugEcho("post vodafone: {$content}");
    }
    filter_ReplaceImageCIDs($content, $attachments, $config);
    if ($fulldebug) {
        DebugEcho("post cid: {$content}");
    }
    $customImages = tag_CustomImageField($content, $attachments, $config);
    if ($fulldebug) {
        DebugEcho("post custom: {$content}");
    }
    $post_type = tag_PostType($subject, $postmodifiers, $config);
    if ($fulldebug) {
        DebugEcho("post type: {$content}");
    }
    $id = GetParentPostForReply($subject);
    if (empty($id)) {
        $id = $post_id;
        $is_reply = false;
        if ($add_meta == 'yes') {
            if ($wrap_pre == 'yes') {
                $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
                $content = "<pre>\n" . $content . "</pre>\n";
            } else {
                $content = $postAuthorDetails['content'] . $content;
                $content = $content;
            }
        } else {
            if ($wrap_pre == 'yes') {
                $content = "<pre>\n" . $content . "</pre>\n";
            }
        }
    } else {
        DebugEcho("Reply detected");
        $is_reply = true;
        // strip out quoted content
        $lines = explode("\n", $content);
        $newContents = '';
        foreach ($lines as $line) {
            if (preg_match("/^>.*/i", $line) == 0 && preg_match("/^(from|subject|to|date):.*?/i", $line) == 0 && preg_match("/^-+.*?(from|subject|to|date).*?/i", $line) == 0 && preg_match("/^on.*?wrote:\$/i", $line) == 0 && preg_match("/^-+\\s*forwarded\\s*message\\s*-+/i", $line) == 0) {
                $newContents .= "{$line}\n";
            }
        }
        $content = $newContents;
        wp_delete_post($post_id);
    }
    if ($delay != 0 && $post_status == 'publish') {
        $post_status = 'future';
    }
    filter_Newlines($content, $config);
    if ($fulldebug) {
        DebugEcho("post newline: {$content}");
    }
    filter_Start($content, $config);
    if ($fulldebug) {
        DebugEcho("post start: {$content}");
    }
    filter_End($content, $config);
    if ($fulldebug) {
        DebugEcho("post end: {$content}");
    }
    filter_ReplaceImagePlaceHolders($content, $attachments["html"], $config, $id, $config['image_placeholder'], true);
    if ($fulldebug) {
        DebugEcho("post body img: {$content}");
    }
    if ($post_excerpt) {
        filter_ReplaceImagePlaceHolders($post_excerpt, $attachments["html"], $config, $id, "#eimg%#", false);
        if ($fulldebug) {
            DebugEcho("post excerpt img: {$content}");
        }
    }
    DebugEcho("excerpt: {$post_excerpt}");
    if (trim($subject) == "") {
        $subject = $default_title;
        DebugEcho("post parsing subject is blank using: {$default_title}");
    }
    $details = array('post_author' => $poster, 'comment_author' => $postAuthorDetails['author'], 'comment_author_url' => $postAuthorDetails['comment_author_url'], 'user_ID' => $postAuthorDetails['user_ID'], 'email_author' => $postAuthorDetails['email'], 'post_date' => $post_date, 'post_date_gmt' => $post_date_gmt, 'post_content' => $content, 'post_title' => $subject, 'post_type' => $post_type, 'ping_status' => get_option('default_ping_status'), 'post_category' => $post_categories, 'tags_input' => $post_tags, 'comment_status' => $comment_status, 'post_name' => sanitize_title($subject), 'post_excerpt' => $post_excerpt, 'ID' => $id, 'customImages' => $customImages, 'post_status' => $post_status);
    return $details;
}
/**
 * This is the main handler for all of the processing
 */
function PostEmail($poster, $mimeDecodedEmail, $config)
{
    $debug = true;
    $attachments = array("html" => array(), "cids" => array(), "image_files" => array());
    print "<p>Message Id is :" . htmlentities($mimeDecodedEmail->headers["message-id"]) . "</p><br/>\n";
    print "<p>Email has following attachments:</p>";
    //foreach($mimeDecodedEmail->parts as $parts) {
    // print("<p>".$parts->ctype_primary ." ".$parts->ctype_secondary) ."</p>\n";
    //}
    FilterTextParts($mimeDecodedEmail, $config['PREFER_TEXT_TYPE']);
    $tmpPost = array('post_title' => 'tmptitle', 'post_content' => 'tmpPost');
    /* in order to do attachments correctly, we need to associate the
      attachments with a post. So we add the post here, then update it 
      */
    $post_id = wp_insert_post($tmpPost);
    if ($debug) {
        echo "the id is {$post_id}\n";
    }
    $content = GetContent($mimeDecodedEmail, $attachments, $post_id, $config);
    if ($debug) {
        echo "the content is {$content}\n";
    }
    $subject = GetSubject($mimeDecodedEmail, $content, $config);
    if ($debug) {
        echo "the subject is {$subject}, right after calling GetSubject\n";
    }
    $customImages = SpecialMessageParsing($content, $attachments, $config);
    $post_excerpt = GetPostExcerpt($content, $config['FILTERNEWLINES'], $config['CONVERTNEWLINE']);
    $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
    $message_date = NULL;
    if (array_key_exists("date", $mimeDecodedEmail->headers) && !empty($mimeDecodedEmail->headers["date"])) {
        $message_date = HandleMessageEncoding($mimeDecodedEmail->headers["content-transfer-encoding"], $mimeDecodedEmail->ctype_parameters["charset"], $mimeDecodedEmail->headers["date"], $config['MESSAGE_ENCODING'], $config['MESSAGE_DEQUOTE']);
        //$message_date = $mimeDecodedEmail->headers['date'];
    }
    list($post_date, $post_date_gmt, $delay) = DeterminePostDate($content, $message_date, $config['TIME_OFFSET']);
    ubb2HTML($content);
    if ($config['CONVERTURLS']) {
        $content = clickableLink($content, $config['SHORTCODE']);
    }
    //$content = FixEmailQuotes($content);
    $id = checkReply($subject);
    $post_categories = GetPostCategories($subject, $config['DEFAULT_POST_CATEGORY']);
    $post_tags = postie_get_tags($content, $config['DEFAULT_POST_TAGS']);
    $comment_status = AllowCommentsOnPost($content);
    if (empty($id) || is_null($id)) {
        $id = $post_id;
        $isReply = false;
        if ($config['ADD_META'] == 'yes') {
            if ($config['WRAP_PRE'] == 'yes') {
                $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
                $content = "<pre>\n" . $content . "</pre>\n";
            } else {
                $content = $postAuthorDetails['content'] . $content;
                $content = $content;
            }
        } else {
            if ($config['WRAP_PRE'] == 'yes') {
                $content = "<pre>\n" . $content . "</pre>\n";
            }
        }
    } else {
        $isReply = true;
        // strip out quoted content
        $lines = explode("\n", $content);
        //$lines=preg_split('/([\r\n]|<br \/>)/',$content);
        $newContents = '';
        foreach ($lines as $line) {
            //$match=preg_match("/^>.*/i",$line);
            //echo "line=$line,  match=$match";
            if (preg_match("/^>.*/i", $line) == 0 && preg_match("/^(from|subject|to|date):.*?/i", $line) == 0 && preg_match("/^-+.*?(from|subject|to|date).*?/i", $line) == 0 && preg_match("/^on.*?wrote:\$/i", $line) == 0 && preg_match("/^-+\\s*forwarded\\s*message\\s*-+/i", $line) == 0) {
                $newContents .= "{$line}\n";
            }
        }
        $content = $newContents;
        wp_delete_post($post_id);
    }
    if ($config['FILTERNEWLINES']) {
        $content = FilterNewLines($content, $config['CONVERTNEWLINE']);
    }
    if ($delay != 0 && $config['POST_STATUS'] == 'publish') {
        $post_status = 'future';
    } else {
        $post_status = $config['POST_STATUS'];
    }
    $details = array('post_author' => $poster, 'comment_author' => $postAuthorDetails['author'], 'comment_author_url' => $postAuthorDetails['comment_author_url'], 'user_ID' => $postAuthorDetails['user_ID'], 'email_author' => $postAuthorDetails['email'], 'post_date' => $post_date, 'post_content' => apply_filters('content_save_pre', $content), 'post_title' => $subject, 'ping_status' => get_option('default_ping_status'), 'post_category' => $post_categories, 'tags_input' => $post_tags, 'comment_status' => $comment_status, 'post_name' => sanitize_title($subject), 'post_excerpt' => $post_excerpt, 'ID' => $id, 'customImages' => $customImages, 'post_status' => $post_status);
    $details = apply_filters('postie_post', $details);
    DisplayEmailPost($details);
    PostToDB($details, $isReply, $config['POST_TO_DB'], $config['CUSTOM_IMAGE_FIELD']);
    if ($config['CONFIRMATION_EMAIL']) {
        MailToRecipients($mimeDecodedEmail, false, array($postAuthorDetails['email']), false, false);
    }
}
示例#4
0
/**
 * This is the main handler for all of the processing
 */
function PostEmail($poster, $mimeDecodedEmail, $config)
{
    extract($config);
    $post_to_db = true;
    $attachments = array("html" => array(), "cids" => array(), "image_files" => array());
    print "<p>Message Id is :" . htmlentities($mimeDecodedEmail->headers["message-id"]) . "</p><br/>\n";
    if (defined('POSTIE_DEBUG')) {
        foreach ($mimeDecodedEmail->parts as $parts) {
            print "<p>" . $parts->ctype_primary . " " . $parts->ctype_secondary . "</p>\n";
        }
        echo "<p>Email is:</p>";
        var_dump($mimeDecodedEmail);
    }
    FilterTextParts($mimeDecodedEmail, $prefer_text_type);
    $tmpPost = array('post_title' => 'tmptitle', 'post_content' => 'tmpPost');
    /* in order to do attachments correctly, we need to associate the
      attachments with a post. So we add the post here, then update it 
      */
    $post_id = wp_insert_post($tmpPost);
    if (defined('POSTIE_DEBUG')) {
        echo "the id is {$post_id}\n";
    }
    $content = GetContent($mimeDecodedEmail, $attachments, $post_id, $poster, $config);
    if (defined('POSTIE_DEBUG')) {
        echo "the content is {$content}\n";
    }
    $subject = GetSubject($mimeDecodedEmail, $content, $config);
    if (defined('POSTIE_DEBUG')) {
        echo "the subject is {$subject}, right after calling GetSubject\n";
    }
    $customImages = SpecialMessageParsing($content, $attachments, $config);
    $post_excerpt = GetPostExcerpt($content, $filternewlines, $convertnewline);
    $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
    $message_date = NULL;
    if (array_key_exists("date", $mimeDecodedEmail->headers) && !empty($mimeDecodedEmail->headers["date"])) {
        $message_date = HandleMessageEncoding($mimeDecodedEmail->headers["content-transfer-encoding"], $mimeDecodedEmail->ctype_parameters["charset"], $mimeDecodedEmail->headers["date"], $message_encoding, $message_dequote);
        //$message_date = $mimeDecodedEmail->headers['date'];
    }
    list($post_date, $post_date_gmt, $delay) = DeterminePostDate($content, $message_date, $time_offset);
    ubb2HTML($content);
    if ($converturls) {
        $content = clickableLink($content, $shortcode);
    }
    //$content = FixEmailQuotes($content);
    $id = checkReply($subject);
    $post_categories = GetPostCategories($subject, $default_post_category);
    $post_tags = postie_get_tags($content, $default_post_tags);
    $comment_status = AllowCommentsOnPost($content);
    if (empty($id) || is_null($id)) {
        $id = $post_id;
        $isReply = false;
        if ($add_meta == 'yes') {
            if ($wrap_pre == 'yes') {
                $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
                $content = "<pre>\n" . $content . "</pre>\n";
            } else {
                $content = $postAuthorDetails['content'] . $content;
                $content = $content;
            }
        } else {
            if ($wrap_pre == 'yes') {
                $content = "<pre>\n" . $content . "</pre>\n";
            }
        }
    } else {
        $isReply = true;
        // strip out quoted content
        $lines = explode("\n", $content);
        //$lines=preg_split('/([\r\n]|<br \/>)/',$content);
        $newContents = '';
        foreach ($lines as $line) {
            //$match=preg_match("/^>.*/i",$line);
            //echo "line=$line,  match=$match";
            if (preg_match("/^>.*/i", $line) == 0 && preg_match("/^(from|subject|to|date):.*?/i", $line) == 0 && preg_match("/^-+.*?(from|subject|to|date).*?/i", $line) == 0 && preg_match("/^on.*?wrote:\$/i", $line) == 0 && preg_match("/^-+\\s*forwarded\\s*message\\s*-+/i", $line) == 0) {
                $newContents .= "{$line}\n";
            }
        }
        $content = $newContents;
        wp_delete_post($post_id);
    }
    if ($filternewlines) {
        $content = FilterNewLines($content, $convertnewline);
    }
    if ($delay != 0 && $post_status == 'publish') {
        $post_status = 'future';
    } else {
        $post_status = $post_status;
    }
    /* 
     * Added by Raam Dev <*****@*****.**>
     * Adds support for handling Custom Post Types by adding the
     * Custom Post Type name to the email subject separated by
     * $custom_post_type_delim, e.g. "Movies // My Favorite Movie"
     */
    $custom_post_type_delim = "//";
    if (strpos($subject, $custom_post_type_delim) !== FALSE) {
        // Captures the custom post type in the subject before $custom_post_type_delim
        $separated_subject = explode($custom_post_type_delim, $subject);
        $custom_post_type = $separated_subject[0];
        $subject = $separated_subject[1];
        $custom_post_type = trim(strtolower($custom_post_type));
        // Check if custom post type exists, if not, set default post type of 'post'
        $known_post_types = get_post_types();
        if (in_array($custom_post_type, $known_post_types)) {
            $post_type = $custom_post_type;
        } else {
            $post_type = 'post';
        }
    } else {
        $post_type = 'post';
    }
    /* --------- end by Raam Dev <*****@*****.**> */
    // DEBUG
    $details = array('post_author' => $poster, 'comment_author' => $postAuthorDetails['author'], 'comment_author_url' => $postAuthorDetails['comment_author_url'], 'user_ID' => $postAuthorDetails['user_ID'], 'email_author' => $postAuthorDetails['email'], 'post_date' => $post_date, 'post_content' => $content, 'post_title' => $subject, 'post_type' => $post_type, 'ping_status' => get_option('default_ping_status'), 'post_category' => $post_categories, 'tags_input' => $post_tags, 'comment_status' => $comment_status, 'post_name' => sanitize_title($subject), 'post_excerpt' => $post_excerpt, 'ID' => $id, 'customImages' => $customImages, 'post_status' => $post_status);
    $details = apply_filters('postie_post', $details);
    if (empty($details)) {
        // It is possible that the filter has removed the post, in which case, it should not be posted.
        // And if we created a placeholder post (because this was not a reply to an existing post),
        // then it should be removed
        if (!$is_reply) {
            wp_delete_post($post_id);
        }
    } else {
        DisplayEmailPost($details);
        PostToDB($details, $isReply, $post_to_db, $custom_image_field);
        if ($confirmation_email != '') {
            if ($confirmation_email == 'sender') {
                $recipients = array($postAuthorDetails['email']);
            } elseif ($confirmation_email == 'admin') {
                $recipients = array(get_option("admin_email"));
            } elseif ($confirmation_email == 'both') {
                $recipients = array($postAuthorDetails['email'], get_option("admin_email"));
            }
            MailToRecipients($mimeDecodedEmail, false, $recipients, false, false);
        }
    }
}
示例#5
0
 function test_getPostAuthorDetails()
 {
     $s = "subject";
     $c = "content";
     $e = new stdClass();
     $e->headers = array();
     $e->headers['date'] = "Jan 1, 2013";
     $e->headers['from'] = "*****@*****.**";
     $r = getPostAuthorDetails($s, $c, $e);
     $this->assertEquals($s, "subject");
     $this->assertEquals($c, "content");
     $this->assertEquals($r['author'], "wayne");
     $this->assertEquals($r['email'], "*****@*****.**");
     $this->assertEquals($r['emaildate'], "Jan 1, 2013");
 }