/** * search tree nodes for search combo * * @param Tinebase_Model_Tree_Node_Filter $_filter * @param Tinebase_Record_Interface $_pagination * * @return Tinebase_Record_RecordSet of Tinebase_Model_Tree_Node */ protected function _searchNodesRecursive($_filter, $_pagination) { $files = new Tinebase_Record_RecordSet('Tinebase_Model_Tree_Node'); $ret = new Tinebase_Record_RecordSet('Tinebase_Model_Tree_Node'); $folders = $this->_getRootNodes(); $folders->merge($this->_getOtherUserNodes()); while ($folders->count()) { $node = $folders->getFirstRecord(); $filter = new Tinebase_Model_Tree_Node_Filter(array(array('field' => 'path', 'operator' => 'equals', 'value' => $node->path)), 'AND'); $result = $this->search($filter); $folders->merge($result->filter('type', Tinebase_Model_Tree_Node::TYPE_FOLDER)); if ($_filter->getFilter('query') && $_filter->getFilter('query')->getValue()) { $files->merge($result->filter('type', Tinebase_Model_Tree_Node::TYPE_FILE)->filter('name', '/^' . $_filter->getFilter('query')->getValue() . './i', true)); } else { $files->merge($result->filter('type', Tinebase_Model_Tree_Node::TYPE_FILE)); } $folders->removeRecord($node); } $this->_recursiveSearchTotalCount = $files->count(); $ret = $files->sortByPagination($_pagination)->limitByPagination($_pagination); return $ret; }