public function rewind()
{
if (!isset($this->iterator)) {
throw new InvalidArgumentException('Missing iterator.');
}
$i = $this->iterator;
if (!$i instanceof RecursiveIterator) {
$i = $i->getIterator();
}
/* Need to add RecursiveIteratorFilters first. */
$filters = array(self::CHILDREN => 'IMP_Ftree_IteratorFilter_Children', self::EXPANDED => 'IMP_Ftree_IteratorFilter_Expanded', self::REMOTE => 'IMP_Ftree_IteratorFilter_Remote');
foreach ($filters as $key => $val) {
if ($this->_mask & $key) {
$i = new $val($i);
}
}
$i = new RecursiveIteratorIterator($i, RecursiveIteratorIterator::SELF_FIRST);
/* Now we can add regular FilterIterators. */
$filters = array(self::CONTAINERS => 'IMP_Ftree_IteratorFilter_Containers', self::NONIMAP => 'IMP_Ftree_IteratorFilter_Nonimap', self::POLLED => 'IMP_Ftree_IteratorFilter_Polled', self::SPECIALMBOXES => 'IMP_Ftree_IteratorFilter_Special', self::UNSUB => 'IMP_Ftree_IteratorFilter_Subscribed', self::VFOLDER => 'IMP_Ftree_IteratorFilter_Vfolder');
foreach ($filters as $key => $val) {
if ($this->_mask & $key) {
$i = new $val($i);
}
}
/* Mailbox filter is handled separately. */
if (!empty($this->mboxes)) {
$i = new IMP_Ftree_IteratorFilter_Mailboxes($i);
$i->mboxes = $this->mboxes;
}
$i->rewind();
$this->_filter = $i;
}