$new_relation = $contact['rel'];
$writable = $contact['writable'];
- if ($network === Protocol::DIASPORA) {
+ if (in_array($network, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) {
if ($duplex) {
$new_relation = Contact::FRIEND;
} else {
Group::addMember(User::getDefaultGroup($uid, $contact["network"]), $contact['id']);
+ if ($network == Protocol::ACTIVITYPUB && $duplex) {
+ ActivityPub::transmitActivity('Follow', $contact['url'], $uid);
+ }
+
// Let's send our user to the contact editor in case they want to
// do anything special with this new friend.
if ($handsfree === null) {
} elseif ($contact['network'] == Protocol::DIASPORA) {
Diaspora::sendUnshare($user, $contact);
} elseif ($contact['network'] == Protocol::ACTIVITYPUB) {
- ActivityPub::transmitContactUndo($contact['url'], '', $user['uid']);
+ ActivityPub::transmitContactUndo($contact['url'], $user['uid']);
+
+ if ($dissolve) {
+ ActivityPub::transmitContactReject($contact['url'], $contact['hub-verify'], $user['uid']);
+ }
}
}
return self::transmit($data, $profile['notify'], $uid);
}
- public static function transmitContactUndo($target, $id, $uid)
+ public static function transmitContactReject($target, $id, $uid)
{
$profile = Probe::uri($target, Protocol::ACTIVITYPUB);
- if (empty($id)) {
- $id = System::baseUrl() . '/activity/' . System::createGUID();
- }
-
$owner = User::getOwnerDataById($uid);
$data = ['@context' => 'https://www.w3.org/ns/activitystreams',
'id' => System::baseUrl() . '/activity/' . System::createGUID(),
+ 'type' => 'Reject',
+ 'actor' => $owner['url'],
+ 'object' => ['id' => $id, 'type' => 'Follow',
+ 'actor' => $profile['url'],
+ 'object' => $owner['url']]];
+
+ logger('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG);
+ return self::transmit($data, $profile['notify'], $uid);
+ }
+
+ public static function transmitContactUndo($target, $uid)
+ {
+ $profile = Probe::uri($target, Protocol::ACTIVITYPUB);
+
+ $id = System::baseUrl() . '/activity/' . System::createGUID();
+
+ $owner = User::getOwnerDataById($uid);
+ $data = ['@context' => 'https://www.w3.org/ns/activitystreams',
+ 'id' => $id,
'type' => 'Undo',
'actor' => $owner['url'],
'object' => ['id' => $id, 'type' => 'Follow',
}
$fields = ['pending' => false];
- $condition = ['id' => $cid, 'pending' => true];
- DBA::update('comtact', $fields, $condition);
+
+ $contact = DBA::selectFirst('contact', ['rel'], ['id' => $cid]);
+ if ($contact['rel'] == Contact::FOLLOWER) {
+ $fields['rel'] = Contact::FRIEND;
+ }
+
+ $condition = ['id' => $cid];
+ DBA::update('contact', $fields, $condition);
logger('Accept contact request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG);
}