1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Iterators;
13:
14: use Nette;
15:
16:
17:
18: 19: 20: 21: 22:
23: class RecursiveFilter extends \FilterIterator implements \RecursiveIterator
24: {
25:
26: private $callback;
27:
28:
29: private $childrenCallback;
30:
31:
32: 33: 34: 35: 36:
37: public function __construct(\RecursiveIterator $iterator, $callback, $childrenCallback = NULL)
38: {
39: parent::__construct($iterator);
40: $this->callback = $callback === NULL ? NULL : callback($callback);
41: $this->childrenCallback = $childrenCallback === NULL ? NULL : callback($childrenCallback);
42: }
43:
44:
45:
46: public function accept()
47: {
48: return $this->callback === NULL || $this->callback->invoke($this);
49: }
50:
51:
52:
53: public function hasChildren()
54: {
55: return $this->getInnerIterator()->hasChildren()
56: && ($this->childrenCallback === NULL || $this->childrenCallback->invoke($this));
57: }
58:
59:
60:
61: public function getChildren()
62: {
63: return new static($this->getInnerIterator()->getChildren(), $this->callback, $this->childrenCallback);
64: }
65:
66: }
67: