Logger::info('Start');
- $contacts = DBA::p("SELECT ANY_VALUE(`id`) AS `id`, ANY_VALUE(`nurl`) AS `nurl` FROM `contact`
+ $contacts = DBA::p("SELECT `nurl`, `uid` FROM `contact`
WHERE EXISTS (SELECT `nurl` FROM `contact` AS `c2`
WHERE `c2`.`nurl` = `contact`.`nurl` AND `c2`.`id` != `contact`.`id` AND `c2`.`uid` = `contact`.`uid` AND `c2`.`network` IN (?, ?, ?) AND NOT `deleted`)
AND (`network` IN (?, ?, ?) OR (`uid` = ?)) AND NOT `deleted` GROUP BY `nurl`, `uid`",
Protocol::DIASPORA, Protocol::OSTATUS, Protocol::ACTIVITYPUB, 0);
while ($contact = DBA::fetch($contacts)) {
- Logger::info('Remove duplicates', ['id' => $contact['id']]);
- Contact::handleDuplicateByID($contact['id']);
+ Logger::info('Remove duplicates', ['nurl' => $contact['nurl'], 'uid' => $contact['uid']]);
+ Contact::removeDuplicates($contact['nurl'], $contact['uid']);
}
DBA::close($contact);
}
// Search for duplicated contacts and get rid of them
- self::handleDuplicates($contact['nurl'], $contact['uid']);
+ self::removeDuplicates($contact['nurl'], $contact['uid']);
return $ret;
}
}
// Search for duplicated contacts and get rid of them
- if (self::handleDuplicates(Strings::normaliseLink($url), $uid) || ($uid != 0)) {
+ if (self::removeDuplicates(Strings::normaliseLink($url), $uid) || ($uid != 0)) {
return;
}
DBA::update('contact', $fields, $condition);
}
- /**
- * Check and remove duplicate contact entries
- *
- * @param integer $contact_id Contact ID
- * @throws \Exception
- */
- public static function handleDuplicateByID(int $contact_id)
- {
- $contact = DBA::selectFirst('contact', ['nurl', 'uid'], ['id' => $contact_id, 'deleted' => false]);
- if (!DBA::isResult($contact)) {
- return;
- }
-
- // Search for duplicated contacts and get rid of them
- self::handleDuplicates($contact['nurl'], $contact['uid']);
-
- return;
- }
-
/**
- * @brief Helper function for "updateFromProbe". Remove duplicated contacts
+ * @brief Remove duplicated contacts
*
* @param string $nurl Normalised contact url
* @param integer $uid User id
* @return boolean
* @throws \Exception
*/
- private static function handleDuplicates(string $nurl, int $uid)
+ public static function removeDuplicates(string $nurl, int $uid)
{
$condition = ['nurl' => $nurl, 'uid' => $uid, 'deleted' => false, 'network' => Protocol::FEDERATED];
$count = DBA::count('contact', $condition);