Use an insert to avoid duplicates and for analyzing

This commit is contained in:
Michael 2019-07-14 10:22:19 +00:00
parent 5bba0e7d39
commit 9ba3ee13a8
2 changed files with 23 additions and 12 deletions

View file

@ -1418,14 +1418,23 @@ class Contact extends BaseObject
$condition = ['nurl' => Strings::normaliseLink($data["url"]), 'uid' => $uid, 'deleted' => false];
// This does an insert but should most likely prevent duplicates
DBA::update('contact', $fields, $condition, true);
// Before inserting we do check if the entry does exist now.
$contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]);
if (!DBA::isResult($contact)) {
Logger::info('Create new contact', $fields);
DBA::insert('contact', $fields);
// We intentionally aren't using lastInsertId here. There is a chance for duplicates.
$contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]);
if (!DBA::isResult($contact)) {
Logger::info('Contact creation failed', $fields);
// Shouldn't happen
return 0;
}
} else {
Logger::info('Contact had been created before', ['id' => $contact["id"], 'url' => $url, 'contact' => $fields]);
}
$contact_id = $contact["id"];
}

View file

@ -191,15 +191,17 @@ class Diaspora
$fields = array_merge($fields, $network_fields);
$condition = ['uid' => 0, 'nurl' => Strings::normaliseLink($server_url)];
$relay = DBA::selectFirst('contact', ['id'], $condition);
if (DBA::isResult($relay)) {
$old = DBA::selectFirst('contact', [], $condition);
if (DBA::isResult($old)) {
unset($fields['created']);
$condition = ['id' => $relay['id']];
$condition = ['id' => $old['id']];
Logger::info('Update relay contact', ['fields' => $fields, 'condition' => $condition]);
DBA::update('contact', $fields, $condition, $old);
} else {
Logger::info('Create relay contact', ['fields' => $fields]);
DBA::insert('contact', $fields);
}
Logger::info('Set relay contact', ['fields' => $fields, 'condition' => $condition]);
DBA::update('contact', $fields, $condition, true);
}
/**