1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10:
11: class Horde_Controller_FilterRunner implements Horde_Controller_FilterCollection
12: {
13: 14: 15:
16: protected $_controller;
17:
18: 19: 20:
21: protected $_preFilters = array();
22:
23: 24: 25:
26: protected $_postFilters = array();
27:
28: 29:
30: public function __construct(Horde_Controller $controller)
31: {
32: $this->_controller = $controller;
33: }
34:
35: 36: 37: 38: 39:
40: public function addPreFilter(Horde_Controller_PreFilter $filter)
41: {
42: array_push($this->_preFilters, $filter);
43: }
44:
45: 46: 47: 48: 49:
50: public function addPostFilter(Horde_Controller_PostFilter $filter)
51: {
52: array_unshift($this->_postFilters, $filter);
53: }
54:
55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
67: public function processRequest(Horde_Controller_Request $request, Horde_Controller_Response $response)
68: {
69: if ($this->_applyPreFilters($request, $response) !== Horde_Controller_PreFilter::REQUEST_HANDLED) {
70: $this->_controller->processRequest($request, $response);
71: $this->_applyPostFilters($request, $response);
72: }
73: return $response;
74: }
75:
76: 77:
78: protected function _applyPreFilters(Horde_Controller_Request $request, Horde_Controller_Response $response)
79: {
80: foreach ($this->_preFilters as $filter) {
81: if ($filter->processRequest($request, $response, $this->_controller) === Horde_Controller_PreFilter::REQUEST_HANDLED) {
82: return Horde_Controller_PreFilter::REQUEST_HANDLED;
83: }
84: }
85:
86: return Horde_Controller_PreFilter::REQUEST_CONTINUE;
87: }
88:
89: 90:
91: protected function _applyPostFilters(Horde_Controller_Request $request, Horde_Controller_Response $response)
92: {
93: foreach ($this->_postFilters as $filter) {
94: $filter->processResponse($request, $response, $this->_controller);
95: }
96: }
97: }
98: