/** * (non-PHPdoc) * @see Syncroton_Data_IDataSearch::search() */ public function search(Syncroton_Model_StoreRequest $store) { $storeResponse = new Syncroton_Model_StoreResponse(); if (!isset($store->query['and']) || !isset($store->query['and']['freeText'])) { $storeResponse->total = 0; return $storeResponse; } $filter = new $this->_contentFilterClass(array(array('field' => 'query', 'operator' => 'contains', 'value' => $store->query['and']['freeText']))); if (isset($store->query['and']['collections'])) { // @todo search for multiple folders $folderId = $store->query['and']['collections'][0]; } else { $folderId = Felamimail_Controller_Folder::getInstance()->getByBackendAndGlobalName(Tinebase_Core::getPreference('Felamimail')->{Felamimail_Preference::DEFAULTACCOUNT}, 'INBOX')->getId(); } $this->_addContainerFilter($filter, $folderId); if (isset($store->options['range'])) { $pagination = new Tinebase_Model_Pagination(array('start' => $store->options['range'][0], 'limit' => $store->options['range'][1] - $store->options['range'][0])); } else { $pagination = null; } $serverIds = $this->_contentController->search($filter, $pagination, false, true, 'sync'); $totalCount = $this->_contentController->searchCount($filter, 'sync'); foreach ($serverIds as $serverId) { $email = $this->getEntry(new Syncroton_Model_SyncCollection(array('collectionId' => $folderId, 'options' => $store->options)), $serverId); $storeResponse->result[] = new Syncroton_Model_StoreResponseResult(array('class' => 'Email', 'longId' => $folderId . ActiveSync_Frontend_Abstract::LONGID_DELIMITER . $serverId, 'collectionId' => $folderId, 'properties' => $email)); } $storeResponse->total = $totalCount; if (count($storeResponse->result) > 0) { $storeResponse->range = array($store->options['range'][0], $store->options['range'][1]); } return $storeResponse; }