1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 3.7.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\Mailer;
16:
17: use BadMethodCallException;
18: use Cake\Core\App;
19: use Cake\Core\ObjectRegistry;
20: use RuntimeException;
21:
22: /**
23: * An object registry for mailer transports.
24: */
25: class TransportRegistry extends ObjectRegistry
26: {
27: /**
28: * Resolve a mailer tranport classname.
29: *
30: * Part of the template method for Cake\Core\ObjectRegistry::load()
31: *
32: * @param string|\Cake\Mailer\AbstractTransport $class Partial classname to resolve or transport instance.
33: * @return string|false Either the correct classname or false.
34: */
35: protected function _resolveClassName($class)
36: {
37: if (is_object($class)) {
38: return $class;
39: }
40:
41: $className = App::className($class, 'Mailer/Transport', 'Transport');
42:
43: if (!$className) {
44: $className = App::className($class, 'Network/Email', 'Transport');
45: if ($className) {
46: deprecationWarning(
47: 'Transports in "Network/Email" are deprecated, use "Mailer/Transport" instead.'
48: );
49: }
50: }
51:
52: return $className;
53: }
54:
55: /**
56: * Throws an exception when a cache engine is missing.
57: *
58: * Part of the template method for Cake\Core\ObjectRegistry::load()
59: *
60: * @param string $class The classname that is missing.
61: * @param string $plugin The plugin the cache is missing in.
62: * @return void
63: * @throws \BadMethodCallException
64: */
65: protected function _throwMissingClassError($class, $plugin)
66: {
67: throw new BadMethodCallException(sprintf('Mailer transport %s is not available.', $class));
68: }
69:
70: /**
71: * Create the mailer transport instance.
72: *
73: * Part of the template method for Cake\Core\ObjectRegistry::load()
74: *
75: * @param string|\Cake\Mailer\AbstractTransport $class The classname or object to make.
76: * @param string $alias The alias of the object.
77: * @param array $config An array of settings to use for the cache engine.
78: * @return \Cake\Mailer\AbstractTransport The constructed transport class.
79: * @throws \RuntimeException when an object doesn't implement the correct interface.
80: */
81: protected function _create($class, $alias, $config)
82: {
83: $instance = null;
84:
85: if (is_object($class)) {
86: $instance = $class;
87: }
88:
89: if (!$instance) {
90: $instance = new $class($config);
91: }
92:
93: if ($instance instanceof AbstractTransport) {
94: return $instance;
95: }
96:
97: throw new RuntimeException(
98: 'Mailer transports must use Cake\Mailer\AbstractTransport as a base class.'
99: );
100: }
101:
102: /**
103: * Remove a single adapter from the registry.
104: *
105: * @param string $name The adapter name.
106: * @return void
107: */
108: public function unload($name)
109: {
110: unset($this->_loaded[$name]);
111: }
112: }
113: