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: * @package Cake.Observer
13: * @since CakePHP(tm) v 2.1
14: * @license https://opensource.org/licenses/mit-license.php MIT License
15: */
16:
17: /**
18: * Represents the transport class of events across the system. It receives a name, subject and an optional
19: * payload. The name can be any string that uniquely identifies the event across the application, while the subject
20: * represents the object that the event applies to.
21: *
22: * @package Cake.Event
23: */
24: class CakeEvent {
25:
26: /**
27: * Name of the event
28: *
29: * @var string
30: */
31: protected $_name = null;
32:
33: /**
34: * The object this event applies to (usually the same object that generates the event)
35: *
36: * @var object
37: */
38: protected $_subject;
39:
40: /**
41: * Custom data for the method that receives the event
42: *
43: * @var mixed
44: */
45: public $data = null;
46:
47: /**
48: * Property used to retain the result value of the event listeners
49: *
50: * @var mixed
51: */
52: public $result = null;
53:
54: /**
55: * Flags an event as stopped or not, default is false
56: *
57: * @var bool
58: */
59: protected $_stopped = false;
60:
61: /**
62: * Constructor
63: *
64: * @param string $name Name of the event
65: * @param object $subject the object that this event applies to (usually the object that is generating the event)
66: * @param mixed $data any value you wish to be transported with this event to it can be read by listeners
67: *
68: * ## Examples of usage:
69: *
70: * ```
71: * $event = new CakeEvent('Order.afterBuy', $this, array('buyer' => $userData));
72: * $event = new CakeEvent('User.afterRegister', $UserModel);
73: * ```
74: */
75: public function __construct($name, $subject = null, $data = null) {
76: $this->_name = $name;
77: $this->data = $data;
78: $this->_subject = $subject;
79: }
80:
81: /**
82: * Dynamically returns the name and subject if accessed directly
83: *
84: * @param string $attribute Attribute name.
85: * @return mixed
86: */
87: public function __get($attribute) {
88: if ($attribute === 'name' || $attribute === 'subject') {
89: return $this->{$attribute}();
90: }
91: }
92:
93: /**
94: * Returns the name of this event. This is usually used as the event identifier
95: *
96: * @return string
97: */
98: public function name() {
99: return $this->_name;
100: }
101:
102: /**
103: * Returns the subject of this event
104: *
105: * @return object
106: */
107: public function subject() {
108: return $this->_subject;
109: }
110:
111: /**
112: * Stops the event from being used anymore
113: *
114: * @return bool
115: */
116: public function stopPropagation() {
117: return $this->_stopped = true;
118: }
119:
120: /**
121: * Check if the event is stopped
122: *
123: * @return bool True if the event is stopped
124: */
125: public function isStopped() {
126: return $this->_stopped;
127: }
128:
129: }
130: