/** * 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; }
/** * returns the total number of access logs * * @param Tinebase_Model_Filter_FilterGroup $_filter * @param string $_action for right/acl check * @return int */ public function searchCount(Tinebase_Model_Filter_FilterGroup $_filter, $_action = 'get') { $this->checkRight('MANAGE_DEVICES'); return parent::searchCount($_filter, $_action); }