Mark V
1: <?php
2: namespace MOC\V\Component\Mail;
3:
4: use MOC\V\Component\Mail\Component\Bridge\Repository\EdenPhpImap;
5: use MOC\V\Component\Mail\Component\Bridge\Repository\EdenPhpPop3;
6: use MOC\V\Component\Mail\Component\Bridge\Repository\EdenPhpSmtp;
7: use MOC\V\Component\Mail\Component\IBridgeInterface;
8: use MOC\V\Component\Mail\Component\IVendorInterface;
9: use MOC\V\Component\Mail\Exception\MailException;
10: use MOC\V\Component\Mail\Vendor\Vendor;
11:
12: /**
13: * Class Mail
14: *
15: * @package MOC\V\Component\Mail
16: */
17: class Mail implements IVendorInterface
18: {
19:
20: const MAIL_TYPE_POP3 = 0;
21: const MAIL_TYPE_SMTP = 1;
22: const MAIL_TYPE_IMAP = 2;
23:
24: /** @var IVendorInterface $VendorInterface */
25: private $VendorInterface = null;
26:
27: /**
28: * @param IVendorInterface $VendorInterface
29: */
30: public function __construct(IVendorInterface $VendorInterface)
31: {
32:
33: $this->setVendorInterface($VendorInterface);
34: }
35:
36: /**
37: * @param int $Type
38: *
39: * @return IBridgeInterface
40: * @throws MailException
41: */
42: public static function getMail($Type = self::MAIL_TYPE_SMTP)
43: {
44:
45: switch ($Type) {
46: case self::MAIL_TYPE_POP3: {
47: return self::getSmtpMail();
48: }
49: case self::MAIL_TYPE_SMTP: {
50: return self::getSmtpMail();
51: }
52: case self::MAIL_TYPE_IMAP: {
53: return self::getSmtpMail();
54: }
55: default:
56: throw new MailException();
57: }
58: }
59:
60: /**
61: * @return IBridgeInterface
62: */
63: public static function getSmtpMail()
64: {
65:
66: $Mail = new Mail(
67: new Vendor(
68: new EdenPhpSmtp()
69: )
70: );
71:
72: return $Mail->getBridgeInterface();
73: }
74:
75: /**
76: * @return IBridgeInterface
77: */
78: public function getBridgeInterface()
79: {
80:
81: return $this->VendorInterface->getBridgeInterface();
82: }
83:
84: /**
85: * @return IBridgeInterface
86: */
87: public static function getPop3Mail()
88: {
89:
90: $Mail = new Mail(
91: new Vendor(
92: new EdenPhpPop3()
93: )
94: );
95:
96: return $Mail->getBridgeInterface();
97: }
98:
99: /**
100: * @return IBridgeInterface
101: */
102: public static function getImapMail()
103: {
104:
105: $Mail = new Mail(
106: new Vendor(
107: new EdenPhpImap()
108: )
109: );
110:
111: return $Mail->getBridgeInterface();
112: }
113:
114: /**
115: * @return IVendorInterface
116: */
117: public function getVendorInterface()
118: {
119:
120: return $this->VendorInterface;
121: }
122:
123: /**
124: * @param IVendorInterface $VendorInterface
125: *
126: * @return IVendorInterface
127: */
128: public function setVendorInterface(IVendorInterface $VendorInterface)
129: {
130:
131: $this->VendorInterface = $VendorInterface;
132: return $this;
133: }
134:
135: /**
136: * @param IBridgeInterface $BridgeInterface
137: *
138: * @return IBridgeInterface
139: */
140: public function setBridgeInterface(IBridgeInterface $BridgeInterface)
141: {
142:
143: return $this->VendorInterface->setBridgeInterface($BridgeInterface);
144: }
145: }
146: