Skip to content

Commit aa4b53f

Browse files
committed
Message threading added
1 parent d94da57 commit aa4b53f

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
1111
### Added
1212
- Search for messages by message-Id
1313
- Search for messages by In-Reply-To
14+
- Message threading added `Message::thread()`
1415
- Default folder locations added
1516

1617
### Affected Classes
1718
- [Query::class](src/Query/Query.php)
19+
- [Message::class](src/Message.php)
1820

1921
### Breaking changes
2022
-NaN

src/Message.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Webklex\PHPIMAP\Support\FlagCollection;
2323
use Webklex\PHPIMAP\Support\Masks\MessageMask;
2424
use Illuminate\Support\Str;
25+
use Webklex\PHPIMAP\Support\MessageCollection;
2526
use Webklex\PHPIMAP\Traits\HasEvents;
2627

2728
/**
@@ -634,6 +635,63 @@ public function getFolder(){
634635
return $this->client->getFolder($this->folder_path);
635636
}
636637

638+
/**
639+
* Create a message thread based on the current message
640+
* @param Folder|null $sent_folder
641+
* @param MessageCollection|null $thread
642+
* @param Folder|null $folder
643+
*
644+
* @return MessageCollection|null
645+
* @throws Exceptions\ConnectionFailedException
646+
* @throws Exceptions\FolderFetchingException
647+
* @throws Exceptions\GetMessagesFailedException
648+
*/
649+
public function thread($sent_folder = null, &$thread = null, $folder = null){
650+
$thread = $thread ? $thread : MessageCollection::make([]);
651+
$folder = $folder ? $folder : $this->getFolder();
652+
$sent_folder = $sent_folder ? $sent_folder : $this->client->getFolder(ClientManager::get("options.common_folders.sent", "INBOX/Sent"));
653+
654+
/** @var Message $message */
655+
foreach($thread as $message) {
656+
if ($message->message_id == $this->message_id) {
657+
return $thread;
658+
}
659+
}
660+
$thread->push($this);
661+
662+
$folder->query()->inReplyTo($this->message_id)
663+
->setFetchBody($this->getFetchBodyOption())
664+
->leaveUnread()->get()->each(function($message) use(&$thread, $folder, $sent_folder){
665+
/** @var Message $message */
666+
$message->thread($sent_folder, $thread, $folder);
667+
});
668+
$sent_folder->query()->inReplyTo($this->message_id)
669+
->setFetchBody($this->getFetchBodyOption())
670+
->leaveUnread()->get()->each(function($message) use(&$thread, $folder, $sent_folder){
671+
/** @var Message $message */
672+
$message->thread($sent_folder, $thread, $folder);
673+
});
674+
675+
if (is_array($this->in_reply_to)) {
676+
foreach($this->in_reply_to as $in_reply_to) {
677+
$folder->query()->messageId($in_reply_to)
678+
->setFetchBody($this->getFetchBodyOption())
679+
->leaveUnread()->get()->each(function($message) use(&$thread, $folder, $sent_folder){
680+
/** @var Message $message */
681+
$message->thread($sent_folder, $thread, $folder);
682+
});
683+
$sent_folder->query()->messageId($in_reply_to)
684+
->setFetchBody($this->getFetchBodyOption())
685+
->leaveUnread()->get()->each(function($message) use(&$thread, $folder, $sent_folder){
686+
/** @var Message $message */
687+
$message->thread($sent_folder, $thread, $folder);
688+
});
689+
}
690+
}
691+
692+
return $thread;
693+
}
694+
637695
/**
638696
* Copy the current Messages to a mailbox
639697
* @param string $folder_path

0 commit comments

Comments
 (0)