}
Item::update($item, ['uri' => $activity['id']]);
+
+ if ($activity['object_type'] == 'as:Event') {
+ $posts = Post::select(['event-id', 'uid'], ["`uri` = ? AND `event-id` > ?", $activity['id'], 0]);
+ while ($post = DBA::fetch($posts)) {
+ self::updateEvent($post['event-id'], $activity);
+ }
+ }
+ }
+
+ /**
+ * Update an existing event
+ *
+ * @param int $event_id
+ * @param array $activity
+ */
+ private static function updateEvent(int $event_id, array $activity)
+ {
+ $event = DBA::selectFirst('event', [], ['id' => $event_id]);
+
+ $event['edited'] = DateTimeFormat::utc($activity['updated']);
+ $event['summary'] = HTML::toBBCode($activity['name']);
+ $event['desc'] = HTML::toBBCode($activity['content']);
+ $event['start'] = $activity['start-time'];
+ $event['finish'] = $activity['end-time'];
+ $event['nofinish'] = empty($event['finish']);
+ $event['location'] = $activity['location'];
+
+ Logger::info('Updating event', ['uri' => $activity['id'], 'id' => $event_id]);
+ Event::store($event);
}
/**
} else {
// Store the original actor in the "causer" fields to enable the check for ignored or blocked contacts
$item['causer-link'] = $item['owner-link'];
- $item['causer-id'] = $item['owner-id'];
+ $item['causer-id'] = $item['owner-id'];
Logger::info('Use actor as causer.', ['id' => $item['owner-id'], 'actor' => $item['owner-link']]);
}
self::storeFromBody($item);
self::storeTags($item['uri-id'], $activity['tags']);
+ self::storeReceivers($item['uri-id'], $activity['receiver_urls'] ?? []);
+
$item['location'] = $activity['location'];
if (!empty($activity['latitude']) && !empty($activity['longitude'])) {
continue;
}
- if (!($item['isForum'] ?? false) && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT) &&
- ($item['post-reason'] == Item::PR_BCC) && !Contact::isSharingByURL($activity['author'], $receiver)) {
- Logger::info('Top level post via BCC from a non sharer, ignoring', ['uid' => $receiver, 'contact' => $item['contact-id']]);
- continue;
+ if (!($item['isForum'] ?? false) && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT) && !Contact::isSharingByURL($activity['author'], $receiver)) {
+ if ($item['post-reason'] == Item::PR_BCC) {
+ Logger::info('Top level post via BCC from a non sharer, ignoring', ['uid' => $receiver, 'contact' => $item['contact-id']]);
+ continue;
+ }
+
+ if (
+ !empty($activity['thread-children-type'])
+ && in_array($activity['thread-children-type'], Receiver::ACTIVITY_TYPES)
+ && DI::pConfig()->get($receiver, 'system', 'accept_only_sharer') != Item::COMPLETION_LIKE
+ ) {
+ Logger::info('Top level post from thread completion from a non sharer had been initiated via an activity, ignoring',
+ ['type' => $activity['thread-children-type'], 'user' => $item['uid'], 'causer' => $item['causer-link'], 'author' => $activity['author'], 'url' => $item['uri']]);
+ continue;
+ }
}
- if (!Contact::isForum($receiver) && DI::pConfig()->get($receiver, 'system', 'accept_only_sharer', false) && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT)) {
+ $is_forum = false;
+
+ if ($receiver != 0) {
+ $user = User::getById($receiver, ['account-type']);
+ if (!empty($user['account-type'])) {
+ $is_forum = ($user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY);
+ }
+ }
+
+ if (!$is_forum && DI::pConfig()->get($receiver, 'system', 'accept_only_sharer') == Item::COMPLETION_NONE && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT)) {
$skip = !Contact::isSharingByURL($activity['author'], $receiver);
if ($skip && (($activity['type'] == 'as:Announce') || ($item['isForum'] ?? false))) {
}
}
+ public static function storeReceivers(int $uriid, array $receivers)
+ {
+ foreach (['as:to' => Tag::TO, 'as:cc' => Tag::CC, 'as:bto' => Tag::BTO, 'as:bcc' => Tag::BCC] as $element => $type) {
+ if (!empty($receivers[$element])) {
+ foreach ($receivers[$element] as $receiver) {
+ if ($receiver == ActivityPub::PUBLIC_COLLECTION) {
+ $name = Receiver::PUBLIC_COLLECTION;
+ } else {
+ $name = trim(parse_url($receiver, PHP_URL_PATH), '/');
+ }
+ Tag::store($uriid, $type, $name, $receiver);
+ }
+ }
+ }
+ }
+
/**
* Creates an mail post
*
$ldactivity['thread-completion'] = Contact::getIdForURL($actor);
}
+ if (!empty($child['type'])) {
+ $ldactivity['thread-children-type'] = $child['type'];
+ }
+
if (!empty($relay_actor) && !self::acceptIncomingMessage($ldactivity, $object['id'])) {
return '';
}