* - Undo Accept (Problem: This could invert a contact accept or an event accept)
*
* Transmitter:
- * - Delete (Application, Group, Organization, Person, Service)
* - Event
*
* Complicated:
*
* @return array of follower inboxes
*/
- private static function fetchTargetInboxesforUser($uid)
+ public static function fetchTargetInboxesforUser($uid)
{
$inboxes = [];
- $contacts = DBA::select('contact', ['notify', 'batch'], ['uid' => $uid,
- 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'network' => Protocol::ACTIVITYPUB,
- 'archive' => false, 'pending' => false]);
+ $condition = ['uid' => $uid, 'network' => Protocol::ACTIVITYPUB, 'archive' => false, 'pending' => false];
+
+ if (!empty($uid)) {
+ $condition['rel'] = [Contact::FOLLOWER, Contact::FRIEND];
+ }
+
+ $contacts = DBA::select('contact', ['notify', 'batch'], $condition);
while ($contact = DBA::fetch($contacts)) {
$contact = defaults($contact, 'batch', $contact['notify']);
$inboxes[$contact] = $contact;
} elseif (DBA::isResult($conversation) && !empty($conversation['conversation-uri'])) {
$context_uri = $conversation['conversation-uri'];
} else {
- $context_uri = str_replace('/object/', '/context/', $item['parent-uri']);
+ $context_uri = str_replace('/objects/', '/context/', $item['parent-uri']);
}
return $context_uri;
}
}
/**
- * @brief Transmits a profile change to the followers
+ * @brief Transmits a profile deletion to a given inbox
*
* @param integer $uid User ID
+ * @param string $inbox Target inbox
*/
- public static function transmitProfileUpdate($uid)
+ public static function transmitProfileDeletion($uid, $inbox)
+ {
+ $owner = User::getOwnerDataById($uid);
+ $profile = APContact::getByURL($owner['url']);
+
+ $data = ['@context' => 'https://www.w3.org/ns/activitystreams',
+ 'id' => System::baseUrl() . '/activity/' . System::createGUID(),
+ 'type' => 'Delete',
+ 'actor' => $owner['url'],
+ 'object' => self::profile($uid),
+ 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
+ 'to' => [self::PUBLIC_COLLECTION],
+ 'cc' => []];
+
+ $signed = LDSignature::sign($data, $owner);
+
+ logger('Deliver profile deletion for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
+ HTTPSignature::transmit($signed, $inbox, $uid);
+ }
+
+ /**
+ * @brief Transmits a profile change to a given inbox
+ *
+ * @param integer $uid User ID
+ * @param string $inbox Target inbox
+ */
+ public static function transmitProfileUpdate($uid, $inbox)
{
$owner = User::getOwnerDataById($uid);
$profile = APContact::getByURL($owner['url']);
'to' => [$profile['followers']],
'cc' => []];
- logger('Sending profile update to followers for user ' . $uid, LOGGER_DEBUG);
-
$signed = LDSignature::sign($data, $owner);
- $inboxes = self::fetchTargetInboxesforUser($uid);
-
- foreach ($inboxes as $inbox) {
- logger('Deliver profile update for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
- HTTPSignature::transmit($signed, $inbox, $uid);
- }
+ logger('Deliver profile update for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);
+ HTTPSignature::transmit($signed, $inbox, $uid);
}
+
/**
* @brief Transmits a given activity to a target
*
*
* @return
*/
- private static function processObject(&$object)
+ private static function processObject($object)
{
if (empty($object['id'])) {
return false;