From e220698ea1e6fd54bafe658c53c40bda65942553 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 23 Nov 2019 11:42:03 +0000 Subject: [PATCH] E-Mail import: The item is now provided to the hook --- src/Protocol/Email.php | 17 +++++++++++++---- src/Worker/OnePoll.php | 27 ++++++++++++++------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/Protocol/Email.php b/src/Protocol/Email.php index 8e3edd783..76797eb6e 100644 --- a/src/Protocol/Email.php +++ b/src/Protocol/Email.php @@ -6,8 +6,10 @@ namespace Friendica\Protocol; use Friendica\Core\Hook; use Friendica\Core\Logger; +use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Model\Item; +use Friendica\Util\Strings; /** * @brief Email class @@ -110,9 +112,9 @@ class Email * @return array * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function getMessage($mbox, $uid, $reply) + public static function getMessage($mbox, $uid, $reply, $item) { - $ret = []; + $ret = $item; $struc = (($mbox && $uid) ? @imap_fetchstructure($mbox, $uid, FT_UID) : null); @@ -126,9 +128,13 @@ class Email if (trim($ret['body']) == '') { $ret['body'] = self::messageGetPart($mbox, $uid, $struc, 0, 'plain'); + + $message = ['text' => $ret['body'], 'html' => '']; + Hook::callAll('email_getmessage', $message, $ret); + $ret['body'] = $message['text']; } else { $message = ['text' => '', 'html' => $ret['body']]; - Hook::callAll('email_getmessage', $message); + Hook::callAll('email_getmessage', $message, $ret); $ret['body'] = $message['html']; $ret['body'] = HTML::toBBCode($ret['body']); @@ -149,7 +155,7 @@ class Email } $message = ['text' => trim($text), 'html' => trim($html)]; - Hook::callAll('email_getmessage', $message); + Hook::callAll('email_getmessage', $message, $ret); $html = $message['html']; $text = $message['text']; @@ -171,6 +177,9 @@ class Email $ret['body'] = self::unifyAttributionLine($ret['body']); + $ret['body'] = Strings::escapeHtml($ret['body']); + $ret['body'] = BBCode::limitBodySize($ret['body']); + Hook::callAll('email_getmessage_end', $ret); return $ret; diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index fefe7d802..0d1a1670a 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -494,6 +494,8 @@ class OnePoll Logger::log("Mail: Parsing mail ".$msg_uid, Logger::DATA); $datarray = []; + $datarray['uid'] = $importer_uid; + $datarray['contact-id'] = $contact['id']; $datarray['verb'] = Activity::POST; $datarray['object-type'] = Activity\ObjectType::NOTE; $datarray['network'] = Protocol::MAIL; @@ -596,18 +598,10 @@ class OnePoll $datarray['parent-uri'] = $datarray['uri']; } - $r = Email::getMessage($mbox, $msg_uid, $reply); - if (!$r) { - Logger::log("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']); - continue; - } - - $datarray['body'] = Strings::escapeHtml($r['body']); - $datarray['body'] = BBCode::limitBodySize($datarray['body']); - - Logger::log("Mail: Importing ".$msg_uid." for ".$mailconf['user']); - $headers = imap_headerinfo($mbox, $meta->msgno); + $headers2 = imap_rfc822_parse_headers(imap_fetchheader($mbox, $meta->msgno)); + Logger::info('Got header', ['header' => $headers2]); + $object = []; if (!empty($headers->from)) { @@ -643,16 +637,23 @@ class OnePoll $datarray['owner-link'] = "mailto:".$contact['addr']; $datarray['owner-avatar'] = $contact['photo']; - $datarray['uid'] = $importer_uid; - $datarray['contact-id'] = $contact['id']; if ($datarray['parent-uri'] === $datarray['uri']) { $datarray['private'] = 1; } + if (!PConfig::get($importer_uid, 'system', 'allow_public_email_replies')) { $datarray['private'] = 1; $datarray['allow_cid'] = '<' . $contact['id'] . '>'; } + $datarray = Email::getMessage($mbox, $msg_uid, $reply, $datarray); + if (empty($datarray['body'])) { + Logger::log("Mail: can't fetch msg ".$msg_uid." for ".$mailconf['user']); + continue; + } + + Logger::log("Mail: Importing ".$msg_uid." for ".$mailconf['user']); + Item::insert($datarray); switch ($mailconf['action']) {