* @}
*/
+ const LOCK_INSERT = 'contact-insert';
+
/**
* Account types
*
$item['title'] = '';
$item['guid'] = '';
$item['uri-id'] = 0;
- $item['attach'] = '';
$slap = OStatus::salmon($item, $user);
if (!empty($contact['notify'])) {
$unfollow_link = '';
if (!$contact['self'] && in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
if ($contact['uid'] && in_array($contact['rel'], [self::SHARING, self::FRIEND])) {
- $unfollow_link = 'unfollow?url=' . urlencode($contact['url']);
+ $unfollow_link = 'unfollow?url=' . urlencode($contact['url']) . '&auto=1';
} elseif(!$contact['pending']) {
- $follow_link = 'follow?url=' . urlencode($contact['url']);
+ $follow_link = 'follow?url=' . urlencode($contact['url']) . '&auto=1';
}
}
$condition = ['nurl' => Strings::normaliseLink($data["url"]), 'uid' => $uid, 'deleted' => false];
// Before inserting we do check if the entry does exist now.
- DBA::lock('contact');
- $contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]);
- if (DBA::isResult($contact)) {
- $contact_id = $contact['id'];
- Logger::notice('Contact had been created (shortly) before', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]);
- } else {
- DBA::insert('contact', $fields);
- $contact_id = DBA::lastInsertId();
- if ($contact_id) {
- Logger::info('Contact inserted', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]);
+ if (DI::lock()->acquire(self::LOCK_INSERT, 0)) {
+ $contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]);
+ if (DBA::isResult($contact)) {
+ $contact_id = $contact['id'];
+ Logger::notice('Contact had been created (shortly) before', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]);
+ } else {
+ DBA::insert('contact', $fields);
+ $contact_id = DBA::lastInsertId();
+ if ($contact_id) {
+ Logger::info('Contact inserted', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]);
+ }
}
+ DI::lock()->release(self::LOCK_INSERT);
+ } else {
+ Logger::warning('Contact lock had not been acquired');
}
- DBA::unlock();
+
if (!$contact_id) {
Logger::info('Contact was not inserted', ['url' => $url, 'uid' => $uid]);
return 0;
$item['title'] = '';
$item['guid'] = '';
$item['uri-id'] = 0;
- $item['attach'] = '';
$slap = OStatus::salmon($item, $owner);