# Source for file Chain.php

Documentation is available at Chain.php

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.phpdoctrine.com>.
20. */
22. /**
23. * Doctrine_Query_Filter_Chain
24. *
25. * @package Doctrine
26. * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
27. * @category Object Relational Mapping
28. * @link www.phpdoctrine.com
29. * @since 1.0
30. * @version $Revision$
31. * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
32. */
33. class Doctrine_Query_Filter_Chain
34. {
35. /**
36. * @var array $_filters an array of Doctrine_Query_Filter objects
37. */
38. protected $_filters = array();
39. /**
40. * add
41. *
42. * @param Doctrine_Query_Filter $filter
43. * @return void
44. */
45. public function add(Doctrine_Query_Filter $filter)
46. {
47. $this->_filters[] = $filter;
48. }
49. /**
50. * returns a Doctrine_Query_Filter on success
51. * and null on failure
52. *
53. * @param mixed $key
54. * @return mixed
55. */
56. public function get($key)
57. {
58. if ( ! isset($this->_filters[$key])) {
59. throw new Doctrine_Query_Exception('Unknown filter ' . $key);
60. }
61. return $this->_filters[$key];
62. }
63. /**
64. * set
65. *
66. * @param mixed $key
67. * @param Doctrine_Query_Filter $listener
68. * @return void
69. */
70. public function set($key, Doctrine_Query_Filter $listener)
71. {
72. $this->_filters[$key] = $listener;
73. }
74. /**
75. * preQuery
76. *
77. * Method for listening the preQuery method of Doctrine_Query and
78. * hooking into the query building procedure, doing any custom / specialized
79. * query building procedures that are neccessary.
80. *
81. * @return void
82. */
83. public function preQuery(Doctrine_Query $query)
84. {
85. foreach ($this->_filters as $filter) {
86. $filter->preQuery($query);
87. }
88. }
89. /**
90. * postQuery
91. *
92. * Method for listening the postQuery method of Doctrine_Query and
93. * to hook into the query building procedure, doing any custom / specialized
94. * post query procedures (for example logging) that are neccessary.
95. *
96. * @return void
97. */
98. public function postQuery(Doctrine_Query $query)
99. {
100. foreach ($this->_filters as $filter) {
101. $filter->postQuery($query);
102. }
103. }
104. }