From e6bfd1dbfe7fc9b78786d8d444243f06e5704c16 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Thu, 28 Sep 2017 16:53:17 +0200 Subject: [PATCH 1/5] Revert non-inherent changes, apply coding-standards --- src/Message.php | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/Message.php b/src/Message.php index cf9675a2..9b142742 100644 --- a/src/Message.php +++ b/src/Message.php @@ -14,7 +14,6 @@ */ class Message extends Message\Part { - private $headersRaw; private $headers; private $rawHeaders; private $attachments; @@ -137,12 +136,7 @@ public function getNumber(): int */ public function getDate(): \DateTimeImmutable { - $date = $this->getHeaders()->get('date'); - if(!$date){ - $udate = new \DateTime(); - $date = $udate->setTimestamp($this->getHeaders()->get('udate')); - } - return $date; + return $this->getHeaders()->get('date'); } /** @@ -407,21 +401,25 @@ private function loadStructure() /** * Set Flag Message - * @param [type] $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft - * @return bool [description] + * + * @param $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft + * + * @return bool */ public function setFlag($flag) { - return imap_setflag_full($this->stream, $this->messageNumber, $flag, ST_UID); + return imap_setflag_full($this->stream, $this->messageNumber, $flag, ST_UID); } /** * Clear Flag Message - * @param [type] $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft - * @return bool [description] + * + * @param $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft + * + * @return bool */ public function clearFlag($flag) { - return imap_clearflag_full($this->stream, $this->messageNumber, $flag, ST_UID); + return imap_clearflag_full($this->stream, $this->messageNumber, $flag, ST_UID); } } From 24529b770bfbfc2bdc461cad95b605e48cec8339 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Thu, 28 Sep 2017 16:57:11 +0200 Subject: [PATCH 2/5] Escape global constant --- src/Message.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Message.php b/src/Message.php index 9b142742..917462b5 100644 --- a/src/Message.php +++ b/src/Message.php @@ -408,7 +408,7 @@ private function loadStructure() */ public function setFlag($flag) { - return imap_setflag_full($this->stream, $this->messageNumber, $flag, ST_UID); + return imap_setflag_full($this->stream, $this->messageNumber, $flag, \ST_UID); } /** @@ -420,6 +420,6 @@ public function setFlag($flag) */ public function clearFlag($flag) { - return imap_clearflag_full($this->stream, $this->messageNumber, $flag, ST_UID); + return imap_clearflag_full($this->stream, $this->messageNumber, $flag, \ST_UID); } } From 257f0b65297947c9150ca98b9689836e9ab776f8 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Thu, 28 Sep 2017 17:08:24 +0200 Subject: [PATCH 3/5] Added test for flags functionalities --- src/Message.php | 44 ++++++++++++++++++++++++++++++++++--------- tests/MessageTest.php | 17 +++++++++++++++++ 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/Message.php b/src/Message.php index 917462b5..9aa49454 100644 --- a/src/Message.php +++ b/src/Message.php @@ -165,14 +165,24 @@ public function getContent(bool $keepUnseen = false): string return $this->doGetContent($this->keepUnseen ? $this->keepUnseen : $keepUnseen); } + /** + * Get message flagged flag value (from headers) + * + * @return bool + */ + public function isFlagged(): bool + { + return 'F' === $this->getHeaders()->get('flagged'); + } + /** * Get message answered flag value (from headers) * * @return bool */ - public function isAnswered() + public function isAnswered(): bool { - return $this->getHeaders()->get('answered'); + return 'A' === $this->getHeaders()->get('answered'); } /** @@ -180,9 +190,9 @@ public function isAnswered() * * @return bool */ - public function isDeleted() + public function isDeleted(): bool { - return $this->getHeaders()->get('deleted'); + return 'D' === $this->getHeaders()->get('deleted'); } /** @@ -190,9 +200,9 @@ public function isDeleted() * * @return bool */ - public function isDraft() + public function isDraft(): bool { - return $this->getHeaders()->get('draft'); + return 'X' === $this->getHeaders()->get('draft'); } /** @@ -236,6 +246,14 @@ public function getHeaders(): Message\Headers return $this->headers; } + /** + * Clearmessage headers + */ + private function clearHeaders() + { + $this->headers = null; + } + /** * Get raw message headers * @@ -406,9 +424,13 @@ private function loadStructure() * * @return bool */ - public function setFlag($flag) + public function setFlag(string $flag) { - return imap_setflag_full($this->stream, $this->messageNumber, $flag, \ST_UID); + $result = imap_setflag_full($this->stream, (string) $this->messageNumber, $flag, \ST_UID); + + $this->clearHeaders(); + + return $result; } /** @@ -420,6 +442,10 @@ public function setFlag($flag) */ public function clearFlag($flag) { - return imap_clearflag_full($this->stream, $this->messageNumber, $flag, \ST_UID); + $result = imap_clearflag_full($this->stream, (string) $this->messageNumber, $flag, \ST_UID); + + $this->clearHeaders(); + + return $result; } } diff --git a/tests/MessageTest.php b/tests/MessageTest.php index 43429841..9e4948e2 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -330,4 +330,21 @@ public function testRawHeaders() $this->assertSame($expectedHeaders, $message->getRawHeaders()); } + + public function testSetFlags() + { + $this->createTestMessage($this->mailbox, 'Message A'); + + $message = $this->mailbox->getMessage(1); + + $this->assertFalse($message->isFlagged()); + + $message->setFlag('\Flagged'); + + $this->assertTrue($message->isFlagged()); + + $message->clearFlag('\Flagged'); + + $this->assertFalse($message->isFlagged()); + } } From 493d8758956edaef0ef0a2242ba204d3050cc8b8 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Thu, 28 Sep 2017 17:24:43 +0200 Subject: [PATCH 4/5] Add Recent and Unseen shortcuts --- src/Message.php | 22 +++++++++++++++++++++- tests/MessageTest.php | 23 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Message.php b/src/Message.php index 9aa49454..6ec27c13 100644 --- a/src/Message.php +++ b/src/Message.php @@ -165,6 +165,26 @@ public function getContent(bool $keepUnseen = false): string return $this->doGetContent($this->keepUnseen ? $this->keepUnseen : $keepUnseen); } + /** + * Get message unseen flag value (from headers) + * + * @return string + */ + public function isRecent(): string + { + return $this->getHeaders()->get('recent'); + } + + /** + * Get message unseen flag value (from headers) + * + * @return bool + */ + public function isUnseen(): bool + { + return 'U' === $this->getHeaders()->get('unseen'); + } + /** * Get message flagged flag value (from headers) * @@ -214,7 +234,7 @@ public function isSeen(): bool { return 'R' === $this->getHeaders()->get('recent') - || ('' === $this->getHeaders()->get('recent') && '' !== $this->getHeaders()->get('unseen')) + || ('N' !== $this->getHeaders()->get('recent') && 'U' === $this->getHeaders()->get('unseen')) ; } diff --git a/tests/MessageTest.php b/tests/MessageTest.php index 9e4948e2..00b35f3f 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -51,6 +51,21 @@ public function testKeepUnseen() $this->assertFalse($message->isSeen()); } + public function testFlags() + { + $this->createTestMessage($this->mailbox, 'Message A'); + + $message = $this->mailbox->getMessage(1); + + $this->assertSame('N', $message->isRecent()); + $this->assertFalse($message->isUnseen()); + $this->assertFalse($message->isFlagged()); + $this->assertFalse($message->isAnswered()); + $this->assertFalse($message->isDeleted()); + $this->assertFalse($message->isDraft()); + $this->assertFalse($message->isSeen()); + } + /** * @dataProvider provideCharsets */ @@ -339,12 +354,16 @@ public function testSetFlags() $this->assertFalse($message->isFlagged()); - $message->setFlag('\Flagged'); + $message->setFlag('\\Flagged'); $this->assertTrue($message->isFlagged()); - $message->clearFlag('\Flagged'); + $message->clearFlag('\\Flagged'); $this->assertFalse($message->isFlagged()); + + $message->setFlag('\\Seen'); + $this->assertSame('R', $message->isRecent()); + $this->assertTrue($message->isSeen()); } } From 148f2cbd80bbbf854c74942912371560a5548396 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Thu, 28 Sep 2017 17:25:58 +0200 Subject: [PATCH 5/5] Missing type hint --- src/Message.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Message.php b/src/Message.php index 6ec27c13..8351cade 100644 --- a/src/Message.php +++ b/src/Message.php @@ -460,7 +460,7 @@ public function setFlag(string $flag) * * @return bool */ - public function clearFlag($flag) + public function clearFlag(string $flag) { $result = imap_clearflag_full($this->stream, (string) $this->messageNumber, $flag, \ST_UID);