const O_UNFOLLOW = ActivityNamespace::OSTATUS . '/unfollow';
const O_UNFAVOURITE = ActivityNamespace::OSTATUS . '/unfavorite';
+ /**
+ * React to a post via an emoji
+ *
+ * @var string
+ */
+ const EMOJIREACT = ActivityNamespace::LITEPUB . '/emojireact';
+
/**
* likes (etc.) can apply to other things besides posts. Check if they are post children,
* in which case we handle them specially
* Hidden activities, which doesn't need to be shown
*/
const HIDDEN_ACTIVITIES = [
- Activity::LIKE, Activity::DISLIKE,
- Activity::ATTEND, Activity::ATTENDNO, Activity::ATTENDMAYBE,
- Activity::FOLLOW,
- Activity::ANNOUNCE,
+ self::LIKE, self::DISLIKE,
+ self::ATTEND, self::ATTENDNO, self::ATTENDMAYBE,
+ self::FOLLOW,
+ self::ANNOUNCE,
+ self::EMOJIREACT,
];
/**
} else {
$object_data['directmessage'] = JsonLD::fetchElement($activity, 'litepub:directMessage');
}
- } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow'])) && in_array($object_type, self::CONTENT_TYPES)) {
+ } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow', 'litepub:EmojiReact'])) && in_array($object_type, self::CONTENT_TYPES)) {
// Create a mostly empty array out of the activity data (instead of the object).
// This way we later don't have to check for the existence of each individual array element.
$object_data = self::processObject($activity);
break;
case 'litepub:EmojiReact':
- if (in_array($object_data['object_type'], array_merge([''], self::CONTENT_TYPES))) {
- // Unhandled Pleroma activity to react to a post via an emoji
+ if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
+ ActivityPub\Processor::createActivity($object_data, Activity::EMOJIREACT);
+ } elseif ($object_data['object_type'] == '') {
+ // The object type couldn't be determined. We don't have it and we can't fetch it. We ignore this activity.
} else {
self::storeUnhandledActivity(true, $type, $object_data, $activity, $body, $uid, $trust_source, $push, $signer);
}
return;
}
- $tempfile = tempnam(System::getTempPath(), ($unknown ? 'unknown-' : 'unhandled-') . str_replace(':', '-', $type) . '-' . str_replace(':', '-', $object_data['object_type']) . '-' . str_replace(':', '-', $object_data['object_object_type'] ?? '') . '-');
+ $file = ($unknown ? 'unknown-' : 'unhandled-') . str_replace(':', '-', $type) . '-';
+
+ if (!empty($object_data['object_type'])) {
+ $file .= str_replace(':', '-', $object_data['object_type']) . '-';
+ }
+
+ if (!empty($object_data['object_object_type'])) {
+ $file .= str_replace(':', '-', $object_data['object_object_type']) . '-';
+ }
+
+ $tempfile = tempnam(System::getTempPath(), $file);
file_put_contents($tempfile, json_encode(['activity' => $activity, 'body' => $body, 'uid' => $uid, 'trust_source' => $trust_source, 'push' => $push, 'signer' => $signer, 'object_data' => $object_data], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
Logger::notice('Unknown activity stored', ['type' => $type, 'object_type' => $object_data['object_type'], $object_data['object_object_type'] ?? '', 'file' => $tempfile]);
}