PageRenderTime 26ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record/Listener/Chain.php

https://github.com/nationalfield/symfony
PHP | 422 lines | 349 code | 8 blank | 65 comment | 4 complexity | 663c7fbb50193f3e4b0dc7b341515e4a MD5 | raw file
  1. <?php
  2. /*
  3. * $Id$
  4. *
  5. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. *
  17. * This software consists of voluntary contributions made by many individuals
  18. * and is licensed under the LGPL. For more information, see
  19. * <http://www.doctrine-project.org>.
  20. */
  21. /**
  22. * Doctrine_Record_Listener_Chain
  23. * this class represents a chain of different listeners,
  24. * useful for having multiple listeners listening the events at the same time
  25. *
  26. * @package Doctrine
  27. * @subpackage Record
  28. * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
  29. * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
  30. * @link www.doctrine-project.org
  31. * @since 1.0
  32. * @version $Revision$
  33. */
  34. class Doctrine_Record_Listener_Chain extends Doctrine_Access implements Doctrine_Record_Listener_Interface
  35. {
  36. /**
  37. * @var array $listeners an array containing all listeners
  38. */
  39. protected $_listeners = array();
  40. /**
  41. * @var array $_options an array containing chain options
  42. */
  43. protected $_options = array('disabled' => false);
  44. /**
  45. * setOption
  46. * sets an option in order to allow flexible listener chaining
  47. *
  48. * @param mixed $name the name of the option to set
  49. * @param mixed $value the value of the option
  50. */
  51. public function setOption($name, $value = null)
  52. {
  53. if (is_array($name)) {
  54. $this->_options = Doctrine_Lib::arrayDeepMerge($this->_options, $name);
  55. } else {
  56. $this->_options[$name] = $value;
  57. }
  58. }
  59. /**
  60. * getOption
  61. * returns the value of given option
  62. *
  63. * @param string $name the name of the option
  64. * @return mixed the value of given option
  65. */
  66. public function getOption($name)
  67. {
  68. if (isset($this->_options[$name])) {
  69. return $this->_options[$name];
  70. }
  71. return null;
  72. }
  73. /**
  74. * Get array of configured options
  75. *
  76. * @return array $options
  77. */
  78. public function getOptions()
  79. {
  80. return $this->_options;
  81. }
  82. /**
  83. * add
  84. * adds a listener to the chain of listeners
  85. *
  86. * @param object $listener
  87. * @param string $name
  88. * @return void
  89. */
  90. public function add($listener, $name = null)
  91. {
  92. if ( ! ($listener instanceof Doctrine_Record_Listener_Interface) &&
  93. ! ($listener instanceof Doctrine_Overloadable)) {
  94. throw new Doctrine_EventListener_Exception("Couldn't add eventlistener. Record listeners should implement either Doctrine_Record_Listener_Interface or Doctrine_Overloadable");
  95. }
  96. if ($name === null) {
  97. $this->_listeners[] = $listener;
  98. } else {
  99. $this->_listeners[$name] = $listener;
  100. }
  101. }
  102. /**
  103. * returns a Doctrine_Record_Listener on success
  104. * and null on failure
  105. *
  106. * @param mixed $key
  107. * @return mixed
  108. */
  109. public function get($key)
  110. {
  111. if ( ! isset($this->_listeners[$key])) {
  112. return null;
  113. }
  114. return $this->_listeners[$key];
  115. }
  116. /**
  117. * set
  118. *
  119. * @param mixed $key
  120. * @param Doctrine_Record_Listener $listener listener to be added
  121. * @return Doctrine_Record_Listener_Chain this object
  122. */
  123. public function set($key, $listener)
  124. {
  125. $this->_listeners[$key] = $listener;
  126. }
  127. public function preSerialize(Doctrine_Event $event)
  128. {
  129. $disabled = $this->getOption('disabled');
  130. if ($disabled !== true && ! (is_array($disabled) && in_array('preSerialize', $disabled))) {
  131. foreach ($this->_listeners as $listener) {
  132. $disabled = $listener->getOption('disabled');
  133. if ($disabled !== true && ! (is_array($disabled) && in_array('preSerialize', $disabled))) {
  134. $listener->preSerialize($event);
  135. }
  136. }
  137. }
  138. }
  139. public function postSerialize(Doctrine_Event $event)
  140. {
  141. $disabled = $this->getOption('disabled');
  142. if ($disabled !== true && ! (is_array($disabled) && in_array('postSerialize', $disabled))) {
  143. foreach ($this->_listeners as $listener) {
  144. $disabled = $listener->getOption('disabled');
  145. if ($disabled !== true && ! (is_array($disabled) && in_array('postSerialize', $disabled))) {
  146. $listener->postSerialize($event);
  147. }
  148. }
  149. }
  150. }
  151. public function preUnserialize(Doctrine_Event $event)
  152. {
  153. $disabled = $this->getOption('disabled');
  154. if ($disabled !== true && ! (is_array($disabled) && in_array('preUnserialize', $disabled))) {
  155. foreach ($this->_listeners as $listener) {
  156. $disabled = $listener->getOption('disabled');
  157. if ($disabled !== true && ! (is_array($disabled) && in_array('preUnserialize', $disabled))) {
  158. $listener->preUnserialize($event);
  159. }
  160. }
  161. }
  162. }
  163. public function postUnserialize(Doctrine_Event $event)
  164. {
  165. $disabled = $this->getOption('disabled');
  166. if ($disabled !== true && ! (is_array($disabled) && in_array('postUnserialize', $disabled))) {
  167. foreach ($this->_listeners as $listener) {
  168. $disabled = $listener->getOption('disabled');
  169. if ($disabled !== true && ! (is_array($disabled) && in_array('postUnserialize', $disabled))) {
  170. $listener->postUnserialize($event);
  171. }
  172. }
  173. }
  174. }
  175. public function preDqlSelect(Doctrine_Event $event)
  176. {
  177. $disabled = $this->getOption('disabled');
  178. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlSelect', $disabled))) {
  179. foreach ($this->_listeners as $listener) {
  180. $disabled = $listener->getOption('disabled');
  181. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlSelect', $disabled))) {
  182. $listener->preDqlSelect($event);
  183. }
  184. }
  185. }
  186. }
  187. public function preSave(Doctrine_Event $event)
  188. {
  189. $disabled = $this->getOption('disabled');
  190. if ($disabled !== true && ! (is_array($disabled) && in_array('preSave', $disabled))) {
  191. foreach ($this->_listeners as $listener) {
  192. $disabled = $listener->getOption('disabled');
  193. if ($disabled !== true && ! (is_array($disabled) && in_array('preSave', $disabled))) {
  194. $listener->preSave($event);
  195. }
  196. }
  197. }
  198. }
  199. public function postSave(Doctrine_Event $event)
  200. {
  201. $disabled = $this->getOption('disabled');
  202. if ($disabled !== true && ! (is_array($disabled) && in_array('postSave', $disabled))) {
  203. foreach ($this->_listeners as $listener) {
  204. $disabled = $listener->getOption('disabled');
  205. if ($disabled !== true && ! (is_array($disabled) && in_array('postSave', $disabled))) {
  206. $listener->postSave($event);
  207. }
  208. }
  209. }
  210. }
  211. public function preDqlDelete(Doctrine_Event $event)
  212. {
  213. $disabled = $this->getOption('disabled');
  214. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlDelete', $disabled))) {
  215. foreach ($this->_listeners as $listener) {
  216. $disabled = $listener->getOption('disabled');
  217. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlDelete', $disabled))) {
  218. $listener->preDqlDelete($event);
  219. }
  220. }
  221. }
  222. }
  223. public function preDelete(Doctrine_Event $event)
  224. {
  225. $disabled = $this->getOption('disabled');
  226. if ($disabled !== true && ! (is_array($disabled) && in_array('preDelete', $disabled))) {
  227. foreach ($this->_listeners as $listener) {
  228. $disabled = $listener->getOption('disabled');
  229. if ($disabled !== true && ! (is_array($disabled) && in_array('preDelete', $disabled))) {
  230. $listener->preDelete($event);
  231. }
  232. }
  233. }
  234. }
  235. public function postDelete(Doctrine_Event $event)
  236. {
  237. $disabled = $this->getOption('disabled');
  238. if ($disabled !== true && ! (is_array($disabled) && in_array('postDelete', $disabled))) {
  239. foreach ($this->_listeners as $listener) {
  240. $disabled = $listener->getOption('disabled');
  241. if ($disabled !== true && ! (is_array($disabled) && in_array('postDelete', $disabled))) {
  242. $listener->postDelete($event);
  243. }
  244. }
  245. }
  246. }
  247. public function preDqlUpdate(Doctrine_Event $event)
  248. {
  249. $disabled = $this->getOption('disabled');
  250. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlUpdate', $disabled))) {
  251. foreach ($this->_listeners as $listener) {
  252. $disabled = $listener->getOption('disabled');
  253. if ($disabled !== true && ! (is_array($disabled) && in_array('preDqlUpdate', $disabled))) {
  254. $listener->preDqlUpdate($event);
  255. }
  256. }
  257. }
  258. }
  259. public function preUpdate(Doctrine_Event $event)
  260. {
  261. $disabled = $this->getOption('disabled');
  262. if ($disabled !== true && ! (is_array($disabled) && in_array('preUpdate', $disabled))) {
  263. foreach ($this->_listeners as $listener) {
  264. $disabled = $listener->getOption('disabled');
  265. if ($disabled !== true && ! (is_array($disabled) && in_array('preUpdate', $disabled))) {
  266. $listener->preUpdate($event);
  267. }
  268. }
  269. }
  270. }
  271. public function postUpdate(Doctrine_Event $event)
  272. {
  273. $disabled = $this->getOption('disabled');
  274. if ($disabled !== true && ! (is_array($disabled) && in_array('postUpdate', $disabled))) {
  275. foreach ($this->_listeners as $listener) {
  276. $disabled = $listener->getOption('disabled');
  277. if ($disabled !== true && ! (is_array($disabled) && in_array('postUpdate', $disabled))) {
  278. $listener->postUpdate($event);
  279. }
  280. }
  281. }
  282. }
  283. public function preInsert(Doctrine_Event $event)
  284. {
  285. $disabled = $this->getOption('disabled');
  286. if ($disabled !== true && ! (is_array($disabled) && in_array('preInsert', $disabled))) {
  287. foreach ($this->_listeners as $listener) {
  288. $disabled = $listener->getOption('disabled');
  289. if ($disabled !== true && ! (is_array($disabled) && in_array('preInsert', $disabled))) {
  290. $listener->preInsert($event);
  291. }
  292. }
  293. }
  294. }
  295. public function postInsert(Doctrine_Event $event)
  296. {
  297. $disabled = $this->getOption('disabled');
  298. if ($disabled !== true && ! (is_array($disabled) && in_array('postInsert', $disabled))) {
  299. foreach ($this->_listeners as $listener) {
  300. $disabled = $listener->getOption('disabled');
  301. if ($disabled !== true && ! (is_array($disabled) && in_array('postInsert', $disabled))) {
  302. $listener->postInsert($event);
  303. }
  304. }
  305. }
  306. }
  307. public function preHydrate(Doctrine_Event $event)
  308. {
  309. $disabled = $this->getOption('disabled');
  310. if ($disabled !== true && ! (is_array($disabled) && in_array('preHydrate', $disabled))) {
  311. foreach ($this->_listeners as $listener) {
  312. $disabled = $listener->getOption('disabled');
  313. if ($disabled !== true && ! (is_array($disabled) && in_array('preHydrate', $disabled))) {
  314. $listener->preHydrate($event);
  315. }
  316. }
  317. }
  318. }
  319. public function postHydrate(Doctrine_Event $event)
  320. {
  321. $disabled = $this->getOption('disabled');
  322. if ($disabled !== true && ! (is_array($disabled) && in_array('postHydrate', $disabled))) {
  323. foreach ($this->_listeners as $listener) {
  324. $disabled = $listener->getOption('disabled');
  325. if ($disabled !== true && ! (is_array($disabled) && in_array('postHydrate', $disabled))) {
  326. $listener->postHydrate($event);
  327. }
  328. }
  329. }
  330. }
  331. public function preValidate(Doctrine_Event $event)
  332. {
  333. $disabled = $this->getOption('disabled');
  334. if ($disabled !== true && ! (is_array($disabled) && in_array('preValidate', $disabled))) {
  335. foreach ($this->_listeners as $listener) {
  336. $disabled = $listener->getOption('disabled');
  337. if ($disabled !== true && ! (is_array($disabled) && in_array('preValidate', $disabled))) {
  338. $listener->preValidate($event);
  339. }
  340. }
  341. }
  342. }
  343. public function postValidate(Doctrine_Event $event)
  344. {
  345. $disabled = $this->getOption('disabled');
  346. if ($disabled !== true && ! (is_array($disabled) && in_array('postValidate', $disabled))) {
  347. foreach ($this->_listeners as $listener) {
  348. $disabled = $listener->getOption('disabled');
  349. if ($disabled !== true && ! (is_array($disabled) && in_array('postValidate', $disabled))) {
  350. $listener->postValidate($event);
  351. }
  352. }
  353. }
  354. }
  355. }