return $body;
}
+ /**
+ * Replaces emojis in the body
+ *
+ * @param array $emojis
+ * @param string $body
+ *
+ * @return string with replaced emojis
+ */
+ public static function replaceEmojis($emojis, $body)
+ {
+ foreach ($emojis as $emoji) {
+ $body = str_replace($emoji['name'], '[img=16x16]' . $emoji['href'] . '[/img]', $body);
+ }
+ return $body;
+ }
+
/**
* Constructs a string with tags for a given tag array
*
$item['edited'] = $activity['updated'];
$item['title'] = HTML::toBBCode($activity['name']);
$item['content-warning'] = HTML::toBBCode($activity['summary']);
- $item['body'] = self::convertMentions(HTML::toBBCode($activity['content']));
+ $content = self::replaceEmojis($activity['emojis'], HTML::toBBCode($activity['content']));
+ $item['body'] = self::convertMentions($content);
$item['tag'] = self::constructTagList($activity['tags'], $activity['sensitive']);
Item::update($item, ['uri' => $activity['id']]);
$item['guid'] = $activity['diaspora:guid'];
$item['title'] = HTML::toBBCode($activity['name']);
$item['content-warning'] = HTML::toBBCode($activity['summary']);
- $item['body'] = self::convertMentions(HTML::toBBCode($activity['content']));
+ $content = self::replaceEmojis($activity['emojis'], HTML::toBBCode($activity['content']));
+ $item['body'] = self::convertMentions($content);
if (($activity['object_type'] == 'as:Video') && !empty($activity['alternate-url'])) {
$item['body'] .= "\n[video]" . $activity['alternate-url'] . '[/video]';
continue;
}
- $taglist[] = ['type' => str_replace('as:', '', JsonLD::fetchElement($tag, '@type')),
+ $element = ['type' => str_replace('as:', '', JsonLD::fetchElement($tag, '@type')),
'href' => JsonLD::fetchElement($tag, 'as:href'),
'name' => JsonLD::fetchElement($tag, 'as:name')];
+
+ if (empty($element['type'])) {
+ continue;
+ }
+
+ $taglist[] = $element;
}
return $taglist;
}
+ /**
+ * Convert emojis from JSON-LD format into a simplified format
+ *
+ * @param array $tags Tags in JSON-LD format
+ *
+ * @return array with emojis in a simplified format
+ */
+ private static function processEmojis($emojis)
+ {
+ $emojilist = [];
+
+ if (empty($emojis)) {
+ return [];
+ }
+
+ foreach ($emojis as $emoji) {
+ if (empty($emoji) || (JsonLD::fetchElement($emoji, '@type') != 'toot:Emoji') || empty($emoji['as:icon'])) {
+ continue;
+ }
+
+ $url = JsonLD::fetchElement($emoji['as:icon'], 'as:url');
+ $element = ['name' => JsonLD::fetchElement($emoji, 'as:name'),
+ 'href' => $url];
+
+ $emojilist[] = $element;
+ }
+ return $emojilist;
+ }
+
/**
* Convert attachments from JSON-LD format into a simplified format
*
$object_data['longitude'] = JsonLD::fetchElement($object_data, 'longitude', '@value');
$object_data['attachments'] = self::processAttachments(JsonLD::fetchElementArray($object, 'as:attachment'));
$object_data['tags'] = self::processTags(JsonLD::fetchElementArray($object, 'as:tag'));
+ $object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', 'toot:Emoji'));
$object_data['generator'] = JsonLD::fetchElement($object, 'as:generator', 'as:name', '@type', 'as:Application');
$object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url');
'dfrn' => (object)['@id' => 'http://purl.org/macgirvin/dfrn/1.0/', '@type' => '@id'],
'diaspora' => (object)['@id' => 'https://diasporafoundation.org/ns/', '@type' => '@id'],
'ostatus' => (object)['@id' => 'http://ostatus.org#', '@type' => '@id'],
- 'dc' => (object)['@id' => 'http://purl.org/dc/terms/', '@type' => '@id']];
+ 'dc' => (object)['@id' => 'http://purl.org/dc/terms/', '@type' => '@id'],
+ 'toot' => (object)['@id' => 'http://joinmastodon.org/ns#', '@type' => '@id']];
$jsonobj = json_decode(json_encode($json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));