use Friendica\Content\Feature;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\Plaintext;
-use Friendica\Core\Cache;
+use Friendica\Core\Cache\Cache;
use Friendica\Core\Config;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
$cachekey = 'APDelivery:createActivity:' . $item_id;
if (!$force) {
- $data = Cache::get($cachekey);
+ $data = DI::cache()->get($cachekey);
if (!is_null($data)) {
return $data;
}
$data = ActivityPub\Transmitter::createActivityFromItem($item_id);
- Cache::set($cachekey, $data, Cache::QUARTER_HOUR);
+ DI::cache()->set($cachekey, $data, Cache::QUARTER_HOUR);
return $data;
}
$data['content'] = BBCode::convert($body, false, 9);
}
- $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
- $richbody = preg_replace_callback($regexp, ['self', 'mentionCallback'], $item['body']);
- $richbody = BBCode::removeAttachment($richbody);
+ // The regular "content" field does contain a minimized HTML. This is done since systems like
+ // Mastodon has got problems with - for example - embedded pictures.
+ // The contentMap does contain the unmodified HTML.
+ $language = self::getLanguage($item);
+ if (!empty($language)) {
+ $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
+ $richbody = preg_replace_callback($regexp, ['self', 'mentionCallback'], $item['body']);
+ $richbody = BBCode::removeAttachment($richbody);
- $data['contentMap']['text/html'] = BBCode::convert($richbody, false);
- $data['contentMap']['text/markdown'] = BBCode::toMarkdown($item["body"]);
+ $data['contentMap'][$language] = BBCode::convert($richbody, false);
+ }
$data['source'] = ['content' => $item['body'], 'mediaType' => "text/bbcode"];
return $data;
}
+ /**
+ * Fetches the language from the post, the user or the system.
+ *
+ * @param array $item
+ *
+ * @return string language string
+ */
+ private static function getLanguage(array $item)
+ {
+ // Try to fetch the language from the post itself
+ if (!empty($item['language'])) {
+ $languages = array_keys(json_decode($item['language'], true));
+ if (!empty($languages[0])) {
+ return $languages[0];
+ }
+ }
+
+ // Otherwise use the user's language
+ if (!empty($item['uid'])) {
+ $user = DBA::selectFirst('user', ['language'], ['uid' => $item['uid']]);
+ if (!empty($user['language'])) {
+ return $user['language'];
+ }
+ }
+
+ // And finally just use the system language
+ return Config::get('system', 'language');
+ }
+
/**
* Creates an an "add tag" entry
*