diff --git a/src/Core/Search.php b/src/Core/Search.php index 3d816e5..8d8320d 100644 --- a/src/Core/Search.php +++ b/src/Core/Search.php @@ -5,6 +5,8 @@ namespace Clivern\Imap\Core; +use Clivern\Imap\Core\Search\Contract\Condition; + /** * Search Class * @@ -21,12 +23,12 @@ class Search /** * Add Condition * - * @param string $condition + * @param Condition $condition * @return Search */ - public function addCondition($condition) + public function addCondition(Condition $condition) { - $this->conditions[] = $condition; + $this->conditions[] = (string) $condition; return $this; } diff --git a/src/Core/Search/Condition/All.php b/src/Core/Search/Condition/All.php new file mode 100644 index 0000000..991d82e --- /dev/null +++ b/src/Core/Search/Condition/All.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * All Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class All implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "ALL"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Answered.php b/src/Core/Search/Condition/Answered.php new file mode 100644 index 0000000..ec3d227 --- /dev/null +++ b/src/Core/Search/Condition/Answered.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Answered Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Answered implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "ANSWERED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/BCC.php b/src/Core/Search/Condition/BCC.php new file mode 100644 index 0000000..873c949 --- /dev/null +++ b/src/Core/Search/Condition/BCC.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * BCC Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class BCC implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "BCC \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Before.php b/src/Core/Search/Condition/Before.php new file mode 100644 index 0000000..c6723d9 --- /dev/null +++ b/src/Core/Search/Condition/Before.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Before Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Before implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "BEFORE \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Body.php b/src/Core/Search/Condition/Body.php new file mode 100644 index 0000000..77359a3 --- /dev/null +++ b/src/Core/Search/Condition/Body.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Body Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Body implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "BODY \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/CC.php b/src/Core/Search/Condition/CC.php new file mode 100644 index 0000000..0d8ccdb --- /dev/null +++ b/src/Core/Search/Condition/CC.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * CC Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class CC implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "CC \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Deleted.php b/src/Core/Search/Condition/Deleted.php new file mode 100644 index 0000000..007e85e --- /dev/null +++ b/src/Core/Search/Condition/Deleted.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Deleted Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Deleted implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "DELETED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Flagged.php b/src/Core/Search/Condition/Flagged.php new file mode 100644 index 0000000..6740cb3 --- /dev/null +++ b/src/Core/Search/Condition/Flagged.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Flagged Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Flagged implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "FLAGGED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/From.php b/src/Core/Search/Condition/From.php new file mode 100644 index 0000000..1d7ca6a --- /dev/null +++ b/src/Core/Search/Condition/From.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * From Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class From implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "FROM \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Keyword.php b/src/Core/Search/Condition/Keyword.php new file mode 100644 index 0000000..e1a4d5f --- /dev/null +++ b/src/Core/Search/Condition/Keyword.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Keyword Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Keyword implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "KEYWORD \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/NewFlag.php b/src/Core/Search/Condition/NewFlag.php new file mode 100644 index 0000000..b7b628c --- /dev/null +++ b/src/Core/Search/Condition/NewFlag.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * New Flag Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class NewFlag implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "NEW"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Old.php b/src/Core/Search/Condition/Old.php new file mode 100644 index 0000000..1f0613a --- /dev/null +++ b/src/Core/Search/Condition/Old.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Old Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Old implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "OLD"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/On.php b/src/Core/Search/Condition/On.php new file mode 100644 index 0000000..69bb7ab --- /dev/null +++ b/src/Core/Search/Condition/On.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * On Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class On implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "ON \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Recent.php b/src/Core/Search/Condition/Recent.php new file mode 100644 index 0000000..95da2b5 --- /dev/null +++ b/src/Core/Search/Condition/Recent.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * All Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Recent implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "RECENT"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Seen.php b/src/Core/Search/Condition/Seen.php new file mode 100644 index 0000000..56bdbf5 --- /dev/null +++ b/src/Core/Search/Condition/Seen.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Seen Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Seen implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "SEEN"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Since.php b/src/Core/Search/Condition/Since.php new file mode 100644 index 0000000..0da9ffd --- /dev/null +++ b/src/Core/Search/Condition/Since.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Since Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Since implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "SINCE \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Subject.php b/src/Core/Search/Condition/Subject.php new file mode 100644 index 0000000..e453157 --- /dev/null +++ b/src/Core/Search/Condition/Subject.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Subject Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Subject implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "SUBJECT \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/Text.php b/src/Core/Search/Condition/Text.php new file mode 100644 index 0000000..7620d94 --- /dev/null +++ b/src/Core/Search/Condition/Text.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * Text Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class Text implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "TEXT \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/To.php b/src/Core/Search/Condition/To.php new file mode 100644 index 0000000..6df5c21 --- /dev/null +++ b/src/Core/Search/Condition/To.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * To Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class To implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "TO \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/UnAnswered.php b/src/Core/Search/Condition/UnAnswered.php new file mode 100644 index 0000000..928e35b --- /dev/null +++ b/src/Core/Search/Condition/UnAnswered.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * UnAnswered Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class UnAnswered implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "UNANSWERED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/UnDeleted.php b/src/Core/Search/Condition/UnDeleted.php new file mode 100644 index 0000000..e808e5d --- /dev/null +++ b/src/Core/Search/Condition/UnDeleted.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * UnDeleted Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class UnDeleted implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "UNDELETED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/UnFlagged.php b/src/Core/Search/Condition/UnFlagged.php new file mode 100644 index 0000000..5b9a4d5 --- /dev/null +++ b/src/Core/Search/Condition/UnFlagged.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * UnFlagged Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class UnFlagged implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "UNFLAGGED"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/UnKeyword.php b/src/Core/Search/Condition/UnKeyword.php new file mode 100644 index 0000000..d4d802b --- /dev/null +++ b/src/Core/Search/Condition/UnKeyword.php @@ -0,0 +1,42 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * UnKeyword Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class UnKeyword implements Condition +{ + + /** + * @var string + */ + protected $data; + + /** + * Class Constructor + * + * @param string $data + */ + public function __construct($data) + { + $this->data = $data; + } + + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "UNKEYWORD \"{$this->data}\""; + } +} \ No newline at end of file diff --git a/src/Core/Search/Condition/UnSeen.php b/src/Core/Search/Condition/UnSeen.php new file mode 100644 index 0000000..c22b918 --- /dev/null +++ b/src/Core/Search/Condition/UnSeen.php @@ -0,0 +1,26 @@ + + */ + +namespace Clivern\Imap\Core\Search\Condition; + +use Clivern\Imap\Core\Search\Contract\Condition; + +/** + * UnSeen Class + * + * @package Clivern\Imap\Core\Search\Condition + */ +class UnSeen implements Condition +{ + /** + * Query String + * + * @return string + */ + public function __toString() + { + return "UNSEEN"; + } +} \ No newline at end of file diff --git a/src/Core/Search/Contract/Condition.php b/src/Core/Search/Contract/Condition.php new file mode 100644 index 0000000..25ac432 --- /dev/null +++ b/src/Core/Search/Contract/Condition.php @@ -0,0 +1,16 @@ + + */ + +namespace Clivern\Imap\Core\Search\Contract; + +/** + * Condition Interface + * + * @package Clivern\Imap\Core\Search\Contract + */ +interface Condition +{ + public function __toString(); +} \ No newline at end of file diff --git a/src/MailBox.php b/src/MailBox.php index 72d3d73..bdc1d17 100644 --- a/src/MailBox.php +++ b/src/MailBox.php @@ -75,7 +75,7 @@ class MailBox * Get message ids * * @param Search $search - * @return MessageIterator|Message[] + * @return MessageIterator */ public function getMessages(Search $search = null) { diff --git a/tests/Core/SearchTest.php b/tests/Core/SearchTest.php index a7986cd..d7070b3 100644 --- a/tests/Core/SearchTest.php +++ b/tests/Core/SearchTest.php @@ -8,12 +8,14 @@ class SearchTest extends TestCase public function testConditionBuilder() { $search = new \Clivern\Imap\Core\Search(); - $search->addCondition('RECENT')->addCondition('BCC "string"')->addCondition('NEW'); + $search->addCondition(new \Clivern\Imap\Core\Search\Condition\To("hello@clivern.com")) + ->addCondition(new \Clivern\Imap\Core\Search\Condition\BCC("hello@clivern.com")) + ->addCondition(new \Clivern\Imap\Core\Search\Condition\NewFlag()); $this->assertEquals($search->getConditions(), [ - 'RECENT', - 'BCC "string"', + 'TO "hello@clivern.com"', + 'BCC "hello@clivern.com"', 'NEW' ]); - $this->assertEquals((string) $search, 'RECENT BCC "string" NEW'); + $this->assertEquals((string) $search, 'TO "hello@clivern.com" BCC "hello@clivern.com" NEW'); } } \ No newline at end of file