TYPO3  7.6
SimpleEventDispatcher.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of SwiftMailer.
5  * (c) 2004-2009 Chris Corbyn
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10 
17 {
19  private $_eventMap = array();
20 
22  private $_listeners = array();
23 
25  private $_bubbleQueue = array();
26 
30  public function __construct()
31  {
32  $this->_eventMap = array(
33  'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener',
34  'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener',
35  'Swift_Events_SendEvent' => 'Swift_Events_SendListener',
36  'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener',
37  'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener',
38  );
39  }
40 
49  public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $message)
50  {
51  return new Swift_Events_SendEvent($source, $message);
52  }
53 
63  public function createCommandEvent(Swift_Transport $source, $command, $successCodes = array())
64  {
65  return new Swift_Events_CommandEvent($source, $command, $successCodes);
66  }
67 
77  public function createResponseEvent(Swift_Transport $source, $response, $valid)
78  {
79  return new Swift_Events_ResponseEvent($source, $response, $valid);
80  }
81 
90  {
91  return new Swift_Events_TransportChangeEvent($source);
92  }
93 
103  {
104  return new Swift_Events_TransportExceptionEvent($source, $ex);
105  }
106 
113  {
114  foreach ($this->_listeners as $l) {
115  // Already loaded
116  if ($l === $listener) {
117  return;
118  }
119  }
120  $this->_listeners[] = $listener;
121  }
122 
129  public function dispatchEvent(Swift_Events_EventObject $evt, $target)
130  {
131  $this->_prepareBubbleQueue($evt);
132  $this->_bubble($evt, $target);
133  }
134 
137  {
138  $this->_bubbleQueue = array();
139  $evtClass = get_class($evt);
140  foreach ($this->_listeners as $listener) {
141  if (array_key_exists($evtClass, $this->_eventMap)
142  && ($listener instanceof $this->_eventMap[$evtClass])) {
143  $this->_bubbleQueue[] = $listener;
144  }
145  }
146  }
147 
149  private function _bubble(Swift_Events_EventObject $evt, $target)
150  {
151  if (!$evt->bubbleCancelled() && $listener = array_shift($this->_bubbleQueue)) {
152  $listener->$target($evt);
153  $this->_bubble($evt, $target);
154  }
155  }
156 }