- if (($relation == Contact::SHARING) && ($duplex)) {
- $duplex = 0;
- }
-
- $r = q("UPDATE `contact` SET `rel` = %d,
- `name-date` = '%s',
- `uri-date` = '%s',
- `blocked` = 0,
- `pending` = 0,
- `duplex` = %d,
- `hidden` = %d,
- `network` = '%s' WHERE `id` = %d
- ",
- intval($new_relation),
- DBA::escape(DateTimeFormat::utcNow()),
- DBA::escape(DateTimeFormat::utcNow()),
- intval($duplex),
- intval($hidden),
- DBA::escape(Protocol::DFRN),
- intval($contact_id)
- );
- } else {
- if ($network == Protocol::ACTIVITYPUB) {
- ActivityPub\Transmitter::sendContactAccept($contact['url'], $contact['hub-verify'], $uid);
- // Setting "pending" to true on a bidirectional contact request could create a problem when it isn't accepted on the other side
- // Then we have got a situation where - although one direction is accepted - the contact still appears as pending.
- // Possibly we need two different "pending" fields, one for incoming, one for outgoing?
- // This has to be thought over, but for now this here is a better solution.
- // $pending = $duplex;
- $pending = false;
- } else {
- $pending = false;
- }
-
- // $network !== Protocol::DFRN
- $network = defaults($contact, 'network', Protocol::OSTATUS);
-
- $arr = Probe::uri($contact['url'], $network);
-
- $notify = defaults($contact, 'notify' , $arr['notify']);
- $poll = defaults($contact, 'poll' , $arr['poll']);
-
- $addr = $arr['addr'];
-
- $new_relation = $contact['rel'];
- $writable = $contact['writable'];
-
- if (in_array($network, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) {
- if ($duplex) {
- $new_relation = Contact::FRIEND;
- } else {
- $new_relation = Contact::FOLLOWER;
- }
-
- if ($new_relation != Contact::FOLLOWER) {
- $writable = 1;
- }
- }
-
- DBA::delete('intro', ['id' => $intro_id]);
-
- $fields = ['name-date' => DateTimeFormat::utcNow(),
- 'uri-date' => DateTimeFormat::utcNow(), 'addr' => $addr,
- 'notify' => $notify, 'poll' => $poll, 'blocked' => false,
- 'pending' => $pending, 'network' => $network,
- 'writable' => $writable, 'hidden' => $hidden, 'rel' => $new_relation];
- DBA::update('contact', $fields, ['id' => $contact_id]);