* Prepares data for a message
*
* @param array $activity Activity array
- * @param string $body original source
*/
- public static function createItem($activity, $body)
+ public static function createItem($activity)
{
$item = [];
$item['verb'] = ACTIVITY_POST;
self::fetchMissingActivity($activity['reply-to-id'], $activity);
}
- self::postItem($activity, $item, $body);
+ self::postItem($activity, $item);
}
/**
* Prepare the item array for a "like"
*
* @param array $activity Activity array
- * @param string $body original source
*/
- public static function likeItem($activity, $body)
+ public static function likeItem($activity)
{
$item = [];
$item['verb'] = ACTIVITY_LIKE;
$item['gravity'] = GRAVITY_ACTIVITY;
$item['object-type'] = ACTIVITY_OBJ_NOTE;
- self::postItem($activity, $item, $body);
+ self::postItem($activity, $item);
}
/**
* Prepare the item array for a "dislike"
*
* @param array $activity Activity array
- * @param string $body original source
*/
- public static function dislikeItem($activity, $body)
+ public static function dislikeItem($activity)
{
$item = [];
$item['verb'] = ACTIVITY_DISLIKE;
$item['gravity'] = GRAVITY_ACTIVITY;
$item['object-type'] = ACTIVITY_OBJ_NOTE;
- self::postItem($activity, $item, $body);
+ self::postItem($activity, $item);
}
/**
*
* @param array $activity Activity data
* @param array $item item array
- * @param string $body original source
*/
- private static function postItem($activity, $item, $body)
+ private static function postItem($activity, $item)
{
/// @todo What to do with $activity['context']?
$item['body'] = $activity['source'];
}
- $item['protocol'] = Conversation::PARCEL_ACTIVITYPUB;
- $item['source'] = $body;
- $item['conversation-href'] = $activity['context'];
- $item['conversation-uri'] = $activity['conversation'];
-
foreach ($activity['receiver'] as $receiver) {
$item['uid'] = $receiver;
$item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver, true);
use Friendica\Util\JsonLD;
use Friendica\Util\LDSignature;
use Friendica\Protocol\ActivityPub;
+use Friendica\Model\Conversation;
+use Friendica\Util\DateTimeFormat;
/**
* @brief ActivityPub Receiver Protocol class
return $object_data;
}
+ /**
+ * Store the unprocessed data into the conversation table
+ * This has to be done outside the regular function,
+ * since we store everything - not only item posts.
+ *
+ * @param array $activity Array with activity data
+ * @param string $body The raw message
+ */
+ private static function storeConversation($activity, $body)
+ {
+ if (empty($body) || empty($activity['id'])) {
+ return;
+ }
+
+ $conversation = [
+ 'protocol' => Conversation::PARCEL_ACTIVITYPUB,
+ 'item-uri' => $activity['id'],
+ 'reply-to-uri' => defaults($activity, 'reply-to-id', ''),
+ 'conversation-href' => defaults($activity, 'context', ''),
+ 'conversation-uri' => defaults($activity, 'conversation', ''),
+ 'source' => $body,
+ 'received' => DateTimeFormat::utcNow()];
+
+ DBA::insert('conversation', $conversation, true);
+ }
+
/**
* Processes the activity object
*
return;
}
+ self::storeConversation($object_data, $body);
+
// Internal flag for thread completion. See Processor.php
if (!empty($activity['thread-completion'])) {
$object_data['thread-completion'] = $activity['thread-completion'];
switch ($type) {
case 'as:Create':
case 'as:Announce':
- ActivityPub\Processor::createItem($object_data, $body);
+ ActivityPub\Processor::createItem($object_data);
break;
case 'as:Like':
- ActivityPub\Processor::likeItem($object_data, $body);
+ ActivityPub\Processor::likeItem($object_data);
break;
case 'as:Dislike':
- ActivityPub\Processor::dislikeItem($object_data, $body);
+ ActivityPub\Processor::dislikeItem($object_data);
break;
case 'as:Update':