/** * appends sql to given select statement * * @param Zend_Db_Select $_select * @param Tinebase_Backend_Sql_Abstract $_backend */ public function appendFilterSql($_select, $_backend) { $db = Tinebase_Core::getDb(); if (!is_array($this->_foreignIdsP1)) { $this->_foreignIdsP1 = $this->_controllerP1->search($this->_filterGroupP1, new Tinebase_Model_Pagination(), FALSE, TRUE); } $filters = array(array('field' => 'contact_id', 'operator' => 'AND', 'value' => array(array('field' => 'id', 'operator' => 'in', 'value' => $this->_foreignIdsP1)))); $this->_filterGroup = new $this->_options['filtergroup']($filters); if (!is_array($this->_foreignIds)) { $this->_foreignIds = $this->_controller->search($this->_filterGroup, new Tinebase_Model_Pagination(), FALSE, TRUE); } $_select->where('bill_open_item.debitor_id' . ' IN (?)', empty($this->_foreignIds) ? array('') : $this->_foreignIds); }
/** * get records and resolve fields * * @return Tinebase_Record_RecordSet */ protected function _getRecords() { $pagination = !empty($this->_options['sortInfo']) ? new Tinebase_Model_Pagination($this->_options['sortInfo']) : new Tinebase_Model_Pagination(); if ($this->_recordIds === NULL) { // need to fetch record ids first because filtered fields can change during iteration step if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Getting record ids using filter: ' . print_r($this->_filter->toArray(), TRUE) . ' and pagination: ' . print_r($pagination->toArray(), true)); } $this->_recordIds = $this->_controller->search($this->_filter, $pagination, FALSE, TRUE, $this->_options['searchAction']); $this->_totalCount = count($this->_recordIds); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Found ' . $this->_totalCount . ' total records to process.'); } if (empty($this->_recordIds)) { return new Tinebase_Record_RecordSet($this->_filter->getModelName()); } } // get records by filter (ensure acl) $filterClassname = get_class($this->_filter); $recordIdsForIteration = array_splice($this->_recordIds, 0, $this->_options['limit']); $idFilter = new $filterClassname(array(array('field' => isset($this->_options['idProperty']) || array_key_exists('idProperty', $this->_options) ? $this->_options['idProperty'] : 'id', 'operator' => 'in', 'value' => $recordIdsForIteration))); $records = $this->_controller->search($idFilter, $pagination, $this->_options['getRelations']); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Got ' . count($records) . ' for next iteration.'); } return $records; }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup|optional $_filter * @param Tinebase_Model_Pagination|optional $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $result = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); // @todo allow to configure if grants are needed $this->_getGrants($result); return $result; }
/** * search for leads * * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Record_Interface $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $leads = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); if ($_getRelations) { $leads->setByIndices('relations', Tinebase_Relations::getInstance()->getMultipleRelations($this->_modelName, $this->_backend->getType(), $leads->getId(), NULL, array('CUSTOMER', 'PARTNER', 'TASK', 'RESPONSIBLE', 'PRODUCT'), FALSE, $_getRelations)); } return $leads; }
/** * get id's of all entries available on the server * * @param string $_folderId * @param int $_filterType * @return array */ public function getServerEntries($_folderId, $_filterType) { $filter = $this->_getContentFilter($_filterType); $this->_addContainerFilter($filter, $_folderId); if (!empty($this->_sortField)) { $pagination = new Tinebase_Model_Pagination(array('sort' => $this->_sortField)); } else { $pagination = null; } //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " assembled {$this->_contentFilterClass}: " . print_r($filter->toArray(), TRUE)); $result = $this->_contentController->search($filter, $pagination, false, true, 'sync'); return $result; }
/** * * @param string $folderId * @param int $filterType * @return Tinebase_Record_RecordSet */ public function getServerEntries($folderId, $filterType) { $maxFilterType = $this->getMaxFilterType(); if ($maxFilterType !== Syncroton_Command_Sync::FILTER_NOTHING) { if ($filterType === Syncroton_Command_Sync::FILTER_NOTHING || $maxFilterType < $filterType) { $filterType = $maxFilterType; } } $filter = $this->_getContentFilter($filterType); $this->_addContainerFilter($filter, $folderId); if (!empty($this->_sortField)) { $pagination = new Tinebase_Model_Pagination(array('sort' => $this->_sortField)); } else { $pagination = null; } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . " Assembled {$this->_contentFilterClass}: " . print_r($filter->toArray(), TRUE)); } $result = $this->_contentController->search($filter, $pagination, false, true, 'sync'); return $result; }
/** * search for duplicates * * @param Tinebase_Controller_Record_Interface $_controller * @param Tinebase_Model_Filter_FilterGroup * @param string $_field * @return array with ids / field * * @todo add more options (like soundex, what do do with duplicates/delete/merge them, ...) */ protected function _searchDuplicates(Tinebase_Controller_Record_Abstract $_controller, $_filter, $_field) { $pagination = new Tinebase_Model_Pagination(array('start' => 0, 'limit' => 100)); $results = array(); $allRecords = array(); $totalCount = $_controller->searchCount($_filter); echo 'Searching ' . $totalCount . " record(s) for duplicates\n"; while ($pagination->start < $totalCount) { $records = $_controller->search($_filter, $pagination); foreach ($records as $record) { if (in_array($record->{$_field}, $allRecords)) { $allRecordsFlipped = array_flip($allRecords); $duplicateId = $allRecordsFlipped[$record->{$_field}]; $results[] = array('id' => $duplicateId, 'value' => $record->{$_field}); $results[] = array('id' => $record->getId(), 'value' => $record->{$_field}); } $allRecords[$record->getId()] = $record->{$_field}; } $pagination->start += 100; } return $results; }
/** * (non-PHPdoc) * @see Tinebase_Controller_Record_Abstract::search() */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $result = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); if ($_onlyIds !== true) { $this->_removeHiddenListMembers($result); } return $result; }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup|optional $_filter * @param Tinebase_Model_Pagination|optional $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { if ($_filter === NULL) { $_filter = new Felamimail_Model_AccountFilter(array()); } $result = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); // check preference / config if we should add system account with tine user credentials or from config.inc.php if ($this->_useSystemAccount && !$_onlyIds) { $systemAccountFound = FALSE; // check if resultset contains system account and add config values foreach ($result as $account) { if ($account->type == Felamimail_Model_Account::TYPE_SYSTEM) { $this->_addSystemAccountConfigValues($account); $systemAccountFound = TRUE; } } if (!$systemAccountFound) { $this->_addSystemAccount($result); } } return $result; }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $_filter->setId('OuterFilter'); return parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup|optional $_filter * @param Tinebase_Model_Pagination|optional $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { if ($_filter === NULL) { $_filter = new Expressomail_Model_AccountFilter(array()); } $params = array('Expressomail_Controller_Account_search', Tinebase_Core::getUser()->accountId, $_filter->toArray()); $cacheId = Tinebase_Helper::arrayHash($params); $cache = Tinebase_Core::getCache(); if ($cache->test($cacheId)) { $result = $cache->load($cacheId); return $result; } $result = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); // check preference / config if we should add system account with tine user credentials or from config.inc.php if ($this->_useSystemAccount && !$_onlyIds) { $systemAccountFound = FALSE; // check if resultset contains system account and add config values foreach ($result as $account) { if ($account->type == Expressomail_Model_Account::TYPE_SYSTEM) { $this->_addSystemAccountConfigValues($account); $systemAccountFound = TRUE; } } if (!$systemAccountFound) { $this->_addSystemAccount($result); } } $cache->save($result, $cacheId); return $result; }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { if ($_filter === NULL) { $_filter = new Expressomail_Model_AccountFilter(array()); } $cacheId = $this->_createExpressomailControllerAccountSearchCacheId($_filter); $cache = Tinebase_Core::getCache(); if ($cache->test($cacheId)) { $result = $cache->load($cacheId); return $result; } $result = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); // check preference / config if we should add system account with tine user credentials or from config.inc.php if ($this->_useSystemAccount && !$_onlyIds) { $systemAccountFound = FALSE; // check if resultset contains system account and add config values foreach ($result as $account) { if ($account->type == Expressomail_Model_Account::TYPE_SYSTEM) { $this->_addSystemAccountConfigValues($account); $systemAccountFound = TRUE; } } if (!$systemAccountFound) { $this->_addSystemAccount($result); } if ($this->resolveCustomfields()) { Tinebase_CustomField::getInstance()->resolveMultipleCustomfields($result); } } $cache->save($result, $cacheId); return $result; }
/** * get list of records * * @param Tinebase_Model_Filter_FilterGroup|optional $_filter * @param Tinebase_Model_Pagination|optional $_pagination * @param bool $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $events = parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); if (!$_onlyIds) { $this->_freeBusyCleanup($events, $_action); } return $events; }
/** * get list of access log entries * * @param Tinebase_Model_Filter_FilterGroup|optional $_filter * @param Tinebase_Model_Pagination|optional $_pagination * @param boolean $_getRelations * @param boolean $_onlyIds * @param string $_action for right/acl check * @return Tinebase_Record_RecordSet|array */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get') { $this->checkRight('MANAGE_DEVICES'); return parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action); }